diff -r 5a931246afc5 -r a67e866f46f9 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Thu Jun 02 19:43:17 2011 +0200 +++ b/mercurial/cmdutil.py Thu Jun 02 00:33:33 2011 +0200 @@ -281,9 +281,11 @@ if not os.path.isdir(targetdir): os.makedirs(targetdir) util.copyfile(src, target) + srcexists = True except IOError, inst: if inst.errno == errno.ENOENT: ui.warn(_('%s: deleted in working copy\n') % relsrc) + srcexists = False else: ui.warn(_('%s: cannot copy - %s\n') % (relsrc, inst.strerror)) @@ -301,7 +303,9 @@ scmutil.dirstatecopy(ui, repo, wctx, abssrc, abstarget, dryrun=dryrun, cwd=cwd) if rename and not dryrun: - wctx.remove([abssrc], not after) + if not after and srcexists: + util.unlinkpath(repo.wjoin(abssrc)) + wctx.forget([abssrc]) # pat: ossep # dest ossep