Mercurial > hg
changeset 15322:c8e2a5ea7062 stable
mq: avoid data loss upon qfold + qmv (issue3058)
When renaming a patch A as B where B was previously qfolded into A and
therefore marked as removed, a versioned MQ would first restore B before
marking it as a copy of A, thus losing A changes. The undelete() call is
probably a left-over, wctx.copy() explicitely handles the case where the
destination is removed.
Also note that status command represents "hg rm b; hg mv a b" as:
A b
a
R a
which explains the first hunk in test-mq-qrename.t.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Thu, 20 Oct 2011 16:43:31 +0200 |
parents | e174353e8cda |
children | 19368c54a774 |
files | hgext/mq.py tests/test-mq-qrename.t |
diffstat | 2 files changed, 30 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/mq.py Fri Oct 21 00:33:08 2011 +0200 +++ b/hgext/mq.py Thu Oct 20 16:43:31 2011 +0200 @@ -2614,8 +2614,6 @@ r.dirstate.drop(patch) r.dirstate.add(name) else: - if r.dirstate[name] == 'r': - wctx.undelete([name]) wctx.copy(patch, name) wctx.forget([patch]) finally:
--- a/tests/test-mq-qrename.t Fri Oct 21 00:33:08 2011 +0200 +++ b/tests/test-mq-qrename.t Thu Oct 20 16:43:31 2011 +0200 @@ -76,8 +76,8 @@ $ hg qrename patchb patchc $ hg qrename patcha patchb $ hg st --mq - M patchb M series + A patchb A patchc R patcha $ cd .. @@ -94,3 +94,32 @@ nothing changed [1] $ cd .. + +Test renaming to a folded patch (issue3058) + + $ hg init issue3058 + $ cd issue3058 + $ hg init --mq + $ echo a > a + $ hg add a + $ hg qnew adda + $ echo b >> a + $ hg qnew addb + $ hg qpop + popping addb + now at: adda + $ hg ci --mq -m "save mq" + $ hg qfold addb + $ hg qmv addb + $ cat .hg/patches/addb + # HG changeset patch + # Parent 0000000000000000000000000000000000000000 + + diff -r 000000000000 a + --- /dev/null * (glob) + +++ b/a * (glob) + @@ -0,0 +1,2 @@ + +a + +b + $ cd .. +