D4125: narrow: add '--import-rules' flag to tracked command
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Tue Sep 4 23:32:34 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGab20ee07b82d: narrow: add '--import-rules' flag to tracked command (authored by pulkit, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D4125?vs=10741&id=10778
REVISION DETAIL
https://phab.mercurial-scm.org/D4125
AFFECTED FILES
hgext/narrow/narrowcommands.py
tests/test-narrow-trackedcmd.t
CHANGE DETAILS
diff --git a/tests/test-narrow-trackedcmd.t b/tests/test-narrow-trackedcmd.t
new file mode 100644
--- /dev/null
+++ b/tests/test-narrow-trackedcmd.t
@@ -0,0 +1,218 @@
+#testcases flat tree
+ $ . "$TESTDIR/narrow-library.sh"
+
+#if tree
+ $ cat << EOF >> $HGRCPATH
+ > [experimental]
+ > treemanifest = 1
+ > EOF
+#endif
+
+ $ hg init master
+ $ cd master
+ $ cat >> .hg/hgrc <<EOF
+ > [narrow]
+ > serveellipses=True
+ > EOF
+
+ $ mkdir inside
+ $ echo 'inside' > inside/f
+ $ hg add inside/f
+ $ hg commit -m 'add inside'
+
+ $ mkdir widest
+ $ echo 'widest' > widest/f
+ $ hg add widest/f
+ $ hg commit -m 'add widest'
+
+ $ mkdir outside
+ $ echo 'outside' > outside/f
+ $ hg add outside/f
+ $ hg commit -m 'add outside'
+
+ $ cd ..
+
+narrow clone the inside file
+
+ $ hg clone --narrow ssh://user@dummy/master narrow --include inside
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 1 changes to 1 files
+ new changesets *:* (glob)
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd narrow
+ $ hg tracked
+ I path:inside
+ $ ls
+ inside
+ $ cat inside/f
+ inside
+ $ cd ..
+
+add more upstream files which we will include in a wider narrow spec
+
+ $ cd master
+
+ $ mkdir wider
+ $ echo 'wider' > wider/f
+ $ hg add wider/f
+ $ echo 'widest v2' > widest/f
+ $ hg commit -m 'add wider, update widest'
+
+ $ echo 'widest v3' > widest/f
+ $ hg commit -m 'update widest v3'
+
+ $ echo 'inside v2' > inside/f
+ $ hg commit -m 'update inside'
+
+ $ mkdir outside2
+ $ echo 'outside2' > outside2/f
+ $ hg add outside2/f
+ $ hg commit -m 'add outside2'
+
+ $ echo 'widest v4' > widest/f
+ $ hg commit -m 'update widest v4'
+
+ $ hg log -T "{if(ellipsis, '...')}{rev}: {desc}\n"
+ 7: update widest v4
+ 6: add outside2
+ 5: update inside
+ 4: update widest v3
+ 3: add wider, update widest
+ 2: add outside
+ 1: add widest
+ 0: add inside
+
+ $ cd ..
+
+Testing the --import-rules flag of `hg tracked` command
+
+ $ cd narrow
+ $ hg tracked --import-rules
+ hg tracked: option --import-rules requires argument
+ hg tracked [OPTIONS]... [REMOTE]
+
+ show or change the current narrowspec
+
+ options ([+] can be repeated):
+
+ --addinclude VALUE [+] new paths to include
+ --removeinclude VALUE [+] old paths to no longer include
+ --addexclude VALUE [+] new paths to exclude
+ --import-rules VALUE import narrowspecs from a file
+ --removeexclude VALUE [+] old paths to no longer exclude
+ --clear whether to replace the existing narrowspec
+ --force-delete-local-changes forces deletion of local changes when
+ narrowing
+ -e --ssh CMD specify ssh command to use
+ --remotecmd CMD specify hg command to run on the remote side
+ --insecure do not verify server certificate (ignoring
+ web.cacerts config)
+
+ (use 'hg tracked -h' to show more help)
+ [255]
+ $ hg tracked --import-rules doesnotexist
+ abort: cannot read narrowspecs from '$TESTTMP/narrow/doesnotexist': $ENOENT$
+ [255]
+
+ $ cat > specs <<EOF
+ > %include foo
+ > [include]
+ > path:widest/
+ > [exclude]
+ > path:inside/
+ > EOF
+
+ $ hg tracked --import-rules specs
+ abort: including other spec files using '%include' is not supported in narrowspec
+ [255]
+
+ $ cat > specs <<EOF
+ > [include]
+ > outisde
+ > [exclude]
+ > inside
+ > EOF
+
+ $ hg tracked --import-rules specs
+ comparing with ssh://user@dummy/master
+ searching for changes
+ looking for local changes to affected paths
+ deleting data/inside/f.i
+ deleting meta/inside/00manifest.i (tree !)
+ no changes found
+ saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 0 changes to 0 files
+ new changesets *:* (glob)
+ $ hg tracked
+ I path:outisde
+ X path:inside
+
+Testing the --import-rules flag with --addinclude and --addexclude
+
+ $ cat > specs <<EOF
+ > [include]
+ > widest
+ > EOF
+
+ $ hg tracked --import-rules specs --addinclude 'wider/'
+ comparing with ssh://user@dummy/master
+ searching for changes
+ no changes found
+ saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 1 changes to 1 files
+ new changesets *:* (glob)
+ $ hg tracked
+ I path:outisde
+ I path:wider
+ I path:widest
+ X path:inside
+
+ $ cat > specs <<EOF
+ > [exclude]
+ > outside2
+ > EOF
+
+ $ hg tracked --import-rules specs --addexclude 'widest'
+ comparing with ssh://user@dummy/master
+ searching for changes
+ looking for local changes to affected paths
+ deleting data/widest/f.i
+ deleting meta/widest/00manifest.i (tree !)
+ $ hg tracked
+ I path:outisde
+ I path:wider
+ X path:inside
+ X path:outside2
+ X path:widest
+
+ $ hg tracked --import-rules specs --clear
+ The --clear option is not yet supported.
+ [1]
+
+Testing with passing a out of wdir file
+
+ $ cat > ../nspecs <<EOF
+ > [include]
+ > widest
+ > EOF
+
+ $ hg tracked --import-rules ../nspecs
+ comparing with ssh://user@dummy/master
+ searching for changes
+ no changes found
+ saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 0 changes to 0 files
+ new changesets *:* (glob)
diff --git a/hgext/narrow/narrowcommands.py b/hgext/narrow/narrowcommands.py
--- a/hgext/narrow/narrowcommands.py
+++ b/hgext/narrow/narrowcommands.py
@@ -14,6 +14,7 @@
cmdutil,
commands,
discovery,
+ encoding,
error,
exchange,
extensions,
@@ -326,6 +327,7 @@
[('', 'addinclude', [], _('new paths to include')),
('', 'removeinclude', [], _('old paths to no longer include')),
('', 'addexclude', [], _('new paths to exclude')),
+ ('', 'import-rules', '', _('import narrowspecs from a file')),
('', 'removeexclude', [], _('old paths to no longer exclude')),
('', 'clear', False, _('whether to replace the existing narrowspec')),
('', 'force-delete-local-changes', False,
@@ -369,6 +371,23 @@
ui.warn(_('The --clear option is not yet supported.\n'))
return 1
+ # import rules from a file
+ newrules = opts.get('import_rules')
+ if newrules:
+ try:
+ filepath = os.path.join(pycompat.getcwd(), newrules)
+ fdata = util.readfile(filepath)
+ except IOError as inst:
+ raise error.Abort(_("cannot read narrowspecs from '%s': %s") %
+ (filepath, encoding.strtolocal(inst.strerror)))
+ includepats, excludepats, profiles = sparse.parseconfig(ui, fdata,
+ 'narrow')
+ if profiles:
+ raise error.Abort(_("including other spec files using '%include' "
+ "is not supported in narrowspec"))
+ opts['addinclude'].extend(includepats)
+ opts['addexclude'].extend(excludepats)
+
if narrowspec.needsexpansion(opts['addinclude'] + opts['addexclude']):
raise error.Abort('Expansion not yet supported on widen/narrow')
To: pulkit, durin42, #hg-reviewers, martinvonz
Cc: foozy, martinvonz, mercurial-devel
More information about the Mercurial-devel
mailing list