Show More
@@ -36,32 +36,23 b' import time' | |||||
36 | # repositories with very large manifests. Multiplied by dozens or even |
|
36 | # repositories with very large manifests. Multiplied by dozens or even | |
37 | # hundreds of heads and there is a significant performance concern. |
|
37 | # hundreds of heads and there is a significant performance concern. | |
38 | # |
|
38 | # | |
39 |
# The "tags" cache stores information about |
|
39 | # The "tags" cache stores information about the history of tags. | |
40 | # |
|
|||
41 | # The cache file consists of two parts. The first part maps head nodes |
|
|||
42 | # to .hgtags filenodes. The second part is a history of tags. The two |
|
|||
43 | # parts are separated by an empty line. |
|
|||
44 | # |
|
40 | # | |
45 | # The filenodes part of "tags" has effectively been superseded by |
|
41 | # The cache file consists of a cache validation line followed by a history | |
46 | # "hgtagsfnodes1." It is being kept around for backwards compatbility. |
|
42 | # of tags. | |
47 | # |
|
43 | # | |
48 | # The first part consists of lines of the form: |
|
44 | # The cache validation line has the format: | |
49 | # |
|
45 | # | |
50 |
# < |
|
46 | # <tiprev> <tipnode> [<filteredhash>] | |
51 | # |
|
47 | # | |
52 |
# < |
|
48 | # <tiprev> is an integer revision and <tipnode> is a 40 character hex | |
53 |
# node for that changeset. These redundantly identify |
|
49 | # node for that changeset. These redundantly identify the repository | |
54 |
# |
|
50 | # tip from the time the cache was written. In addition, <filteredhash>, | |
55 | # |
|
51 | # if present, is a 40 character hex hash of the contents of the filtered | |
56 | # <tagnode> is the filenode of .hgtags on that head. Heads with no .hgtags |
|
52 | # revisions for this filter. If the set of filtered revs changes, the | |
57 | # file will have no <hgtagsnode> (just 2 values per line). |
|
53 | # hash will change and invalidate the cache. | |
58 | # |
|
54 | # | |
59 | # The filenode cache is ordered from tip to oldest (which is part of why |
|
55 | # The history part of the tags cache consists of lines of the form: | |
60 | # <headrev> is there: a quick check of the tip from when the cache was |
|
|||
61 | # written against the current tip is all that is needed to check whether |
|
|||
62 | # the cache is up to date). |
|
|||
63 | # |
|
|||
64 | # The second part of the tags cache consists of lines of the form: |
|
|||
65 | # |
|
56 | # | |
66 | # <node> <tag> |
|
57 | # <node> <tag> | |
67 | # |
|
58 | # | |
@@ -94,7 +85,7 b' def findglobaltags(ui, repo, alltags, ta' | |||||
94 | assert len(alltags) == len(tagtypes) == 0, \ |
|
85 | assert len(alltags) == len(tagtypes) == 0, \ | |
95 | "findglobaltags() should be called first" |
|
86 | "findglobaltags() should be called first" | |
96 |
|
87 | |||
97 | (heads, tagfnode, cachetags, shouldwrite) = _readtagcache(ui, repo) |
|
88 | (heads, tagfnode, valid, cachetags, shouldwrite) = _readtagcache(ui, repo) | |
98 | if cachetags is not None: |
|
89 | if cachetags is not None: | |
99 | assert not shouldwrite |
|
90 | assert not shouldwrite | |
100 | # XXX is this really 100% correct? are there oddball special |
|
91 | # XXX is this really 100% correct? are there oddball special | |
@@ -122,7 +113,7 b' def findglobaltags(ui, repo, alltags, ta' | |||||
122 |
|
113 | |||
123 | # and update the cache (if necessary) |
|
114 | # and update the cache (if necessary) | |
124 | if shouldwrite: |
|
115 | if shouldwrite: | |
125 |
_writetagcache(ui, repo, |
|
116 | _writetagcache(ui, repo, valid, alltags) | |
126 |
|
117 | |||
127 | def readlocaltags(ui, repo, alltags, tagtypes): |
|
118 | def readlocaltags(ui, repo, alltags, tagtypes): | |
128 | '''Read local tags in repo. Update alltags and tagtypes.''' |
|
119 | '''Read local tags in repo. Update alltags and tagtypes.''' | |
@@ -256,20 +247,22 b' def _filename(repo):' | |||||
256 | def _readtagcache(ui, repo): |
|
247 | def _readtagcache(ui, repo): | |
257 | '''Read the tag cache. |
|
248 | '''Read the tag cache. | |
258 |
|
249 | |||
259 | Returns a tuple (heads, fnodes, cachetags, shouldwrite). |
|
250 | Returns a tuple (heads, fnodes, validinfo, cachetags, shouldwrite). | |
260 |
|
251 | |||
261 | If the cache is completely up-to-date, "cachetags" is a dict of the |
|
252 | If the cache is completely up-to-date, "cachetags" is a dict of the | |
262 |
form returned by _readtags() and "heads" |
|
253 | form returned by _readtags() and "heads", "fnodes", and "validinfo" are | |
263 | "shouldwrite" is False. |
|
254 | None and "shouldwrite" is False. | |
264 |
|
255 | |||
265 | If the cache is not up to date, "cachetags" is None. "heads" is a list |
|
256 | If the cache is not up to date, "cachetags" is None. "heads" is a list | |
266 | of all heads currently in the repository, ordered from tip to oldest. |
|
257 | of all heads currently in the repository, ordered from tip to oldest. | |
267 | "fnodes" is a mapping from head to .hgtags filenode. "shouldwrite" is |
|
258 | "validinfo" is a tuple describing cache validation info. This is used | |
268 | True. |
|
259 | when writing the tags cache. "fnodes" is a mapping from head to .hgtags | |
|
260 | filenode. "shouldwrite" is True. | |||
269 |
|
261 | |||
270 | If the cache is not up to date, the caller is responsible for reading tag |
|
262 | If the cache is not up to date, the caller is responsible for reading tag | |
271 | info from each returned head. (See findglobaltags().) |
|
263 | info from each returned head. (See findglobaltags().) | |
272 | ''' |
|
264 | ''' | |
|
265 | import scmutil # avoid cycle | |||
273 |
|
266 | |||
274 | try: |
|
267 | try: | |
275 | cachefile = repo.vfs(_filename(repo), 'r') |
|
268 | cachefile = repo.vfs(_filename(repo), 'r') | |
@@ -278,20 +271,17 b' def _readtagcache(ui, repo):' | |||||
278 | except IOError: |
|
271 | except IOError: | |
279 | cachefile = None |
|
272 | cachefile = None | |
280 |
|
273 | |||
281 |
cache |
|
274 | cacherev = None | |
282 |
cache |
|
275 | cachenode = None | |
|
276 | cachehash = None | |||
283 | if cachefile: |
|
277 | if cachefile: | |
284 | try: |
|
278 | try: | |
285 |
|
|
279 | validline = cachelines.next() | |
286 | # Getting the first line and consuming all fnode lines. |
|
280 | validline = validline.split() | |
287 | if line == "\n": |
|
281 | cacherev = int(validline[0]) | |
288 | break |
|
282 | cachenode = bin(validline[1]) | |
289 |
|
|
283 | if len(validline) > 2: | |
290 | continue |
|
284 | cachehash = bin(validline[2]) | |
291 |
|
||||
292 | line = line.split() |
|
|||
293 | cachetiprev = int(line[0]) |
|
|||
294 | cachetipnode = bin(line[1]) |
|
|||
295 | except Exception: |
|
285 | except Exception: | |
296 | # corruption of the cache, just recompute it. |
|
286 | # corruption of the cache, just recompute it. | |
297 | pass |
|
287 | pass | |
@@ -303,20 +293,22 b' def _readtagcache(ui, repo):' | |||||
303 | # (Unchanged tip trivially means no changesets have been added. |
|
293 | # (Unchanged tip trivially means no changesets have been added. | |
304 | # But, thanks to localrepository.destroyed(), it also means none |
|
294 | # But, thanks to localrepository.destroyed(), it also means none | |
305 | # have been destroyed by strip or rollback.) |
|
295 | # have been destroyed by strip or rollback.) | |
306 |
if (cache |
|
296 | if (cacherev == tiprev | |
307 |
and cache |
|
297 | and cachenode == tipnode | |
308 | and cachetipnode == tipnode): |
|
298 | and cachehash == scmutil.filteredhash(repo, tiprev)): | |
309 | tags = _readtags(ui, repo, cachelines, cachefile.name) |
|
299 | tags = _readtags(ui, repo, cachelines, cachefile.name) | |
310 | cachefile.close() |
|
300 | cachefile.close() | |
311 | return (None, None, tags, False) |
|
301 | return (None, None, None, tags, False) | |
312 | if cachefile: |
|
302 | if cachefile: | |
313 | cachefile.close() # ignore rest of file |
|
303 | cachefile.close() # ignore rest of file | |
314 |
|
304 | |||
|
305 | valid = (tiprev, tipnode, scmutil.filteredhash(repo, tiprev)) | |||
|
306 | ||||
315 | repoheads = repo.heads() |
|
307 | repoheads = repo.heads() | |
316 | # Case 2 (uncommon): empty repo; get out quickly and don't bother |
|
308 | # Case 2 (uncommon): empty repo; get out quickly and don't bother | |
317 | # writing an empty cache. |
|
309 | # writing an empty cache. | |
318 | if repoheads == [nullid]: |
|
310 | if repoheads == [nullid]: | |
319 | return ([], {}, {}, False) |
|
311 | return ([], {}, valid, {}, False) | |
320 |
|
312 | |||
321 | # Case 3 (uncommon): cache file missing or empty. |
|
313 | # Case 3 (uncommon): cache file missing or empty. | |
322 |
|
314 | |||
@@ -334,7 +326,7 b' def _readtagcache(ui, repo):' | |||||
334 | if not len(repo.file('.hgtags')): |
|
326 | if not len(repo.file('.hgtags')): | |
335 | # No tags have ever been committed, so we can avoid a |
|
327 | # No tags have ever been committed, so we can avoid a | |
336 | # potentially expensive search. |
|
328 | # potentially expensive search. | |
337 | return (repoheads, {}, None, True) |
|
329 | return (repoheads, {}, valid, None, True) | |
338 |
|
330 | |||
339 | starttime = time.time() |
|
331 | starttime = time.time() | |
340 |
|
332 | |||
@@ -359,44 +351,26 b' def _readtagcache(ui, repo):' | |||||
359 |
|
351 | |||
360 | # Caller has to iterate over all heads, but can use the filenodes in |
|
352 | # Caller has to iterate over all heads, but can use the filenodes in | |
361 | # cachefnode to get to each .hgtags revision quickly. |
|
353 | # cachefnode to get to each .hgtags revision quickly. | |
362 | return (repoheads, cachefnode, None, True) |
|
354 | return (repoheads, cachefnode, valid, None, True) | |
363 |
|
355 | |||
364 |
def _writetagcache(ui, repo, |
|
356 | def _writetagcache(ui, repo, valid, cachetags): | |
365 | try: |
|
357 | try: | |
366 | cachefile = repo.vfs(_filename(repo), 'w', atomictemp=True) |
|
358 | cachefile = repo.vfs(_filename(repo), 'w', atomictemp=True) | |
367 | except (OSError, IOError): |
|
359 | except (OSError, IOError): | |
368 | return |
|
360 | return | |
369 |
|
361 | |||
370 |
ui.log('tagscache', 'writing tags cache file with %d |
|
362 | ui.log('tagscache', 'writing tags cache file with %d tags\n', | |
371 |
|
|
363 | len(cachetags)) | |
372 |
|
364 | |||
373 | realheads = repo.heads() # for sanity checks below |
|
365 | if valid[2]: | |
374 | for head in heads: |
|
366 | cachefile.write('%d %s %s\n' % (valid[0], hex(valid[1]), hex(valid[2]))) | |
375 | # temporary sanity checks; these can probably be removed |
|
367 | else: | |
376 | # once this code has been in crew for a few weeks |
|
368 | cachefile.write('%d %s\n' % (valid[0], hex(valid[1]))) | |
377 | assert head in repo.changelog.nodemap, \ |
|
|||
378 | 'trying to write non-existent node %s to tag cache' % short(head) |
|
|||
379 | assert head in realheads, \ |
|
|||
380 | 'trying to write non-head %s to tag cache' % short(head) |
|
|||
381 | assert head != nullid, \ |
|
|||
382 | 'trying to write nullid to tag cache' |
|
|||
383 |
|
||||
384 | # This can't fail because of the first assert above. When/if we |
|
|||
385 | # remove that assert, we might want to catch LookupError here |
|
|||
386 | # and downgrade it to a warning. |
|
|||
387 | rev = repo.changelog.rev(head) |
|
|||
388 |
|
||||
389 | fnode = tagfnode.get(head) |
|
|||
390 | if fnode: |
|
|||
391 | cachefile.write('%d %s %s\n' % (rev, hex(head), hex(fnode))) |
|
|||
392 | else: |
|
|||
393 | cachefile.write('%d %s\n' % (rev, hex(head))) |
|
|||
394 |
|
369 | |||
395 | # Tag names in the cache are in UTF-8 -- which is the whole reason |
|
370 | # Tag names in the cache are in UTF-8 -- which is the whole reason | |
396 | # we keep them in UTF-8 throughout this module. If we converted |
|
371 | # we keep them in UTF-8 throughout this module. If we converted | |
397 | # them local encoding on input, we would lose info writing them to |
|
372 | # them local encoding on input, we would lose info writing them to | |
398 | # the cache. |
|
373 | # the cache. | |
399 | cachefile.write('\n') |
|
|||
400 | for (name, (node, hist)) in sorted(cachetags.iteritems()): |
|
374 | for (name, (node, hist)) in sorted(cachetags.iteritems()): | |
401 | for n in hist: |
|
375 | for n in hist: | |
402 | cachefile.write("%s %s\n" % (hex(n), name)) |
|
376 | cachefile.write("%s %s\n" % (hex(n), name)) |
@@ -123,7 +123,7 b' extension and python hooks - use the eol' | |||||
123 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
123 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
124 | $ hg blackbox -l 5 |
|
124 | $ hg blackbox -l 5 | |
125 | 1970/01/01 00:00:00 bob> update |
|
125 | 1970/01/01 00:00:00 bob> update | |
126 |
1970/01/01 00:00:00 bob> writing tags cache file with |
|
126 | 1970/01/01 00:00:00 bob> writing tags cache file with 0 tags | |
127 | 1970/01/01 00:00:00 bob> pythonhook-preupdate: hgext.eol.preupdate finished in * seconds (glob) |
|
127 | 1970/01/01 00:00:00 bob> pythonhook-preupdate: hgext.eol.preupdate finished in * seconds (glob) | |
128 | 1970/01/01 00:00:00 bob> exthook-update: echo hooked finished in * seconds (glob) |
|
128 | 1970/01/01 00:00:00 bob> exthook-update: echo hooked finished in * seconds (glob) | |
129 | 1970/01/01 00:00:00 bob> update exited 0 after * seconds (glob) |
|
129 | 1970/01/01 00:00:00 bob> update exited 0 after * seconds (glob) |
@@ -318,7 +318,6 b' Dump the tag cache to ensure that it has' | |||||
318 |
|
318 | |||
319 | $ cat .hg/cache/tags-visible |
|
319 | $ cat .hg/cache/tags-visible | |
320 | 1 [\da-f]{40} (re) |
|
320 | 1 [\da-f]{40} (re) | |
321 |
|
||||
322 | $ hg qpush |
|
321 | $ hg qpush | |
323 | applying test.patch |
|
322 | applying test.patch | |
324 | now at: test.patch |
|
323 | now at: test.patch | |
@@ -330,7 +329,6 b' Dump the tag cache to ensure that it has' | |||||
330 |
|
329 | |||
331 | $ cat .hg/cache/tags-visible |
|
330 | $ cat .hg/cache/tags-visible | |
332 | 2 [\da-f]{40} (re) |
|
331 | 2 [\da-f]{40} (re) | |
333 |
|
||||
334 | $ checkundo qpush |
|
332 | $ checkundo qpush | |
335 | $ cd .. |
|
333 | $ cd .. | |
336 |
|
334 |
@@ -1,6 +1,8 b'' | |||||
1 | $ cat >> $HGRCPATH << EOF |
|
1 | $ cat >> $HGRCPATH << EOF | |
2 | > [extensions] |
|
2 | > [extensions] | |
|
3 | > blackbox= | |||
3 | > rebase= |
|
4 | > rebase= | |
|
5 | > mock=$TESTDIR/mockblackbox.py | |||
4 | > |
|
6 | > | |
5 | > [experimental] |
|
7 | > [experimental] | |
6 | > evolution = createmarkers |
|
8 | > evolution = createmarkers | |
@@ -21,11 +23,12 b' Create a repo with some tags' | |||||
21 | $ hg commit -A -m newhead |
|
23 | $ hg commit -A -m newhead | |
22 | adding newhead |
|
24 | adding newhead | |
23 | created new head |
|
25 | created new head | |
24 |
|
26 | $ hg tag -m 'test head 2 tag' head2 | ||
25 | Trigger tags cache population by doing something that accesses tags info |
|
|||
26 |
|
27 | |||
27 | $ hg log -G -T '{rev}:{node|short} {tags} {desc}\n' |
|
28 | $ hg log -G -T '{rev}:{node|short} {tags} {desc}\n' | |
28 | @ 4:042eb6bfcc49 tip newhead |
|
29 | @ 5:2942a772f72a tip test head 2 tag | |
|
30 | | | |||
|
31 | o 4:042eb6bfcc49 head2 newhead | |||
29 | | |
|
32 | | | |
30 | | o 3:c3cb30f2d2cd test2 tag |
|
33 | | o 3:c3cb30f2d2cd test2 tag | |
31 | | | |
|
34 | | | | |
@@ -36,35 +39,55 b' Trigger tags cache population by doing s' | |||||
36 | o 0:55482a6fb4b1 test1 initial |
|
39 | o 0:55482a6fb4b1 test1 initial | |
37 |
|
40 | |||
38 |
|
41 | |||
|
42 | Trigger tags cache population by doing something that accesses tags info | |||
|
43 | ||||
|
44 | $ hg tags | |||
|
45 | tip 5:2942a772f72a | |||
|
46 | head2 4:042eb6bfcc49 | |||
|
47 | test2 2:d75775ffbc6b | |||
|
48 | test1 0:55482a6fb4b1 | |||
|
49 | ||||
39 | $ cat .hg/cache/tags-visible |
|
50 | $ cat .hg/cache/tags-visible | |
40 | 4 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 |
|
51 | 5 2942a772f72a444bef4bef13874d515f50fa27b6 | |
41 | 3 c3cb30f2d2cd0aae008cc91a07876e3c5131fd22 b3bce87817fe7ac9dca2834366c1d7534c095cf1 |
|
52 | 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 | |
42 |
|
||||
43 | 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 |
|
53 | 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 | |
44 | d75775ffbc6bca1794d300f5571272879bd280da test2 |
|
54 | d75775ffbc6bca1794d300f5571272879bd280da test2 | |
45 |
|
55 | |||
46 | Create some hidden changesets via a rebase and trigger tags cache |
|
56 | Hiding a non-tip changeset should change filtered hash and cause tags recompute | |
47 | repopulation |
|
57 | ||
|
58 | $ hg debugobsolete -d '0 0' c3cb30f2d2cd0aae008cc91a07876e3c5131fd22 -u dummyuser | |||
48 |
|
59 | |||
49 | $ hg -q rebase -s 1 -d 4 |
|
60 | $ hg tags | |
50 | $ hg log -G -T '{rev}:{node|short} {tags} {desc}\n' |
|
61 | tip 5:2942a772f72a | |
51 | o 7:eb610439e10e tip test2 tag |
|
62 | head2 4:042eb6bfcc49 | |
52 | | |
|
63 | test1 0:55482a6fb4b1 | |
53 | o 6:7b4af00c3c83 first |
|
|||
54 | | |
|
|||
55 | o 5:43ac2a539b3c test tag |
|
|||
56 | | |
|
|||
57 | @ 4:042eb6bfcc49 newhead |
|
|||
58 | | |
|
|||
59 | o 0:55482a6fb4b1 test1 initial |
|
|||
60 |
|
||||
61 |
|
||||
62 | .hgtags filenodes for hidden heads should be visible (issue4550) |
|
|||
63 | (currently broken) |
|
|||
64 |
|
64 | |||
65 |
$ |
|
65 | $ cat .hg/cache/tags-visible | |
66 | 7 eb610439e10e0c6b296f97b59624c2e24fc59e30 b3bce87817fe7ac9dca2834366c1d7534c095cf1 |
|
66 | 5 2942a772f72a444bef4bef13874d515f50fa27b6 f34fbc9a9769ba9eff5aff3d008a6b49f85c08b1 | |
67 |
|
67 | 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 | ||
68 | 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 |
|
68 | 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 | |
69 | d75775ffbc6bca1794d300f5571272879bd280da test2 |
|
69 | ||
|
70 | $ hg blackbox -l 4 | |||
|
71 | 1970/01/01 00:00:00 bob> tags | |||
|
72 | 1970/01/01 00:00:00 bob> 2/2 cache hits/lookups in * seconds (glob) | |||
|
73 | 1970/01/01 00:00:00 bob> writing tags cache file with 2 tags | |||
|
74 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) | |||
|
75 | ||||
|
76 | Hiding another changeset should cause the filtered hash to change | |||
|
77 | ||||
|
78 | $ hg debugobsolete -d '0 0' d75775ffbc6bca1794d300f5571272879bd280da -u dummyuser | |||
|
79 | $ hg debugobsolete -d '0 0' 5f97d42da03fd56f3b228b03dfe48af5c0adf75b -u dummyuser | |||
70 |
|
80 | |||
|
81 | $ hg tags | |||
|
82 | tip 5:2942a772f72a | |||
|
83 | head2 4:042eb6bfcc49 | |||
|
84 | ||||
|
85 | $ cat .hg/cache/tags-visible | |||
|
86 | 5 2942a772f72a444bef4bef13874d515f50fa27b6 2fce1eec33263d08a4d04293960fc73a555230e4 | |||
|
87 | 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 | |||
|
88 | ||||
|
89 | $ hg blackbox -l 4 | |||
|
90 | 1970/01/01 00:00:00 bob> tags | |||
|
91 | 1970/01/01 00:00:00 bob> 1/1 cache hits/lookups in * seconds (glob) | |||
|
92 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |||
|
93 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) |
@@ -133,7 +133,7 b' Tag cache debug info written to blackbox' | |||||
133 | 1970/01/01 00:00:00 bob> identify |
|
133 | 1970/01/01 00:00:00 bob> identify | |
134 | 1970/01/01 00:00:00 bob> writing 48 bytes to cache/hgtagsfnodes1 |
|
134 | 1970/01/01 00:00:00 bob> writing 48 bytes to cache/hgtagsfnodes1 | |
135 | 1970/01/01 00:00:00 bob> 0/1 cache hits/lookups in * seconds (glob) |
|
135 | 1970/01/01 00:00:00 bob> 0/1 cache hits/lookups in * seconds (glob) | |
136 |
1970/01/01 00:00:00 bob> writing tags cache file with 1 |
|
136 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
137 | 1970/01/01 00:00:00 bob> identify exited 0 after ?.?? seconds (glob) |
|
137 | 1970/01/01 00:00:00 bob> identify exited 0 after ?.?? seconds (glob) | |
138 |
|
138 | |||
139 | Failure to acquire lock results in no write |
|
139 | Failure to acquire lock results in no write | |
@@ -146,7 +146,7 b' Failure to acquire lock results in no wr' | |||||
146 | 1970/01/01 00:00:00 bob> identify |
|
146 | 1970/01/01 00:00:00 bob> identify | |
147 | 1970/01/01 00:00:00 bob> not writing .hg/cache/hgtagsfnodes1 because lock held |
|
147 | 1970/01/01 00:00:00 bob> not writing .hg/cache/hgtagsfnodes1 because lock held | |
148 | 1970/01/01 00:00:00 bob> 0/1 cache hits/lookups in * seconds (glob) |
|
148 | 1970/01/01 00:00:00 bob> 0/1 cache hits/lookups in * seconds (glob) | |
149 |
1970/01/01 00:00:00 bob> writing tags cache file with 1 |
|
149 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
150 | 1970/01/01 00:00:00 bob> identify exited 0 after * seconds (glob) |
|
150 | 1970/01/01 00:00:00 bob> identify exited 0 after * seconds (glob) | |
151 |
|
151 | |||
152 | $ fnodescacheexists |
|
152 | $ fnodescacheexists | |
@@ -312,10 +312,7 b' Detailed dump of tag info:' | |||||
312 | Dump cache: |
|
312 | Dump cache: | |
313 |
|
313 | |||
314 | $ cat .hg/cache/tags-visible |
|
314 | $ cat .hg/cache/tags-visible | |
315 |
4 0c192d7d5e6b78a714de54a2e9627952a877e25a |
|
315 | 4 0c192d7d5e6b78a714de54a2e9627952a877e25a | |
316 | 3 6fa450212aeb2a21ed616a54aea39a4a27894cd7 7d3b718c964ef37b89e550ebdafd5789e76ce1b0 |
|
|||
317 | 2 7a94127795a33c10a370c93f731fd9fea0b79af6 0c04f2a8af31de17fab7422878ee5a2dadbc943d |
|
|||
318 |
|
||||
319 | bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar |
|
316 | bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | |
320 | bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar |
|
317 | bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | |
321 | 78391a272241d70354aa14c874552cad6b51bb42 bar |
|
318 | 78391a272241d70354aa14c874552cad6b51bb42 bar | |
@@ -346,7 +343,7 b' Extra junk data at the end should get ov' | |||||
346 | 1970/01/01 00:00:00 bob> tags |
|
343 | 1970/01/01 00:00:00 bob> tags | |
347 | 1970/01/01 00:00:00 bob> writing 24 bytes to cache/hgtagsfnodes1 |
|
344 | 1970/01/01 00:00:00 bob> writing 24 bytes to cache/hgtagsfnodes1 | |
348 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) |
|
345 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) | |
349 |
1970/01/01 00:00:00 bob> writing tags cache file with |
|
346 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
350 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) |
|
347 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) | |
351 |
|
348 | |||
352 | #if unix-permissions no-root |
|
349 | #if unix-permissions no-root | |
@@ -366,7 +363,7 b' Errors writing to .hgtags fnodes cache a' | |||||
366 | 1970/01/01 00:00:00 bob> tags |
|
363 | 1970/01/01 00:00:00 bob> tags | |
367 | 1970/01/01 00:00:00 bob> couldn't write cache/hgtagsfnodes1: [Errno 13] Permission denied: '$TESTTMP/t2/.hg/cache/hgtagsfnodes1' |
|
364 | 1970/01/01 00:00:00 bob> couldn't write cache/hgtagsfnodes1: [Errno 13] Permission denied: '$TESTTMP/t2/.hg/cache/hgtagsfnodes1' | |
368 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) |
|
365 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) | |
369 |
1970/01/01 00:00:00 bob> writing tags cache file with |
|
366 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
370 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) |
|
367 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) | |
371 |
|
368 | |||
372 | $ chmod a+w .hg/cache/hgtagsfnodes1 |
|
369 | $ chmod a+w .hg/cache/hgtagsfnodes1 | |
@@ -381,7 +378,7 b' Errors writing to .hgtags fnodes cache a' | |||||
381 | 1970/01/01 00:00:00 bob> tags |
|
378 | 1970/01/01 00:00:00 bob> tags | |
382 | 1970/01/01 00:00:00 bob> writing 24 bytes to cache/hgtagsfnodes1 |
|
379 | 1970/01/01 00:00:00 bob> writing 24 bytes to cache/hgtagsfnodes1 | |
383 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) |
|
380 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) | |
384 |
1970/01/01 00:00:00 bob> writing tags cache file with |
|
381 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
385 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) |
|
382 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) | |
386 |
|
383 | |||
387 | $ f --size .hg/cache/hgtagsfnodes1 |
|
384 | $ f --size .hg/cache/hgtagsfnodes1 | |
@@ -397,7 +394,7 b" Stripping doesn't truncate the tags cach" | |||||
397 | $ hg blackbox -l 4 |
|
394 | $ hg blackbox -l 4 | |
398 | 1970/01/01 00:00:00 bob> tags |
|
395 | 1970/01/01 00:00:00 bob> tags | |
399 | 1970/01/01 00:00:00 bob> 3/3 cache hits/lookups in * seconds (glob) |
|
396 | 1970/01/01 00:00:00 bob> 3/3 cache hits/lookups in * seconds (glob) | |
400 |
1970/01/01 00:00:00 bob> writing tags cache file with |
|
397 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
401 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) |
|
398 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) | |
402 |
|
399 | |||
403 | $ f --size .hg/cache/hgtagsfnodes1 |
|
400 | $ f --size .hg/cache/hgtagsfnodes1 | |
@@ -414,7 +411,7 b" Stripping doesn't truncate the tags cach" | |||||
414 | 1970/01/01 00:00:00 bob> tags |
|
411 | 1970/01/01 00:00:00 bob> tags | |
415 | 1970/01/01 00:00:00 bob> writing 24 bytes to cache/hgtagsfnodes1 |
|
412 | 1970/01/01 00:00:00 bob> writing 24 bytes to cache/hgtagsfnodes1 | |
416 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) |
|
413 | 1970/01/01 00:00:00 bob> 2/3 cache hits/lookups in * seconds (glob) | |
417 |
1970/01/01 00:00:00 bob> writing tags cache file with |
|
414 | 1970/01/01 00:00:00 bob> writing tags cache file with 1 tags | |
418 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) |
|
415 | 1970/01/01 00:00:00 bob> tags exited 0 after * seconds (glob) | |
419 | $ f --size .hg/cache/hgtagsfnodes1 |
|
416 | $ f --size .hg/cache/hgtagsfnodes1 | |
420 | .hg/cache/hgtagsfnodes1: size=144 |
|
417 | .hg/cache/hgtagsfnodes1: size=144 |
General Comments 0
You need to be logged in to leave comments.
Login now