merge: all the stable sweetness into default
authorPierre-Yves David <pierre-yves.david@fb.com>
Tue, 02 Sep 2014 20:11:45 +0200
changeset 1107 1c227ecb744d
parent 1097 580a2d838996 (current diff)
parent 1106 6b0cf1b73693 (diff)
child 1108 87d60434b434
merge: all the stable sweetness into default
README
hgext/evolve.py
tests/test-sharing.t
tests/test-tutorial.t
--- a/README	Fri Aug 29 16:13:19 2014 +0200
+++ b/README	Tue Sep 02 20:11:45 2014 +0200
@@ -64,10 +64,11 @@
 4.2.0 --
 
 - uncommit: add a --rev argument
-
-4.1.1 --
-
+- evolve: add a `working directory now at xxxxxxxxxx` message
+- evolve: automatically translate obsolete hashes when evolving
 - properly skip marker creating if patch apply cleanly
+- prune: work around a massive slowdown from lazy revset
+- grab: "fix" the grab alias on window
 
 4.1.0 -- 2014-08-08
 
--- a/debian/control	Fri Aug 29 16:13:19 2014 +0200
+++ b/debian/control	Tue Sep 02 20:11:45 2014 +0200
@@ -13,6 +13,7 @@
  python-sphinx (>= 1.0.8),
  imagemagick,
  librsvg2-bin,
+ curl,
 Python-Version: >= 2.6
 Homepage: https://bitbucket.org/marmoute/mutable-history
 
--- a/debian/docs	Fri Aug 29 16:13:19 2014 +0200
+++ b/debian/docs	Tue Sep 02 20:11:45 2014 +0200
@@ -1,1 +1,2 @@
 html
+README
--- a/hgext/evolve.py	Fri Aug 29 16:13:19 2014 +0200
+++ b/hgext/evolve.py	Tue Sep 02 20:11:45 2014 +0200
@@ -22,11 +22,13 @@
 testedwith = ''
 buglink = 'http://bz.selenic.com/'
 
-import sys
+import sys, os
 import random
 from StringIO import StringIO
 import struct
 import urllib
+import re
+sha1re = re.compile(r'\b[0-9a-f]{6,40}\b')
 
 import mercurial
 from mercurial import util
@@ -69,6 +71,7 @@
 from mercurial import localrepo
 from mercurial.hgweb import hgweb_mod
 from mercurial import bundle2
+from mercurial import util
 
 cmdtable = {}
 command = cmdutil.command(cmdtable)
@@ -376,8 +379,13 @@
         ui.setconfig('alias', 'odiff',
             "diff --hidden --rev 'limit(precursors(.),1)' --rev .")
     if ui.config('alias', 'grab', None) is None:
-        ui.setconfig('alias', 'grab',
-            "! $HG rebase --dest . --rev $@ && $HG up tip")
+        if os.name == 'nt':
+            ui.setconfig('alias', 'grab',
+                "! " + util.hgexecutable() + " rebase --dest . --rev  && "
+                 + util.hgexecutable() + " up tip")
+        else:
+            ui.setconfig('alias', 'grab',
+                "! $HG rebase --dest . --rev $@ && $HG up tip")
 
 
 ### Troubled revset symbol
@@ -776,6 +784,32 @@
     destbookmarks = repo.nodebookmarks(dest.node())
     nodesrc = orig.node()
     destphase = repo[nodesrc].phase()
+    commitmsg = orig.description()
+
+    cache = {}
+    sha1s = re.findall(sha1re, commitmsg)
+    unfi = repo.unfiltered()
+    for sha1 in sha1s:
+        ctx = None
+        try:
+            ctx = unfi[sha1]
+        except error.RepoLookupError:
+            continue
+
+        if not ctx.obsolete():
+            continue
+
+        successors = obsolete.successorssets(repo, ctx.node(), cache)
+
+        # We can't make any assumptions about how to update the hash if the
+        # cset in question was split or diverged.
+        if len(successors) == 1 and len(successors[0]) == 1:
+            newsha1 = node.hex(successors[0][0])
+            commitmsg = commitmsg.replace(sha1, newsha1[:len(sha1)])
+        else:
+            repo.ui.note(_('The stale commit message reference to %s could '
+                           'not be updated') % sha1)
+
     tr = repo.transaction('relocate')
     try:
         try:
