--- 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)