Mercurial > hg
view tests/test-incoming-outgoing.t @ 24790:baa11dde8c0e
match: add a subclass for dirstate normalizing of the matched patterns
This class is only needed on case insensitive filesystems, and only
for wdir context matches. It allows the user to not match the case of
the items in the filesystem- especially for naming directories, which
dirstate doesn't handle[1]. Making dirstate handle mismatched
directory cases is too expensive[2].
Since dirstate doesn't apply to committed csets, this is only created by
overriding basectx.match() in workingctx, and only on icasefs. The default
arguments have been dropped, because the ctx must be passed to the matcher in
order to function.
For operations that can apply to both wdir and some other context, this ends up
normalizing the filename to the case as it exists in the filesystem, and using
that case for the lookup in the other context. See the diff example in the
test.
Previously, given a directory with an inexact case:
- add worked as expected
- diff, forget and status would silently ignore the request
- files would exit with 1
- commit, revert and remove would fail (even when the commands leading up to
them worked):
$ hg ci -m "AbCDef" capsdir1/capsdir
abort: CapsDir1/CapsDir: no match under directory!
$ hg revert -r '.^' capsdir1/capsdir
capsdir1\capsdir: no such file in rev 64dae27060b7
$ hg remove capsdir1/capsdir
not removing capsdir1\capsdir: no tracked files
[1]
Globs are normalized, so that the -I and -X don't need to be specified with a
case match. Without that, the second last remove (with -X) removes the files,
leaving nothing for the last remove. However, specifying the files as
'glob:**.Txt' does not work. Perhaps this requires 're.IGNORECASE'?
There are only a handful of places that create matchers directly, instead of
being routed through the context.match() method. Some may benefit from changing
over to using ctx.match() as a factory function:
revset.checkstatus()
revset.contains()
revset.filelog()
revset._matchfiles()
localrepository._loadfilter()
ignore.ignore()
fileset.subrepo()
filemerge._picktool()
overrides.addlargefiles()
lfcommands.lfconvert()
kwtemplate.__init__()
eolfile.__init__()
eolfile.checkrev()
acl.buildmatch()
Currently, a toplevel subrepo can be named with an inexact case. However, the
path auditor gets in the way of naming _anything_ in the subrepo if the top
level case doesn't match. That is trickier to handle, because there's the user
provided case, the case in the filesystem, and the case stored in .hgsub. This
can be fixed next cycle.
--- a/tests/test-subrepo-deep-nested-change.t
+++ b/tests/test-subrepo-deep-nested-change.t
@@ -170,8 +170,15 @@
R sub1/sub2/test.txt
$ hg update -Cq
$ touch sub1/sub2/folder/bar
+#if icasefs
+ $ hg addremove Sub1/sub2
+ abort: path 'Sub1\sub2' is inside nested repo 'Sub1'
+ [255]
+ $ hg -q addremove sub1/sub2
+#else
$ hg addremove sub1/sub2
adding sub1/sub2/folder/bar (glob)
+#endif
$ hg status -S
A sub1/sub2/folder/bar
? foo/bar/abc
The narrowmatcher class may need to be tweaked when that is fixed.
[1] http://www.selenic.com/pipermail/mercurial-devel/2015-April/068183.html
[2] http://www.selenic.com/pipermail/mercurial-devel/2015-April/068191.html
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 12 Apr 2015 01:39:21 -0400 |
parents | 7a9cbb315d84 |
children | eb586ed5d8ce |
line wrap: on
line source
#require serve $ hg init test $ cd test $ for i in 0 1 2 3 4 5 6 7 8; do > echo $i >> foo > hg commit -A -m $i > done adding foo $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files 1 files, 9 changesets, 9 total revisions $ hg serve -p $HGPORT -d --pid-file=hg.pid $ cat hg.pid >> $DAEMON_PIDS $ cd .. $ hg init new http incoming $ hg -R new incoming http://localhost:$HGPORT/ comparing with http://localhost:$HGPORT/ changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 changeset: 2:d9f42cd1a1ec user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 changeset: 3:376476025137 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 3 changeset: 4:70d7eb252d49 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 4 changeset: 5:ad284ee3b5ee user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 5 changeset: 6:e9229f2de384 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 6 changeset: 7:d152815bb8db user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 7 changeset: 8:e4feb4ac9035 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 8 $ hg -R new incoming -r 4 http://localhost:$HGPORT/ comparing with http://localhost:$HGPORT/ changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 changeset: 2:d9f42cd1a1ec user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 changeset: 3:376476025137 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 3 changeset: 4:70d7eb252d49 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 4 local incoming $ hg -R new incoming test comparing with test changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 changeset: 2:d9f42cd1a1ec user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 changeset: 3:376476025137 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 3 changeset: 4:70d7eb252d49 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 4 changeset: 5:ad284ee3b5ee user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 5 changeset: 6:e9229f2de384 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 6 changeset: 7:d152815bb8db user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 7 changeset: 8:e4feb4ac9035 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 8 $ hg -R new incoming -r 4 test comparing with test changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 changeset: 2:d9f42cd1a1ec user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 changeset: 3:376476025137 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 3 changeset: 4:70d7eb252d49 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 4 limit to 2 changesets $ hg -R new incoming -l 2 test comparing with test changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 limit to 2 changesets, test with -p --git $ hg -R new incoming -l 2 -p --git test comparing with test changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 diff --git a/foo b/foo new file mode 100644 --- /dev/null +++ b/foo @@ -0,0 +1,1 @@ +0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 diff --git a/foo b/foo --- a/foo +++ b/foo @@ -1,1 +1,2 @@ 0 +1 test with --bundle $ hg -R new incoming --bundle test.hg http://localhost:$HGPORT/ comparing with http://localhost:$HGPORT/ changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 changeset: 2:d9f42cd1a1ec user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 changeset: 3:376476025137 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 3 changeset: 4:70d7eb252d49 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 4 changeset: 5:ad284ee3b5ee user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 5 changeset: 6:e9229f2de384 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 6 changeset: 7:d152815bb8db user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 7 changeset: 8:e4feb4ac9035 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 8 $ hg -R new incoming --bundle test2.hg test comparing with test changeset: 0:00a43fa82f62 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 0 changeset: 1:5460a410df01 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 changeset: 2:d9f42cd1a1ec user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 changeset: 3:376476025137 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 3 changeset: 4:70d7eb252d49 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 4 changeset: 5:ad284ee3b5ee user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 5 changeset: 6:e9229f2de384 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 6 changeset: 7:d152815bb8db user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 7 changeset: 8:e4feb4ac9035 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 8 test the resulting bundles $ hg init temp $ hg init temp2 $ hg -R temp unbundle test.hg adding changesets adding manifests adding file changes added 9 changesets with 9 changes to 1 files (run 'hg update' to get a working copy) $ hg -R temp2 unbundle test2.hg adding changesets adding manifests adding file changes added 9 changesets with 9 changes to 1 files (run 'hg update' to get a working copy) $ hg -R temp tip changeset: 8:e4feb4ac9035 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 8 $ hg -R temp2 tip changeset: 8:e4feb4ac9035 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 8 $ rm -r temp temp2 new test outgoing $ hg clone test test-dev updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd test-dev $ for i in 9 10 11 12 13; do > echo $i >> foo > hg commit -A -m $i > done $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files 1 files, 14 changesets, 14 total revisions $ cd .. $ hg -R test-dev outgoing test comparing with test searching for changes changeset: 9:d89d4abea5bc user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 9 changeset: 10:820095aa7158 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 10 changeset: 11:09ede2f3a638 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 11 changeset: 12:e576b1bed305 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 12 changeset: 13:96bbff09a7cc tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 13 test outgoing with secret changesets $ hg -R test-dev phase --force --secret 9 $ hg -R test-dev outgoing test comparing with test searching for changes no changes found (ignored 5 secret changesets) [1] $ hg -R test-dev phase --draft -r 'head()' limit to 3 changesets $ hg -R test-dev outgoing -l 3 test comparing with test searching for changes changeset: 9:d89d4abea5bc user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 9 changeset: 10:820095aa7158 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 10 changeset: 11:09ede2f3a638 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 11 $ hg -R test-dev outgoing http://localhost:$HGPORT/ comparing with http://localhost:$HGPORT/ searching for changes changeset: 9:d89d4abea5bc user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 9 changeset: 10:820095aa7158 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 10 changeset: 11:09ede2f3a638 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 11 changeset: 12:e576b1bed305 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 12 changeset: 13:96bbff09a7cc tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 13 $ hg -R test-dev outgoing -r 11 http://localhost:$HGPORT/ comparing with http://localhost:$HGPORT/ searching for changes changeset: 9:d89d4abea5bc user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 9 changeset: 10:820095aa7158 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 10 changeset: 11:09ede2f3a638 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 11 incoming from empty remote repository $ hg init r1 $ hg init r2 $ echo a > r1/foo $ hg -R r1 ci -Ama adding foo $ hg -R r1 incoming r2 --bundle x.hg comparing with r2 searching for changes no changes found [1]