@@ -786,7 +820,7 @@
                         'unresolved merge conflicts (see hg help resolve)')
             cmdutil.duplicatecopies(repo, orig.node(), dest.node())
             nodenew = rebase.concludenode(repo, orig.node(), dest.node(),
-                                          node.nullid)
+                                          node.nullid, commitmsg)
         except util.Abort, exc:
             class LocalMergeFailure(MergeFailure, exc.__class__):
                 pass
@@ -1112,6 +1146,8 @@
     confirmopt = opts['confirm']
     ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'evolve')
 
+    startnode = repo['.']
+
     if contopt:
         if anyopt:
             raise util.Abort('cannot specify both "--any" and "--continue"')
@@ -1155,7 +1191,10 @@
                     print 'hg update %s' % ctx.rev()
                     return 0
                 else:
-                    return hg.update(repo, ctx.rev())
+                    res = hg.update(repo, ctx.rev())
+                    if ctx != startnode:
+                        ui.status(_('working directory is now at %s\n') % ctx)
+                    return res
 
         troubled = repo.revs('troubled()')
         if troubled:
@@ -1188,6 +1227,8 @@
         progresscb()
         seen += 1
         if not allopt:
+            if repo['.'] != startnode:
+                ui.status(_('working directory is now at %s\n') % repo['.'])
             return result
         progresscb()
         tro = _picknexttroubled(ui, repo, anyopt or allopt)
@@ -1195,6 +1236,9 @@
     if allopt:
         ui.progress('evolve', None)
 
+    if repo['.'] != startnode:
+        ui.status(_('working directory is now at %s\n') % repo['.'])
+
 
 def _evolveany(ui, repo, tro, dryrunopt, confirmopt, progresscb):
     repo = repo.unfiltered()
@@ -1733,11 +1777,19 @@
         if bookmark:
             _deletebookmark(ui, marks, bookmark)
         for ctx in repo.unfiltered().set('bookmark() and %ld', precs):
-            ldest = list(repo.set('max((::%d) - obsolete())', ctx))
-            if ldest:
-                dest = ldest[0]
-                updatebookmarks = _bookmarksupdater(repo, ctx.node())
-                updatebookmarks(dest.node())
+            # used to be:
+            #
+            #   ldest = list(repo.set('max((::%d) - obsolete())', ctx))
+            #   if ldest:
+            #      c = ldest[0]
+            #
+            # but then revset took a lazy arrow in the knee and became much
+            # slower. The new forms makes as much sense and a much faster.
+            for dest in ctx.ancestors():
+                if not dest.obsolete():
+                    updatebookmarks = _bookmarksupdater(repo, ctx.node())
+                    updatebookmarks(dest.node())
+                    break
     finally:
         lockmod.release(lock, wlock)
 
--- a/tests/test-evolve.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-evolve.t	Tue Sep 02 20:11:45 2014 +0200
@@ -193,13 +193,13 @@
 It is therefore advisable to always set the bookmark before committing::
 
   $ hg book feature-B
-  $ hg commit --message "another feature"
+  $ hg commit --message "another feature (child of $(hg log -r . -T '{node|short}'))"
 
 So here we are::
 
   $ hg book
      feature-A                 1:568a468b60fc
-   * feature-B                 2:7b36850622b2
+   * feature-B                 2:73296a82292a
 
 
 Fix The Second Patch
@@ -222,7 +222,7 @@
 changeset plus the updating changeset are hidden from view by default::
 
   $ hg log
-  4	feature-B: another feature - test
+  4	feature-B: another feature (child of 568a468b60fc) - test
   1	feature-A: a nifty feature - test
   0	: base - test
 
@@ -242,7 +242,7 @@
   1 new unstable changesets
   $ hg log
   6	feature-A: a nifty feature - test
-  4	feature-B: another feature - test
+  4	feature-B: another feature (child of 568a468b60fc) - test
   1	: a nifty feature - test
   0	: base - test
   $ hg up -q 0
@@ -251,27 +251,28 @@
   |
   | x  5:c296b79833d1@default(draft) temporary amend commit for 568a468b60fc
   | |
-  | | o  4:207cbc4ea7fe@default(draft) another feature
+  | | o  4:6992c59c6b06@default(draft) another feature (child of 568a468b60fc)
   | |/
