575 ['r', 'f', 'g', 'a', 'k', 'm', 'dm', 'dg', 'dr', 'cd', 'dc', 'rd', 'e'])) |
575 ['r', 'f', 'g', 'a', 'k', 'm', 'dm', 'dg', 'dr', 'cd', 'dc', 'rd', 'e'])) |
576 |
576 |
577 def actionkey(a): |
577 def actionkey(a): |
578 return actionpriority[a[1]], a |
578 return actionpriority[a[1]], a |
579 |
579 |
580 def getremove(repo, mctx, overwrite, args): |
580 def batchremove(repo, actions): |
581 """apply usually-non-interactive updates to the working directory |
581 """apply removes to the working directory |
582 |
|
583 mctx is the context to be merged into the working copy |
|
584 |
582 |
585 yields tuples for progress updates |
583 yields tuples for progress updates |
586 """ |
584 """ |
587 verbose = repo.ui.verbose |
585 verbose = repo.ui.verbose |
588 unlink = util.unlinkpath |
586 unlink = util.unlinkpath |
589 wjoin = repo.wjoin |
587 wjoin = repo.wjoin |
590 fctx = mctx.filectx |
|
591 wwrite = repo.wwrite |
|
592 audit = repo.wopener.audit |
588 audit = repo.wopener.audit |
593 i = 0 |
589 i = 0 |
594 for f, m, args, msg in args: |
590 for f, m, args, msg in actions: |
595 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m)) |
591 repo.ui.debug(" %s: %s -> r\n" % (f, msg)) |
596 if m == 'r': |
592 if True: |
597 if verbose: |
593 if verbose: |
598 repo.ui.note(_("removing %s\n") % f) |
594 repo.ui.note(_("removing %s\n") % f) |
599 audit(f) |
595 audit(f) |
600 try: |
596 try: |
601 unlink(wjoin(f), ignoremissing=True) |
597 unlink(wjoin(f), ignoremissing=True) |
602 except OSError, inst: |
598 except OSError, inst: |
603 repo.ui.warn(_("update failed to remove %s: %s!\n") % |
599 repo.ui.warn(_("update failed to remove %s: %s!\n") % |
604 (f, inst.strerror)) |
600 (f, inst.strerror)) |
605 else: |
601 if i == 100: |
|
602 yield i, f |
|
603 i = 0 |
|
604 i += 1 |
|
605 if i > 0: |
|
606 yield i, f |
|
607 |
|
608 def batchget(repo, mctx, actions): |
|
609 """apply gets to the working directory |
|
610 |
|
611 mctx is the context to get from |
|
612 |
|
613 yields tuples for progress updates |
|
614 """ |
|
615 verbose = repo.ui.verbose |
|
616 fctx = mctx.filectx |
|
617 wwrite = repo.wwrite |
|
618 i = 0 |
|
619 for f, m, args, msg in actions: |
|
620 repo.ui.debug(" %s: %s -> g\n" % (f, msg)) |
|
621 if True: |
606 if verbose: |
622 if verbose: |
607 repo.ui.note(_("getting %s\n") % f) |
623 repo.ui.note(_("getting %s\n") % f) |
608 wwrite(f, fctx(f).data(), args[0]) |
624 wwrite(f, fctx(f).data(), args[0]) |
609 if i == 100: |
625 if i == 100: |
610 yield i, f |
626 yield i, f |
672 if hgsub and hgsub[0] == 'r': |
688 if hgsub and hgsub[0] == 'r': |
673 subrepo.submerge(repo, wctx, mctx, wctx, overwrite) |
689 subrepo.submerge(repo, wctx, mctx, wctx, overwrite) |
674 |
690 |
675 # remove in parallel (must come first) |
691 # remove in parallel (must come first) |
676 z = 0 |
692 z = 0 |
677 prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite), |
693 prog = worker.worker(repo.ui, 0.001, batchremove, (repo,), removeactions) |
678 removeactions) |
|
679 for i, item in prog: |
694 for i, item in prog: |
680 z += i |
695 z += i |
681 progress(_updating, z, item=item, total=numupdates, unit=_files) |
696 progress(_updating, z, item=item, total=numupdates, unit=_files) |
682 |
697 |
683 # get in parallel |
698 # get in parallel |
684 prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite), |
699 prog = worker.worker(repo.ui, 0.001, batchget, (repo, mctx), updateactions) |
685 updateactions) |
|
686 for i, item in prog: |
700 for i, item in prog: |
687 z += i |
701 z += i |
688 progress(_updating, z, item=item, total=numupdates, unit=_files) |
702 progress(_updating, z, item=item, total=numupdates, unit=_files) |
689 |
703 |
690 if hgsub and hgsub[0] == 'g': |
704 if hgsub and hgsub[0] == 'g': |