[PATCH 0/5] git-merge-fredrik updates
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
This patch series contains a few smaller updates to the merge-common-ancestors merge algorithm. - Fredrik
6 messages, 1 author, 2016-06-15 · open the first message on its own page
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
This patch series contains a few smaller updates to the merge-common-ancestors merge algorithm. - Fredrik
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
Bug reported by Junio. Signed-off-by: Fredrik Kuivinen <redacted> --- git-merge-fredrik.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 95251fce0dd6366478e8d51d4f187cb07d662d7a
diff --git a/git-merge-fredrik.py b/git-merge-fredrik.py
--- a/git-merge-fredrik.py
+++ b/git-merge-fredrik.py@@ -60,7 +60,7 @@ def merge(h1, h2, branch1Name, branch2Na branch1Name, branch2Name, cleanCache, updateWd) - if clean or alwaysWriteTree: + if clean or cleanCache: res = Commit(None, [h1, h2], tree=shaRes) graph.addNode(res) else:
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
Signed-off-by: Fredrik Kuivinen <redacted> --- git-merge-fredrik.py | 15 +++++---------- gitMergeCommon.py | 12 ++++++++---- 2 files changed, 13 insertions(+), 14 deletions(-) 8ca382168d366c68c567c1f85fb6d2cb02b40f37
diff --git a/git-merge-fredrik.py b/git-merge-fredrik.py
--- a/git-merge-fredrik.py
+++ b/git-merge-fredrik.py@@ -120,9 +120,8 @@ def unmergedCacheEntries(): e.stages[stage].mode = mode e.stages[stage].sha1 = sha1 else: - print 'Error: Merge program failed: Unexpected output from', \ - 'git-ls-files:', l - sys.exit(2) + die('Error: Merge program failed: Unexpected output from', \ + 'git-ls-files:', l) return res def mergeTrees(head, merge, common, branch1Name, branch2Name,
@@ -381,15 +380,12 @@ def processEntry(entry, branch1Name, bra os.unlink(src1) os.unlink(src2) else: - print 'ERROR: Fatal merge failure.' - print "ERROR: Shouldn't happen" - sys.exit(2) + die("ERROR: Fatal merge failure, shouldn't happen.") return cleanMerge def usage(): - print 'Usage:', sys.argv[0], ' <base>... -- <head> <remote>..' - sys.exit(2) + die('Usage:', sys.argv[0], ' <base>... -- <head> <remote>..') # main entry point as merge strategy module # The first parameters up to -- are merge bases, and the rest are heads.
@@ -399,8 +395,7 @@ def usage(): for nextArg in xrange(1, len(sys.argv)): if sys.argv[nextArg] == '--': if len(sys.argv) != nextArg + 3: - print 'Not handling anything other than two heads merge.' - sys.exit(2) + die('Not handling anything other than two heads merge.') try: h1 = firstBranch = sys.argv[nextArg + 1] h2 = secondBranch = sys.argv[nextArg + 2]
diff --git a/gitMergeCommon.py b/gitMergeCommon.py
--- a/gitMergeCommon.py
+++ b/gitMergeCommon.py@@ -10,6 +10,10 @@ if sys.version_info[0] < 2 or \ import subprocess +def die(*args): + printList(args, sys.stderr) + sys.exit(2) + # Debugging machinery # -------------------
@@ -28,11 +32,11 @@ def debug(*args): if funcName in functionsToDebug: printList(args) -def printList(list): +def printList(list, file=sys.stdout): for x in list: - sys.stdout.write(str(x)) - sys.stdout.write(' ') - sys.stdout.write('\n') + file.write(str(x)) + file.write(' ') + file.write('\n') # Program execution # -----------------
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
Signed-off-by: Fredrik Kuivinen <redacted> --- git-merge-fredrik.py | 23 ++++++++++++++--------- 1 files changed, 14 insertions(+), 9 deletions(-) f814a54ac034f4455363582b2c2f3d386bf8f0be
diff --git a/git-merge-fredrik.py b/git-merge-fredrik.py
--- a/git-merge-fredrik.py
+++ b/git-merge-fredrik.py@@ -1,6 +1,6 @@ #!/usr/bin/python -import sys, math, random, os, re, signal, tempfile, stat, errno +import sys, math, random, os, re, signal, tempfile, stat, errno, traceback from heapq import heappush, heappop from sets import Set
@@ -409,15 +409,20 @@ for nextArg in xrange(1, len(sys.argv)): break print 'Merging', h1, 'with', h2 -h1 = runProgram(['git-rev-parse', '--verify', h1 + '^0']).rstrip() -h2 = runProgram(['git-rev-parse', '--verify', h2 + '^0']).rstrip() -graph = buildGraph([h1, h2]) - -[res, clean] = merge(graph.shaMap[h1], graph.shaMap[h2], - firstBranch, secondBranch, graph) - -print '' +try: + h1 = runProgram(['git-rev-parse', '--verify', h1 + '^0']).rstrip() + h2 = runProgram(['git-rev-parse', '--verify', h2 + '^0']).rstrip() + + graph = buildGraph([h1, h2]) + + [res, clean] = merge(graph.shaMap[h1], graph.shaMap[h2], + firstBranch, secondBranch, graph) + + print '' +except: + traceback.print_exc(None, sys.stderr) + sys.exit(2) if clean: sys.exit(0)
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
Signed-off-by: Fredrik Kuivinen <redacted> --- git-merge-fredrik.py | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) 573c3e6f61eb2cb27b5d67f7a24f01a74980c769
diff --git a/git-merge-fredrik.py b/git-merge-fredrik.py
--- a/git-merge-fredrik.py
+++ b/git-merge-fredrik.py@@ -392,6 +392,9 @@ def usage(): # This strategy module figures out merge bases itself, so we only # get heads. +if len(sys.argv) < 4: + usage() + for nextArg in xrange(1, len(sys.argv)): if sys.argv[nextArg] == '--': if len(sys.argv) != nextArg + 3:
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:06
Signed-off-by: Fredrik Kuivinen <redacted> --- gitMergeCommon.py | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) 30c12b2a8d3df83b15952f786327ccd0c3c04554
diff --git a/gitMergeCommon.py b/gitMergeCommon.py
--- a/gitMergeCommon.py
+++ b/gitMergeCommon.py@@ -46,6 +46,9 @@ class ProgramError(Exception): self.progStr = progStr self.error = error + def __str__(self): + return self.progStr + ': ' + self.error + addDebug('runProgram') def runProgram(prog, input=None, returnCode=False, env=None, pipeOutput=True): debug('runProgram prog:', str(prog), 'input:', str(input))