Mercurial > hg
diff hgext/narrow/narrowcommands.py @ 39247:f4d4bd8c8911
narrow: add a --narrowspec flag to clone command
This patch adds a --narrowspec flag to `hg clone` command in narrow extension
which can be used to read a file and parse narrowspecs from it and use it while
cloning a repository.
The --narrowspec flag assumes that the user wanted to narrow the clone.
Tests are added both for ellipsis and non-ellipsis mode.
Differential Revision: https://phab.mercurial-scm.org/D4156
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Wed, 08 Aug 2018 13:56:53 +0300 |
parents | a232e6744ba3 |
children | c8e4eae84808 |
line wrap: on
line diff
--- a/hgext/narrow/narrowcommands.py Fri Aug 10 16:01:19 2018 -0700 +++ b/hgext/narrow/narrowcommands.py Wed Aug 08 13:56:53 2018 +0300 @@ -7,6 +7,7 @@ from __future__ import absolute_import import itertools +import os from mercurial.i18n import _ from mercurial import ( @@ -25,6 +26,7 @@ repair, repository, repoview, + sparse, util, ) @@ -43,6 +45,8 @@ _("create a narrow clone of select files"))) entry[1].append(('', 'depth', '', _("limit the history fetched by distance from heads"))) + entry[1].append(('', 'narrowspec', '', + _("read narrowspecs from file"))) # TODO(durin42): unify sparse/narrow --include/--exclude logic a bit if 'sparse' not in extensions.enabled(): entry[1].append(('', 'include', [], @@ -73,6 +77,27 @@ opts = pycompat.byteskwargs(opts) wrappedextraprepare = util.nullcontextmanager() opts_narrow = opts['narrow'] + narrowspecfile = opts['narrowspec'] + + if narrowspecfile: + filepath = os.path.join(pycompat.getcwd(), narrowspecfile) + ui.status(_("reading narrowspec from '%s'\n") % filepath) + try: + fp = open(filepath, 'rb') + except IOError: + raise error.Abort(_("file '%s' not found") % filepath) + + includes, excludes, profiles = sparse.parseconfig(ui, fp.read(), + 'narrow') + if profiles: + raise error.Abort(_("cannot specify other files using '%include' in" + " narrowspec")) + + # narrowspec is passed so we should assume that user wants narrow clone + opts_narrow = True + opts['include'].extend(includes) + opts['exclude'].extend(excludes) + if opts_narrow: def pullbundle2extraprepare_widen(orig, pullop, kwargs): # Create narrow spec patterns from clone flags