Add additional test cases and robuster parsing
MODIFY
repo2docker/utils.py
repo2docker/utils.py
@@ -473,14 +473,29 @@ def is_local_pip_requirement(line):
# we just care that this isn't a "local pip requirement"
if line.startswith("--pre"):
return False
+
# strip off things like `--editable=`. Long form arguments require a =
if line.startswith("--"):
+ # if splitting doesn't work it is probably because the line contains
+ # a syntax error or our "parser" is too simplistic so we return True
+ # just in case
+ try:
line = line.split("=", 1)[1]
+ except IndexError:
+ return True
+
# strip off short form arguments like `-e`. Short form arguments can be
# followed by a space `-e foo` or use `-e=foo`. The latter is not handled
# here. We can deal with it when we see someone using it.
if line.startswith("-"):
+ # if splitting doesn't work it is probably because the line contains
+ # a syntax error or our "parser" is too simplistic so we return True
+ # just in case
+ try:
line = line.split(None, 1)[1]
+ except IndexError:
+ return True
+
if "file://" in line:
# file references break isolation
return True

MODIFY
tests/unit/test_utils.py
tests/unit/test_utils.py
@@ -147,7 +147,13 @@ def test_open_guess_encoding():
("numpy", False),
("# -e .", False),
("--pre", False),
+ # pip ignores the package name and treats this like `--pre` on a line
+ # by itself
("--pre pandas", False),
+ # These are invalid lines as far as pip is concerned, check that our
+ # code is robust and continues running
+ ("--unrecognized", True),
+ ("-e", True),
],
)
def test_local_pip_requirement(req, is_local):

Add additional test cases and robuster parsing