Commits

Matt Mackall  committed 6bd9778

pushkey: force HTTP POST on push and add tests (issue2489)

  • Participants
  • Parent commits 70b0434
  • Branches stable

Comments (0)

Files changed (3)

File mercurial/httprepo.py

         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)

File tests/test-bookmarks-pushpull.t

 
   $ hg init ../b
   $ cd ../b
+  $ hg book Y
+  $ hg book
+   * Y                         -1:000000000000
   $ hg pull ../a
   pulling from ../a
   requesting all changes
   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
    * 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
   $ 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 <<EOF > .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`

File tests/test-ssh.t

   $ 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 <<EOF > .hg/hgrc
+  > [server]
+  > uncompressed = True
+  > 
+  > [extensions]
+  > bookmarks =
+  > 
+  > [hooks]
+  > changegroup = python ../printenv.py changegroup-in-remote 0 ../dummylog
+  > EOF
   $ cd ..
 
 repo not found error
   $ 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
 
   $ 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
 
   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
-  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
+  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