# HG changeset patch # User Peter Arrenbrecht # Date 2010-05-26 14:16:47 # Node ID 0d09f22448053a66c57556f2f9c246639f7385d8 # Parent e7adcef1504b632e0193f36fa3e48811a6767c50 rename: make --after work if source is already in R state I routinely want to use `hg addrem` and then fix up missed renames manually using `hg mv -A`. This patch allows me to record such renames from a source in state R to a target in state A. diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -351,12 +351,13 @@ def copy(ui, repo, pats, opts, rename=Fa def walkpat(pat): srcs = [] + badstates = after and '?' or '?r' m = match(repo, [pat], opts, globbed=True) for abs in repo.walk(m): state = repo.dirstate[abs] rel = m.rel(abs) exact = m.exact(abs) - if state in '?r': + if state in badstates: if exact and state == '?': ui.warn(_('%s: not copying - file is not managed\n') % rel) if exact and state == 'r': diff --git a/tests/test-rename b/tests/test-rename --- a/tests/test-rename +++ b/tests/test-rename @@ -23,6 +23,14 @@ hg status -C hg update -C rm d2/c +echo '# rename --after a single file when src and tgt already tracked' +mv d1/d11/a1 d2/c +hg addrem +hg rename --after d1/d11/a1 d2/c +hg status -C +hg update -C +rm d2/c + echo "# rename --after a single file to a nonexistant target filename" hg rename --after d1/a dummy diff --git a/tests/test-rename.out b/tests/test-rename.out --- a/tests/test-rename.out +++ b/tests/test-rename.out @@ -8,6 +8,13 @@ A d2/c d1/d11/a1 R d1/d11/a1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved +# rename --after a single file when src and tgt already tracked +removing d1/d11/a1 +adding d2/c +A d2/c + d1/d11/a1 +R d1/d11/a1 +1 files updated, 0 files merged, 0 files removed, 0 files unresolved # rename --after a single file to a nonexistant target filename d1/a: not recording move - dummy does not exist # move a single file to an existing directory