Mercurial > hg
changeset 44984:bfef35bb4ecb
absorb: preserve branch-closing changesets even if empty
This makes the behavior consistent with 'hg commit', which allows to create
otherwise empty changesets if they close the branch. A lost branch closure can
inadvertently re-open a branch, so it should be preserved.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Mon, 01 Jun 2020 11:07:33 +0200 |
parents | 1b757f385549 |
children | 1ca0047fd7e1 |
files | hgext/absorb.py tests/test-absorb.t |
diffstat | 2 files changed, 36 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/absorb.py Mon Jun 01 10:33:00 2020 +0200 +++ b/hgext/absorb.py Mon Jun 01 11:07:33 2020 +0200 @@ -889,6 +889,8 @@ pctx = parents[0] if ctx.branch() != pctx.branch(): return False + if ctx.extra().get(b'close'): + return False # ctx changes more files (not a subset of memworkingcopy) if not set(ctx.files()).issubset(set(memworkingcopy)): return False
--- a/tests/test-absorb.t Mon Jun 01 10:33:00 2020 +0200 +++ b/tests/test-absorb.t Mon Jun 01 11:07:33 2020 +0200 @@ -553,3 +553,37 @@ b | 0 2 files changed, 1 insertions(+), 0 deletions(-) + + $ cd .. + $ hg init repo7 + $ cd repo7 + $ echo a1 > a + $ touch b + $ hg commit -m a -A a b + $ echo b > b + $ hg commit -m foo --close-branch # will become empty + $ echo c > c + $ hg commit -m reopen -A c -q + $ hg commit -m bar --close-branch # is already empty + $ echo a2 > a + $ printf '' > b + $ hg absorb --apply-changes --verbose | grep became + 0:0cde1ae39321: 1 file(s) changed, became 4:fc7fcdd90fdb + 1:651b953d5764: 2 file(s) changed, became 5:0c9de988ecdc + 2:76017bba73f6: 2 file(s) changed, became 6:d53ac896eb25 + 3:c7c1d67efc1d: 2 file(s) changed, became 7:66520267fe96 + $ hg up null -q # to make visible closed heads + $ hg log -T '{rev} {desc}\n' -G --stat + _ 7 bar + | + o 6 reopen + | c | 1 + + | 1 files changed, 1 insertions(+), 0 deletions(-) + | + _ 5 foo + | + o 4 a + a | 1 + + b | 0 + 2 files changed, 1 insertions(+), 0 deletions(-) +