diff --git a/hgext/remotenames.py b/hgext/remotenames.py --- a/hgext/remotenames.py +++ b/hgext/remotenames.py @@ -30,6 +30,10 @@ bookmarks are specified using `-B` flag or multiple topological heads are pushed, fallbacks to default behavior. (default: False) + +remotenames.createremotebookmark + Boolean value indicating whether a creating a new bookmark on the server using + remotenames.pushtobookmark config is allowed or not. (default: False) """ from __future__ import absolute_import @@ -83,6 +87,9 @@ configitem('remotenames', 'pushtobookmark', default=False, ) +configitem('remotenames', 'createremotebookmark', + default=False, +) def expushdiscoverybookmarks(pushop): # config not set, fallback to normal push behavior @@ -109,7 +116,7 @@ old = '' if bookmark in remotemarks: old = remotemarks[bookmark] - else: + elif not pushop.repo.ui.configbool('remotenames', 'createremotebookmark'): msg = _("bookmark '%s' does not exists on remote") raise error.Abort(msg % bookmark) diff --git a/tests/test-logexchange.t b/tests/test-logexchange.t --- a/tests/test-logexchange.t +++ b/tests/test-logexchange.t @@ -523,7 +523,60 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Added a +Testing the remotenames.createbookmark config option + $ hg bookmarks -R ../server2/ + $TESTTMP/server/bar 6:87d6d6676308 + $TESTTMP/server/foo 3:62615734edd5 + bar 6:87d6d6676308 + foo 3:62615734edd5 + + $ hg push ../server2/ -B nonexistant + pushing to ../server2/ + searching for changes + abort: bookmark 'nonexistant' does not exists on remote + [255] + + $ hg push ../server2/ -r . -B nonexistant --config remotenames.createremotebookmark=True + pushing to ../server2/ + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + exporting bookmark nonexistant + + $ hg bookmarks -R ../server2/ + $TESTTMP/server/bar 6:87d6d6676308 + $TESTTMP/server/foo 3:62615734edd5 + bar 6:87d6d6676308 + foo 3:62615734edd5 + nonexistant 9:aa6a885086c0 + + $ hg log -R ../server2/ -r tip + changeset: 9:aa6a885086c0 + branch: wat + bookmark: nonexistant + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added foobar + +Check synchornising of remotenames after push + + $ hg log -G -r . + @ changeset: 9:aa6a885086c0 + | branch: wat + ~ tag: tip + remote bookmark: $TESTTMP/server2/nonexistant + remote bookmark: default/foo + hoisted name: foo + remote branch: $TESTTMP/server2/wat + remote branch: default/wat + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added foobar + More testing of remotenames.pushtobookmark config option --------------------------------------------------------- @@ -625,3 +678,107 @@ |/ () o 0:f7ad41964313 added a () + +Testing createbookmark when pushing multiple heads + + $ echo zoo > zoo + $ hg ci -Aqm "added zoo" + $ hg up 4 + 2 files updated, 0 files merged, 4 files removed, 0 files unresolved + $ echo d > d + $ hg ci -Aqm "added d" + $ hg glog + @ 7:42dc4f6117ef added d + | () + | o 6:07ea181fe329 added zoo + | | () + | o 5:e8d0567f11cf added z + | | () + o | 4:8be98ac1a569 added c + | | () + | o 3:dc7d5acf2389 added y + | | () + | o 2:fa7447a9d391 added x + | | (bm1) + o | 1:80e6d2c47cfe added b + |/ () + o 0:f7ad41964313 added a + () + $ echo '[remotenames]' >> .hg/hgrc + $ echo 'createremotebookmark = True' >> .hg/hgrc + +pushing multiple heads leads to default behavior + $ hg push -B newbm -r 7 -r 6 ../server + pushing to ../server + searching for changes + bookmark newbm does not exist on the local or remote repository! + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 2 files + [2] + +bookmark is not pushed to the server + $ hg glog -R ../server + o 7:42dc4f6117ef added d + | () + | o 6:07ea181fe329 added zoo + | | () + | o 5:e8d0567f11cf added z + | | (bm1) + | o 4:dc7d5acf2389 added y + | | () + o | 3:8be98ac1a569 added c + | | () + | @ 2:fa7447a9d391 added x + | | () + o | 1:80e6d2c47cfe added b + |/ () + o 0:f7ad41964313 added a + () + +Pushing multiple revs by specifying multiple -r but only one head + + $ for ch in e f; do echo foo > $ch; hg ci -Aqm "added "$ch; done; + + $ hg glog -r 7:: + @ 9:77bb50a270c5 added f + | () + o 8:f48de4b3d95a added e + | () + o 7:42dc4f6117ef added d + | () + ~ + + $ hg push -r 8 -r 9 -B newbm ../server + pushing to ../server + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 2 files + exporting bookmark newbm + +bookmark is on the hedmost rev of revs which were pushed + + $ hg glog -R ../server + o 9:77bb50a270c5 added f + | (newbm) + o 8:f48de4b3d95a added e + | () + o 7:42dc4f6117ef added d + | () + | o 6:07ea181fe329 added zoo + | | () + | o 5:e8d0567f11cf added z + | | (bm1) + | o 4:dc7d5acf2389 added y + | | () + o | 3:8be98ac1a569 added c + | | () + | @ 2:fa7447a9d391 added x + | | () + o | 1:80e6d2c47cfe added b + |/ () + o 0:f7ad41964313 added a + ()