X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/blobdiff_plain/9c96f9f2be6f42757e6c8c596c63f7433ad7e964..388f63b6f44cae4d4b9a92b299c1ae45cc6de70d:/gitmergeonefile.py diff --git a/gitmergeonefile.py b/gitmergeonefile.py index 4f79958..2f327a3 100755 --- a/gitmergeonefile.py +++ b/gitmergeonefile.py @@ -121,7 +121,7 @@ def __conflict(): # $2 - file in branch1 SHA1 (or empty) # $3 - file in branch2 SHA1 (or empty) # $4 - pathname in repository -# $5 - orignal file mode (or empty) +# $5 - original file mode (or empty) # $6 - file in branch1 mode (or empty) # $7 - file in branch2 mode (or empty) # @@ -140,14 +140,14 @@ __checkout_files() if orig_hash: # modified in both if file1_hash and file2_hash: - # if modes are the same (git-read-tree probably dealed with it) + # if modes are the same (git-read-tree probably dealt 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, \ @@ -161,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() @@ -179,19 +179,43 @@ 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 deleted in one and changed in the other + else: + # Do something here - we must at least merge the entry in the cache, + # instead of leaving it in U(nmerged) state. In fact, stg resolved + # does not handle that. + + # Do the same thing cogito does - remove the file in any case. + os.system('git-update-index --remove -- %s' % path) + + #if file1_hash: + ## file deleted upstream and changed in the patch. The patch is + ## probably going to move the changes elsewhere. + + #os.system('git-update-index --remove -- %s' % path) + #else: + ## file deleted in the patch and changed upstream. We could re-delete + ## it, but for now leave it there - and let the user check if he + ## still wants to remove the file. + + ## reset the cache to the first branch + #os.system('git-update-index --cacheinfo %s %s %s' + #% (file1_mode, file1_hash, path)) + __conflict() + # 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, \ @@ -211,15 +235,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' +# Unhandled case +print >> sys.stderr, 'Error: Unhandled merge conflict' print >> sys.stderr, 'gitmergeonefile.py "%s" "%s" "%s" "%s" "%s" "%s" "%s"' \ % tuple(sys.argv[1:8]) __conflict()