mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-18 02:40:07 +00:00
Audit script to find potentially broken for loops.
This commit is contained in:
parent
5e6201aede
commit
cc7a3bc2b5
43
misc/python3/audit-dict-for-loops.py
Normal file
43
misc/python3/audit-dict-for-loops.py
Normal file
@ -0,0 +1,43 @@
|
||||
"""
|
||||
The following code is valid in Python 2:
|
||||
|
||||
for x in my_dict.keys():
|
||||
if something(x):
|
||||
del my_dict[x]
|
||||
|
||||
But broken in Python 3.
|
||||
|
||||
One solution is:
|
||||
|
||||
for x in list(my_dict.keys()):
|
||||
if something(x):
|
||||
del my_dict[x]
|
||||
|
||||
Some but not all code in Tahoe has been changed to that. In other cases, the code was left unchanged since there was no `del`.
|
||||
|
||||
However, some mistakes may have slept through.
|
||||
|
||||
To help catch cases that were incorrectly ported, this script runs futurize on all ported modules, which should convert it into the `list()` form.
|
||||
You can then look at git diffs to see if any of the impacted would be buggy without the newly added `list()`.
|
||||
"""
|
||||
|
||||
import os
|
||||
from subprocess import check_call
|
||||
|
||||
from allmydata.util import _python3
|
||||
|
||||
|
||||
def fix_potential_issue():
|
||||
for module in _python3.PORTED_MODULES + _python3.PORTED_TEST_MODULES:
|
||||
filename = "src/" + module.replace(".", "/") + ".py"
|
||||
if not os.path.exists(filename):
|
||||
# Package, probably
|
||||
filename = "src/" + module.replace(".", "/") + "/__init__.py"
|
||||
check_call(["futurize", "-f", "lib2to3.fixes.fix_dict", "-w", filename])
|
||||
print(
|
||||
"All loops converted. Check diff to see if there are any that need to be commitedd."
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
fix_potential_issue()
|
Loading…
Reference in New Issue
Block a user