309 '(%d%% similar)\n') % |
309 '(%d%% similar)\n') % |
310 (m.rel(old), m.rel(new), score * 100)) |
310 (m.rel(old), m.rel(new), score * 100)) |
311 copies[new] = old |
311 copies[new] = old |
312 |
312 |
313 if not dry_run: |
313 if not dry_run: |
|
314 wctx = repo[None] |
314 wlock = repo.wlock() |
315 wlock = repo.wlock() |
315 try: |
316 try: |
316 repo.remove(deleted) |
317 wctx.remove(deleted) |
317 repo.add(unknown) |
318 wctx.add(unknown) |
318 for new, old in copies.iteritems(): |
319 for new, old in copies.iteritems(): |
319 repo.copy(old, new) |
320 wctx.copy(old, new) |
320 finally: |
321 finally: |
321 wlock.release() |
322 wlock.release() |
322 |
323 |
323 def copy(ui, repo, pats, opts, rename=False): |
324 def copy(ui, repo, pats, opts, rename=False): |
324 # called with the repo lock held |
325 # called with the repo lock held |
327 # ossep => pathname that uses os.sep to separate directories |
328 # ossep => pathname that uses os.sep to separate directories |
328 cwd = repo.getcwd() |
329 cwd = repo.getcwd() |
329 targets = {} |
330 targets = {} |
330 after = opts.get("after") |
331 after = opts.get("after") |
331 dryrun = opts.get("dry_run") |
332 dryrun = opts.get("dry_run") |
|
333 wctx = repo[None] |
332 |
334 |
333 def walkpat(pat): |
335 def walkpat(pat): |
334 srcs = [] |
336 srcs = [] |
335 badstates = after and '?' or '?r' |
337 badstates = after and '?' or '?r' |
336 m = match(repo, [pat], opts, globbed=True) |
338 m = match(repo, [pat], opts, globbed=True) |
419 if not ui.quiet: |
421 if not ui.quiet: |
420 ui.warn(_("%s has not been committed yet, so no copy " |
422 ui.warn(_("%s has not been committed yet, so no copy " |
421 "data will be stored for %s.\n") |
423 "data will be stored for %s.\n") |
422 % (repo.pathto(origsrc, cwd), reltarget)) |
424 % (repo.pathto(origsrc, cwd), reltarget)) |
423 if repo.dirstate[abstarget] in '?r' and not dryrun: |
425 if repo.dirstate[abstarget] in '?r' and not dryrun: |
424 repo.add([abstarget]) |
426 wctx.add([abstarget]) |
425 elif not dryrun: |
427 elif not dryrun: |
426 repo.copy(origsrc, abstarget) |
428 wctx.copy(origsrc, abstarget) |
427 |
429 |
428 if rename and not dryrun: |
430 if rename and not dryrun: |
429 repo.remove([abssrc], not after) |
431 wctx.remove([abssrc], not after) |
430 |
432 |
431 # pat: ossep |
433 # pat: ossep |
432 # dest ossep |
434 # dest ossep |
433 # srcs: list of (hgsep, hgsep, ossep, bool) |
435 # srcs: list of (hgsep, hgsep, ossep, bool) |
434 # return: function that takes hgsep and returns ossep |
436 # return: function that takes hgsep and returns ossep |