-  | | x  3:5bb880fc0f12@default(draft) temporary amend commit for 7b36850622b2
+  | | x  3:c97947cdc7a2@default(draft) temporary amend commit for 73296a82292a
   | | |
-  | | x  2:7b36850622b2@default(draft) another feature
+  | | x  2:73296a82292a@default(draft) another feature (child of 568a468b60fc)
   | |/
   | x  1:568a468b60fc@default(draft) a nifty feature
   |/
   @  0:e55e0562ee93@default(public) base
   
   $ hg debugobsolete
-  7b36850622b2fd159fa30a4fb2a1edd2043b4a14 207cbc4ea7fee30d18b3a25f534fe5db22c6071b 0 (*) {'user': 'test'} (glob)
-  5bb880fc0f12dd61eee6de36f62b93fdbc3684b0 0 {7b36850622b2fd159fa30a4fb2a1edd2043b4a14} (*) {'user': 'test'} (glob)
+  73296a82292a76fb8a7061969d2489ec0d84cd5e 6992c59c6b06a1b4a92e24ff884829ae026d018b 0 (*) {'user': 'test'} (glob)
+  c97947cdc7a2a11cf78419f5c2c3dd3944ec79e8 0 {73296a82292a76fb8a7061969d2489ec0d84cd5e} (*) {'user': 'test'} (glob)
   568a468b60fc99a42d5d4ddbe181caff1eef308d ba0ec09b1babf3489b567853807f452edd46704f 0 (*) {'user': 'test'} (glob)
   c296b79833d1d497f33144786174bf35e04e44a3 0 {568a468b60fc99a42d5d4ddbe181caff1eef308d} (*) {'user': 'test'} (glob)
   $ hg evolve
-  move:[4] another feature
+  move:[4] another feature (child of 568a468b60fc)
   atop:[6] a nifty feature
   merging main-file-1
+  working directory is now at 5c9c8d9c2e4e
   $ hg log
-  7	feature-B: another feature - test
+  7	feature-B: another feature (child of ba0ec09b1bab) - test
   6	feature-A: a nifty feature - test
   0	: base - test
 
@@ -300,7 +301,7 @@
   $ hg glog
   @  8	feature-B: another feature that rox - test
   |
-  | o  7	: another feature - test
+  | o  7	: another feature (child of ba0ec09b1bab) - test
   |/
   o  6	feature-A: a nifty feature - test
   |
@@ -308,13 +309,14 @@
   
   $ hg evolve --any --traceback
   recreate:[8] another feature that rox
-  atop:[7] another feature
+  atop:[7] another feature (child of ba0ec09b1bab)
   computing new diff
-  committed as ca3b75e3e59b
+  committed as 476d0454d60e
+  working directory is now at 476d0454d60e
   $ hg glog
-  @  9	feature-B: bumped update to abe98aeaaa35: - test
+  @  9	feature-B: bumped update to 5c9c8d9c2e4e: - test
   |
-  o  7	: another feature - test
+  o  7	: another feature (child of ba0ec09b1bab) - test
   |
   o  6	feature-A: a nifty feature - test
   |
@@ -369,6 +371,7 @@
   move:[11] dansk 3!
   atop:[14] dansk 2!
   merging main-file-1
+  working directory is now at cfb5ebed336d
   $ hg glog
   @  15	: dansk 3! - test
   |
@@ -376,7 +379,7 @@
   |
   o  13	feature-B: dansk! - test
   |
-  o  7	: another feature - test
+  o  7	: another feature (child of ba0ec09b1bab) - test
   |
   o  6	feature-A: a nifty feature - test
   |
@@ -731,6 +734,7 @@
   $ hg stab --any
   move:[15] c
   atop:[13] a
+  working directory is now at 3742bde73477
   $ hg st -C --change=tip
   A c
     a
@@ -743,11 +747,11 @@
   2 changesets folded
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ glog
-  @  16:e6d8dace77a1@default(draft) Folding with custom commit message
+  @  16:d6239ff09c9f@default(draft) Folding with custom commit message
   |
-  o  13:e9c952d5bc4b@default(draft) dansk!
+  o  13:56ade053f46d@default(draft) dansk!
   |
-  o  7:abe98aeaaa35@default(public) another feature
+  o  7:5c9c8d9c2e4e@default(public) another feature (child of ba0ec09b1bab)
   |
   o  6:ba0ec09b1bab@default(public) a nifty feature
   |
