Skip to content

Commit b9aa1ff

Browse files
committed
Expand "invalid hash" test to assert normal StopIteration
Returning an explicit value from a generator function causes that value to be bound to the `value` attribute of the StopIteration exception. This is available as the result of "yield from" when it is used as an expression; or by explicitly catching StopIteration, binding the StopIteration exception to a variable, and accessing the attribute. This feature of generators is rarely used. The `return iter([])` statement in Submodule.iter_items uses this feature, causing the resulting StopIteration exception object to have a `value` attribute that refers to a separate second iterator that also yields no values. From context, this behavior is clearly not the goal; a bare return statement should be used here (which has the same effect except for the `value` attribute of the StopIteration exception). The code had used a bare return prior to 82b131c (gitpython-developers#1282), when `return` was changed to `return iter([])`. That was part of a change that added numerous type annotations. It looks like it was either a mistake, or possibly an attempt to work around an old bug in a static type checker. This commit extends the test_iter_items_from_invalid_hash test to assert that the `value` attribute of the StopIteration is its usual default value of None. This commit only extends the test; it does not fix the bug.
1 parent 96fc354 commit b9aa1ff

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

test/test_submodule.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -696,8 +696,9 @@ def test_iter_items_from_nonexistent_hash(self):
696696
def test_iter_items_from_invalid_hash(self):
697697
"""Check legacy behavaior on BadName (also applies to IOError, i.e. OSError)."""
698698
it = Submodule.iter_items(self.rorepo, "xyz")
699-
with self.assertRaises(StopIteration):
699+
with self.assertRaises(StopIteration) as ctx:
700700
next(it)
701+
self.assertIsNone(ctx.exception.value)
701702

702703
@with_rw_repo(k_no_subm_tag, bare=False)
703704
def test_first_submodule(self, rwrepo):

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy