merge with stable
authorMatt Mackall <mpm@selenic.com>
Mon, 07 Dec 2015 18:06:13 -0600
changeset 27278 42aa0e570eaa
parent 27277 07ae7e8c8ac9 (current diff)
parent 27245 cea1473ba468 (diff)
child 27279 40eb385f798f
merge with stable
mercurial/localrepo.py
tests/test-hook.t
--- a/.hgsigs	Sat Dec 05 23:14:49 2015 -0800
+++ b/.hgsigs	Mon Dec 07 18:06:13 2015 -0600
@@ -116,3 +116,4 @@
 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
+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
--- a/.hgtags	Sat Dec 05 23:14:49 2015 -0800
+++ b/.hgtags	Mon Dec 07 18:06:13 2015 -0600
@@ -129,3 +129,4 @@
 b66e3ca0b90c3095ea28dfd39aa24247bebf5c20 3.6-rc
 47dd34f2e7272be9e3b2a5a83cd0d20be44293f4 3.6
 1aa5083cbebbe7575c88f3402ab377539b484897 3.6.1
+2d437a0f3355834a9485bbbeb30a52a052c98f19 3.6.2
--- a/contrib/dockerlib.sh	Sat Dec 05 23:14:49 2015 -0800
+++ b/contrib/dockerlib.sh	Mon Dec 07 18:06:13 2015 -0600
@@ -14,8 +14,8 @@
   fi
 
   $DOCKER -h 2> /dev/null | grep -q Jansens && { echo "Error: $DOCKER is the Docking System Tray - install docker.io instead"; exit 1; }
-  $DOCKER version | grep -q "^Client version:" || { echo "Error: unexpected output from \"$DOCKER version\""; exit 1; }
-  $DOCKER version | grep -q "^Server version:" || { echo "Error: could not get docker server version - check it is running and your permissions"; exit 1; }
+  $DOCKER version | grep -Eq "^Client( version)?:" || { echo "Error: unexpected output from \"$DOCKER version\""; exit 1; }
+  $DOCKER version | grep -Eq "^Server( version)?:" || { echo "Error: could not get docker server version - check it is running and your permissions"; exit 1; }
 }
 
 # Construct a container and leave its name in $CONTAINER for future use.
@@ -35,8 +35,8 @@
         # running docker. This is *very likely* to fail at some point.
         echo RUN useradd $DBUILDUSER -u 1000
     else
-        echo RUN groupadd $DBUILDUSER -g `id -g` --non-unique
-        echo RUN useradd $DBUILDUSER -u `id -u` -g $DBUILDUSER --non-unique
+        echo RUN groupadd $DBUILDUSER -g `id -g` -o
+        echo RUN useradd $DBUILDUSER -u `id -u` -g $DBUILDUSER -o
     fi
   ) | $DOCKER build --tag $CONTAINER -
 }
--- a/mercurial/hook.py	Sat Dec 05 23:14:49 2015 -0800
+++ b/mercurial/hook.py	Mon Dec 07 18:06:13 2015 -0600
@@ -120,10 +120,11 @@
     env = {}
 
     # make in-memory changes visible to external process
-    tr = repo.currenttransaction()
-    repo.dirstate.write(tr)
-    if tr and tr.writepending():
-        env['HG_PENDING'] = repo.root
+    if repo is not None:
+        tr = repo.currenttransaction()
+        repo.dirstate.write(tr)
+        if tr and tr.writepending():
+            env['HG_PENDING'] = repo.root
 
     for k, v in args.iteritems():
         if callable(v):
--- a/mercurial/localrepo.py	Sat Dec 05 23:14:49 2015 -0800
+++ b/mercurial/localrepo.py	Mon Dec 07 18:06:13 2015 -0600
@@ -1569,19 +1569,12 @@
             if merge and cctx.deleted():
                 raise error.Abort(_("cannot commit merge with missing files"))
 
-            unresolved, driverresolved = False, False
             ms = mergemod.mergestate.read(self)
-            for f in status.modified:
-                if f in ms:
-                    if ms[f] == 'u':
-                        unresolved = True
-                    elif ms[f] == 'd':
-                        driverresolved = True
 
-            if unresolved:
+            if list(ms.unresolved()):
                 raise error.Abort(_('unresolved merge conflicts '
                                     '(see "hg help resolve")'))
-            if driverresolved or ms.mdstate() != 's':
+            if ms.mdstate() != 's' or list(ms.driverresolved()):
                 raise error.Abort(_('driver-resolved merge conflicts'),
                                   hint=_('run "hg resolve --all" to resolve'))
 
