[PATCH 2 of 2] hg: perform update after pulling during clone with share (issue5103)

Augie Fackler raf at durin42.com
Tue Feb 23 14:36:20 EST 2016


On Sat, Feb 20, 2016 at 05:56:13PM -0800, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1456019069 28800
> #      Sat Feb 20 17:44:29 2016 -0800
> # Node ID 12b24bd7b041ddad8c83967a22e6963b44329ad5
> # Parent  3f46918f408fc5594934991a21e704ee6f33a3b2
> hg: perform update after pulling during clone with share (issue5103)

Queued these, nice.

>
> When pooled storage is enabled, `hg clone` will initialize a repo
> from a local repo using the store sharing mechanism then pull from
> the originally requested repo.
>
> Before this patch, the working directory update occurred between
> these steps. This meant that we would only update to revisions that
> were already present in the local pooled storage.
>
> This patch moves the update to after we pull from the originally
> requested repository so we may check out a revision that didn't yet
> exist locally. In other words, it makes the behavior like normal
> `hg clone`.
>
> diff --git a/mercurial/hg.py b/mercurial/hg.py
> --- a/mercurial/hg.py
> +++ b/mercurial/hg.py
> @@ -351,26 +351,28 @@ def clonewithshare(ui, peeropts, sharepa
>      else:
>          ui.status(_('(sharing from new pooled repository %s)\n') % basename)
>          # Always use pull mode because hardlinks in share mode don't work well.
>          # Never update because working copies aren't necessary in share mode.
>          clone(ui, peeropts, source, dest=sharepath, pull=True,
>                rev=rev, update=False, stream=stream)
>
>      sharerepo = repository(ui, path=sharepath)
> -    share(ui, sharerepo, dest=dest, update=update, bookmarks=False)
> +    share(ui, sharerepo, dest=dest, update=False, bookmarks=False)
>
>      # We need to perform a pull against the dest repo to fetch bookmarks
>      # and other non-store data that isn't shared by default. In the case of
>      # non-existing shared repo, this means we pull from the remote twice. This
>      # is a bit weird. But at the time it was implemented, there wasn't an easy
>      # way to pull just non-changegroup data.
>      destrepo = repository(ui, path=dest)
>      exchange.pull(destrepo, srcpeer, heads=revs)
>
> +    _postshareupdate(destrepo, update)
> +
>      return srcpeer, peer(ui, peeropts, dest)
>
>  def clone(ui, peeropts, source, dest=None, pull=False, rev=None,
>            update=True, stream=False, branch=None, shareopts=None):
>      """Make a copy of an existing repository.
>
>      Create a copy of an existing repository in a new directory.  The
>      source and destination are URLs, as passed to the repository
> diff --git a/tests/test-clone.t b/tests/test-clone.t
> --- a/tests/test-clone.t
> +++ b/tests/test-clone.t
> @@ -769,21 +769,21 @@ Clone from repo with content should resu
>
>    $ hg --config share.pool=share clone source1a share-dest1a
>    (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
>    requesting all changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 3 changesets with 3 changes to 1 files
> -  updating working directory
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    searching for changes
>    no changes found
>    adding remote bookmark bookA
> +  updating working directory
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
>  The shared repo should have been created
>
>    $ ls share
>    b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1
>
>  The destination should point to it
>
> @@ -799,25 +799,25 @@ The default path should be the remote, n
>
>    $ hg -R share-dest1a config paths.default
>    $TESTTMP/source1a (glob)
>
>  Clone with existing share dir should result in pull + share
>
>    $ hg --config share.pool=share clone source1b share-dest1b
>    (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
> -  updating working directory
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    searching for changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 4 changesets with 4 changes to 1 files (+4 heads)
>    adding remote bookmark head1
>    adding remote bookmark head2
> +  updating working directory
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
>    $ ls share
>    b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1
>
>    $ cat share-dest1b/.hg/sharedpath; echo
>    $TESTTMP/share/b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1/.hg (glob)
>
>  We only get bookmarks from the remote, not everything in the share
> @@ -826,82 +826,93 @@ We only get bookmarks from the remote, n
>       head1                     3:4a8dc1ab4c13
>       head2                     4:99f71071f117
>
>  Default path should be source, not share.
>
>    $ hg -R share-dest1b config paths.default
>    $TESTTMP/source1a (glob)
>
> +Checked out revision should be head of default branch
> +
> +  $ hg -R share-dest1b log -r .
> +  changeset:   4:99f71071f117
> +  bookmark:    head2
> +  parent:      0:b5f04eac9d8f
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     head2
> +
> +
>  Clone from unrelated repo should result in new share
>
>    $ hg --config share.pool=share clone source2 share-dest2
>    (sharing from new pooled repository 22aeff664783fd44c6d9b435618173c118c3448e)
>    requesting all changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 2 changesets with 2 changes to 1 files
> +  searching for changes
> +  no changes found
>    updating working directory
>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  searching for changes
> -  no changes found
>
>    $ ls share
>    22aeff664783fd44c6d9b435618173c118c3448e
>    b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1
>
>  remote naming mode works as advertised
>
>    $ hg --config share.pool=shareremote --config share.poolnaming=remote clone source1a share-remote1a
>    (sharing from new pooled repository 195bb1fcdb595c14a6c13e0269129ed78f6debde)
>    requesting all changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 3 changesets with 3 changes to 1 files
> -  updating working directory
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    searching for changes
>    no changes found
>    adding remote bookmark bookA
> +  updating working directory
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
>    $ ls shareremote
>    195bb1fcdb595c14a6c13e0269129ed78f6debde
>
>    $ hg --config share.pool=shareremote --config share.poolnaming=remote clone source1b share-remote1b
>    (sharing from new pooled repository c0d4f83847ca2a873741feb7048a45085fd47c46)
>    requesting all changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 6 changesets with 6 changes to 1 files (+4 heads)
> -  updating working directory
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    searching for changes
>    no changes found
>    adding remote bookmark head1
>    adding remote bookmark head2
> +  updating working directory
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
>    $ ls shareremote
>    195bb1fcdb595c14a6c13e0269129ed78f6debde
>    c0d4f83847ca2a873741feb7048a45085fd47c46
>
>  request to clone a single revision is respected in sharing mode
>
>    $ hg --config share.pool=sharerevs clone -r 4a8dc1ab4c13 source1b share-1arev
>    (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
>    adding changesets
>    adding manifests
>    adding file changes
>    added 2 changesets with 2 changes to 1 files
> +  no changes found
> +  adding remote bookmark head1
>    updating working directory
>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  no changes found
> -  adding remote bookmark head1
>
>    $ hg -R share-1arev log -G
>    @  changeset:   1:4a8dc1ab4c13
>    |  bookmark:    head1
>    |  tag:         tip
>    |  user:        test
>    |  date:        Thu Jan 01 00:00:00 1970 +0000
>    |  summary:     head1
> @@ -911,36 +922,36 @@ request to clone a single revision is re
>       date:        Thu Jan 01 00:00:00 1970 +0000
>       summary:     initial
>
>
>  making another clone should only pull down requested rev
>
>    $ hg --config share.pool=sharerevs clone -r 99f71071f117 source1b share-1brev
>    (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
> -  updating working directory
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    searching for changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 1 changesets with 1 changes to 1 files (+1 heads)
>    adding remote bookmark head1
>    adding remote bookmark head2
> +  updating working directory
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
>    $ hg -R share-1brev log -G
> -  o  changeset:   2:99f71071f117
> +  @  changeset:   2:99f71071f117
>    |  bookmark:    head2
>    |  tag:         tip
>    |  parent:      0:b5f04eac9d8f
>    |  user:        test
>    |  date:        Thu Jan 01 00:00:00 1970 +0000
>    |  summary:     head2
>    |
> -  | @  changeset:   1:4a8dc1ab4c13
> +  | o  changeset:   1:4a8dc1ab4c13
>    |/   bookmark:    head1
>    |    user:        test
>    |    date:        Thu Jan 01 00:00:00 1970 +0000
>    |    summary:     head1
>    |
>    o  changeset:   0:b5f04eac9d8f
>       user:        test
>       date:        Thu Jan 01 00:00:00 1970 +0000
> @@ -950,19 +961,19 @@ making another clone should only pull do
>  Request to clone a single branch is respected in sharing mode
>
>    $ hg --config share.pool=sharebranch clone -b branch1 source1b share-1bbranch1
>    (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
>    adding changesets
>    adding manifests
>    adding file changes
>    added 2 changesets with 2 changes to 1 files
> +  no changes found
>    updating working directory
>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  no changes found
>
>    $ hg -R share-1bbranch1 log -G
>    o  changeset:   1:5f92a6c1a1b1
>    |  branch:      branch1
>    |  tag:         tip
>    |  user:        test
>    |  date:        Thu Jan 01 00:00:00 1970 +0000
>    |  summary:     branch1
> @@ -970,23 +981,23 @@ Request to clone a single branch is resp
>    @  changeset:   0:b5f04eac9d8f
>       user:        test
>       date:        Thu Jan 01 00:00:00 1970 +0000
>       summary:     initial
>
>
>    $ hg --config share.pool=sharebranch clone -b branch2 source1b share-1bbranch2
>    (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
> -  updating working directory
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    searching for changes
>    adding changesets
>    adding manifests
>    adding file changes
>    added 1 changesets with 1 changes to 1 files (+1 heads)
> +  updating working directory
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
>    $ hg -R share-1bbranch2 log -G
>    o  changeset:   2:6bacf4683960
>    |  branch:      branch2
>    |  tag:         tip
>    |  parent:      0:b5f04eac9d8f
>    |  user:        test
>    |  date:        Thu Jan 01 00:00:00 1970 +0000
> _______________________________________________
> 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