@@ -762,8 +766,8 @@
   2 changesets folded
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg qlog
-  17 - 2451d817c756 A longer
+  17 - dba606655966 A longer
                     commit message (draft)
-  7 - abe98aeaaa35 another feature (public)
+  7 - 5c9c8d9c2e4e another feature (child of ba0ec09b1bab) (public)
   6 - ba0ec09b1bab a nifty feature (public)
   0 - e55e0562ee93 base (public)
--- a/tests/test-sharing.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-sharing.t	Tue Sep 02 20:11:45 2014 +0200
@@ -204,6 +204,7 @@
   atop:[2] fix bug 15
   computing new diff
   committed as 227d860d9ad0
+  working directory is now at 227d860d9ad0
 
 Figure SG08
   $ hg --hidden shortlog -G
--- a/tests/test-stabilize-conflict.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-stabilize-conflict.t	Tue Sep 02 20:11:45 2014 +0200
@@ -81,6 +81,7 @@
   move:[2] babar count up to fifteen
   atop:[4] babar count up to ten
   merging babar
+  working directory is now at 71c18f70c34f
   $ hg resolve -l
   $ hg log -G
   @  changeset:   5:71c18f70c34f
--- a/tests/test-stabilize-order.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-stabilize-order.t	Tue Sep 02 20:11:45 2014 +0200
@@ -71,6 +71,7 @@
   resolving manifests
   getting b
   b
+  working directory is now at bede829dd2d3
   $ glog
   @  8:bede829dd2d3@default(draft) addb
   |
@@ -99,6 +100,7 @@
   resolving manifests
   getting c
   c
+  working directory is now at 65095d7d0dd5
   $ hg debugobsolete > successors.new
   $ diff -u successors.old successors.new
   --- successors.old* (glob)
@@ -159,6 +161,7 @@
   resolving manifests
   getting c
   c
+  working directory is now at e99ecf51c867
   $ glog
   @  12:e99ecf51c867@default(draft) addc
   |
--- a/tests/test-stabilize-result.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-stabilize-result.t	Tue Sep 02 20:11:45 2014 +0200
@@ -165,6 +165,7 @@
   rebasing to destination parent: 66719795a494
   computing new diff
   committed as (a7cabd7bd9c2|671b9d7eeaec) (re)
+  working directory is now at (a7cabd7bd9c2|671b9d7eeaec) (re)
   $ glog
   @  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
   |
@@ -258,6 +259,7 @@
   copying changeset 283ccd10e2b8 to 7bc2f5967f5e
   a
   committed changeset 21:f344982e63c4
+  working directory is now at f344982e63c4
   $ hg st
   $ glog
   @  21:f344982e63c4@default(draft) bk:[] More addition
--- a/tests/test-tutorial.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-tutorial.t	Tue Sep 02 20:11:45 2014 +0200
@@ -703,6 +703,7 @@
   move:[15] animals
   atop:[14] bathroom stuff
   merging shopping
+  working directory is now at ee942144f952
 
 The old version of bathroom is hidden again.
 
@@ -754,6 +755,7 @@
   $ hg evolve
   update:[8] animals
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at ee942144f952
 
 Relocating unstable change after prune
 ----------------------------------------------
@@ -831,6 +833,7 @@
   move:[17] SPAM SPAM SPAM
   atop:[14] bathroom stuff
   merging shopping
+  working directory is now at 40aa40daeefb
 
   $ hg log -G
   @  40aa40daeefb (draft): SPAM SPAM SPAM
--- a/tests/test-userguide.t	Fri Aug 29 16:13:19 2014 +0200
+++ b/tests/test-userguide.t	Tue Sep 02 20:11:45 2014 +0200
@@ -253,6 +253,7 @@
   $ hg evolve --all
   move:[23] fix bug 67
   atop:[24] fix bug 53
+  working directory is now at 0d972d6888e6
   $ hg --hidden shortlog -G -r 21::
   @  25:0d972d6888e6  draft  fix bug 67
   |
@@ -301,6 +302,7 @@
   $ hg evolve --all
   move:[27] new feature
   atop:[28] fix a bug
+  working directory is now at 166c1c368ab6
   $ hg --hidden shortlog -G -r 25::
   @  30:166c1c368ab6  draft  new feature
   |