--- a/mercurial/parsers.c	Sat Dec 05 23:14:49 2015 -0800
+++ b/mercurial/parsers.c	Mon Dec 07 18:06:13 2015 -0600
@@ -493,6 +493,11 @@
 
 	/* read filenames */
 	while (pos >= 40 && pos < len) {
+		if (pos + 17 > len) {
+			PyErr_SetString(PyExc_ValueError,
+					"overflow in dirstate");
+			goto quit;
+		}
 		cur = str + pos;
 		/* unpack header */
 		state = *cur;
--- a/tests/test-commit-unresolved.t	Sat Dec 05 23:14:49 2015 -0800
+++ b/tests/test-commit-unresolved.t	Mon Dec 07 18:06:13 2015 -0600
@@ -43,4 +43,25 @@
   (no more unresolved files)
   $ hg commit -m "Merged"
 
+Test that if a file is removed but not marked resolved, the commit still fails
+(issue4972)
+
+  $ hg up ".^"
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg merge 2
+  merging A
+  warning: conflicts while merging A! (edit, then use 'hg resolve --mark')
+  1 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ hg rm --force A
+  $ hg commit -m merged
+  abort: unresolved merge conflicts (see "hg help resolve")
+  [255]
+
+  $ hg resolve -ma
+  (no more unresolved files)
+  $ hg commit -m merged
+  created new head
+
   $ cd ..
--- a/tests/test-hook.t	Sat Dec 05 23:14:49 2015 -0800
+++ b/tests/test-hook.t	Mon Dec 07 18:06:13 2015 -0600
@@ -681,10 +681,19 @@
   $ hg tag -f foo
   ['a', 'foo', 'tip']
 
+post-init hooks must not crash (issue4983)
+This also creates the `to` repo for the next test block.
+
+  $ cd ..
+  $ cat << EOF >> hgrc-with-post-init-hook
+  > [hooks]
+  > post-init = printenv.py post-init
+  > EOF
+  $ HGRCPATH=hgrc-with-post-init-hook hg init to
+  post-init hook: HG_ARGS=init to HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''} HG_PATS=['to'] HG_RESULT=0
+
 new commits must be visible in pretxnchangegroup (issue3428)
 
-  $ cd ..
-  $ hg init to
   $ echo '[hooks]' >> to/.hg/hgrc
   $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
   $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc
--- a/tests/test-obsolete-changeset-exchange.t	Sat Dec 05 23:14:49 2015 -0800
+++ b/tests/test-obsolete-changeset-exchange.t	Mon Dec 07 18:06:13 2015 -0600
@@ -83,3 +83,76 @@
   adding file changes
   added 1 changesets with 0 changes to 1 files (+1 heads)
   (run 'hg heads' to see heads)
+  $ cd ..
+
+pull does not fetch excessive changesets when common node is hidden (issue4982)
+-------------------------------------------------------------------------------
+
+initial repo with server and client matching
+
+  $ hg init pull-hidden-common
+  $ cd pull-hidden-common
+  $ touch foo
+  $ hg -q commit -A -m initial
+  $ echo 1 > foo
+  $ hg commit -m 1
+  $ echo 2a > foo
+  $ hg commit -m 2a
+  $ cd ..
+  $ hg clone --pull pull-hidden-common pull-hidden-common-client
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 3 changes to 1 files
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+server obsoletes the old head
+
+  $ cd pull-hidden-common
+  $ hg -q up -r 1
+  $ echo 2b > foo
+  $ hg -q commit -m 2b
+  $ hg debugobsolete 6a29ed9c68defff1a139e5c6fa9696fb1a75783d bec0734cd68e84477ba7fc1d13e6cff53ab70129
+  $ cd ..
+
+client only pulls down 1 changeset
+("all local heads known remotely" may change if the wire protocol discovery
+commands ever stop saying they have hidden changesets)
+
+  $ cd pull-hidden-common-client
+  $ hg pull --debug
+  pulling from $TESTTMP/pull-hidden-common (glob)
+  query 1; heads
+  searching for changes
+  all local heads known remotely
+  3 changesets found
+  list of changesets:
+  96ee1d7354c4ad7372047672c36a1f561e3a6a4c
+  a33779fdfc23063680fc31e9ff637dff6876d3d2
+  bec0734cd68e84477ba7fc1d13e6cff53ab70129
+  listing keys for "phase"
+  listing keys for "bookmarks"
+  bundle2-output-bundle: "HG20", 3 parts total
+  bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
+  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
+  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
+  bundle2-input-bundle: with-transaction
+  bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
+  adding changesets
+  add changeset 96ee1d7354c4
+  add changeset a33779fdfc23
+  add changeset bec0734cd68e
+  adding manifests
+  adding file changes
+  adding foo revisions
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  bundle2-input-part: total payload size 1378
+  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+  bundle2-input-bundle: 2 parts total
+  checking for updated bookmarks
+  listing keys for "phases"
+  updating the branch cache
+  (run 'hg heads' to see heads, 'hg merge' to merge)