##// END OF EJS Templates
tags: behave better if a tags cache entry is partially written...
Valentin Gatien-Baron -
r44774:f5a7cf0a default
parent child Browse files
Show More
@@ -720,15 +720,18 b' class hgtagsfnodescache(object):'
720
720
721 self._dirtyoffset = None
721 self._dirtyoffset = None
722
722
723 if rawlen < wantedlen:
723 rawlentokeep = min(wantedlen, (rawlen / _fnodesrecsize) * _fnodesrecsize)
724 self._dirtyoffset = rawlen
724 if rawlen > rawlentokeep:
725 self._raw.extend(b'\xff' * (wantedlen - rawlen))
726 elif rawlen > wantedlen:
727 # There's no easy way to truncate array instances. This seems
725 # There's no easy way to truncate array instances. This seems
728 # slightly less evil than copying a potentially large array slice.
726 # slightly less evil than copying a potentially large array slice.
729 for i in range(rawlen - wantedlen):
727 for i in range(rawlen - rawlentokeep):
730 self._raw.pop()
728 self._raw.pop()
731 self._dirtyoffset = len(self._raw)
729 rawlen = len(self._raw)
730 self._dirtyoffset = rawlen
731 if rawlen < wantedlen:
732 if self._dirtyoffset is None:
733 self._dirtyoffset = rawlen
734 self._raw.extend(b'\xff' * (wantedlen - rawlen))
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 Junk data + missing cache entries results in hg further corrupting the
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 0c04f2a8af31de17fab7ffffffffffffffffffff
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 0c04f2a8af31de17fab7ffffffffffffffffffff
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