# HG changeset patch # User FUJIWARA Katsunori # Date 2014-04-15 15:37:24 # Node ID ca7a57464fb373b85f182984b5f79d1249855094 # Parent f0003f989e724af21ece0f7d79d633c5d9fef3c8 largefiles: use "summaryremotehooks" to avoid redundant outgoing check Before this patch, "hg summary --remote --large" invokes "findcommonoutgoing()" not only in "commands.summary()" but also in "overrides.overridesummary()" (via "getoutgoinglfiles()"). The latter is redundant. This patch uses "summaryremotehooks" to avoid redundant outgoing check. Newly introduced function "overrides.summaryremotehook()" is registered into "summaryremotehooks" to get the result of outgoing check in "commands.summary()". It invokes "lfutil.getlfilestoupload()" directly with the result of outgoing check to avoid redundant outgoing check in "getoutgoinglfiles()". diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -1022,6 +1022,30 @@ def overrideoutgoing(orig, ui, repo, des return result +def summaryremotehook(ui, repo, opts, changes): + largeopt = opts.get('large', False) + if changes is None: + if largeopt: + return (False, True) # only outgoing check is needed + else: + return (False, False) + elif largeopt: + url, branch, peer, outgoing = changes[1] + if peer is None: + # i18n: column positioning for "hg summary" + ui.status(_('largefiles: (no remote repo)\n')) + return + + toupload = set() + lfutil.getlfilestoupload(repo, outgoing.missing, + lambda fn, lfhash: toupload.add(fn)) + if not toupload: + # i18n: column positioning for "hg summary" + ui.status(_('largefiles: (no files to upload)\n')) + else: + # i18n: column positioning for "hg summary" + ui.status(_('largefiles: %d to upload\n') % len(toupload)) + def overridesummary(orig, ui, repo, *pats, **opts): try: repo.lfstatus = True @@ -1029,18 +1053,6 @@ def overridesummary(orig, ui, repo, *pat finally: repo.lfstatus = False - if opts.pop('large', None): - toupload = getoutgoinglfiles(ui, repo, None, **opts) - if toupload is None: - # i18n: column positioning for "hg summary" - ui.status(_('largefiles: (no remote repo)\n')) - elif not toupload: - # i18n: column positioning for "hg summary" - ui.status(_('largefiles: (no files to upload)\n')) - else: - # i18n: column positioning for "hg summary" - ui.status(_('largefiles: %d to upload\n') % len(toupload)) - def scmutiladdremove(orig, repo, pats=[], opts={}, dry_run=None, similarity=None): if not lfutil.islfilesrepo(repo): diff --git a/hgext/largefiles/uisetup.py b/hgext/largefiles/uisetup.py --- a/hgext/largefiles/uisetup.py +++ b/hgext/largefiles/uisetup.py @@ -73,6 +73,7 @@ def uisetup(ui): overrides.overridesummary) summaryopt = [('', 'large', None, _('display outgoing largefiles'))] entry[1].extend(summaryopt) + cmdutil.summaryremotehooks.add('largefiles', overrides.summaryremotehook) entry = extensions.wrapcommand(commands.table, 'update', overrides.overrideupdate) diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -2149,7 +2149,6 @@ check messages when there is no files to branch: default commit: (clean) update: (current) - searching for changes largefiles: (no files to upload) $ hg -R clone2 outgoing --large comparing with $TESTTMP/issue3651/src (glob) @@ -2172,7 +2171,6 @@ check messages when there are files to u branch: default commit: (clean) update: (current) - searching for changes largefiles: 1 to upload $ hg -R clone2 outgoing --large comparing with $TESTTMP/issue3651/src (glob)