mirror of
https://github.com/systemd/systemd.git
synced 2025-02-11 21:57:53 +03:00
Merge pull request #6942 from keszybz/remove-sys
Remove sys if necessary
This commit is contained in:
commit
894fcf91ed
@ -26,14 +26,17 @@ OUTFILE_HEADER = """#!/usr/bin/env python3
|
||||
# after adding or modifying anything in the test/sys/ directory
|
||||
|
||||
|
||||
import os, sys, stat, tempfile, filecmp
|
||||
import os, sys
|
||||
import stat
|
||||
import tempfile
|
||||
import filecmp
|
||||
import subprocess
|
||||
|
||||
|
||||
OUTFILE = "sys-script.py"
|
||||
OUTFILE_MODE = 0o775
|
||||
|
||||
OUTFILE_FUNCS = r"""
|
||||
import os, sys
|
||||
import shutil
|
||||
|
||||
def d(path, mode):
|
||||
os.mkdir(path, mode)
|
||||
@ -45,7 +48,6 @@ def f(path, mode, contents):
|
||||
with open(path, "wb") as f:
|
||||
f.write(contents)
|
||||
os.chmod(path, mode)
|
||||
|
||||
"""
|
||||
|
||||
OUTFILE_MAIN = """
|
||||
@ -57,17 +59,19 @@ if not os.path.isdir(sys.argv[1]):
|
||||
|
||||
os.chdir(sys.argv[1])
|
||||
|
||||
if os.path.exists('sys'):
|
||||
shutil.rmtree('sys')
|
||||
"""
|
||||
|
||||
|
||||
def handle_dir(outfile, path):
|
||||
m = os.lstat(path).st_mode & 0o777
|
||||
outfile.write("d('{}', {:#o})\n".format(path, m))
|
||||
outfile.write(f"d('{path}', {m:#o})\n")
|
||||
|
||||
|
||||
def handle_link(outfile, path):
|
||||
src = os.readlink(path)
|
||||
outfile.write("l('{}', '{}')\n".format(path, src))
|
||||
outfile.write(f"l('{path}', '{src}')\n")
|
||||
|
||||
|
||||
def escape_single_quotes(b):
|
||||
@ -85,15 +89,15 @@ def handle_file(outfile, path):
|
||||
with open(path, "rb") as f:
|
||||
b = f.read()
|
||||
if b.count(b"\n") > 1:
|
||||
r = "\n".join([ escape_single_quotes(l) for l in b.split(b"\n") ])
|
||||
r = "b'''{r}'''".format(r=r)
|
||||
r = "\n".join( escape_single_quotes(l) for l in b.split(b"\n") )
|
||||
r = f"b'''{r}'''"
|
||||
else:
|
||||
r = repr(b)
|
||||
outfile.write("f('{}', {:#o}, {})\n".format(path, m, r))
|
||||
outfile.write(f"f('{path}', {m:#o}, {r})\n")
|
||||
|
||||
|
||||
def process_sysdir(outfile):
|
||||
for (dirpath, dirnames, filenames) in os.walk("sys"):
|
||||
for (dirpath, dirnames, filenames) in os.walk('sys'):
|
||||
handle_dir(outfile, dirpath)
|
||||
for d in dirnames:
|
||||
path = os.path.join(dirpath, d)
|
||||
@ -139,7 +143,9 @@ def verify_file(tmpd, path_a):
|
||||
|
||||
|
||||
def verify_script(tmpd):
|
||||
any = False
|
||||
for (dirpath, dirnames, filenames) in os.walk("sys"):
|
||||
any = True
|
||||
try:
|
||||
path = dirpath
|
||||
verify_dir(tmpd, path)
|
||||
@ -155,29 +161,31 @@ def verify_script(tmpd):
|
||||
elif stat.S_ISREG(mode):
|
||||
verify_file(tmpd, path)
|
||||
except Exception:
|
||||
print("FAIL on '{}'".format(path), file=sys.stderr)
|
||||
print(f'FAIL on "{path}"', file=sys.stderr)
|
||||
raise
|
||||
|
||||
if not any:
|
||||
exit('Nothing found!')
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Always operate in the dir where this script is
|
||||
os.chdir(os.path.dirname(sys.argv[0]))
|
||||
if len(sys.argv) < 2:
|
||||
exit('Usage: create-sys-script.py /path/to/test/')
|
||||
|
||||
if not os.path.isdir("sys"):
|
||||
exit("No sys/ directory; please create before running this")
|
||||
outfile = os.path.abspath(os.path.dirname(sys.argv[0]) + '/sys-script.py')
|
||||
print(f'Creating {outfile} using contents of {sys.argv[1]}/sys')
|
||||
|
||||
print("Creating {} using contents of sys/".format(OUTFILE))
|
||||
os.chdir(sys.argv[1])
|
||||
|
||||
with open(OUTFILE, "w") as f:
|
||||
os.chmod(OUTFILE, OUTFILE_MODE)
|
||||
f.write(OUTFILE_HEADER.replace(os.path.basename(sys.argv[0]), OUTFILE))
|
||||
with open(outfile, "w") as f:
|
||||
os.chmod(outfile, OUTFILE_MODE)
|
||||
f.write(OUTFILE_HEADER.replace(os.path.basename(sys.argv[0]),
|
||||
os.path.basename(outfile)))
|
||||
f.write(OUTFILE_FUNCS)
|
||||
f.write(OUTFILE_MAIN)
|
||||
process_sysdir(f)
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpd:
|
||||
print("Recreating sys/ using {} at {}".format(OUTFILE, tmpd))
|
||||
os.system("./{script} {tmpd}".format(script=OUTFILE, tmpd=tmpd))
|
||||
print(f'Recreating sys/ using {outfile} at {tmpd}')
|
||||
subprocess.check_call([outfile, tmpd])
|
||||
verify_script(tmpd)
|
||||
|
||||
print("Verification successful, {} is correct".format(OUTFILE))
|
||||
print(f'Verification successful, {outfile} is correct')
|
||||
|
@ -20,6 +20,7 @@
|
||||
#
|
||||
|
||||
import os, sys
|
||||
import shutil
|
||||
|
||||
def d(path, mode):
|
||||
os.mkdir(path, mode)
|
||||
@ -32,7 +33,6 @@ def f(path, mode, contents):
|
||||
f.write(contents)
|
||||
os.chmod(path, mode)
|
||||
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
exit("Usage: {} <target dir>".format(sys.argv[0]))
|
||||
|
||||
@ -41,6 +41,8 @@ if not os.path.isdir(sys.argv[1]):
|
||||
|
||||
os.chdir(sys.argv[1])
|
||||
|
||||
if os.path.exists('sys'):
|
||||
shutil.rmtree('sys')
|
||||
d('sys', 0o755)
|
||||
d('sys/kernel', 0o775)
|
||||
f('sys/kernel/kexec_crash_loaded', 0o664, b'0\n')
|
||||
|
Loading…
x
Reference in New Issue
Block a user