#!/usr/bin/ruby
###########################################################################
#                                                                         #
# Name	: patchify                                                        #
# Usage	: patchify <rejectfile>                                           #
#                                                                         #
# Takes an SVN reject file and patches the original file with CVS-like    #
# conflict markers.                                                       #
#                                                                         #
###########################################################################

require "ftools"

path = File.dirname ARGV[0]
reject_file = File.basename ARGV[0]
reject_file[/(.*?)\.\d+\.\d+\.rej$/]
basename = $1

Dir.chdir path

orig_fname = basename+".#$$.orig"
repos_fname = basename+".#$$.repos"
local_fname = basename+".#$$.local"

# Get the repository version
File.cp ".svn/text-base/#{basename}.svn-base", orig_fname
File.cp ".svn/text-base/#{basename}.svn-base", repos_fname
File.cp basename, local_fname

`patch -R #{orig_fname} < #{reject_file}`		# recreate the original
`diff3 -L ORIGINAL -L REPOS -L LOCAL -m #{orig_fname} #{repos_fname} #{local_fname} > #{basename}`

File.rm_f(orig_fname, repos_fname)

puts "Done."
