1053 opts['after'] and repo.dirstate.state(abstarget) not in '?r'): |
1053 opts['after'] and repo.dirstate.state(abstarget) not in '?r'): |
1054 if not opts['force']: |
1054 if not opts['force']: |
1055 ui.warn(_('%s: not overwriting - file exists\n') % |
1055 ui.warn(_('%s: not overwriting - file exists\n') % |
1056 reltarget) |
1056 reltarget) |
1057 return |
1057 return |
1058 if not opts['after']: |
1058 if not opts['after'] and not opts['dry_run']: |
1059 os.unlink(reltarget) |
1059 os.unlink(reltarget) |
1060 if opts['after']: |
1060 if opts['after']: |
1061 if not os.path.exists(reltarget): |
1061 if not os.path.exists(reltarget): |
1062 return |
1062 return |
1063 else: |
1063 else: |
1064 targetdir = os.path.dirname(reltarget) or '.' |
1064 targetdir = os.path.dirname(reltarget) or '.' |
1065 if not os.path.isdir(targetdir): |
1065 if not os.path.isdir(targetdir) and not opts['dry_run']: |
1066 os.makedirs(targetdir) |
1066 os.makedirs(targetdir) |
1067 try: |
1067 try: |
1068 restore = repo.dirstate.state(abstarget) == 'r' |
1068 restore = repo.dirstate.state(abstarget) == 'r' |
1069 if restore: |
1069 if restore and not dry_run: |
1070 repo.undelete([abstarget], wlock) |
1070 repo.undelete([abstarget], wlock) |
1071 try: |
1071 try: |
1072 shutil.copyfile(relsrc, reltarget) |
1072 if not opts['dry_run']: |
1073 shutil.copymode(relsrc, reltarget) |
1073 shutil.copyfile(relsrc, reltarget) |
|
1074 shutil.copymode(relsrc, reltarget) |
1074 restore = False |
1075 restore = False |
1075 finally: |
1076 finally: |
1076 if restore: |
1077 if restore: |
1077 repo.remove([abstarget], wlock) |
1078 repo.remove([abstarget], wlock) |
1078 except shutil.Error, inst: |
1079 except shutil.Error, inst: |
1086 errors += 1 |
1087 errors += 1 |
1087 return |
1088 return |
1088 if ui.verbose or not exact: |
1089 if ui.verbose or not exact: |
1089 ui.status(_('copying %s to %s\n') % (relsrc, reltarget)) |
1090 ui.status(_('copying %s to %s\n') % (relsrc, reltarget)) |
1090 targets[abstarget] = abssrc |
1091 targets[abstarget] = abssrc |
1091 if abstarget != origsrc: |
1092 if abstarget != origsrc and not opts['dry_run']: |
1092 repo.copy(origsrc, abstarget, wlock) |
1093 repo.copy(origsrc, abstarget, wlock) |
1093 copied.append((abssrc, relsrc, exact)) |
1094 copied.append((abssrc, relsrc, exact)) |
1094 |
1095 |
1095 def targetpathfn(pat, dest, srcs): |
1096 def targetpathfn(pat, dest, srcs): |
1096 if os.path.isdir(pat): |
1097 if os.path.isdir(pat): |
1170 continue |
1171 continue |
1171 copylist.append((tfn(pat, dest, srcs), srcs)) |
1172 copylist.append((tfn(pat, dest, srcs), srcs)) |
1172 if not copylist: |
1173 if not copylist: |
1173 raise util.Abort(_('no files to copy')) |
1174 raise util.Abort(_('no files to copy')) |
1174 |
1175 |
1175 if not opts.get('dry_run'): |
1176 for targetpath, srcs in copylist: |
1176 for targetpath, srcs in copylist: |
1177 for origsrc, abssrc, relsrc, exact in srcs: |
1177 for origsrc, abssrc, relsrc, exact in srcs: |
1178 copy(origsrc, abssrc, relsrc, targetpath(abssrc), exact) |
1178 copy(origsrc, abssrc, relsrc, targetpath(abssrc), exact) |
|
1179 |
1179 |
1180 if errors: |
1180 if errors: |
1181 ui.warn(_('(consider using --after)\n')) |
1181 ui.warn(_('(consider using --after)\n')) |
1182 return errors, copied |
1182 return errors, copied |
1183 |
1183 |
2307 names = [] |
2307 names = [] |
2308 for abs, rel, exact in copied: |
2308 for abs, rel, exact in copied: |
2309 if ui.verbose or not exact: |
2309 if ui.verbose or not exact: |
2310 ui.status(_('removing %s\n') % rel) |
2310 ui.status(_('removing %s\n') % rel) |
2311 names.append(abs) |
2311 names.append(abs) |
2312 repo.remove(names, True, wlock) |
2312 if not opts['dry_run']: |
|
2313 repo.remove(names, True, wlock) |
2313 return errs |
2314 return errs |
2314 |
2315 |
2315 def revert(ui, repo, *pats, **opts): |
2316 def revert(ui, repo, *pats, **opts): |
2316 """revert files or dirs to their states as of some revision |
2317 """revert files or dirs to their states as of some revision |
2317 |
2318 |
3064 (rename, |
3065 (rename, |
3065 [('A', 'after', None, _('record a rename that has already occurred')), |
3066 [('A', 'after', None, _('record a rename that has already occurred')), |
3066 ('f', 'force', None, |
3067 ('f', 'force', None, |
3067 _('forcibly copy over an existing managed file')), |
3068 _('forcibly copy over an existing managed file')), |
3068 ('I', 'include', [], _('include names matching the given patterns')), |
3069 ('I', 'include', [], _('include names matching the given patterns')), |
3069 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
3070 ('X', 'exclude', [], _('exclude names matching the given patterns')), |
|
3071 ('n', 'dry-run', None, _('print what would be done'))], |
3070 _('hg rename [OPTION]... SOURCE... DEST')), |
3072 _('hg rename [OPTION]... SOURCE... DEST')), |
3071 "^revert": |
3073 "^revert": |
3072 (revert, |
3074 (revert, |
3073 [('r', 'rev', '', _('revision to revert to')), |
3075 [('r', 'rev', '', _('revision to revert to')), |
3074 ('', 'no-backup', None, _('do not save backup copies of files')), |
3076 ('', 'no-backup', None, _('do not save backup copies of files')), |