Patchwork [2,of,2,RFC] bookmarks: suggest 'push -B FOO' when a potentially new remote head has a local bookmark

login
register
mail settings
Submitter Stephen Lee
Date March 13, 2013, 11:13 a.m.
Message ID <e427733ad9227aea8b67.1363173213@slee-desktop>
Download mbox | patch
Permalink /patch/1122/
State Rejected, archived
Headers show

Comments

Stephen Lee - March 13, 2013, 11:13 a.m.
# HG changeset patch
# User Stephen Lee <sphen.lee@gmail.com>
# Date 1363172356 -39600
# Node ID e427733ad9227aea8b6756e37aa023847d4ca3f2
# Parent  8dc95dea42930a4fa251f3bd67a3eb759b51e304
bookmarks: suggest 'push -B FOO' when a potentially new remote head has a local bookmark

If a new head is prevented from being pushed and has a local bookmark this change suggests
using 'push -B FOO' since this is somewhat safer than using force.

This does not consider if there are unsynced changes, or if the localbook exists
remotely but cannot be updated (ie. if it is divergent).  In these cases pull and/or merge
might be a better suggestion.

Patch

diff --git a/mercurial/discovery.py b/mercurial/discovery.py
--- a/mercurial/discovery.py
+++ b/mercurial/discovery.py
@@ -319,18 +319,24 @@ 
             dhs = sorted(newhs - bookmarkedheads - oldhs)
         if dhs:
             if error is None:
-                if branch not in ('default', None):
+                if repo[dhs[0]].bookmarks():
+                    bm = repo[dhs[0]].bookmarks()[0]
                     error = _("push creates new remote head %s "
-                              "on branch '%s'!") % (short(dhs[0]), branch)
+                              "with bookmark '%s'") % (short(dhs[0]), bm)
+                    hint = _("use push -B %s to push this bookmark") % bm
                 else:
-                    error = _("push creates new remote head %s!"
-                              ) % short(dhs[0])
-                if heads[2]: # unsynced
-                    hint = _("you should pull and merge or "
-                             "use push -f to force")
-                else:
-                    hint = _("did you forget to merge? "
-                             "use push -f to force")
+                    if branch not in ('default', None):
+                        error = _("push creates new remote head %s "
+                                "on branch '%s'!") % (short(dhs[0]), branch)
+                    else:
+                        error = _("push creates new remote head %s!"
+                                ) % short(dhs[0])
+                    if heads[2]: # unsynced
+                        hint = _("you should pull and merge or "
+                                "use push -f to force")
+                    else:
+                        hint = _("did you forget to merge? "
+                                "use push -f to force")
             if branch is not None:
                 repo.ui.note(_("new remote heads on branch '%s'\n") % branch)
             for h in dhs:
diff --git a/tests/test-bookmarks-pushpull.t b/tests/test-bookmarks-pushpull.t
--- a/tests/test-bookmarks-pushpull.t
+++ b/tests/test-bookmarks-pushpull.t
@@ -241,8 +241,8 @@ 
   $ hg push http://localhost:$HGPORT2/
   pushing to http://localhost:$HGPORT2/
   searching for changes
-  abort: push creates new remote head c922c0139ca0!
-  (did you forget to merge? use push -f to force)
+  abort: push creates new remote head c922c0139ca0 with bookmark 'Y'
+  (use push -B Y to push this bookmark)
   [255]
   $ hg -R ../a book
      @                         1:0d2164f0ce0d
@@ -257,8 +257,8 @@ 
   $ hg push http://localhost:$HGPORT2/
   pushing to http://localhost:$HGPORT2/
   searching for changes
-  abort: push creates new remote head c922c0139ca0!
-  (did you forget to merge? use push -f to force)
+  abort: push creates new remote head c922c0139ca0 with bookmark 'Y'
+  (use push -B Y to push this bookmark)
   [255]
   $ hg -R ../a book
      @                         1:0d2164f0ce0d
@@ -399,6 +399,12 @@ 
   $ echo c5 > f2
   $ hg ci -Am5
   created new head
+  $ hg push
+  pushing to http://localhost:$HGPORT/
+  searching for changes
+  abort: push creates new remote head cc978a373a53 with bookmark 'W'
+  (use push -B W to push this bookmark)
+  [255]
   $ hg push -B W
   pushing to http://localhost:$HGPORT/
   searching for changes