# HG changeset patch # User Gregory Szorc # Date 1537482600 25200 # Node ID 823a580448d774c49d1de9f55370f619c03ffacf # Parent bcf72d7b1524d66aaae64b7d07a439fead348b73 largefiles: automatically load largefiles extension when required (BC) This is very similar to what we just did for LFS but for largefiles. See recent commit messages for the rationale here. Differential Revision: https://phab.mercurial-scm.org/D4713 diff -r bcf72d7b1524 -r 823a580448d7 hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py Thu Sep 20 15:18:13 2018 -0700 +++ b/hgext/largefiles/overrides.py Thu Sep 20 15:30:00 2018 -0700 @@ -889,11 +889,6 @@ if not repo: return result - # If largefiles is required for this repo, permanently enable it locally - if 'largefiles' in repo.requirements: - repo.vfs.append('hgrc', - util.tonativeeol('\n[extensions]\nlargefiles=\n')) - # Caching is implicitly limited to 'rev' option, since the dest repo was # truncated at that point. The user may expect a download count with # this option, so attempt whether or not this is a largefile repo. @@ -905,14 +900,6 @@ return result -def hgpostshare(orig, sourcerepo, destrepo, defaultpath=None): - orig(sourcerepo, destrepo, defaultpath=defaultpath) - - # If largefiles is required for this repo, permanently enable it locally - if 'largefiles' in destrepo.requirements: - destrepo.vfs.append('hgrc', - util.tonativeeol('\n[extensions]\nlargefiles=\n')) - def overriderebase(orig, ui, repo, **opts): if not util.safehasattr(repo, '_largefilesenabled'): return orig(ui, repo, **opts) diff -r bcf72d7b1524 -r 823a580448d7 hgext/largefiles/uisetup.py --- a/hgext/largefiles/uisetup.py Thu Sep 20 15:18:13 2018 -0700 +++ b/hgext/largefiles/uisetup.py Thu Sep 20 15:30:00 2018 -0700 @@ -126,7 +126,6 @@ _('download all versions of all largefiles'))] entry[1].extend(cloneopt) extensions.wrapfunction(hg, 'clone', overrides.hgclone) - extensions.wrapfunction(hg, 'postshare', overrides.hgpostshare) entry = extensions.wrapcommand(commands.table, 'cat', overrides.overridecat) diff -r bcf72d7b1524 -r 823a580448d7 mercurial/localrepo.py --- a/mercurial/localrepo.py Thu Sep 20 15:18:13 2018 -0700 +++ b/mercurial/localrepo.py Thu Sep 20 15:30:00 2018 -0700 @@ -588,6 +588,7 @@ # Map of requirements to list of extensions to load automatically when # requirement is present. autoextensions = { + b'largefiles': [b'largefiles'], b'lfs': [b'lfs'], } diff -r bcf72d7b1524 -r 823a580448d7 tests/test-largefiles-misc.t --- a/tests/test-largefiles-misc.t Thu Sep 20 15:18:13 2018 -0700 +++ b/tests/test-largefiles-misc.t Thu Sep 20 15:30:00 2018 -0700 @@ -1,6 +1,53 @@ This file contains testcases that tend to be related to special cases or less common commands affecting largefile. + $ hg init requirements + $ cd requirements + +# largefiles not loaded by default. + + $ hg config extensions + [1] + +# Adding largefiles to requires file will auto-load largefiles extension. + + $ echo largefiles >> .hg/requires + $ hg config extensions + extensions.largefiles= + +# But only if there is no config entry for the extension already. + + $ cat > .hg/hgrc << EOF + > [extensions] + > largefiles=! + > EOF + + $ hg config extensions + abort: repository requires features unknown to this Mercurial: largefiles! + (see https://mercurial-scm.org/wiki/MissingRequirement for more information) + [255] + + $ cat > .hg/hgrc << EOF + > [extensions] + > largefiles= + > EOF + + $ hg config extensions + extensions.largefiles= + + $ cat > .hg/hgrc << EOF + > [extensions] + > largefiles = missing.py + > EOF + + $ hg config extensions + *** failed to import extension largefiles from missing.py: [Errno 2] $ENOENT$: 'missing.py' + abort: repository requires features unknown to this Mercurial: largefiles! + (see https://mercurial-scm.org/wiki/MissingRequirement for more information) + [255] + + $ cd .. + Each sections should be independent of each others. $ USERCACHE="$TESTTMP/cache"; export USERCACHE @@ -220,10 +267,8 @@ getting changed largefiles 1 largefiles updated, 0 removed 3 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cat ../shared_lfrepo/.hg/hgrc - - [extensions] - largefiles= + $ grep largefiles ../shared_lfrepo/.hg/requires + largefiles verify that large files in subrepos handled properly $ hg init subrepo diff -r bcf72d7b1524 -r 823a580448d7 tests/test-largefiles.t --- a/tests/test-largefiles.t Thu Sep 20 15:18:13 2018 -0700 +++ b/tests/test-largefiles.t Thu Sep 20 15:30:00 2018 -0700 @@ -1206,12 +1206,12 @@ adding file changes added 1 changesets with 2 changes to 2 files (+1 heads) new changesets a381d2c8c80e (1 drafts) + 0 largefiles cached rebasing 8:f574fb32bb45 "modify normal file largefile in repo d" Invoking status precommit hook M sub/normal4 M sub2/large6 saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-dd1d9f80-rebase.hg - 0 largefiles cached $ [ -f .hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 ] $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 9:598410d3eb9a modify normal file largefile in repo d diff -r bcf72d7b1524 -r 823a580448d7 tests/test-subrepo-deep-nested-change.t --- a/tests/test-subrepo-deep-nested-change.t Thu Sep 20 15:18:13 2018 -0700 +++ b/tests/test-subrepo-deep-nested-change.t Thu Sep 20 15:30:00 2018 -0700 @@ -203,21 +203,8 @@ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved Largefiles is NOT enabled in the clone if the source repo doesn't require it - $ cat cloned/.hg/hgrc - # example repository config (see 'hg help config' for more info) - [paths] - default = $TESTTMP/main - - # path aliases to other clones of this repo in URLs or filesystem paths - # (see 'hg help config.paths' for more info) - # - # default:pushurl = ssh://jdoe@example.net/hg/jdoes-fork - # my-fork = ssh://jdoe@example.net/hg/jdoes-fork - # my-clone = /home/jdoe/jdoes-clone - - [ui] - # name and email (local to this repository, optional), e.g. - # username = Jane Doe + $ grep largefiles cloned/.hg/hgrc + [1] Checking cloned repo ids @@ -790,29 +777,13 @@ $ rm -rf ../archive_lf The local repo enables largefiles if a largefiles repo is cloned + $ hg showconfig extensions - abort: repository requires features unknown to this Mercurial: largefiles! - (see https://mercurial-scm.org/wiki/MissingRequirement for more information) - [255] + extensions.largefiles= + $ hg --config extensions.largefiles= clone -qU . ../lfclone - $ cat ../lfclone/.hg/hgrc - # example repository config (see 'hg help config' for more info) - [paths] - default = $TESTTMP/cloned - - # path aliases to other clones of this repo in URLs or filesystem paths - # (see 'hg help config.paths' for more info) - # - # default:pushurl = ssh://jdoe@example.net/hg/jdoes-fork - # my-fork = ssh://jdoe@example.net/hg/jdoes-fork - # my-clone = /home/jdoe/jdoes-clone - - [ui] - # name and email (local to this repository, optional), e.g. - # username = Jane Doe - - [extensions] - largefiles= + $ grep largefiles ../lfclone/.hg/requires + largefiles Find an exact match to a standin (should archive nothing) $ hg --config extensions.largefiles= archive -S -I 'sub/sub2/.hglf/large.bin' ../archive_lf