bpo-38347: find pathfix for Python scripts whose name contain a '-' (GH-16536)

pathfix.py: Assume all files that end on '.py' are Python scripts when working recursively.
This commit is contained in:
Ruediger Pluem 2019-10-11 15:36:50 +02:00 committed by Victor Stinner
parent cbb548130c
commit 2b7dc40b2a
3 changed files with 30 additions and 10 deletions

View File

@ -14,25 +14,34 @@ class TestPathfixFunctional(unittest.TestCase):
script = os.path.join(scriptsdir, 'pathfix.py') script = os.path.join(scriptsdir, 'pathfix.py')
def setUp(self): def setUp(self):
self.temp_file = support.TESTFN
self.addCleanup(support.unlink, support.TESTFN) self.addCleanup(support.unlink, support.TESTFN)
def pathfix(self, shebang, pathfix_flags, exitcode=0, stdout='', stderr=''): def pathfix(self, shebang, pathfix_flags, exitcode=0, stdout='', stderr='',
with open(self.temp_file, 'w', encoding='utf8') as f: directory=''):
if directory:
# bpo-38347: Test filename should contain lowercase, uppercase,
# "-", "_" and digits.
filename = os.path.join(directory, 'script-A_1.py')
pathfix_arg = directory
else:
filename = support.TESTFN
pathfix_arg = filename
with open(filename, 'w', encoding='utf8') as f:
f.write(f'{shebang}\n' + 'print("Hello world")\n') f.write(f'{shebang}\n' + 'print("Hello world")\n')
proc = subprocess.run( proc = subprocess.run(
[sys.executable, self.script, [sys.executable, self.script,
*pathfix_flags, '-n', self.temp_file], *pathfix_flags, '-n', pathfix_arg],
capture_output=True, text=1) capture_output=True, text=1)
if stdout == '' and proc.returncode == 0: if stdout == '' and proc.returncode == 0:
stdout = f'{self.temp_file}: updating\n' stdout = f'{filename}: updating\n'
self.assertEqual(proc.returncode, exitcode, proc) self.assertEqual(proc.returncode, exitcode, proc)
self.assertEqual(proc.stdout, stdout, proc) self.assertEqual(proc.stdout, stdout, proc)
self.assertEqual(proc.stderr, stderr, proc) self.assertEqual(proc.stderr, stderr, proc)
with open(self.temp_file, 'r', encoding='utf8') as f: with open(filename, 'r', encoding='utf8') as f:
output = f.read() output = f.read()
lines = output.split('\n') lines = output.split('\n')
@ -44,6 +53,19 @@ class TestPathfixFunctional(unittest.TestCase):
return new_shebang return new_shebang
def test_recursive(self):
tmpdir = support.TESTFN + '.d'
self.addCleanup(support.rmtree, tmpdir)
os.mkdir(tmpdir)
expected_stderr = f"recursedown('{os.path.basename(tmpdir)}')\n"
self.assertEqual(
self.pathfix(
'#! /usr/bin/env python',
['-i', '/usr/bin/python3'],
directory=tmpdir,
stderr=expected_stderr),
'#! /usr/bin/python3')
def test_pathfix(self): def test_pathfix(self):
self.assertEqual( self.assertEqual(
self.pathfix( self.pathfix(

View File

@ -0,0 +1 @@
pathfix.py: Assume all files that end on '.py' are Python scripts when working recursively.

View File

@ -89,11 +89,8 @@ def main():
sys.exit(bad) sys.exit(bad)
ispythonprog = re.compile(r'^[a-zA-Z0-9_]+\.py$')
def ispython(name): def ispython(name):
return bool(ispythonprog.match(name)) return name.endswith('.py')
def recursedown(dirname): def recursedown(dirname):