mirror of
https://github.com/facebook/sapling.git
synced 2025-01-08 14:46:47 +03:00
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
This commit is contained in:
parent
1aa951751f
commit
870dfdf91c
@ -72,6 +72,15 @@ def readlocaltags(ui, repo, alltags, tagtypes):
|
||||
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):
|
||||
|
@ -907,3 +907,15 @@ Test that a local tag blocks a changeset from being hidden
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user