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 |
t |
|
|
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