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

require "ftools"

basename = File.basename ARGV[0]
path = File.dirname ARGV[0]
reject_file = File.basename ARGV[1]

Dir.chdir path

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

# Check to make sure none of the target files exist
message = []
message << orig_fname if File.exists? orig_fname
message << repos_fname if File.exists? repos_fname
message << local_fname if File.exists? local_fname
if message.length > 0
	s,t,u = message.length>1?['s','','these']:['','s','this']
	puts "The file#{s} '#{message.join '\', \''}' exist#{t}."
	puts "Can't continue without overwriting #{u} file#{s}."
	exit 1
end

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}`
`diff3 -L ORIGINAL -L REPOS -L LOCAL -m #{orig_fname} #{repos_fname} #{local_fname} > #{basename}`

puts "Done."
