# HG changeset patch # User Matt Mackall # Date 1289546505 21600 # Node ID 6bd9778ae74912a3a88661b3a2369505aae1569f # Parent 70b04340540066458946d1ddfb36a2549a32e7d8 pushkey: force HTTP POST on push and add tests (issue2489) diff -r 70b043405400 -r 6bd9778ae749 mercurial/httprepo.py --- a/mercurial/httprepo.py Wed Nov 10 17:28:24 2010 +0100 +++ b/mercurial/httprepo.py Fri Nov 12 01:21:45 2010 -0600 @@ -68,6 +68,8 @@ raise util.Abort(_('operation not supported over http')) def _callstream(self, cmd, **args): + if cmd is 'pushkey': + args['data'] = '' data = args.pop('data', None) headers = args.pop('headers', {}) self.ui.debug("sending %s command\n" % cmd) diff -r 70b043405400 -r 6bd9778ae749 tests/test-bookmarks-pushpull.t --- a/tests/test-bookmarks-pushpull.t Wed Nov 10 17:28:24 2010 +0100 +++ b/tests/test-bookmarks-pushpull.t Fri Nov 12 01:21:45 2010 -0600 @@ -22,6 +22,9 @@ $ hg init ../b $ cd ../b + $ hg book Y + $ hg book + * Y -1:000000000000 $ hg pull ../a pulling from ../a requesting all changes @@ -31,13 +34,21 @@ added 1 changesets with 1 changes to 1 files (run 'hg update' to get a working copy) $ hg bookmarks - no bookmarks set + Y 0:4e3505fd9583 + $ hg debugpushkey ../a namespaces + bookmarks + namespaces + $ hg debugpushkey ../a bookmarks + Y 4e3505fd95835d721066b76e75dbb8cc554d7f77 + X 4e3505fd95835d721066b76e75dbb8cc554d7f77 + Z 4e3505fd95835d721066b76e75dbb8cc554d7f77 $ hg pull -B X ../a pulling from ../a searching for changes no changes found importing bookmark X $ hg bookmark + Y 0:4e3505fd9583 X 0:4e3505fd9583 export bookmark by name @@ -56,6 +67,12 @@ * Z 0:4e3505fd9583 W -1:000000000000 +delete a remote bookmark + + $ hg book -d W + $ hg push -B W ../a + deleting remote bookmark W + push/pull name that doesn't exist $ hg push -B badname ../a @@ -64,3 +81,99 @@ $ hg pull -B anotherbadname ../a abort: remote bookmark anotherbadname not found! [255] + +divergent bookmarks + + $ cd ../a + $ echo c1 > f1 + $ hg ci -Am1 + adding f1 + $ hg book -f X + $ hg book + Y 0:4e3505fd9583 + * X 1:0d2164f0ce0d + Z 1:0d2164f0ce0d + + $ cd ../b + $ hg up + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo c2 > f2 + $ hg ci -Am2 + adding f2 + $ hg book -f X + $ hg book + Y 0:4e3505fd9583 + * X 1:9b140be10808 + foo -1:000000000000 + foobar -1:000000000000 + + $ hg pull ../a + pulling from ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files (+1 heads) + not updating divergent bookmark X + (run 'hg heads' to see heads, 'hg merge' to merge) + $ hg book + Y 0:4e3505fd9583 + * X 1:9b140be10808 + foo -1:000000000000 + foobar -1:000000000000 + $ hg push -f ../a + pushing to ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files (+1 heads) + $ hg -R ../a book + Y 0:4e3505fd9583 + * X 1:0d2164f0ce0d + Z 1:0d2164f0ce0d + +hgweb + + $ cat < .hg/hgrc + > [web] + > push_ssl = false + > allow_push = * + > EOF + + $ hg serve -p $HGPORT -d --pid-file=../hg.pid -E errors.log + $ cat ../hg.pid >> $DAEMON_PIDS + $ cd ../a + + $ hg debugpushkey http://localhost:$HGPORT/ namespaces + bookmarks + namespaces + $ hg debugpushkey http://localhost:$HGPORT/ bookmarks + Y 4e3505fd95835d721066b76e75dbb8cc554d7f77 + X 9b140be1080824d768c5a4691a564088eede71f9 + foo 0000000000000000000000000000000000000000 + foobar 0000000000000000000000000000000000000000 + $ hg out -B http://localhost:$HGPORT/ + comparing with http://localhost:$HGPORT/ + searching for changed bookmarks + Z 0d2164f0ce0d + $ hg push -B Z http://localhost:$HGPORT/ + pushing to http://localhost:$HGPORT/ + searching for changes + no changes found + exporting bookmark Z + $ hg book -d Z + $ hg in -B http://localhost:$HGPORT/ + comparing with http://localhost:$HGPORT/ + searching for changed bookmarks + Z 0d2164f0ce0d + foo 000000000000 + foobar 000000000000 + $ hg pull -B Z http://localhost:$HGPORT/ + pulling from http://localhost:$HGPORT/ + searching for changes + no changes found + not updating divergent bookmark X + importing bookmark Z + + $ kill `cat ../hg.pid` diff -r 70b043405400 -r 6bd9778ae749 tests/test-ssh.t --- a/tests/test-ssh.t Wed Nov 10 17:28:24 2010 +0100 +++ b/tests/test-ssh.t Fri Nov 12 01:21:45 2010 -0600 @@ -37,10 +37,16 @@ $ echo this > foo $ echo this > fooO $ hg ci -A -m "init" foo fooO - $ echo '[server]' > .hg/hgrc - $ echo 'uncompressed = True' >> .hg/hgrc - $ echo '[hooks]' >> .hg/hgrc - $ echo 'changegroup = python ../printenv.py changegroup-in-remote 0 ../dummylog' >> .hg/hgrc + $ echo < .hg/hgrc + > [server] + > uncompressed = True + > + > [extensions] + > bookmarks = + > + > [hooks] + > changegroup = python ../printenv.py changegroup-in-remote 0 ../dummylog + > EOF $ cd .. repo not found error @@ -116,6 +122,8 @@ $ echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc $ echo "[ui]" >> .hg/hgrc $ echo "ssh = python ../dummyssh" >> .hg/hgrc + $ echo '[extensions]' >> .hg/hgrc + $ echo 'bookmarks =' >> .hg/hgrc find outgoing @@ -185,10 +193,52 @@ $ hg ci -A -m z z created new head +test pushkeys and bookmarks + + $ cd ../local + $ echo '[extensions]' >> ../remote/.hg/hgrc + $ echo 'bookmarks =' >> ../remote/.hg/hgrc + $ hg debugpushkey --config ui.ssh="python ../dummyssh" ssh://user@dummy/remote namespaces + bookmarks + namespaces + $ hg book foo -r 0 + $ hg out -B + comparing with ssh://user@dummy/remote + searching for changed bookmarks + foo 1160648e36ce + $ hg push -B foo + pushing to ssh://user@dummy/remote + searching for changes + no changes found + exporting bookmark foo + $ hg debugpushkey --config ui.ssh="python ../dummyssh" ssh://user@dummy/remote bookmarks + foo 1160648e36cec0054048a7edc4110c6f84fde594 + $ hg book -f foo + $ hg push + pushing to ssh://user@dummy/remote + searching for changes + no changes found + updating bookmark foo + $ hg book -d foo + $ hg in -B + comparing with ssh://user@dummy/remote + searching for changed bookmarks + foo a28a9d1a809c + $ hg book -f -r 0 foo + $ hg pull -B foo + pulling from ssh://user@dummy/remote + searching for changes + no changes found + updating bookmark foo + importing bookmark foo + $ hg book -d foo + $ hg push -B foo + deleting remote bookmark foo + a bad, evil hook that prints to stdout - $ echo 'changegroup.stdout = python ../badhook' >> .hg/hgrc - $ cd ../local + $ echo '[hooks]' >> ../remote/.hg/hgrc + $ echo 'changegroup.stdout = python ../badhook' >> ../remote/.hg/hgrc $ echo r > r $ hg ci -A -m z r @@ -228,6 +278,14 @@ Got arguments 1:user@dummy 2:hg -R local serve --stdio Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio - changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio Got arguments 1:user@dummy 2:hg -R remote serve --stdio - changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1 + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio + Got arguments 1:user@dummy 2:hg -R remote serve --stdio