# HG changeset patch # User Patrick Mezard # Date 2011-10-20 14:43:31 # Node ID c8e2a5ea70629eae96cbd08264df46c1868ce4a5 # Parent e174353e8cda17fe252721c480fc0a7825e8a1ab 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. diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -2614,8 +2614,6 @@ def rename(ui, repo, patch, name=None, * 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: diff --git a/tests/test-mq-qrename.t b/tests/test-mq-qrename.t --- a/tests/test-mq-qrename.t +++ b/tests/test-mq-qrename.t @@ -76,8 +76,8 @@ Test overlapping renames (issue2388) $ 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 @@ Test renames with mq repo (issue2097) 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 .. +