Show More
@@ -720,15 +720,18 b' class hgtagsfnodescache(object):' | |||||
720 |
|
720 | |||
721 | self._dirtyoffset = None |
|
721 | self._dirtyoffset = None | |
722 |
|
722 | |||
|
723 | rawlentokeep = min(wantedlen, (rawlen / _fnodesrecsize) * _fnodesrecsize) | |||
|
724 | if rawlen > rawlentokeep: | |||
|
725 | # There's no easy way to truncate array instances. This seems | |||
|
726 | # slightly less evil than copying a potentially large array slice. | |||
|
727 | for i in range(rawlen - rawlentokeep): | |||
|
728 | self._raw.pop() | |||
|
729 | rawlen = len(self._raw) | |||
|
730 | self._dirtyoffset = rawlen | |||
723 | if rawlen < wantedlen: |
|
731 | if rawlen < wantedlen: | |
|
732 | if self._dirtyoffset is None: | |||
724 | self._dirtyoffset = rawlen |
|
733 | self._dirtyoffset = rawlen | |
725 | self._raw.extend(b'\xff' * (wantedlen - rawlen)) |
|
734 | self._raw.extend(b'\xff' * (wantedlen - rawlen)) | |
726 | elif rawlen > wantedlen: |
|
|||
727 | # There's no easy way to truncate array instances. This seems |
|
|||
728 | # slightly less evil than copying a potentially large array slice. |
|
|||
729 | for i in range(rawlen - wantedlen): |
|
|||
730 | self._raw.pop() |
|
|||
731 | self._dirtyoffset = len(self._raw) |
|
|||
732 |
|
735 | |||
733 | def getfnode(self, node, computemissing=True): |
|
736 | def getfnode(self, node, computemissing=True): | |
734 | """Obtain the filenode of the .hgtags file at a specified revision. |
|
737 | """Obtain the filenode of the .hgtags file at a specified revision. |
@@ -371,25 +371,19 b' Extra junk data at the end should get ov' | |||||
371 | 1970/01/01 00:00:00 bob @8dbfe60eff306a54259cfe007db9e330e7ecf866 (5000)> tags exited 0 after * seconds (glob) |
|
371 | 1970/01/01 00:00:00 bob @8dbfe60eff306a54259cfe007db9e330e7ecf866 (5000)> tags exited 0 after * seconds (glob) | |
372 | 1970/01/01 00:00:00 bob @8dbfe60eff306a54259cfe007db9e330e7ecf866 (5000)> blackbox -l 6 |
|
372 | 1970/01/01 00:00:00 bob @8dbfe60eff306a54259cfe007db9e330e7ecf866 (5000)> blackbox -l 6 | |
373 |
|
373 | |||
374 |
|
|
374 | On junk data + missing cache entries, hg also overwrites the junk. | |
375 | cache, then failing. |
|
|||
376 |
|
375 | |||
377 | $ rm -f .hg/cache/tags2-visible |
|
376 | $ rm -f .hg/cache/tags2-visible | |
378 | $ truncate .hg/cache/hgtagsfnodes1 -s -10 |
|
377 | $ truncate .hg/cache/hgtagsfnodes1 -s -10 | |
379 | $ hg debugtagscache | tail -2 |
|
378 | $ hg debugtagscache | tail -2 | |
380 | 4 0c192d7d5e6b78a714de54a2e9627952a877e25a 0c04f2a8af31de17fab7422878ee5a2dadbc943d |
|
379 | 4 0c192d7d5e6b78a714de54a2e9627952a877e25a 0c04f2a8af31de17fab7422878ee5a2dadbc943d | |
381 |
5 8dbfe60eff306a54259cfe007db9e330e7ecf866 |
|
380 | 5 8dbfe60eff306a54259cfe007db9e330e7ecf866 missing/invalid | |
382 | $ hg tags |
|
381 | $ hg tags | |
383 | abort: data/.hgtags.i@0c04f2a8af31: no match found! |
|
382 | tip 5:8dbfe60eff30 | |
384 | [255] |
|
383 | bar 1:78391a272241 | |
385 | $ hg debugtagscache | tail -2 |
|
384 | $ hg debugtagscache | tail -2 | |
386 | 4 0c192d7d5e6b78a714de54a2e9627952a877e25a 0c04f2a8af31de17fab7422878ee5a2dadbc943d |
|
385 | 4 0c192d7d5e6b78a714de54a2e9627952a877e25a 0c04f2a8af31de17fab7422878ee5a2dadbc943d | |
387 |
5 8dbfe60eff306a54259cfe007db9e330e7ecf866 0c04f2a8af31de17fab7 |
|
386 | 5 8dbfe60eff306a54259cfe007db9e330e7ecf866 0c04f2a8af31de17fab7422878ee5a2dadbc943d | |
388 | # fix up the cache |
|
|||
389 | $ rm .hg/cache/hgtagsfnodes1 |
|
|||
390 | $ hg tags -q |
|
|||
391 | tip |
|
|||
392 | bar |
|
|||
393 |
|
387 | |||
394 | #if unix-permissions no-root |
|
388 | #if unix-permissions no-root | |
395 | Errors writing to .hgtags fnodes cache are silently ignored |
|
389 | Errors writing to .hgtags fnodes cache are silently ignored |
General Comments 0
You need to be logged in to leave comments.
Login now