X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/41a6d8591d5962dbfe8e372fff10c60e06718083..84fcbc3b78f3a0156025d4eb6f6b76df7a5df233:/gitmergeonefile.py diff --git a/gitmergeonefile.py b/gitmergeonefile.py index 5b588dd..1cba193 100755 --- a/gitmergeonefile.py +++ b/gitmergeonefile.py @@ -20,6 +20,19 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ import sys, os + +# Try to detect where it is run from and set prefix and the search path. +# It is assumed that the user installed StGIT using the --prefix= option +prefix, bin = os.path.split(sys.path[0]) + +if bin == 'bin' and prefix != sys.prefix: + major, minor = sys.version_info[0:2] + local_path = [os.path.join(prefix, 'lib', 'python'), + os.path.join(prefix, 'lib', 'python%s.%s' % (major, minor)), + os.path.join(prefix, 'lib', 'python%s.%s' % (major, minor), + 'site-packages')] + sys.path = local_path + sys.path + from stgit.config import config from stgit.utils import append_string @@ -74,17 +87,17 @@ def __checkout_files(): orig = '%s.older' % path tmp = __output('git-unpack-file %s' % orig_hash) os.chmod(tmp, int(orig_mode, 8)) - os.rename(tmp, orig) + os.renames(tmp, orig) if file1_hash: src1 = '%s.local' % path tmp = __output('git-unpack-file %s' % file1_hash) os.chmod(tmp, int(file1_mode, 8)) - os.rename(tmp, src1) + os.renames(tmp, src1) if file2_hash: src2 = '%s.remote' % path tmp = __output('git-unpack-file %s' % file2_hash) os.chmod(tmp, int(file2_mode, 8)) - os.rename(tmp, src2) + os.renames(tmp, src2) def __remove_files(): """Remove any temporary files @@ -111,7 +124,9 @@ def __conflict(): # $5 - orignal file mode (or empty) # $6 - file in branch1 mode (or empty) # $7 - file in branch2 mode (or empty) -#print 'gitmerge.py "%s" "%s" "%s" "%s" "%s" "%s" "%s"' % tuple(sys.argv[1:8]) +# +#print 'gitmergeonefile.py "%s" "%s" "%s" "%s" "%s" "%s" "%s"' \ +# % tuple(sys.argv[1:8]) orig_hash, file1_hash, file2_hash, path, orig_mode, file1_mode, file2_mode = \ [__str2none(x) for x in sys.argv[1:8]] @@ -127,12 +142,12 @@ if orig_hash: if file1_hash and file2_hash: # if modes are the same (git-read-tree probably dealed with it) if file1_hash == file2_hash: - if os.system('git-update-cache --cacheinfo %s %s %s' + if os.system('git-update-index --cacheinfo %s %s %s' % (file1_mode, file1_hash, path)) != 0: - print >> sys.stderr, 'Error: git-update-cache failed' + print >> sys.stderr, 'Error: git-update-index failed' __conflict() - if os.system('git-checkout-cache -u -f -- %s' % path): - print >> sys.stderr, 'Error: git-checkout-cache failed' + if os.system('git-checkout-index -u -f -- %s' % path): + print >> sys.stderr, 'Error: git-checkout-index failed' __conflict() if file1_mode != file2_mode: print >> sys.stderr, \ @@ -146,14 +161,14 @@ if orig_hash: 'output': path }) == 0 if merge_ok: - os.system('git-update-cache %s' % path) + os.system('git-update-index -- %s' % path) __remove_files() sys.exit(0) else: print >> sys.stderr, \ 'Error: three-way merge tool failed for file "%s"' % path # reset the cache to the first branch - os.system('git-update-cache --cacheinfo %s %s %s' + os.system('git-update-index --cacheinfo %s %s %s' % (file1_mode, file1_hash, path)) if keeporig != 'yes': __remove_files() @@ -164,19 +179,19 @@ if orig_hash: if os.path.exists(path): os.remove(path) __remove_files() - sys.exit(os.system('git-update-cache --remove %s' % path)) + sys.exit(os.system('git-update-index --remove -- %s' % path)) # file does not exist in origin else: # file added in both if file1_hash and file2_hash: # files are the same if file1_hash == file2_hash: - if os.system('git-update-cache --add --cacheinfo %s %s %s' + if os.system('git-update-index --add --cacheinfo %s %s %s' % (file1_mode, file1_hash, path)) != 0: - print >> sys.stderr, 'Error: git-update-cache failed' + print >> sys.stderr, 'Error: git-update-index failed' __conflict() - if os.system('git-checkout-cache -u -f -- %s' % path): - print >> sys.stderr, 'Error: git-checkout-cache failed' + if os.system('git-checkout-index -u -f -- %s' % path): + print >> sys.stderr, 'Error: git-checkout-index failed' __conflict() if file1_mode != file2_mode: print >> sys.stderr, \ @@ -196,15 +211,15 @@ else: else: mode = file2_mode obj = file2_hash - if os.system('git-update-cache --add --cacheinfo %s %s %s' + if os.system('git-update-index --add --cacheinfo %s %s %s' % (mode, obj, path)) != 0: - print >> sys.stderr, 'Error: git-update-cache failed' + print >> sys.stderr, 'Error: git-update-index failed' __conflict() __remove_files() - sys.exit(os.system('git-checkout-cache -u -f -- %s' % path)) + sys.exit(os.system('git-checkout-index -u -f -- %s' % path)) # Un-handled case print >> sys.stderr, 'Error: Un-handled merge conflict' -print >> sys.stderr, 'gitmerge.py "%s" "%s" "%s" "%s" "%s" "%s" "%s"' \ +print >> sys.stderr, 'gitmergeonefile.py "%s" "%s" "%s" "%s" "%s" "%s" "%s"' \ % tuple(sys.argv[1:8]) __conflict()