diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -2999,8 +2999,6 @@ ) for abs, (rel, exact) in sorted(names.items()): - # target file to be touch on disk (relative to cwd) - target = repo.wjoin(abs) # search the entry in the dispatch table. # if the file is in any of these sets, it was touched in the working # directory parent and we are sure it needs to be reverted. @@ -3015,14 +3013,15 @@ if dobackup == backupinteractive: tobackup.add(abs) elif (backup <= dobackup or wctx[abs].cmp(ctx[abs])): - bakname = scmutil.origpath(ui, repo, rel) + bakname = scmutil.backuppath(ui, repo, abs) ui.note(_('saving current version of %s as %s\n') % (rel, bakname)) if not opts.get('dry_run'): + target = repo.wjoin(abs) if interactive: - util.copyfile(target, bakname) + util.copyfile(target, repo.wjoin(bakname)) else: - util.rename(target, bakname) + util.rename(target, repo.wjoin(bakname)) if opts.get('dry_run'): if ui.verbose or not exact: ui.status(msg % rel) @@ -3165,8 +3164,8 @@ # Create a backup file only if this hunk should be backed up if c.header.filename() in tobackup: target = repo.wjoin(abs) - bakname = scmutil.origpath(repo.ui, repo, m.rel(abs)) - util.copyfile(target, bakname) + bakname = scmutil.backuppath(repo.ui, repo, abs) + util.copyfile(target, repo.wjoin(bakname)) tobackup.remove(abs) c.write(fp) dopatch = fp.tell()