# HG changeset patch # User Matt Mackall # Date 1197014470 21600 # Node ID e9bae5c80ab47449bac62ac7c8f7dffd6a737587 # Parent 447ea621e50e3eff380e863cf7f8ff71b2b9318e copy: minor cleanups - add after and dryrun variables - add some comments diff -r 447ea621e50e -r e9bae5c80ab4 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Thu Dec 06 15:15:47 2007 -0600 +++ b/mercurial/cmdutil.py Fri Dec 07 02:01:10 2007 -0600 @@ -294,6 +294,8 @@ cwd = repo.getcwd() copied = [] targets = {} + after = opts.get("after") + dryrun = opts.get("dry_run") def walkpat(pat): srcs = [] @@ -317,35 +319,40 @@ def copyfile(abssrc, relsrc, otarget, exact): abstarget = util.canonpath(repo.root, cwd, otarget) reltarget = repo.pathto(abstarget, cwd) - prevsrc = targets.get(abstarget) + target = repo.wjoin(abstarget) src = repo.wjoin(abssrc) - target = repo.wjoin(abstarget) + + # check for collisions + prevsrc = targets.get(abstarget) if prevsrc is not None: ui.warn(_('%s: not overwriting - %s collides with %s\n') % (reltarget, repo.pathto(abssrc, cwd), repo.pathto(prevsrc, cwd))) return - if (not opts['after'] and os.path.exists(target) or - opts['after'] and repo.dirstate[abstarget] in 'mn'): + + # check for overwrites + if (not after and os.path.exists(target) or + after and repo.dirstate[abstarget] in 'mn'): if not opts['force']: ui.warn(_('%s: not overwriting - file exists\n') % reltarget) return - if not opts['after'] and not opts.get('dry_run'): + if not after and not dryrun: os.unlink(target) - if opts['after']: + + if after: if not os.path.exists(target): return else: targetdir = os.path.dirname(target) or '.' - if not os.path.isdir(targetdir) and not opts.get('dry_run'): + if not os.path.isdir(targetdir) and not dryrun: os.makedirs(targetdir) try: restore = repo.dirstate[abstarget] == 'r' - if restore and not opts.get('dry_run'): + if restore and not dryrun: repo.undelete([abstarget]) try: - if not opts.get('dry_run'): + if not dryrun: util.copyfile(src, target) restore = False finally: @@ -358,13 +365,16 @@ ui.warn(_('%s: cannot copy - %s\n') % (relsrc, inst.strerror)) return True # report a failure + if ui.verbose or not exact: ui.status(_('copying %s to %s\n') % (relsrc, reltarget)) targets[abstarget] = abssrc + + # fix up dirstate origsrc = repo.dirstate.copied(abssrc) or abssrc if abstarget == origsrc: # copying back a copy? if repo.dirstate[abstarget] not in 'mn': - if not opts.get('dry_run'): + if not dryrun: repo.add([abstarget]) else: if repo.dirstate[origsrc] == 'a': @@ -372,9 +382,9 @@ ui.warn(_("%s has not been committed yet, so no copy " "data will be stored for %s.\n") % (repo.pathto(origsrc, cwd), reltarget)) - if abstarget not in repo.dirstate and not opts.get('dry_run'): + if abstarget not in repo.dirstate and not dryrun: repo.add([abstarget]) - elif not opts.get('dry_run'): + elif not dryrun: repo.copy(origsrc, abstarget) copied.append((abssrc, relsrc, exact)) @@ -458,10 +468,10 @@ 'existing directory')) if dest.endswith(os.sep) or os.altsep and dest.endswith(os.altsep): raise util.Abort(_('destination %s is not a directory') % dest) - if opts['after']: + + tfn = targetpathfn + if after: tfn = targetpathafterfn - else: - tfn = targetpathfn copylist = [] for pat in pats: srcs = walkpat(pat)