D4125: narrow: add '--import-rules' flag to tracked command

pulkit (Pulkit Goyal) phabricator at mercurial-scm.org
Sat Aug 25 15:36:02 EDT 2018


pulkit updated this revision to Diff 10564.
pulkit edited the summary of this revision.
pulkit retitled this revision from "narrow: add '--extend' flag to tracked command" to "narrow: add '--import-rules' flag to tracked command".

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4125?vs=9970&id=10564

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, '...')}{node|short}: {desc}\n"
+  *: update widest v4 (glob)
+  *: add outside2 (glob)
+  *: update inside (glob)
+  *: update widest v3 (glob)
+  *: add wider, update widest (glob)
+  *: add outside (glob)
+  *: add widest (glob)
+  *: add inside (glob)
+
+  $ 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: file '$TESTTMP/narrow/doesnotexist' not found
+  [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
@@ -324,6 +324,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,
@@ -367,6 +368,22 @@
         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)
+            fp = open(filepath, 'rb')
+        except IOError:
+            raise error.Abort(_("file '%s' not found") % filepath)
+        includepats, excludepats, profiles = sparse.parseconfig(ui, fp.read(),
+                                                                '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
Cc: foozy, martinvonz, mercurial-devel


More information about the Mercurial-devel mailing list