# HG changeset patch # User Alexis S. L. Carvalho # Date 1164058362 7200 # Node ID 4bafcf7aeb325f77ab0c61e43c8c1110ee7ee5cd # Parent a9090b264250819419417c2af023e3a444ee5a49 qrefresh: fix handling of added files (including copies) in the slow path diff -r a9090b264250 -r 4bafcf7aeb32 hgext/mq.py --- a/hgext/mq.py Mon Nov 20 19:32:41 2006 -0200 +++ b/hgext/mq.py Mon Nov 20 19:32:42 2006 -0200 @@ -915,8 +915,11 @@ util.set_exec(repo.wjoin(f), mmap.execf(f)) repo.dirstate.update(m + r, 'n') for f in a: - try: os.unlink(repo.wjoin(f)) - except: raise + try: + os.unlink(repo.wjoin(f)) + except OSError, e: + if e.errno != errno.ENOENT: + raise try: os.removedirs(os.path.dirname(repo.wjoin(f))) except: pass if a: @@ -1061,6 +1064,19 @@ else: self.printdiff(repo, patchparent, fp=patchf) patchf.close() + added = repo.status()[1] + for a in added: + f = repo.wjoin(a) + try: + os.unlink(f) + except OSError, e: + if e.errno != errno.ENOENT: + raise + try: os.removedirs(os.path.dirname(f)) + except: pass + # forget the file copies in the dirstate + # push should readd the files later on + repo.dirstate.forget(added) self.pop(repo, force=True, wlock=wlock) self.push(repo, force=True, wlock=wlock) diff -r a9090b264250 -r 4bafcf7aeb32 tests/test-mq --- a/tests/test-mq Mon Nov 20 19:32:41 2006 -0200 +++ b/tests/test-mq Mon Nov 20 19:32:42 2006 -0200 @@ -207,3 +207,34 @@ git = False EOF hg qdiff --git + +cd .. +hg init slow +cd slow +hg qinit +echo foo > foo +hg add foo +hg ci -m 'add foo' +hg qnew bar +echo bar > bar +hg add bar +hg mv foo baz +hg qrefresh --git +hg up -C 0 +echo >> foo +hg ci -m 'change foo' +hg up -C 1 +hg qrefresh --git 2>&1 | grep -v 'saving bundle' +cat .hg/patches/bar +hg log -vC --template '{rev} {file_copies%filecopy}\n' -r . + +echo +hg up -C 1 +echo >> foo +hg ci -m 'change foo again' +hg up -C 2 +hg mv bar quux +hg mv baz bleh +hg qrefresh --git 2>&1 | grep -v 'saving bundle' +cat .hg/patches/bar +hg log -vC --template '{rev} {file_copies%filecopy}\n' -r . diff -r a9090b264250 -r 4bafcf7aeb32 tests/test-mq.out --- a/tests/test-mq.out Mon Nov 20 19:32:41 2006 -0200 +++ b/tests/test-mq.out Mon Nov 20 19:32:42 2006 -0200 @@ -201,3 +201,46 @@ diff --git a/new b/copy copy from new copy to copy +1 files updated, 0 files merged, 2 files removed, 0 files unresolved +2 files updated, 0 files merged, 1 files removed, 0 files unresolved +adding branch +adding changesets +adding manifests +adding file changes +added 1 changesets with 1 changes to 1 files +(run 'hg update' to get a working copy) +Patch queue now empty +applying bar +Now at: bar +diff --git a/bar b/bar +new file mode 100644 +--- /dev/null ++++ b/bar +@@ -0,0 +1,1 @@ ++bar +diff --git a/foo b/baz +rename from foo +rename to baz +2 baz (foo) + +1 files updated, 0 files merged, 2 files removed, 0 files unresolved +2 files updated, 0 files merged, 1 files removed, 0 files unresolved +adding branch +adding changesets +adding manifests +adding file changes +added 1 changesets with 1 changes to 1 files +(run 'hg update' to get a working copy) +Patch queue now empty +applying bar +Now at: bar +diff --git a/foo b/bleh +rename from foo +rename to bleh +diff --git a/quux b/quux +new file mode 100644 +--- /dev/null ++++ b/quux +@@ -0,0 +1,1 @@ ++bar +3 bleh (foo)