# HG changeset patch # User Nicolas Dumazet # Date 1287487210 -32400 # Node ID 2d754eae430c2f49f17d5893b6a3a131a403329a # Parent 62c8f7691bc3bb8c907831d40da1e22c0769d8da tags: do not fail if tags.cache is corrupted (issue2444) This file is not critical for hg, so we can safely swallow the ValueError diff -r 62c8f7691bc3 -r 2d754eae430c mercurial/tags.py --- a/mercurial/tags.py Sun Oct 10 09:50:25 2010 -0500 +++ b/mercurial/tags.py Tue Oct 19 20:20:10 2010 +0900 @@ -176,16 +176,23 @@ cacheheads = [] # list of headnode cachefnode = {} # map headnode to filenode if cachefile: - for line in cachelines: - if line == "\n": - break - line = line.rstrip().split() - cacherevs.append(int(line[0])) - headnode = bin(line[1]) - cacheheads.append(headnode) - if len(line) == 3: - fnode = bin(line[2]) - cachefnode[headnode] = fnode + try: + for line in cachelines: + if line == "\n": + break + line = line.rstrip().split() + cacherevs.append(int(line[0])) + headnode = bin(line[1]) + cacheheads.append(headnode) + if len(line) == 3: + fnode = bin(line[2]) + cachefnode[headnode] = fnode + except (ValueError, TypeError): + # corruption of tags.cache, just recompute it + ui.warn(_('.hg/tags.cache is corrupt, rebuilding it\n')) + cacheheads = [] + cacherevs = [] + cachefnode = {} tipnode = repo.changelog.tip() tiprev = len(repo.changelog) - 1 diff -r 62c8f7691bc3 -r 2d754eae430c tests/test-tags.t --- a/tests/test-tags.t Sun Oct 10 09:50:25 2010 -0500 +++ b/tests/test-tags.t Tue Oct 19 20:20:10 2010 +0900 @@ -34,6 +34,17 @@ $ cacheexists tag cache exists +Try corrupting the cache + + $ echo 'a b\n' > .hg/tags.cache + $ hg identify + .hg/tags.cache is corrupt, rebuilding it + acb14030fe0a tip + $ cacheexists + tag cache exists + $ hg identify + acb14030fe0a tip + Create local tag with long name: $ T=`hg identify --debug --id`