Mercurial > hg
changeset 50398:cc712ce3361f
bundle: abort if the user request bundling of internal changesets
See inline comments for details.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 10 Mar 2023 07:19:25 +0100 |
parents | f24c2e42e654 |
children | bcf54837241d |
files | mercurial/commands.py tests/test-bundle-phase-internal.t |
diffstat | 2 files changed, 58 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Fri Mar 10 07:10:19 2023 +0100 +++ b/mercurial/commands.py Fri Mar 10 07:19:25 2023 +0100 @@ -1665,6 +1665,14 @@ scmutil.nochangesfound(ui, repo, not base and excluded) return 1 + # internal changeset are internal implementation details that should not + # leave the repository. Bundling with `hg bundle` create such risk. + bundled_internal = repo.revs(b"%ln and _internal()", missing) + if bundled_internal: + msg = _(b"cannot bundle internal changesets") + hint = _(b"%d internal changesets selected") % len(bundled_internal) + raise error.Abort(msg, hint=hint) + if heads: outgoing = discovery.outgoing( repo, missingroots=missing, ancestorsof=heads
--- a/tests/test-bundle-phase-internal.t Fri Mar 10 07:10:19 2023 +0100 +++ b/tests/test-bundle-phase-internal.t Fri Mar 10 07:19:25 2023 +0100 @@ -234,3 +234,53 @@ A a_file.txt $ cd .. + +Explicitly bundling the internal change +======================================= + + $ cd reference-repo + +try to bundle it alone explicitly +--------------------------------- + +We should not allow it + + $ hg bundle --type v3 --exact --rev $shelved_node --hidden ../internal-01.hg + abort: cannot bundle internal changesets + (1 internal changesets selected) + [255] + $ hg debugbundle ../internal-01.hg + abort: $ENOENT$: '../internal-01.hg' + [255] + +try to bundle it with other, somewhat explicitly +------------------------------------------------ + +We should not allow it + + $ hg bundle --type v3 --exact --rev 'desc(b)':: --hidden ../internal-02.hg + abort: cannot bundle internal changesets + (1 internal changesets selected) + [255] + $ hg debugbundle ../internal-02.hg + abort: $ENOENT$: '../internal-02.hg' + [255] + +bundle visible ancestors +------------------------ + +This should succeed as the standard filtering is skipping the internal change naturally + + $ hg bundle --type v3 --exact --rev 'desc(b)':: ../internal-03.hg + 2 changesets found + $ hg debugbundle ../internal-03.hg + Stream params: {Compression: BZ} + changegroup -- {nbchanges: 2, version: 03} (mandatory: True) + d2ae7f538514cd87c17547b0de4cea71fe1af9fb + 07f0cc02c06869c81ebf33867edef30554020c0d + cache:rev-branch-cache -- {} (mandatory: False) + phase-heads -- {} (mandatory: True) + 07f0cc02c06869c81ebf33867edef30554020c0d draft + + $ cd .. +