[PATCH 06 of 10] Eventually enables hand surgery with "Ancestor patchset" cvsps keyword

Edouard Gomez ed.gomez at free.fr
Sun Dec 17 09:31:52 CST 2006


# HG changeset patch
# User Edouard Gomez <ed.gomez at free.fr>
# Date 1166365118 -3600
# Node ID 3d3b602596f8f1904a54f8f1cad88a600644b55e
# Parent  6381ed11ed68270bff3c0a0eb85cc9df33327aca
Eventually enables hand surgery with "Ancestor patchset" cvsps keyword

The cvsps parser reads "Ancestor patchset". I don't know if it's intended
or not, but this proves to be quite good at hand surgery when cvsps doesn't
order the patchsets in the right order.

eg:
 - hack on head
 - tag a release: R
 - hack a lot of bugfixes
 - tag a branch B from R because new functionnal stuff will happen on head
 - report all work from head to the bugfix branch

In this case the B branch will be linked to the last commit on head and not
linked to R as it should be.

So "Ancestor patchset" can help in these cases

diff -r 6381ed11ed68 -r 3d3b602596f8 hg-cvs-import
--- a/hg-cvs-import	Sun Dec 17 15:18:38 2006 +0100
+++ b/hg-cvs-import	Sun Dec 17 15:18:38 2006 +0100
@@ -224,7 +224,10 @@ def addrev(branch, tag, r, user, date, l
     # tag file
     if branch != lastbranch:
         savebranch[lastbranch] = hg.hex(repo.changelog.tip())
-        type, v = branchlookup(branch)
+        if r in ancestorpatches:
+            type, v = 'rev', map[int(ancestorpatches[r])]
+        else:
+            type, v = branchlookup(branch)
         if type == "branch":
             node = branchhead(v)
         else:
@@ -266,6 +269,7 @@ def addrev(branch, tag, r, user, date, l
         repo.rawcommit(filelist, llog, user, dateconv, hg.bin(node),
                        wlock=wlock)
         n = repo.changelog.tip()
+        map[int(r)] = hg.hex(n)
         mapf.write("%d %s\n" % (r, hg.hex(n)))
         print "added patch %d %s" % (r, hg.hex(n))
     lastbranch = branch


More information about the Mercurial-devel mailing list