##// END OF EJS Templates
store: introduce _matchtrackedpath() and use it to filter store files...
Pulkit Goyal -
r40529:9aeb9e2d default
parent child Browse files
Show More
@@ -24,6 +24,20 b' from . import ('
24 24
25 25 parsers = policy.importmod(r'parsers')
26 26
27 def _matchtrackedpath(path, matcher):
28 """parses a fncache entry and returns whether the entry is tracking a path
29 matched by matcher or not.
30
31 If matcher is None, returns True"""
32
33 if matcher is None:
34 return True
35 path = decodedir(path)
36 if path.startswith('data/'):
37 return matcher(path[len('data/'):-len('.i')])
38 elif path.startswith('meta/'):
39 return matcher.visitdir(path[len('meta/'):-len('/00manifest.i')] or '.')
40
27 41 # This avoids a collision between a file named foo and a dir named
28 42 # foo.i or foo.d
29 43 def _encodedir(path):
@@ -413,6 +427,8 b' class encodedstore(basicstore):'
413 427
414 428 def datafiles(self, matcher=None):
415 429 for a, b, size in super(encodedstore, self).datafiles():
430 if not _matchtrackedpath(a, matcher):
431 continue
416 432 try:
417 433 a = decodefilename(a)
418 434 except KeyError:
@@ -542,6 +558,8 b' class fncachestore(basicstore):'
542 558
543 559 def datafiles(self, matcher=None):
544 560 for f in sorted(self.fncache):
561 if not _matchtrackedpath(f, matcher):
562 continue
545 563 ef = self.encode(f)
546 564 try:
547 565 yield f, ef, self.getsize(ef)
@@ -545,10 +545,6 b' def generatev2(repo, includes, excludes,'
545 545 Returns a 3-tuple of (file count, file size, data iterator).
546 546 """
547 547
548 # temporarily raise error until we add storage level logic
549 if includes or excludes:
550 raise error.Abort(_("server does not support narrow stream clones"))
551
552 548 with repo.lock():
553 549
554 550 entries = []
@@ -1,7 +1,16 b''
1 #testcases tree flat
2
1 3 Tests narrow stream clones
2 4
3 5 $ . "$TESTDIR/narrow-library.sh"
4 6
7 #if tree
8 $ cat << EOF >> $HGRCPATH
9 > [experimental]
10 > treemanifest = 1
11 > EOF
12 #endif
13
5 14 Server setup
6 15
7 16 $ hg init master
@@ -27,13 +36,51 b' Trying to stream clone when the server d'
27 36
28 37 Enable stream clone on the server
29 38
30 $ echo "[server]" >> master/.hg/hgrc
39 $ echo "[experimental.server]" >> master/.hg/hgrc
31 40 $ echo "stream-narrow-clones=True" >> master/.hg/hgrc
32 41
33 42 Cloning a specific file when stream clone is supported
34 43
35 44 $ hg clone --narrow ssh://user@dummy/master narrow --noupdate --include "dir/src/f10" --stream
36 45 streaming all changes
37 remote: abort: server does not support narrow stream clones
38 abort: pull failed on remote
39 [255]
46 * files to transfer, * KB of data (glob)
47 transferred * KB in * seconds (* */sec) (glob)
48
49 $ cd narrow
50 $ ls
51 $ hg tracked
52 I path:dir/src/f10
53
54 Making sure we have the correct set of requirements
55
56 $ cat .hg/requires
57 dotencode
58 fncache
59 generaldelta
60 narrowhg-experimental
61 revlogv1
62 store
63 treemanifest (tree !)
64
65 Making sure store has the required files
66
67 $ ls .hg/store/
68 00changelog.i
69 00manifest.i
70 data
71 fncache
72 meta (tree !)
73 narrowspec
74 undo
75 undo.backupfiles
76 undo.phaseroots
77
78 Checking that repository has all the required data and not broken
79
80 $ hg verify
81 checking changesets
82 checking manifests
83 checking directory manifests (tree !)
84 crosschecking files in changesets and manifests
85 checking files
86 checked 40 changesets with 1 changes to 1 files
General Comments 0
You need to be logged in to leave comments. Login now