diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -1135,6 +1135,7 @@ dryrun = opts.get("dry_run") wctx = repo[None] + uipathfn = scmutil.getuipathfn(repo, legacyrelativevalue=True) def walkpat(pat): srcs = [] if after: @@ -1144,7 +1145,7 @@ m = scmutil.match(wctx, [pat], opts, globbed=True) for abs in wctx.walk(m): state = repo.dirstate[abs] - rel = m.rel(abs) + rel = uipathfn(abs) exact = m.exact(abs) if state in badstates: if exact and state == '?': diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -51,8 +51,10 @@ ) if pycompat.iswindows: + from . import windows as platform from . import scmwindows as scmplatform else: + from . import posix as platform from . import scmposix as scmplatform parsers = policy.importmod(r'parsers') @@ -757,7 +759,7 @@ pathto = repo.pathto return lambda f: pathto(f, cwd) else: - return lambda f: f + return platform.localpath def subdiruipathfn(subpath, uipathfn): '''Create a new uipathfn that treats the file as relative to subpath.''' diff --git a/tests/test-copy.t b/tests/test-copy.t --- a/tests/test-copy.t +++ b/tests/test-copy.t @@ -118,6 +118,23 @@ [255] $ hg st -A ? foo +respects ui.relative-paths + $ mkdir dir + $ cd dir + $ hg mv ../foo ../bar + ../foo: not copying - file is not managed + abort: no files to copy + [255] + $ hg mv ../foo ../bar --config ui.relative-paths=yes + ../foo: not copying - file is not managed + abort: no files to copy + [255] + $ hg mv ../foo ../bar --config ui.relative-paths=no + foo: not copying - file is not managed + abort: no files to copy + [255] + $ cd .. + $ rmdir dir $ hg add foo dry-run; print a warning that this is not a real copy; foo is added $ hg mv --dry-run foo bar