{"thread":{"id":"1787","subject":"[PATCH 0/5] git-merge-fredrik updates","startedAt":"2005-09-12T21:26:01Z","lastAt":"2005-09-13T06:22:26Z","messageCount":8,"participants":["Fredrik Kuivinen","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"8426","messageId":"20050912212601.GB6644@c165.ib.student.liu.se","threadId":"1787","inReplyTo":null,"subject":"[PATCH 0/5] git-merge-fredrik updates","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-12T21:26:01Z","receivedAt":"2005-09-12T21:26:01Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"This patch series contains a few smaller updates to the\nmerge-common-ancestors merge algorithm.\n\n- Fredrik\n"},{"id":"8427","messageId":"20050912212906.GC6644@c165.ib.student.liu.se","threadId":"1787","inReplyTo":"20050912212601.GB6644@c165.ib.student.liu.se","subject":"[PATCH 1/5] Fix assertion failure when merging common ancestors.","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-12T21:29:06Z","receivedAt":"2005-09-12T21:29:06Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"Bug reported by Junio.\n\nSigned-off-by: Fredrik Kuivinen <freku045@student.liu.se>\n\n\n---\n\n git-merge-fredrik.py |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\n95251fce0dd6366478e8d51d4f187cb07d662d7a\ndiff --git a/git-merge-fredrik.py b/git-merge-fredrik.py\n--- a/git-merge-fredrik.py\n+++ b/git-merge-fredrik.py\n@@ -60,7 +60,7 @@ def merge(h1, h2, branch1Name, branch2Na\n                                  branch1Name, branch2Name,\n                                  cleanCache, updateWd)\n \n-    if clean or alwaysWriteTree:\n+    if clean or cleanCache:\n         res = Commit(None, [h1, h2], tree=shaRes)\n         graph.addNode(res)\n     else:\n"},{"id":"8429","messageId":"20050912212954.GD6644@c165.ib.student.liu.se","threadId":"1787","inReplyTo":"20050912212601.GB6644@c165.ib.student.liu.se","subject":"[PATCH 2/5] Exit with status code 2 if we get an exception.","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-12T21:29:54Z","receivedAt":"2005-09-12T21:29:54Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>\n\n\n---\n\n git-merge-fredrik.py |   23 ++++++++++++++---------\n 1 files changed, 14 insertions(+), 9 deletions(-)\n\nf814a54ac034f4455363582b2c2f3d386bf8f0be\ndiff --git a/git-merge-fredrik.py b/git-merge-fredrik.py\n--- a/git-merge-fredrik.py\n+++ b/git-merge-fredrik.py\n@@ -1,6 +1,6 @@\n #!/usr/bin/python\n \n-import sys, math, random, os, re, signal, tempfile, stat, errno\n+import sys, math, random, os, re, signal, tempfile, stat, errno, traceback\n from heapq import heappush, heappop\n from sets import Set\n \n@@ -409,15 +409,20 @@ for nextArg in xrange(1, len(sys.argv)):\n         break\n \n print 'Merging', h1, 'with', h2\n-h1 = runProgram(['git-rev-parse', '--verify', h1 + '^0']).rstrip()\n-h2 = runProgram(['git-rev-parse', '--verify', h2 + '^0']).rstrip()\n \n-graph = buildGraph([h1, h2])\n-\n-[res, clean] = merge(graph.shaMap[h1], graph.shaMap[h2],\n-                     firstBranch, secondBranch, graph)\n-\n-print ''\n+try:\n+    h1 = runProgram(['git-rev-parse', '--verify', h1 + '^0']).rstrip()\n+    h2 = runProgram(['git-rev-parse', '--verify', h2 + '^0']).rstrip()\n+\n+    graph = buildGraph([h1, h2])\n+\n+    [res, clean] = merge(graph.shaMap[h1], graph.shaMap[h2],\n+                         firstBranch, secondBranch, graph)\n+\n+    print ''\n+except:\n+    traceback.print_exc(None, sys.stderr)\n+    sys.exit(2)\n \n if clean:\n     sys.exit(0)\n"},{"id":"8428","messageId":"20050912213047.GE6644@c165.ib.student.liu.se","threadId":"1787","inReplyTo":"20050912212601.GB6644@c165.ib.student.liu.se","subject":"[PATCH 3/5] Introduce a 'die' function.","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-12T21:30:47Z","receivedAt":"2005-09-12T21:30:47Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>\n\n\n---\n\n git-merge-fredrik.py |   15 +++++----------\n gitMergeCommon.py    |   12 ++++++++----\n 2 files changed, 13 insertions(+), 14 deletions(-)\n\n8ca382168d366c68c567c1f85fb6d2cb02b40f37\ndiff --git a/git-merge-fredrik.py b/git-merge-fredrik.py\n--- a/git-merge-fredrik.py\n+++ b/git-merge-fredrik.py\n@@ -120,9 +120,8 @@ def unmergedCacheEntries():\n             e.stages[stage].mode = mode\n             e.stages[stage].sha1 = sha1\n         else:\n-            print 'Error: Merge program failed: Unexpected output from', \\\n-                  'git-ls-files:', l\n-            sys.exit(2)\n+            die('Error: Merge program failed: Unexpected output from', \\\n+                'git-ls-files:', l)\n     return res\n \n def mergeTrees(head, merge, common, branch1Name, branch2Name,\n@@ -381,15 +380,12 @@ def processEntry(entry, branch1Name, bra\n         os.unlink(src1)\n         os.unlink(src2)\n     else:\n-        print 'ERROR: Fatal merge failure.'\n-        print \"ERROR: Shouldn't happen\"\n-        sys.exit(2)\n+        die(\"ERROR: Fatal merge failure, shouldn't happen.\")\n \n     return cleanMerge\n \n def usage():\n-    print 'Usage:', sys.argv[0], ' <base>... -- <head> <remote>..'\n-    sys.exit(2)\n+    die('Usage:', sys.argv[0], ' <base>... -- <head> <remote>..')\n \n # main entry point as merge strategy module\n # The first parameters up to -- are merge bases, and the rest are heads.\n@@ -399,8 +395,7 @@ def usage():\n for nextArg in xrange(1, len(sys.argv)):\n     if sys.argv[nextArg] == '--':\n         if len(sys.argv) != nextArg + 3:\n-            print 'Not handling anything other than two heads merge.'\n-            sys.exit(2)\n+            die('Not handling anything other than two heads merge.')\n         try:\n             h1 = firstBranch = sys.argv[nextArg + 1]\n             h2 = secondBranch = sys.argv[nextArg + 2]\ndiff --git a/gitMergeCommon.py b/gitMergeCommon.py\n--- a/gitMergeCommon.py\n+++ b/gitMergeCommon.py\n@@ -10,6 +10,10 @@ if sys.version_info[0] < 2 or \\\n \n import subprocess\n \n+def die(*args):\n+    printList(args, sys.stderr)\n+    sys.exit(2)\n+\n # Debugging machinery\n # -------------------\n \n@@ -28,11 +32,11 @@ def debug(*args):\n         if funcName in functionsToDebug:\n             printList(args)\n \n-def printList(list):\n+def printList(list, file=sys.stdout):\n     for x in list:\n-        sys.stdout.write(str(x))\n-        sys.stdout.write(' ')\n-    sys.stdout.write('\\n')\n+        file.write(str(x))\n+        file.write(' ')\n+    file.write('\\n')\n \n # Program execution\n # -----------------\n"},{"id":"8430","messageId":"20050912213122.GF6644@c165.ib.student.liu.se","threadId":"1787","inReplyTo":"20050912212601.GB6644@c165.ib.student.liu.se","subject":"[PATCH 4/5] Make sure we die if we don't get enough arguments.","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-12T21:31:22Z","receivedAt":"2005-09-12T21:31:22Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>\n\n\n---\n\n git-merge-fredrik.py |    3 +++\n 1 files changed, 3 insertions(+), 0 deletions(-)\n\n573c3e6f61eb2cb27b5d67f7a24f01a74980c769\ndiff --git a/git-merge-fredrik.py b/git-merge-fredrik.py\n--- a/git-merge-fredrik.py\n+++ b/git-merge-fredrik.py\n@@ -392,6 +392,9 @@ def usage():\n # This strategy module figures out merge bases itself, so we only\n # get heads.\n \n+if len(sys.argv) < 4:\n+    usage()\n+\n for nextArg in xrange(1, len(sys.argv)):\n     if sys.argv[nextArg] == '--':\n         if len(sys.argv) != nextArg + 3:\n"},{"id":"8431","messageId":"20050912213156.GG6644@c165.ib.student.liu.se","threadId":"1787","inReplyTo":"20050912212601.GB6644@c165.ib.student.liu.se","subject":"[PATCH 5/5] Make the ProgramError class printable.","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-12T21:31:56Z","receivedAt":"2005-09-12T21:31:56Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>\n\n\n---\n\n gitMergeCommon.py |    3 +++\n 1 files changed, 3 insertions(+), 0 deletions(-)\n\n30c12b2a8d3df83b15952f786327ccd0c3c04554\ndiff --git a/gitMergeCommon.py b/gitMergeCommon.py\n--- a/gitMergeCommon.py\n+++ b/gitMergeCommon.py\n@@ -46,6 +46,9 @@ class ProgramError(Exception):\n         self.progStr = progStr\n         self.error = error\n \n+    def __str__(self):\n+        return self.progStr + ': ' + self.error\n+\n addDebug('runProgram')\n def runProgram(prog, input=None, returnCode=False, env=None, pipeOutput=True):\n     debug('runProgram prog:', str(prog), 'input:', str(input))\n"},{"id":"8436","messageId":"7v1x3u7xtk.fsf@assigned-by-dhcp.cox.net","threadId":"1787","inReplyTo":"20050912212601.GB6644@c165.ib.student.liu.se","subject":"Re: [PATCH 0/5] git-merge-fredrik updates","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2005-09-12T21:58:31Z","receivedAt":"2005-09-12T21:58:31Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thanks.  Will apply.\n\nOne request before we hit 0.99.7 (this Saturday) when the name\nwill be cast in stone is to christen it better than 'fredrik'\nwhich was what I did as a tentative measure.  Otherwise we would\nregret when you come up with another merge algorithm with\ndifferent pros-and-cons with the current one.\n"},{"id":"8455","messageId":"20050913062226.GA9101@c165.ib.student.liu.se","threadId":"1787","inReplyTo":"7v1x3u7xtk.fsf@assigned-by-dhcp.cox.net","subject":"[PATCH] Rename the 'fredrik' merge strategy to 'recursive'.","fromName":"Fredrik Kuivinen","fromEmail":"freku045@student.liu.se","sentAt":"2005-09-13T06:22:26Z","receivedAt":"2005-09-13T06:22:26Z","isPatch":true,"sender":{"key":"frekui@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13770967?v=4"},"body":"On Mon, Sep 12, 2005 at 02:58:31PM -0700, Junio C Hamano wrote:\n> Thanks.  Will apply.\n> \n> One request before we hit 0.99.7 (this Saturday) when the name\n> will be cast in stone is to christen it better than 'fredrik'\n> which was what I did as a tentative measure.  Otherwise we would\n> regret when you come up with another merge algorithm with\n> different pros-and-cons with the current one.\n\n\nI have thought about that too. Is 'git-merge-recursive.py' a good\nenough name?\n\n- Fredrik\n\n\nSigned-off-by: Fredrik Kuivinen <freku045@student.liu.se>\n\n\n---\n\n .gitignore             |    2 +-\n Makefile               |    2 +-\n git-merge-recursive.py |    0 \n git-merge.sh           |    4 ++--\n 4 files changed, 4 insertions(+), 4 deletions(-)\n rename git-merge-fredrik.py => git-merge-recursive.py (100%)\n\n7d5637d2df86406b4f8f3f96cbea57d977231470\ndiff --git a/.gitignore b/.gitignore\n--- a/.gitignore\n+++ b/.gitignore\n@@ -43,10 +43,10 @@ git-mailinfo\n git-mailsplit\n git-merge\n git-merge-base\n-git-merge-fredrik\n git-merge-index\n git-merge-octopus\n git-merge-one-file\n+git-merge-recursive\n git-merge-resolve\n git-merge-stupid\n git-mktag\ndiff --git a/Makefile b/Makefile\n--- a/Makefile\n+++ b/Makefile\n@@ -83,7 +83,7 @@ SCRIPT_PERL = \\\n \tgit-rename.perl git-shortlog.perl\n \n SCRIPT_PYTHON = \\\n-\tgit-merge-fredrik.py\n+\tgit-merge-recursive.py\n \n # The ones that do not have to link with lcrypto nor lz.\n SIMPLE_PROGRAMS = \\\ndiff --git a/git-merge-fredrik.py b/git-merge-recursive.py\nsimilarity index 100%\nrename from git-merge-fredrik.py\nrename to git-merge-recursive.py\ndiff --git a/git-merge.sh b/git-merge.sh\n--- a/git-merge.sh\n+++ b/git-merge.sh\n@@ -12,9 +12,9 @@ usage () {\n     die \"git-merge [-n] [-s <strategy>]... <merge-message> <head> <remote>+\"\n }\n \n-# all_strategies='resolve fredrik stupid octopus'\n+# all_strategies='resolve recursive stupid octopus'\n \n-all_strategies='fredrik octopus resolve stupid'\n+all_strategies='recursive octopus resolve stupid'\n default_strategies='resolve octopus'\n use_strategies=\n \n"}]}