# HG changeset patch # User Matt Mackall # Date 1449533173 21600 # Node ID 42aa0e570eaa364a622bc4443b0bcb79b1100a58 # Parent 07ae7e8c8ac916de7e92af454f0c3f4602ac76e7# Parent cea1473ba4682abe8a693737a413486b64590799 merge with stable diff -r 07ae7e8c8ac9 -r 42aa0e570eaa .hgsigs --- 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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 diff -r 07ae7e8c8ac9 -r 42aa0e570eaa .hgtags --- 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 diff -r 07ae7e8c8ac9 -r 42aa0e570eaa contrib/dockerlib.sh --- 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 - } diff -r 07ae7e8c8ac9 -r 42aa0e570eaa mercurial/hook.py --- 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): diff -r 07ae7e8c8ac9 -r 42aa0e570eaa mercurial/localrepo.py --- 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')) diff -r 07ae7e8c8ac9 -r 42aa0e570eaa mercurial/parsers.c --- 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; diff -r 07ae7e8c8ac9 -r 42aa0e570eaa tests/test-commit-unresolved.t --- 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 .. diff -r 07ae7e8c8ac9 -r 42aa0e570eaa tests/test-hook.t --- 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 diff -r 07ae7e8c8ac9 -r 42aa0e570eaa tests/test-obsolete-changeset-exchange.t --- 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)