44 lines
1.1 KiB
Bash
Executable file
44 lines
1.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -xeuo pipefail
|
|
|
|
# Workaround for Python timestamp mismatch
|
|
# See: https://github.com/ostreedev/ostree/issues/1469
|
|
|
|
echo '
|
|
import os
|
|
import re
|
|
|
|
MIN_MAGIC = 3390 # The first magic number supporting PEP 552
|
|
ZERO = bytes((0, 0, 0, 0))
|
|
|
|
def pyc_set_zero_mtime(pyc_path):
|
|
with open(pyc_path, "r+b") as f:
|
|
w = f.read(4)
|
|
if len(w) < 4:
|
|
return 0
|
|
|
|
magic = (w[0] + (w[1] << 8) + (w[2] << 16) + (w[3] << 24)) & 0xFFFF
|
|
if magic < MIN_MAGIC:
|
|
invalidation = ZERO
|
|
else:
|
|
invalidation = f.read(4)
|
|
if len(invalidation) < 4:
|
|
return 0
|
|
|
|
if invalidation == ZERO:
|
|
f.write(ZERO)
|
|
return 1
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
REGEX = re.compile(r".*/__pycache__/[^/]+\.cpython-.*(\.opt-1|\.opt-2)?\.pyc$")
|
|
count = 0
|
|
|
|
for root, dirs, files in os.walk("/usr"):
|
|
for file in files:
|
|
path = os.path.join(root, file)
|
|
if REGEX.match(path):
|
|
count += pyc_set_zero_mtime(path)
|
|
|
|
print(f"Processed {count} pyc files")
|
|
' | python
|