narrow: import experimental extension from narrowhg revision cb51d673e9c5
Adjustments:
* renamed src to hgext/narrow
* marked extension experimental
* added correct copyright header where it was missing
* updated hgrc extension enable line in library.sh
* renamed library.sh to narrow-library.sh
* dropped all files from repo root as they're not interesting
* dropped test-pyflakes.t, test-check-code.t and test-check-py3-compat.t
* renamed remaining tests to all be test-narrow-* when they didn't already
* fixed test-narrow-expanddirstate.t to refer to narrow and not narrowhg
* fixed tests that wanted `update -C .` instead of `merge --abort`
* corrected a two-space indent in narrowspec.py
* added a missing _() in narrowcommands.py
* fixed imports to pass the import checker
* narrow only adds its --include and --exclude to clone if sparse isn't
enabled to avoid breaking test-duplicateoptions.py. This is a kludge,
and we'll need to come up with a better solution in the future.
These were more or less the minimum to import something that would
pass tests and not create a bunch of files we'll never use.
Changes I intend to make as followups:
* rework the test-narrow-*-tree.t tests to use the new testcases
functionality in run-tests.py
* remove lots of monkeypatches of core things
Differential Revision: https://phab.mercurial-scm.org/D1974
$ . "$TESTDIR/narrow-library.sh"
create full repo
$ hg init master
$ cd master
$ mkdir inside
$ echo inside > inside/f1
$ mkdir outside
$ echo outside > outside/f1
$ hg ci -Aqm 'initial'
$ echo modified > inside/f1
$ hg ci -qm 'modify inside'
$ echo modified > outside/f1
$ hg ci -qm 'modify outside'
$ cd ..
$ hg clone --narrow ssh://user@dummy/master narrow --include inside
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 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
Can show patch touching paths outside
$ hg log -p
changeset: 2:* (glob)
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify outside
changeset: 1:* (glob)
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify inside
diff -r * -r * inside/f1 (glob)
--- a/inside/f1 Thu Jan 01 00:00:00 1970 +0000
+++ b/inside/f1 Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
-inside
+modified
changeset: 0:* (glob)
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: initial
diff -r 000000000000 -r * inside/f1 (glob)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inside/f1 Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+inside
$ hg status --rev 1 --rev 2
Can show copies inside the narrow clone
$ hg cp inside/f1 inside/f2
$ hg diff --git
diff --git a/inside/f1 b/inside/f2
copy from inside/f1
copy to inside/f2