largefiles: introduce pulled() revset expression for use in --lfrev
This provides a general way to do what already can be done with
--all-largefiles and --cache-largefiles.
--- a/hgext/largefiles/__init__.py Mon Apr 15 01:57:16 2013 +0200
+++ b/hgext/largefiles/__init__.py Mon Apr 15 01:59:04 2013 +0200
@@ -52,10 +52,14 @@
If you want to pull largefiles you don't need for update yet, then
you can use pull with the `--lfrev` option or the :hg:`lfpull` command.
+If you know you are pulling from a non-default location and want do
+download all the largefiles that corresponds to the new changesets at
+the same time, then you can pull with `--lfrev "pulled()"`.
+
If you just want to ensure that you will have the largefiles needed to
merge or rebase with new heads that you are pulling, then you can pull
-with `--lfrev "head(0:)"` flag to pre-emptively download any largefiles
-that are in the heads after pulling. You can also pull with the
+with `--lfrev "head(pulled())"` flag to pre-emptively download any largefiles
+that are new in the heads you are pulling. You can also pull with the
`--cache-largefiles` flag to pre-emptively download any largefiles
that are new in the heads you are pulling.
--- a/hgext/largefiles/overrides.py Mon Apr 15 01:57:16 2013 +0200
+++ b/hgext/largefiles/overrides.py Mon Apr 15 01:59:04 2013 +0200
@@ -756,13 +756,43 @@
lfrevs = opts.get('lfrev', [])
if lfrevs and revspostpull > revsprepull:
numcached = 0
- for rev in scmutil.revrange(repo, lfrevs):
- ui.note(_('pulling largefiles for revision %s\n') % rev)
- (cached, missing) = lfcommands.cachelfiles(ui, repo, rev)
- numcached += len(cached)
+ repo.firstpulled = revsprepull # for pulled() revset expression
+ try:
+ for rev in scmutil.revrange(repo, lfrevs):
+ ui.note(_('pulling largefiles for revision %s\n') % rev)
+ (cached, missing) = lfcommands.cachelfiles(ui, repo, rev)
+ numcached += len(cached)
+ finally:
+ del repo.firstpulled
ui.status(_("%d largefiles cached\n") % numcached)
return result
+def pulledrevsetsymbol(repo, subset, x):
+ """``pulled()``
+ Changesets that just has been pulled.
+
+ Only available with largefiles from pull --lfrev expressions.
+
+ .. container:: verbose
+
+ Some examples:
+
+ - pull largefiles for all new changesets::
+
+ hg pull -lfrev "pulled()"
+
+ - pull largefiles for all new branch heads::
+
+ hg pull -lfrev "head(pulled()) and not closed()"
+
+ """
+
+ try:
+ firstpulled = repo.firstpulled
+ except AttributeError:
+ raise util.Abort(_("pulled() only available in --lfrev"))
+ return [r for r in subset if r >= firstpulled]
+
def overrideclone(orig, ui, source, dest=None, **opts):
d = dest
if d is None:
--- a/hgext/largefiles/uisetup.py Mon Apr 15 01:57:16 2013 +0200
+++ b/hgext/largefiles/uisetup.py Mon Apr 15 01:59:04 2013 +0200
@@ -9,7 +9,7 @@
'''setup for largefiles extension: uisetup'''
from mercurial import archival, cmdutil, commands, extensions, filemerge, hg, \
- httppeer, localrepo, merge, scmutil, sshpeer, wireproto
+ httppeer, localrepo, merge, scmutil, sshpeer, wireproto, revset
from mercurial.i18n import _
from mercurial.hgweb import hgweb_mod, webcommands
from mercurial.subrepo import hgsubrepo
@@ -85,6 +85,8 @@
('', 'lfrev', [],
_('download largefiles for these revisions'), _('REV'))]
entry[1].extend(pullopt)
+ revset.symbols['pulled'] = overrides.pulledrevsetsymbol
+
entry = extensions.wrapcommand(commands.table, 'clone',
overrides.overrideclone)
cloneopt = [('', 'all-largefiles', None,
--- a/tests/test-largefiles.t Mon Apr 15 01:57:16 2013 +0200
+++ b/tests/test-largefiles.t Mon Apr 15 01:59:04 2013 +0200
@@ -917,7 +917,7 @@
$ hg rollback
repository tip rolled back to revision 1 (undo pull)
- $ hg pull -v --lfrev 'heads(0:)'
+ $ hg pull -v --lfrev 'heads(pulled())+min(pulled())'
pulling from $TESTTMP/a (glob)
searching for changes
all local heads known remotely
@@ -932,6 +932,8 @@
found 971fb41e78fea4f8e0ba5244784239371cb00591 in store
found 0d6d75887db61b2c7e6c74b5dd8fc6ad50c0cc30 in store
found bb3151689acb10f0c3125c560d5e63df914bc1af in store
+ pulling largefiles for revision 2
+ found eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 in store
0 largefiles cached
lfpull