mercurial/commands.py
changeset 1514 faf46d810a85
parent 1513 5c3b93b244aa
child 1516 0b1b029b4de3
equal deleted inserted replaced
1513:5c3b93b244aa 1514:faf46d810a85
   788 
   788 
   789 def docopy(ui, repo, pats, opts):
   789 def docopy(ui, repo, pats, opts):
   790     cwd = repo.getcwd()
   790     cwd = repo.getcwd()
   791     errors = 0
   791     errors = 0
   792     copied = []
   792     copied = []
       
   793     targets = {}
   793 
   794 
   794     def okaytocopy(abs, rel, exact):
   795     def okaytocopy(abs, rel, exact):
   795         reasons = {'?': _('is not managed'),
   796         reasons = {'?': _('is not managed'),
   796                    'a': _('has been marked for add')}
   797                    'a': _('has been marked for add')}
   797         reason = reasons.get(repo.dirstate.state(abs))
   798         reason = reasons.get(repo.dirstate.state(abs))
   801             return True
   802             return True
   802 
   803 
   803     def copy(abssrc, relsrc, target, exact):
   804     def copy(abssrc, relsrc, target, exact):
   804         abstarget = util.canonpath(repo.root, cwd, target)
   805         abstarget = util.canonpath(repo.root, cwd, target)
   805         reltarget = util.pathto(cwd, abstarget)
   806         reltarget = util.pathto(cwd, abstarget)
   806         if os.path.exists(reltarget):
   807         prevsrc = targets.get(abstarget)
       
   808         if prevsrc is not None:
       
   809             ui.warn(_('%s: not overwriting - %s collides with %s\n') %
       
   810                     (reltarget, abssrc, prevsrc))
       
   811             return
       
   812         elif os.path.exists(reltarget):
   807             if opts['force']:
   813             if opts['force']:
   808                 os.unlink(reltarget)
   814                 os.unlink(reltarget)
   809             else:
   815             else:
   810                 ui.warn(_('%s: not overwriting - file exists\n') %
   816                 ui.warn(_('%s: not overwriting - file exists\n') %
   811                         reltarget)
   817                         reltarget)
   827                 else:
   833                 else:
   828                     ui.warn(_('%s: cannot copy - %s\n') %
   834                     ui.warn(_('%s: cannot copy - %s\n') %
   829                             (relsrc, inst.strerror))
   835                             (relsrc, inst.strerror))
   830                     errors += 1
   836                     errors += 1
   831                     return
   837                     return
       
   838         targets[abstarget] = abssrc
   832         repo.copy(abssrc, abstarget)
   839         repo.copy(abssrc, abstarget)
   833         copied.append((abssrc, relsrc, exact))
   840         copied.append((abssrc, relsrc, exact))
   834 
   841 
   835     pats = list(pats)
   842     pats = list(pats)
   836     if not pats:
   843     if not pats: