[PATCH V11] update: fix bare --clean to work on new branch (issue5003) (BC)

Augie Fackler raf at durin42.com
Tue May 24 11:28:20 EDT 2016


On Mon, May 23, 2016 at 07:39:55AM +0200, liscju wrote:
> # HG changeset patch
> # User liscju <piotr.listkiewicz at gmail.com>
> # Date 1459834201 -7200
> #      Tue Apr 05 07:30:01 2016 +0200
> # Node ID 880899828fc8bc6b30876425e87924e4fd8476ee
> # Parent  bdba6a2015d0bc57c6e2beab25d138610dcbf360
> update: fix bare --clean to work on new branch (issue5003) (BC)

Code looks good, proposed behavior seems reasonable to me, but I'm not
comfortable taking it. CC'ing a couple of other reviewers to try and
get this landed for you. Thanks for sticking with this for so many
rounds of review!

>
> Before this commit bare update --clean on newly created branch
> updates to the parent commit, even if there are later commits
> on the parent commit's branch. Update to the latest head on the
> parent commit's branch instead.
>
> This seems reasonable as clean should discard uncommited changes,
> branch is one of them.
>
> diff --git a/mercurial/destutil.py b/mercurial/destutil.py
> --- a/mercurial/destutil.py
> +++ b/mercurial/destutil.py
> @@ -95,9 +95,16 @@ def _destupdatebranch(repo, clean, check
>      wc = repo[None]
>      movemark = node = None
>      currentbranch = wc.branch()
> +
> +    if clean and wc.p1():
> +        currentbranch = repo['.'].branch()
> +
>      if currentbranch in repo.branchmap():
>          heads = repo.branchheads(currentbranch)
>          if heads:
> +            if clean:
> +                repo.ui.warn(_('updating to the head of parent branch %s\n')
> +                             % currentbranch)
>              node = repo.revs('max(.::(%ln))', heads).first()
>          if bookmarks.isactivewdirparent(repo):
>              movemark = repo['.'].node()
> diff --git a/tests/test-newbranch.t b/tests/test-newbranch.t
> --- a/tests/test-newbranch.t
> +++ b/tests/test-newbranch.t
> @@ -463,3 +463,57 @@ We need special handling for repositorie
>    -1 new
>
>    $ cd ..
> +
> +We expect that update --clean discard changes in working directory,
> +and updates to the head of parent branch.
> +
> +  $ hg init updatebareclean
> +  $ cd updatebareclean
> +  $ hg update --clean
> +  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ touch a
> +  $ hg commit -A -m "a"
> +  adding a
> +  $ touch b
> +  $ hg commit -A -m "b"
> +  adding b
> +  $ touch c
> +  $ hg commit -A -m "c"
> +  adding c
> +  $ hg log
> +  changeset:   2:991a3460af53
> +  tag:         tip
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     c
> +
> +  changeset:   1:0e067c57feba
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     b
> +
> +  changeset:   0:3903775176ed
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     a
> +
> +  $ hg update -r 1
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ hg branch new-branch
> +  marked working directory as branch new-branch
> +  (branches are permanent and global, did you want a bookmark?)
> +  $ echo "aa" >> a
> +  $ hg update --clean
> +  updating to the head of parent branch default
> +  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ hg status
> +  $ hg branch
> +  default
> +  $ hg parent
> +  changeset:   2:991a3460af53
> +  tag:         tip
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     c
> +
> +
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list