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: |