# HG changeset patch # User Gregory Szorc # Date 1467839662 25200 # Node ID 3f854e3bcdd109fe86c5bda911b76408184a2d98 # Parent c16e2087660f939c02ede8805b23faa366d1eb7d client: raise KeyError from __getitem__ (BC) object.__getitem__ is supposed to raise either IndexError or KeyError (depending on whether the thing is a sequence or a mapping). Before, we would raise ValueError because that's what the context constructor raises. I choose to raise KeyError because IndexError felt a bit too limiting. This does sacrifice some magic with for loops handling IndexError. However, iteration of this object should be handled by a custom __iter__, so I don't think this is a problem. diff -r c16e2087660f -r 3f854e3bcdd1 hglib/client.py --- a/hglib/client.py Wed Jul 06 14:11:02 2016 -0700 +++ b/hglib/client.py Wed Jul 06 14:14:22 2016 -0700 @@ -1631,7 +1631,10 @@ return self._version def __getitem__(self, changeid): - return context.changectx(self, changeid) + try: + return context.changectx(self, changeid) + except ValueError as e: + raise KeyError(*e.args) def __contains__(self, changeid): """ diff -r c16e2087660f -r 3f854e3bcdd1 tests/test-context.py --- a/tests/test-context.py Wed Jul 06 14:11:02 2016 -0700 +++ b/tests/test-context.py Wed Jul 06 14:14:22 2016 -0700 @@ -17,6 +17,8 @@ self.append('c', 'c') rev1, node1 = self.client.commit(b('second'), addremove=True) + self.assertRaises(KeyError, self.client.__getitem__, 'doesnotexist') + ctx = self.client[node0] self.assertEquals(ctx.description(), b('first'))