[PATCH 2 of 2 V2] streamclone: abort when client needs to handle obsmarkers, but doesn't
Gregory Szorc
gregory.szorc at gmail.com
Wed Oct 31 15:48:49 EDT 2018
On Thu, Oct 18, 2018 at 6:53 AM Anton Shestakov <av6 at dwimlabs.net> wrote:
> # HG changeset patch
> # User Anton Shestakov <av6 at dwimlabs.net>
> # Date 1538754012 -28800
> # Fri Oct 05 23:40:12 2018 +0800
> # Node ID 7827e8870afe4a1505767a748dd07e94569196ac
> # Parent 212b1f69138c7d1fa166356448305219259f34f9
> # EXP-Topic stream-obsmarkers
> streamclone: abort when client needs to handle obsmarkers, but doesn't
>
> When client doesn't have any of obsolescence markers exchange capabilities,
> then it's safe to say it can't handle obsmarkers. However, if it
> understands
> even one format version, then stream clones are fine -- client can use
> "obsmarkers" bundle2 part.
>
I'm tempted to say we should try to get this into 4.8. But the patch won't
apply cleanly without part 1.
Also, if this does land, it represents a behavior different from stream
clone version 1. I think that is OK, as the new behavior of rejecting to
clone hidden changesets when they will become visible again seems correct.
>
> diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
> --- a/mercurial/bundle2.py
> +++ b/mercurial/bundle2.py
> @@ -1700,7 +1700,10 @@ def addpartbundlestream2(bundler, repo,
> includeobsmarkers = False
> if repo.obsstore:
> remoteversions = obsmarkersversion(bundler.capabilities)
> - if repo.obsstore._version in remoteversions:
> + if not remoteversions:
> + raise error.Abort(_('server has obsolescence markers, but
> client '
> + 'cannot receive them via stream clone'))
> + elif repo.obsstore._version in remoteversions:
> includeobsmarkers = True
>
> filecount, bytecount, it = streamclone.generatev2(repo, includepats,
> diff --git a/tests/test-clone-uncompressed.t
> b/tests/test-clone-uncompressed.t
> --- a/tests/test-clone-uncompressed.t
> +++ b/tests/test-clone-uncompressed.t
> @@ -556,6 +556,12 @@ Clone non-publishing with obsolescence
> $ hg debugobsolete -R with-obsolescence
> 50382b884f66690b7045cac93a540cba4d4c906f 0
> {c17445101a72edac06facd130d14808dfbd5c7c2} (Thu Jan 01 00:00:00 1970 +0000)
> {'user': 'test'}
>
> + $ hg clone -U --stream --config experimental.evolution=0
> http://localhost:$HGPORT with-obsolescence-no-evolution
> + streaming all changes
> + remote: abort: server has obsolescence markers, but client cannot
> receive them via stream clone
> + abort: pull failed on remote
> + [255]
> +
> $ killdaemons.py
>
> #endif
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20181031/26220ae8/attachment.html>
More information about the Mercurial-devel
mailing list