# HG changeset patch # User Idan Kamara # Date 1302547462 -10800 # Node ID e880433a2e00dcb16aacc10c6beb84cbfa47c672 # Parent a281981e2033ae36780890b5bb9aa8cd3bb9f986 localrepo: don't add deleted files to list of modified/added files (issue2761) If a file is deleted (rm, not 'hg rm') from the working dir an attempt to run 'hg diff -r X', with the file being present in X will cause an abort. We didn't check if the file has been deleted from the working dir and later on tried to open it to compare with the one from X, causing the abort. This fix adds that check. Consequently, no output will be returned. diff -r a281981e2033 -r e880433a2e00 mercurial/localrepo.py --- a/mercurial/localrepo.py Mon Apr 04 22:51:10 2011 +0300 +++ b/mercurial/localrepo.py Mon Apr 11 21:44:22 2011 +0300 @@ -1233,14 +1233,15 @@ modified, added, clean = [], [], [] for fn in mf2: if fn in mf1: - if (mf1.flags(fn) != mf2.flags(fn) or - (mf1[fn] != mf2[fn] and - (mf2[fn] or ctx1[fn].cmp(ctx2[fn])))): + if (fn not in deleted and + (mf1.flags(fn) != mf2.flags(fn) or + (mf1[fn] != mf2[fn] and + (mf2[fn] or ctx1[fn].cmp(ctx2[fn]))))): modified.append(fn) elif listclean: clean.append(fn) del mf1[fn] - else: + elif fn not in deleted: added.append(fn) removed = mf1.keys() diff -r a281981e2033 -r e880433a2e00 tests/test-diff-issue2761.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-diff-issue2761.t Mon Apr 11 21:44:22 2011 +0300 @@ -0,0 +1,23 @@ +Test issue2761 + + $ hg init + + $ touch to-be-deleted + $ hg add + adding to-be-deleted + $ hg ci -m first + $ echo a > to-be-deleted + $ hg ci -m second + $ rm to-be-deleted + $ hg diff -r 0 + +Same issue, different code path + + $ hg up -C + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ touch doesnt-exist-in-1 + $ hg add + adding doesnt-exist-in-1 + $ hg ci -m third + $ rm doesnt-exist-in-1 + $ hg diff -r 1 diff -r a281981e2033 -r e880433a2e00 tests/test-mq-qdiff.t --- a/tests/test-mq-qdiff.t Mon Apr 04 22:51:10 2011 +0300 +++ b/tests/test-mq-qdiff.t Mon Apr 11 21:44:22 2011 +0300 @@ -163,4 +163,13 @@ $ hg qdiff --stat lines | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) + $ hg qrefresh +qdiff when file deleted (but not removed) in working dir: + + $ hg qnew deleted-file + $ echo a > newfile + $ hg add newfile + $ hg qrefresh + $ rm newfile + $ hg qdiff