mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
merge: separate worker functions for batch remove and batch get
The old code had one function that could do 2 different things. First, is was called a bunch of times to do one thing. Next, it was called a bunch of times to do the other thing. That gave unnecessary complexity and a dispatch overhead. Having separate functions is "obviously" better than having a function that can do two things, depending on its parameters. It also prepares the code for the next refactorings.
This commit is contained in:
parent
473137c772
commit
e967712b1f
@ -577,23 +577,19 @@ actionpriority = dict((m, p) for p, m in enumerate(
|
||||
def actionkey(a):
|
||||
return actionpriority[a[1]], a
|
||||
|
||||
def getremove(repo, mctx, overwrite, args):
|
||||
"""apply usually-non-interactive updates to the working directory
|
||||
|
||||
mctx is the context to be merged into the working copy
|
||||
def batchremove(repo, actions):
|
||||
"""apply removes to the working directory
|
||||
|
||||
yields tuples for progress updates
|
||||
"""
|
||||
verbose = repo.ui.verbose
|
||||
unlink = util.unlinkpath
|
||||
wjoin = repo.wjoin
|
||||
fctx = mctx.filectx
|
||||
wwrite = repo.wwrite
|
||||
audit = repo.wopener.audit
|
||||
i = 0
|
||||
for f, m, args, msg in args:
|
||||
repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
|
||||
if m == 'r':
|
||||
for f, m, args, msg in actions:
|
||||
repo.ui.debug(" %s: %s -> r\n" % (f, msg))
|
||||
if True:
|
||||
if verbose:
|
||||
repo.ui.note(_("removing %s\n") % f)
|
||||
audit(f)
|
||||
@ -602,7 +598,27 @@ def getremove(repo, mctx, overwrite, args):
|
||||
except OSError, inst:
|
||||
repo.ui.warn(_("update failed to remove %s: %s!\n") %
|
||||
(f, inst.strerror))
|
||||
else:
|
||||
if i == 100:
|
||||
yield i, f
|
||||
i = 0
|
||||
i += 1
|
||||
if i > 0:
|
||||
yield i, f
|
||||
|
||||
def batchget(repo, mctx, actions):
|
||||
"""apply gets to the working directory
|
||||
|
||||
mctx is the context to get from
|
||||
|
||||
yields tuples for progress updates
|
||||
"""
|
||||
verbose = repo.ui.verbose
|
||||
fctx = mctx.filectx
|
||||
wwrite = repo.wwrite
|
||||
i = 0
|
||||
for f, m, args, msg in actions:
|
||||
repo.ui.debug(" %s: %s -> g\n" % (f, msg))
|
||||
if True:
|
||||
if verbose:
|
||||
repo.ui.note(_("getting %s\n") % f)
|
||||
wwrite(f, fctx(f).data(), args[0])
|
||||
@ -674,15 +690,13 @@ def applyupdates(repo, actions, wctx, mctx, overwrite):
|
||||
|
||||
# remove in parallel (must come first)
|
||||
z = 0
|
||||
prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite),
|
||||
removeactions)
|
||||
prog = worker.worker(repo.ui, 0.001, batchremove, (repo,), removeactions)
|
||||
for i, item in prog:
|
||||
z += i
|
||||
progress(_updating, z, item=item, total=numupdates, unit=_files)
|
||||
|
||||
# get in parallel
|
||||
prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite),
|
||||
updateactions)
|
||||
prog = worker.worker(repo.ui, 0.001, batchget, (repo, mctx), updateactions)
|
||||
for i, item in prog:
|
||||
z += i
|
||||
progress(_updating, z, item=item, total=numupdates, unit=_files)
|
||||
|
Loading…
Reference in New Issue
Block a user