mercurial/commands.py
changeset 4523 b9d311928caf
parent 4516 96d8a56d4ef9
child 4524 6c58139f4eaa
equal deleted inserted replaced
4522:591322269fed 4523:b9d311928caf
   496             return abs
   496             return abs
   497 
   497 
   498     # origsrc: hgsep
   498     # origsrc: hgsep
   499     # abssrc: hgsep
   499     # abssrc: hgsep
   500     # relsrc: ossep
   500     # relsrc: ossep
   501     # target: ossep
   501     # otarget: ossep
   502     def copy(origsrc, abssrc, relsrc, target, exact):
   502     def copy(origsrc, abssrc, relsrc, otarget, exact):
   503         abstarget = util.canonpath(repo.root, cwd, target)
   503         abstarget = util.canonpath(repo.root, cwd, otarget)
   504         reltarget = util.pathto(repo.root, cwd, abstarget)
   504         reltarget = util.pathto(repo.root, cwd, abstarget)
   505         prevsrc = targets.get(abstarget)
   505         prevsrc = targets.get(abstarget)
       
   506         src = repo.wjoin(abssrc)
       
   507         target = repo.wjoin(abstarget)
   506         if prevsrc is not None:
   508         if prevsrc is not None:
   507             ui.warn(_('%s: not overwriting - %s collides with %s\n') %
   509             ui.warn(_('%s: not overwriting - %s collides with %s\n') %
   508                     (reltarget, util.localpath(abssrc),
   510                     (reltarget, util.localpath(abssrc),
   509                      util.localpath(prevsrc)))
   511                      util.localpath(prevsrc)))
   510             return
   512             return
   511         if (not opts['after'] and os.path.exists(reltarget) or
   513         if (not opts['after'] and os.path.exists(target) or
   512             opts['after'] and repo.dirstate.state(abstarget) not in '?ar'):
   514             opts['after'] and repo.dirstate.state(abstarget) not in '?ar'):
   513             if not opts['force']:
   515             if not opts['force']:
   514                 ui.warn(_('%s: not overwriting - file exists\n') %
   516                 ui.warn(_('%s: not overwriting - file exists\n') %
   515                         reltarget)
   517                         reltarget)
   516                 return
   518                 return
   517             if not opts['after'] and not opts.get('dry_run'):
   519             if not opts['after'] and not opts.get('dry_run'):
   518                 os.unlink(reltarget)
   520                 os.unlink(target)
   519         if opts['after']:
   521         if opts['after']:
   520             if not os.path.exists(reltarget):
   522             if not os.path.exists(target):
   521                 return
   523                 return
   522         else:
   524         else:
   523             targetdir = os.path.dirname(reltarget) or '.'
   525             targetdir = os.path.dirname(target) or '.'
   524             if not os.path.isdir(targetdir) and not opts.get('dry_run'):
   526             if not os.path.isdir(targetdir) and not opts.get('dry_run'):
   525                 os.makedirs(targetdir)
   527                 os.makedirs(targetdir)
   526             try:
   528             try:
   527                 restore = repo.dirstate.state(abstarget) == 'r'
   529                 restore = repo.dirstate.state(abstarget) == 'r'
   528                 if restore and not opts.get('dry_run'):
   530                 if restore and not opts.get('dry_run'):
   529                     repo.undelete([abstarget], wlock)
   531                     repo.undelete([abstarget], wlock)
   530                 try:
   532                 try:
   531                     if not opts.get('dry_run'):
   533                     if not opts.get('dry_run'):
   532                         util.copyfile(relsrc, reltarget)
   534                         util.copyfile(src, target)
   533                     restore = False
   535                     restore = False
   534                 finally:
   536                 finally:
   535                     if restore:
   537                     if restore:
   536                         repo.remove([abstarget], wlock=wlock)
   538                         repo.remove([abstarget], wlock=wlock)
   537             except IOError, inst:
   539             except IOError, inst: