# HG changeset patch # User Angel Ezquerra # Date 2014-06-29 11:52:35 # Node ID 925d1bb9a971c6605f026bde488b4b730924f92b # Parent a4b67bf1f0a5051736c14d9c13fae50fd5f5e464 repoview: do not crash when localtags refers to non existing revisions This fixes a crash that may happen when using mercurial 3.0.x. The _gethiddenblockers function assumed that the output of tags.readlocaltags() was a dict mapping tags to of valid nodes. However this was not necessarily the case. When a repository had obsolete revisions and had local tag pointing to a non existing revision was found, many mercurial commands would crash. This revision fixes the problem by removing any tags from the output of tags.readlocaltags() which point to invalid nodes. We may want to add a warning when this happens (although it might be annoying to get that warning for every command, possibly even more than once per command). A test for this problem has been added to test-obsolete.t. Without this fix the test would output: $ hg tags abort: 00changelog.i@3816541e5485: no node! [255] Instead of: $ hg tags tiptag 2:3816541e5485 tip 2:3816541e5485 visible 0:193e9254ce7e diff --git a/mercurial/tags.py b/mercurial/tags.py --- a/mercurial/tags.py +++ b/mercurial/tags.py @@ -72,6 +72,15 @@ def readlocaltags(ui, repo, alltags, tag filetags = _readtags( ui, repo, data.splitlines(), "localtags", recode=encoding.fromlocal) + + # remove tags pointing to invalid nodes + cl = repo.changelog + for t in filetags.keys(): + try: + cl.rev(filetags[t][0]) + except (LookupError, ValueError): + del filetags[t] + _updatetags(filetags, "local", alltags, tagtypes) def _readtags(ui, repo, lines, fn, recode=None): diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t --- a/tests/test-obsolete.t +++ b/tests/test-obsolete.t @@ -907,3 +907,15 @@ Test that a local tag blocks a changeset date: Thu Jan 01 00:00:00 1970 +0000 summary: A +Test that removing a local tag does not cause some commands to fail + + $ hg tag -l -r tip tiptag + $ hg tags + tiptag 2:3816541e5485 + tip 2:3816541e5485 + visible 0:193e9254ce7e + $ hg --config extensions.strip= strip -r tip --no-backup + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg tags + visible 0:193e9254ce7e + tip 0:193e9254ce7e