Mercurial > public > mercurial-scm > hg
diff mercurial/commands.py @ 1747:91c56c427171
transitive copy/rename
Add support for transitive copy or rename operations, e.g.
hg rename a b
... (possibly edit b)
hg rename b c
hg commit ...
by actually renaming "b" as "c" while recording a copy of
"a" to "c" and a removal of "a".
author | Robin Farine <robin.farine@terminus.org> |
---|---|
date | Sat, 18 Feb 2006 07:37:59 -0800 |
parents | 813f9f5fe837 |
children | d457fec76ab0 f29857aaa053 |
line wrap: on
line diff
--- a/mercurial/commands.py Sat Feb 18 16:31:02 2006 +0100 +++ b/mercurial/commands.py Sat Feb 18 07:37:59 2006 -0800 @@ -818,14 +818,19 @@ reasons = {'?': _('is not managed'), 'a': _('has been marked for add'), 'r': _('has been marked for remove')} - reason = reasons.get(repo.dirstate.state(abs)) + state = repo.dirstate.state(abs) + reason = reasons.get(state) if reason: + if state == 'a': + origsrc = repo.dirstate.copied(abs) + if origsrc is not None: + return origsrc if exact: ui.warn(_('%s: not copying - file %s\n') % (rel, reason)) else: - return True - - def copy(abssrc, relsrc, target, exact): + return abs + + def copy(origsrc, abssrc, relsrc, target, exact): abstarget = util.canonpath(repo.root, cwd, target) reltarget = util.pathto(cwd, abstarget) prevsrc = targets.get(abstarget) @@ -864,7 +869,7 @@ if ui.verbose or not exact: ui.status(_('copying %s to %s\n') % (relsrc, reltarget)) targets[abstarget] = abssrc - repo.copy(abssrc, abstarget) + repo.copy(origsrc, abstarget) copied.append((abssrc, relsrc, exact)) def targetpathfn(pat, dest, srcs): @@ -938,8 +943,9 @@ for pat in pats: srcs = [] for tag, abssrc, relsrc, exact in walk(repo, [pat], opts): - if okaytocopy(abssrc, relsrc, exact): - srcs.append((abssrc, relsrc, exact)) + origsrc = okaytocopy(abssrc, relsrc, exact) + if origsrc: + srcs.append((origsrc, abssrc, relsrc, exact)) if not srcs: continue copylist.append((tfn(pat, dest, srcs), srcs)) @@ -947,8 +953,8 @@ raise util.Abort(_('no files to copy')) for targetpath, srcs in copylist: - for abssrc, relsrc, exact in srcs: - copy(abssrc, relsrc, targetpath(abssrc), exact) + for origsrc, abssrc, relsrc, exact in srcs: + copy(origsrc, abssrc, relsrc, targetpath(abssrc), exact) if errors: ui.warn(_('(consider using --after)\n'))