[PATCH 3 of 4] destupdate: also include bookmark related logic

Augie Fackler raf at durin42.com
Fri Oct 9 10:06:05 CDT 2015


On Thu, Oct 08, 2015 at 02:42:17PM -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1443513806 25200
> #      Tue Sep 29 01:03:26 2015 -0700
> # Node ID 725812283ac94ac10c38ba1112b0857191a1f621
> # Parent  18cba2544597d954fde95ee36f6450faab57fcbc
> destupdate: also include bookmark related logic
>
> For the same reason, we move the bookmark related update logic into the
> 'destupdate' function.


> This requires to extend the returns of the function to
> include the bookmark that needs to move (more or less) and the bookmark to
> activate at the end of the function.

I'm not sure what this sentence is trying to say (the "more or less"
is confusing me). I think what you mean is:

This requires destupdate also returning the name of any bookmark that
needs to move, and the bookmark to activiate after the function.

Is that right?

>
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -6543,10 +6543,11 @@ def update(ui, repo, node=None, rev=None
>
>      See :hg:`help dates` for a list of formats valid for -d/--date.
>
>      Returns 0 on success, 1 if there are unresolved files.
>      """
> +    movemarkfrom = None
>      if rev and node:
>          raise util.Abort(_("please specify just one revision"))
>
>      if rev is None or rev == '':
>          rev = node
> @@ -6558,24 +6559,22 @@ def update(ui, repo, node=None, rev=None
>          if date:
>              if rev is not None:
>                  raise util.Abort(_("you can't specify a revision and a date"))
>              rev = cmdutil.finddate(ui, repo, date)
>
> -        # with no argument, we also move the active bookmark, if any
> -        rev, movemarkfrom = bookmarks.calculateupdate(ui, repo, rev)
> -
>          # if we defined a bookmark, we have to remember the original name
>          brev = rev
>          rev = scmutil.revsingle(repo, rev, rev).rev()
>
>          if check and clean:
>              raise util.Abort(_("cannot specify both -c/--check and -C/--clean"))
>
>          if check:
>              cmdutil.bailifchanged(repo, merge=False)
>          if rev is None:
> -            rev = destutil.destupdate(repo, clean=clean, check=check)
> +            updata =  destutil.destupdate(repo, clean=clean, check=check)
> +            rev, movemarkfrom, brev = updata
>
>          repo.ui.setconfig('ui', 'forcemerge', tool, 'update')
>
>          if clean:
>              ret = hg.clean(repo, rev)
> diff --git a/mercurial/destutil.py b/mercurial/destutil.py
> --- a/mercurial/destutil.py
> +++ b/mercurial/destutil.py
> @@ -5,30 +5,43 @@
>  # This software may be used and distributed according to the terms of the
>  # GNU General Public License version 2 or any later version.
>
>  from .i18n import _
>  from . import (
> +    bookmarks,
>      error,
>      util,
>      obsolete,
>  )
>
>  def destupdate(repo, clean=False, check=False):
>      """destination for bare update operation
> +
> +    return (rev, ancestor, movemark, activemark)
> +
> +    - rev: the revision to update to,
> +    - a bookmark moved by the update
> +    - a bookmark activated by the update
>      """
> -    # Here is where we should consider bookmarks, divergent bookmarks, and tip
> -    # of current branch; but currently we are only checking the branch tips.
>      node = None
>      wc = repo[None]
>      p1 = wc.p1()
> -    try:
> -        node = repo.branchtip(wc.branch())
> -    except error.RepoLookupError:
> -        if wc.branch() == 'default': # no default branch!
> -            node = repo.lookup('tip') # update to tip
> -        else:
> -            raise util.Abort(_("branch %s not found") % wc.branch())
> +    activemark = None
> +
> +    # we also move the active bookmark, if any
> +    node, movemark = bookmarks.calculateupdate(repo.ui, repo, None)
> +    if node is not None:
> +        activemark = node
> +
> +    if node is None:
> +        try:
> +            node = repo.branchtip(wc.branch())
> +        except error.RepoLookupError:
> +            if wc.branch() == 'default': # no default branch!
> +                node = repo.lookup('tip') # update to tip
> +            else:
> +                raise util.Abort(_("branch %s not found") % wc.branch())
>
>      if p1.obsolete() and not p1.children():
>          # allow updating to successors
>          successors = obsolete.successorssets(repo, p1.node())
>
> @@ -75,6 +88,6 @@ def destupdate(repo, clean=False, check=
>                  elif not check:  # destination is not a descendant.
>                      msg = _("not a linear update")
>                      hint = _("merge or update --check to force update")
>                      raise util.Abort(msg, hint=hint)
>
> -    return rev
> +    return rev, movemark, activemark
> diff --git a/mercurial/merge.py b/mercurial/merge.py
> --- a/mercurial/merge.py
> +++ b/mercurial/merge.py
> @@ -993,11 +993,12 @@ def update(repo, node, branchmerge, forc
>          pas = [None]
>          if ancestor is not None:
>              pas = [repo[ancestor]]
>
>          if node is None:
> -            node = repo[destutil.destupdate(repo)].node()
> +            rev, _mark, _act = destutil.destupdate(repo)
> +            node = repo[rev].node()
>
>          overwrite = force and not branchmerge
>
>          p2 = repo[node]
>          if pas[0] is None:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list