Mercurial > hg-stable
changeset 3699:4bafcf7aeb32
qrefresh: fix handling of added files (including copies) in the slow path
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Mon, 20 Nov 2006 19:32:42 -0200 |
parents | a9090b264250 |
children | 4c158de5f245 |
files | hgext/mq.py tests/test-mq tests/test-mq.out |
diffstat | 3 files changed, 92 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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 .
--- 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)