merge with stable
authorMatt Mackall <mpm@selenic.com>
Fri, 29 Jun 2012 00:40:52 -0500
changeset 17059 fba17a64fa49
parent 17058 d5422faf648c (current diff)
parent 17049 2440822446ce (diff)
child 17060 69fa0459dd3b
merge with stable
hgext/mq.py
hgext/rebase.py
mercurial/cmdutil.py
mercurial/commands.py
mercurial/ui.py
tests/test-commit-amend.t
tests/test-graft.t
tests/test-rebase-bookmarks.t
--- a/hgext/mq.py	Fri Jun 29 00:01:19 2012 +0200
+++ b/hgext/mq.py	Fri Jun 29 00:40:52 2012 -0500
@@ -2925,6 +2925,10 @@
     Use the --no-backup option to discard the backup bundle once the
     operation completes.
 
+    Strip is not a history-rewriting operation and can be used on
+    changesets in the public phase. But if the stripped changesets have
+    been pushed to a remote repository you will likely pull them again.
+
     Return 0 on success.
     """
     backup = 'all'
--- a/hgext/rebase.py	Fri Jun 29 00:01:19 2012 +0200
+++ b/hgext/rebase.py	Fri Jun 29 00:40:52 2012 -0500
@@ -238,6 +238,9 @@
 
         # Keep track of the current bookmarks in order to reset them later
         currentbookmarks = repo._bookmarks.copy()
+        activebookmark = repo._bookmarkcurrent
+        if activebookmark:
+            bookmarks.unsetcurrent(repo)
 
         sortedstate = sorted(state)
         total = len(sortedstate)
@@ -327,6 +330,11 @@
             util.unlinkpath(repo.sjoin('undo'))
         if skipped:
             ui.note(_("%d revisions have been skipped\n") % len(skipped))
+
+        if (activebookmark and
+            repo['tip'].node() == repo._bookmarks[activebookmark]):
+                bookmarks.setcurrent(repo, activebookmark)
+
     finally:
         release(lock, wlock)
 
@@ -476,13 +484,11 @@
 
 def updatebookmarks(repo, nstate, originalbookmarks, **opts):
     'Move bookmarks to their correct changesets'
-    current = repo._bookmarkcurrent
     for k, v in originalbookmarks.iteritems():
         if v in nstate:
             if nstate[v] != nullmerge:
-                # reset the pointer if the bookmark was moved incorrectly
-                if k != current:
-                    repo._bookmarks[k] = nstate[v]
+                # update the bookmarks for revs that have moved
+                repo._bookmarks[k] = nstate[v]
 
     bookmarks.write(repo)
 
--- a/mercurial/cmdutil.py	Fri Jun 29 00:01:19 2012 +0200
+++ b/mercurial/cmdutil.py	Fri Jun 29 00:40:52 2012 -0500
@@ -1301,7 +1301,11 @@
     try:
         # First, do a regular commit to record all changes in the working
         # directory (if there are any)
-        node = commit(ui, repo, commitfunc, pats, opts)
+        ui.callhooks = False
+        try:
+            node = commit(ui, repo, commitfunc, pats, opts)
+        finally:
+            ui.callhooks = True
         ctx = repo[node]
 
         # Participating changesets:
--- a/mercurial/commands.py	Fri Jun 29 00:01:19 2012 +0200
+++ b/mercurial/commands.py	Fri Jun 29 00:40:52 2012 -0500
@@ -2752,11 +2752,6 @@
                                             ctx.p1().node())
                 finally:
                     repo.ui.setconfig('ui', 'forcemerge', '')
-                # drop the second merge parent
-                repo.setparents(current.node(), nullid)
-                repo.dirstate.write()
-                # fix up dirstate for copies and renames
-                cmdutil.duplicatecopies(repo, ctx.rev(), ctx.p1().rev())
                 # report any conflicts
                 if stats and stats[3] > 0:
                     # write out state for --continue
@@ -2768,6 +2763,12 @@
             else:
                 cont = False
 
+            # drop the second merge parent
+            repo.setparents(current.node(), nullid)
+            repo.dirstate.write()
+            # fix up dirstate for copies and renames
+            cmdutil.duplicatecopies(repo, ctx.rev(), ctx.p1().rev())
+
             # commit
             source = ctx.extra().get('source')
             if not source:
--- a/mercurial/hook.py	Fri Jun 29 00:01:19 2012 +0200
+++ b/mercurial/hook.py	Fri Jun 29 00:40:52 2012 -0500
@@ -138,6 +138,9 @@
     _redirect = state
 
 def hook(ui, repo, name, throw=False, **args):
+    if not ui.callhooks:
+        return False
+
     r = False
 
     oldstdout = -1
--- a/mercurial/ui.py	Fri Jun 29 00:01:19 2012 +0200
+++ b/mercurial/ui.py	Fri Jun 29 00:40:52 2012 -0500
@@ -19,6 +19,7 @@
         self._ucfg = config.config() # untrusted
         self._trustusers = set()
         self._trustgroups = set()
+        self.callhooks = True
 
         if src:
             self.fout = src.fout
@@ -31,6 +32,7 @@
             self._trustusers = src._trustusers.copy()
             self._trustgroups = src._trustgroups.copy()
             self.environ = src.environ
+            self.callhooks = src.callhooks
             self.fixconfig()
         else:
             self.fout = sys.stdout
--- a/tests/test-commit-amend.t	Fri Jun 29 00:01:19 2012 +0200
+++ b/tests/test-commit-amend.t	Fri Jun 29 00:40:52 2012 -0500
@@ -23,11 +23,17 @@
   nothing changed
   [1]
 
+  $ echo '[hooks]' >> $HGRCPATH
+  $ echo 'pretxncommit.foo = echo "pretxncommit $HG_NODE"; hg id -r $HG_NODE' >> $HGRCPATH
+
 Amending changeset with changes in working dir:
 
   $ echo a >> a
   $ hg ci --amend -m 'amend base1'
-  saved backup bundle to $TESTTMP/.hg/strip-backup/489edb5b847d-amend-backup.hg (glob)
+  pretxncommit 9cd25b479c51be2f4ed2c38e7abdf7ce67d8e0dc
+  9cd25b479c51 tip
+  saved backup bundle to $TESTTMP/.hg/strip-backup/489edb5b847d-amend-backup.hg
+  $ echo 'pretxncommit.foo = ' >> $HGRCPATH
   $ hg diff -c .
   diff -r ad120869acf0 -r 9cd25b479c51 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
--- a/tests/test-graft.t	Fri Jun 29 00:01:19 2012 +0200
+++ b/tests/test-graft.t	Fri Jun 29 00:40:52 2012 -0500
@@ -304,4 +304,57 @@
   14 1:5d205f8b35b6  3
   (grafted from 4c60f11aa304a54ae1c199feb94e7fc771e51ed8)
 
-  $ cd ..
+Resolve conflicted graft
+  $ hg up -q 0
+  $ echo b > a
+  $ hg ci -m 8
+  created new head
+  $ echo a > a
+  $ hg ci -m 9
+  $ hg graft 1 --tool internal:fail
+  grafting revision 1
+  abort: unresolved conflicts, can't continue
+  (use hg resolve and hg graft --continue)
+  [255]
+  $ hg resolve --all
+  merging a
+  $ hg graft -c
+  grafting revision 1
+  $ hg export tip --git
+  # HG changeset patch
+  # User bar
+  # Date 0 0
+  # Node ID 64ecd9071ce83c6e62f538d8ce7709d53f32ebf7
+  # Parent  4bdb9a9d0b84ffee1d30f0dfc7744cade17aa19c
+  1
+  
+  diff --git a/a b/a
+  --- a/a
+  +++ b/a
+  @@ -1,1 +1,1 @@
+  -a
+  +b
+
+Resolve conflicted graft with rename
+  $ echo c > a
+  $ hg ci -m 10
+  $ hg graft 2 --tool internal:fail
+  grafting revision 2
+  abort: unresolved conflicts, can't continue
+  (use hg resolve and hg graft --continue)
+  [255]
+  $ hg resolve --all
+  merging a and b to b
+  $ hg graft -c
+  grafting revision 2
+  $ hg export tip --git
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  # Node ID 2e80e1351d6ed50302fe1e05f8bd1d4d412b6e11
+  # Parent  e5a51ae854a8bbaaf25cc5c6a57ff46042dadbb4
+  2
+  
+  diff --git a/a b/b
+  rename from a
+  rename to b
--- a/tests/test-rebase-bookmarks.t	Fri Jun 29 00:01:19 2012 +0200
+++ b/tests/test-rebase-bookmarks.t	Fri Jun 29 00:40:52 2012 -0500
@@ -36,8 +36,10 @@
   adding d
   created new head
 
+  $ hg book W
+
   $ hg tglog 
-  @  3: 'D' bookmarks:
+  @  3: 'D' bookmarks: W
   |
   | o  2: 'C' bookmarks: Y Z
   | |
@@ -60,7 +62,7 @@
   $ hg tglog 
   @  3: 'C' bookmarks: Y Z
   |
-  o  2: 'D' bookmarks:
+  o  2: 'D' bookmarks: W
   |
   | o  1: 'B' bookmarks: X
   |/
@@ -82,7 +84,28 @@
   |
   o  2: 'B' bookmarks: X
   |
-  o  1: 'D' bookmarks:
+  o  1: 'D' bookmarks: W
+  |
+  o  0: 'A' bookmarks:
+  
+
+Keep active bookmark on the correct changeset
+
+  $ cd ..
+  $ hg clone -q a a3
+
+  $ cd a3
+  $ hg up -q X
+
+  $ hg rebase -d W
+  saved backup bundle to $TESTTMP/a3/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  3: 'C' bookmarks: Y Z
+  |
+  o  2: 'B' bookmarks: X
+  |
+  o  1: 'D' bookmarks: W
   |
   o  0: 'A' bookmarks: