diff -r 41021660baa1 -r 6063c1857d0a mercurial/exchange.py --- a/mercurial/exchange.py Fri Jul 24 00:50:57 2020 +0530 +++ b/mercurial/exchange.py Thu Jul 23 16:57:56 2020 +0200 @@ -905,32 +905,27 @@ # if repo.obsstore == False --> no obsolete # then, save the iteration if unfi.obsstore: - obsoletes = [] - unstables = [] - for node in outgoing.missing: + # 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: ctx = unfi[node] if ctx.obsolete(): - obsoletes.append(ctx) + raise error.Abort(mso % ctx) elif ctx.isunstable(): - 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) + # TODO print more than one instability in the abort + # message + raise error.Abort(mst[ctx.instabilities()[0]] % ctx) discovery.checkheads(pushop) return True