[PATCH 2 of 2 rebased] exchange: check actually missing revs for obsolete / unstable revs (issue6372)
Pulkit Goyal
7895pulkit at gmail.com
Fri Jul 17 17:26:37 UTC 2020
On Fri, Jul 17, 2020 at 6:15 PM Manuel Jacob <me at manueljacob.de> wrote:
>
> # HG changeset patch
> # User Manuel Jacob <me at manueljacob.de>
> # Date 1594966891 -7200
> # Fri Jul 17 08:21:31 2020 +0200
> # Node ID b5983bd8811e77fc82e7c7fbe3f602ab3e90852a
> # Parent 6284dfa728899a6385361d59ba95d9c3d137a5e6
> # EXP-Topic issue6372
> exchange: check actually missing revs for obsolete / unstable revs (issue6372)
>
> The previous code was using `outgoing.ancestorsof`, which was originally called
> `outgoing.missingheads` although not containing the missing heads. This
> confusion was probably the reason why the buggy code was written.
>
> The actually outgoing changesets are stored in `outgoing.missing`. By checking
> all outgoing changesets, we avoid the problem and can show the list of all
> obsolete or unstable changesets, which is more helpful for the user.
Queuing these. Thanks a lot!
>
> diff --git a/mercurial/exchange.py b/mercurial/exchange.py
> --- a/mercurial/exchange.py
> +++ b/mercurial/exchange.py
> @@ -905,27 +905,32 @@
> # if repo.obsstore == False --> no obsolete
> # then, save the iteration
> if unfi.obsstore:
> - # this message are here for 80 char limit reason
> - mso = _(b"push includes obsolete changeset: %s!")
> - mspd = _(b"push includes phase-divergent changeset: %s!")
> - mscd = _(b"push includes content-divergent changeset: %s!")
> - mst = {
> - b"orphan": _(b"push includes orphan changeset: %s!"),
> - b"phase-divergent": mspd,
> - b"content-divergent": mscd,
> - }
> - # If we are to push if there is at least one
> - # obsolete or unstable changeset in missing, at
> - # least one of the missinghead will be obsolete or
> - # unstable. So checking heads only is ok
> - for node in outgoing.ancestorsof:
> + obsoletes = []
> + unstables = []
> + for node in outgoing.missing:
> ctx = unfi[node]
> if ctx.obsolete():
> - raise error.Abort(mso % ctx)
> + obsoletes.append(ctx)
> elif ctx.isunstable():
> - # TODO print more than one instability in the abort
> - # message
> - raise error.Abort(mst[ctx.instabilities()[0]] % ctx)
> + unstables.append(ctx)
> + if obsoletes or unstables:
> + msg = b""
> + if obsoletes:
> + msg += _(b"push includes obsolete changesets:\n")
> + msg += b"\n".join(b' %s' % ctx for ctx in obsoletes)
> + if unstables:
> + if msg:
> + msg += b"\n"
> + msg += _(b"push includes unstable changesets:\n")
> + msg += b"\n".join(
> + b' %s (%s)'
> + % (
> + ctx,
> + b", ".join(_(ins) for ins in ctx.instabilities()),
> + )
> + for ctx in unstables
> + )
> + raise error.Abort(msg)
>
> discovery.checkheads(pushop)
> return True
> diff --git a/tests/test-obsolete-divergent.t b/tests/test-obsolete-divergent.t
> --- a/tests/test-obsolete-divergent.t
> +++ b/tests/test-obsolete-divergent.t
> @@ -118,7 +118,9 @@
> $ hg push ../other
> pushing to ../other
> searching for changes
> - abort: push includes content-divergent changeset: 392fd25390da!
> + abort: push includes unstable changesets:
> + 82623d38b9ba (content-divergent)
> + 392fd25390da (content-divergent)
> [255]
>
> $ cd ..
> diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
> --- a/tests/test-obsolete.t
> +++ b/tests/test-obsolete.t
> @@ -251,7 +251,8 @@
> $ hg push ../tmpa
> pushing to ../tmpa
> searching for changes
> - abort: push includes phase-divergent changeset: 5601fb93a350!
> + abort: push includes unstable changesets:
> + 5601fb93a350 (phase-divergent)
> [255]
>
> Fixing "bumped" situation
> @@ -616,7 +617,8 @@
> $ hg push ../tmpc/ -r 'desc("original_d")'
> pushing to ../tmpc/
> searching for changes
> - abort: push includes obsolete changeset: 94b33453f93b!
> + abort: push includes obsolete changesets:
> + 94b33453f93b
> [255]
>
> refuse to push unstable changeset
> @@ -624,7 +626,10 @@
> $ hg push ../tmpc/
> pushing to ../tmpc/
> searching for changes
> - abort: push includes orphan changeset: cda648ca50f5!
> + abort: push includes obsolete changesets:
> + 94b33453f93b
> + push includes unstable changesets:
> + cda648ca50f5 (orphan)
> [255]
>
> with --force it will work anyway
> @@ -647,6 +652,26 @@
> no changes found
> [1]
>
> +pushing should work even if the outgoing changes contain an unrelated changeset
> +(neither obsolete nor unstable) (issue6372)
> +
> + $ hg up 1 -q
> + $ hg branch new -q
> + $ mkcommit c
> +
> + $ hg push ../tmpc/ --new-branch
> + pushing to ../tmpc/
> + searching for changes
> + adding changesets
> + adding manifests
> + adding file changes
> + added 1 changesets with 1 changes to 1 files (+1 heads)
> +
> +make later tests work unmodified
> +
> + $ hg --config extensions.strip= strip tip -q
> + $ hg up 5 -q
> +
> Test that extinct changeset are properly detected
>
> $ hg log -r 'extinct()'
> @@ -1196,6 +1221,14 @@
> phase-divergent: immutable predecessor 245b
> content-divergent: predecessor 245b
>
> + $ hg push ../tmpf -r 50c51b361e60
> + pushing to ../tmpf
> + searching for changes
> + abort: push includes unstable changesets:
> + 50c51b361e60 (orphan, phase-divergent, content-divergent)
> + [255]
> +
> +
> #if serve
>
> $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
>
> _______________________________________________
> 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