Patchwork bookmark: informs of failure to upgrade a bookmark

login
register
mail settings
Submitter Pierre-Yves David
Date June 13, 2015, 1:12 a.m.
Message ID <ffbb88dc5ebcd7ecd4aa.1434157967@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/9622/
State Accepted
Headers show

Comments

Pierre-Yves David - June 13, 2015, 1:12 a.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1434068388 25200
#      Thu Jun 11 17:19:48 2015 -0700
# Node ID ffbb88dc5ebcd7ecd4aaec50aeaf958f5a468786
# Parent  e8075329c5fbb651508777c15cb6bc9ae33b5dff
bookmark: informs of failure to upgrade a bookmark

When we explicitly requested to update a bookmark but the bookmark location was
missing locally, we used to silently ignore the case. We now issue a message
about it to point that something wrong is going on.

By chance, we fixed all the cases where is case happened (for explicit pulling
only, issue4700 is still open). But I think it is still valuable to have a
warning in place in case such issue is reintroduced.

This patch have been tested against issue4689 test (but without issue4689 fix).
It give the better but expected failure seen below:

> --- /home/pyd/src/mercurial-dev/tests/test-bookmarks-pushpull.t
> +++ /home/pyd/src/mercurial-dev/tests/test-bookmarks-pushpull.t.err
> @@ -337,12 +337,12 @@
>    adding manifests
>    adding file changes
>    added 1 changesets with 1 changes to 1 files
> -  updating bookmark Y
> +  remote bookmark Y point to locally missing 0d60821d2197
>    (run 'hg update' to get a working copy)
>    $ hg book
>     * @                         1:0d2164f0ce0d
>       X                         1:0d2164f0ce0d
> -     Y                         5:35d1ef0a8d1b
> +     Y                         4:b0a5eff05604
>       Z                         1:0d2164f0ce0d
>
>  Update a bookmark right after the initial lookup -r (issue4700)
> @@ -387,12 +387,11 @@
>    adding manifests
>    adding file changes
>    added 1 changesets with 1 changes to 1 files
> -  updating bookmark Y
>    (run 'hg update' to get a working copy)
>    $ hg book
>     * @                         1:0d2164f0ce0d
>       X                         1:0d2164f0ce0d
> -     Y                         6:0d60821d2197
> +     Y                         4:b0a5eff05604
>       Z                         1:0d2164f0ce0d
>    $ hg -R $TESTTMP/pull-race book
>       @                         1:0d2164f0ce0d
Matt Mackall - June 15, 2015, 5:33 p.m.
On Fri, 2015-06-12 at 18:12 -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david@fb.com>
> # Date 1434068388 25200
> #      Thu Jun 11 17:19:48 2015 -0700
> # Node ID ffbb88dc5ebcd7ecd4aaec50aeaf958f5a468786
> # Parent  e8075329c5fbb651508777c15cb6bc9ae33b5dff
> bookmark: informs of failure to upgrade a bookmark

Queued for default, thanks.

Patch

diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py
--- a/mercurial/bookmarks.py
+++ b/mercurial/bookmarks.py
@@ -399,10 +399,15 @@  def updatefromremote(ui, repo, remotemar
     changed = []
     for b, scid, dcid in addsrc:
         if scid in repo: # add remote bookmarks for changes we already have
             changed.append((b, bin(scid), status,
                             _("adding remote bookmark %s\n") % (b)))
+        elif b in explicit:
+            explicit.remove(b)
+            ui.warn(_("remote bookmark %s point to locally missing %s\n")
+                    % (b, scid[:12]))
+
     for b, scid, dcid in advsrc:
         changed.append((b, bin(scid), status,
                         _("updating bookmark %s\n") % (b)))
     # remove normal movement from explicit set
     explicit.difference_update(d[0] for d in changed)
@@ -425,10 +430,15 @@  def updatefromremote(ui, repo, remotemar
     for b, scid, dcid in adddst + advdst:
         if b in explicit:
             explicit.discard(b)
             changed.append((b, bin(scid), status,
                             _("importing bookmark %s\n") % (b)))
+    for b, scid, dcid in differ:
+        if b in explicit:
+            explicit.remove(b)
+            ui.warn(_("remote bookmark %s point to locally missing %s\n")
+                    % (b, scid[:12]))
 
     if changed:
         tr = trfunc()
         for b, node, writer, msg in sorted(changed):
             localmarks[b] = node