##// END OF EJS Templates
lfs: migrate most file filtering from threshold to custom filter...
Matt Harbison -
r35636:c780e064 default
parent child Browse files
Show More
@@ -19,8 +19,23 b' Configs::'
19 19 # (default: unset)
20 20 url = https://example.com/lfs
21 21
22 # size of a file to make it use LFS
23 threshold = 10M
22 # Which files to track in LFS. Path tests are "**.extname" for file
23 # extensions, and "path:under/some/directory" for path prefix. Both
24 # are relative to the repository root, and the latter must be quoted.
25 # File size can be tested with the "size()" fileset, and tests can be
26 # joined with fileset operators. (See "hg help filesets.operators".)
27 #
28 # Some examples:
29 # - all() # everything
30 # - none() # nothing
31 # - size(">20MB") # larger than 20MB
32 # - !**.txt # anything not a *.txt file
33 # - **.zip | **.tar.gz | **.7z # some types of compressed files
34 # - "path:bin" # files under "bin" in the project root
35 # - (**.php & size(">2MB")) | (**.js & size(">5MB")) | **.tar.gz
36 # | ("path:bin" & !"path:/bin/README") | size(">1GB")
37 # (default: none())
38 track = size(">10M")
24 39
25 40 # how many times to retry before giving up on transferring an object
26 41 retry = 5
@@ -41,8 +56,10 b' from mercurial import ('
41 56 exchange,
42 57 extensions,
43 58 filelog,
59 fileset,
44 60 hg,
45 61 localrepo,
62 minifileset,
46 63 node,
47 64 registrar,
48 65 revlog,
@@ -76,9 +93,13 b" configitem('lfs', 'url',"
76 93 configitem('lfs', 'usercache',
77 94 default=None,
78 95 )
96 # Deprecated
79 97 configitem('lfs', 'threshold',
80 98 default=None,
81 99 )
100 configitem('lfs', 'track',
101 default='none()',
102 )
82 103 configitem('lfs', 'retry',
83 104 default=5,
84 105 )
@@ -100,9 +121,15 b' def reposetup(ui, repo):'
100 121 if not repo.local():
101 122 return
102 123
103 threshold = repo.ui.configbytes('lfs', 'threshold')
124 trackspec = repo.ui.config('lfs', 'track')
104 125
105 repo.svfs.options['lfsthreshold'] = threshold
126 # deprecated config: lfs.threshold
127 threshold = repo.ui.configbytes('lfs', 'threshold')
128 if threshold:
129 fileset.parse(trackspec) # make sure syntax errors are confined
130 trackspec = "(%s) | size('>%d')" % (trackspec, threshold)
131
132 repo.svfs.options['lfstrack'] = minifileset.compile(trackspec)
106 133 repo.svfs.lfslocalblobstore = blobstore.local(repo)
107 134 repo.svfs.lfsremoteblobstore = blobstore.remote(repo)
108 135
@@ -123,14 +123,14 b' def _islfs(rlog, node=None, rev=None):'
123 123 def filelogaddrevision(orig, self, text, transaction, link, p1, p2,
124 124 cachedelta=None, node=None,
125 125 flags=revlog.REVIDX_DEFAULT_FLAGS, **kwds):
126 threshold = self.opener.options['lfsthreshold']
127 126 textlen = len(text)
128 127 # exclude hg rename meta from file size
129 128 meta, offset = filelog.parsemeta(text)
130 129 if offset:
131 130 textlen -= offset
132 131
133 if threshold and textlen > threshold:
132 lfstrack = self.opener.options['lfstrack']
133 if lfstrack(self.filename, textlen):
134 134 flags |= revlog.REVIDX_EXTSTORED
135 135
136 136 return orig(self, text, transaction, link, p1, p2, cachedelta=cachedelta,
@@ -30,7 +30,7 b''
30 30 > lfs=
31 31 > [lfs]
32 32 > url=http://foo:bar@$LFS_HOST/
33 > threshold=1
33 > track=all()
34 34 > EOF
35 35
36 36 $ hg init repo1
@@ -4,6 +4,7 b''
4 4 > [extensions]
5 5 > lfs=
6 6 > [lfs]
7 > # Test deprecated config
7 8 > threshold=1000B
8 9 > EOF
9 10
@@ -140,7 +141,7 b' enabled adds the lfs requirement'
140 141 $ cd repo3
141 142 $ cat >> .hg/hgrc << EOF
142 143 > [lfs]
143 > threshold=10B
144 > track=size(">10B")
144 145 > EOF
145 146
146 147 $ echo LONGER-THAN-TEN-BYTES-WILL-TRIGGER-LFS > large
@@ -203,7 +204,7 b' enabled adds the lfs requirement'
203 204 $ cd repo6
204 205 $ cat >> .hg/hgrc << EOF
205 206 > [lfs]
206 > threshold=30B
207 > track=size(">30B")
207 208 > EOF
208 209
209 210 $ echo LARGE-BECAUSE-IT-IS-MORE-THAN-30-BYTES > large
@@ -239,7 +240,7 b' enabled adds the lfs requirement'
239 240 $ cd repo8
240 241 $ cat >> .hg/hgrc << EOF
241 242 > [lfs]
242 > threshold=10B
243 > track=size(">10B")
243 244 > EOF
244 245
245 246 $ echo THIS-IS-LFS-BECAUSE-10-BYTES > a1
@@ -320,7 +321,7 b' enabled adds the lfs requirement'
320 321 $ cd repo9
321 322 $ cat >> .hg/hgrc << EOF
322 323 > [lfs]
323 > threshold=10B
324 > track=size(">10B")
324 325 > [diff]
325 326 > git=1
326 327 > EOF
@@ -454,7 +455,7 b' enabled adds the lfs requirement'
454 455 > [extensions]
455 456 > lfs=
456 457 > [lfs]
457 > threshold=1
458 > track=all()
458 459 > EOF
459 460 $ $PYTHON <<'EOF'
460 461 > def write(path, content):
@@ -542,6 +543,47 b' enabled adds the lfs requirement'
542 543
543 544 $ cd ..
544 545
546 # Test filter
547
548 $ hg init repo11
549 $ cd repo11
550 $ cat >> .hg/hgrc << EOF
551 > [lfs]
552 > track=(**.a & size(">5B")) | (**.b & !size(">5B"))
553 > | (**.c & "path:d" & !"path:d/c.c") | size(">10B")
554 > EOF
555
556 $ mkdir a
557 $ echo aaaaaa > a/1.a
558 $ echo a > a/2.a
559 $ echo aaaaaa > 1.b
560 $ echo a > 2.b
561 $ echo a > 1.c
562 $ mkdir d
563 $ echo a > d/c.c
564 $ echo a > d/d.c
565 $ echo aaaaaaaaaaaa > x
566 $ hg add . -q
567 $ hg commit -m files
568
569 $ for p in a/1.a a/2.a 1.b 2.b 1.c d/c.c d/d.c x; do
570 > if hg debugdata $p 0 2>&1 | grep git-lfs >/dev/null; then
571 > echo "${p}: is lfs"
572 > else
573 > echo "${p}: not lfs"
574 > fi
575 > done
576 a/1.a: is lfs
577 a/2.a: not lfs
578 1.b: not lfs
579 2.b: is lfs
580 1.c: not lfs
581 d/c.c: not lfs
582 d/d.c: is lfs
583 x: is lfs
584
585 $ cd ..
586
545 587 # Verify the repos
546 588
547 589 $ cat > $TESTTMP/dumpflog.py << EOF
General Comments 0
You need to be logged in to leave comments. Login now