Patchwork D3144: context: make repo[<filtered binary nodeid>] match node

login
register
mail settings
Submitter phabricator
Date April 5, 2018, 10:07 p.m.
Message ID <differential-rev-PHID-DREV-bqoemq7c3pcxm223phts-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/30407/
State Superseded
Headers show

Comments

phabricator - April 5, 2018, 10:07 p.m.
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  If you pass in a binary nodeid of a filtered node to repo.__getitem__,
  it would run through this code:
  
    try:
        self._node = changeid
  
  self._rev = repo.changelog.rev(changeid)
  return
  
    except error.FilteredLookupError:
        raise
    except LookupError:
         pass
  
  However, repo.changelog.rev() would raise a FilteredLookupError, not
  FilteredRepoLookupError. Instead, we would hit the "except
  LookupError" and continue, trying to interpret the nodeid as a
  bookmark etc. The end result would be an error like this:
  
    abort: unknown revision 'ddadbd7c40ef8b8ad6d0d01a7a842092fc431798'!
  
  After this patch, it would instead be:
  
    abort: 00changelog.i@ddadbd7c40ef8b8ad6d0d01a7a842092fc431798: filtered node!
  
  This only happens when we get a binary nodeid, which means it's not
  string directly from the user, so it would be a programming error if
  it happened. It's therefore a little hard to test (I checked
  test-context.py, but it doesn't use obsmarkers).
  
  It looks like this has been wrong ever since https://phab.mercurial-scm.org/rHGdc25ed84bee89700a584c828233be17560075082 (changectx:
  issue a FilteredRepoLookupError when applicable, 2014-10-15).

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D3144

AFFECTED FILES
  mercurial/context.py

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -410,7 +410,7 @@ 
                     self._node = changeid
                     self._rev = repo.changelog.rev(changeid)
                     return
-                except error.FilteredRepoLookupError:
+                except error.FilteredLookupError:
                     raise
                 except LookupError:
                     pass