Refactorings related to subprocess

Use tuples instead of lists where possible.

Prepend commands with "/usr/bin/env".
This commit is contained in:
Stephen Seo 2022-09-07 16:53:21 +09:00
parent d51430cc10
commit c8f0bd6f06

137
update.py
View file

@ -64,7 +64,13 @@ def ensure_pkg_dir_exists(pkg, pkg_state, other_state):
pkg_state[pkg]["repo_path"] = AUR_GIT_REPO_PATH_TEMPLATE.format(pkg)
try:
subprocess.run(
["git", "clone", pkg_state[pkg]["repo_path"], pkgdir],
(
"/usr/bin/env",
"git",
"clone",
pkg_state[pkg]["repo_path"],
pkgdir,
),
check=True,
)
except subprocess.CalledProcessError:
@ -104,7 +110,7 @@ def update_pkg_dir(pkg, pkg_state, other_state):
# fetch all
try:
subprocess.run(
["git", "fetch", "-p", "--all"],
("/usr/bin/env", "git", "fetch", "-p", "--all"),
check=True,
cwd=pkgdir,
)
@ -118,7 +124,7 @@ def update_pkg_dir(pkg, pkg_state, other_state):
remotes = []
try:
result = subprocess.run(
["git", "remote"],
("/usr/bin/env", "git", "remote"),
check=True,
cwd=pkgdir,
capture_output=True,
@ -145,7 +151,7 @@ def update_pkg_dir(pkg, pkg_state, other_state):
selected_remote = None
try:
result = subprocess.run(
["git", "status", "-sb", "--porcelain"],
("/usr/bin/env", "git", "status", "-sb", "--porcelain"),
check=True,
cwd=pkgdir,
capture_output=True,
@ -172,7 +178,7 @@ def update_pkg_dir(pkg, pkg_state, other_state):
current_branch_hash = None
try:
result = subprocess.run(
["git", "log", "-1", "--format=format:%H"],
("/usr/bin/env", "git", "log", "-1", "--format=format:%H"),
check=True,
cwd=pkgdir,
capture_output=True,
@ -194,7 +200,14 @@ def update_pkg_dir(pkg, pkg_state, other_state):
remote_branch_hash = None
try:
result = subprocess.run(
["git", "log", "-1", "--format=format:%H", selected_remote],
(
"/usr/bin/env",
"git",
"log",
"-1",
"--format=format:%H",
selected_remote,
),
check=True,
cwd=pkgdir,
capture_output=True,
@ -215,16 +228,18 @@ def update_pkg_dir(pkg, pkg_state, other_state):
# update current branch if not same commit
if current_branch_hash != remote_branch_hash:
try:
subprocess.run(["git", "pull"], check=True, cwd=pkgdir)
subprocess.run(
("/usr/bin/env", "git", "pull"), check=True, cwd=pkgdir
)
except subprocess.CalledProcessError:
try:
subprocess.run(
["git", "restore", "."],
("/usr/bin/env", "git", "restore", "."),
check=True,
cwd=pkgdir,
)
subprocess.run(
["git", "pull"],
("/usr/bin/env", "git", "pull"),
check=True,
cwd=pkgdir,
)
@ -248,7 +263,9 @@ def check_pkg_build(pkg, pkg_state, other_state, editor):
pkgdir = os.path.join(other_state["clones_dir"], pkg)
log_print('Checking PKGBUILD for "{}"...'.format(pkg))
try:
subprocess.run([editor, "PKGBUILD"], check=True, cwd=pkgdir)
subprocess.run(
("/usr/bin/env", editor, "PKGBUILD"), check=True, cwd=pkgdir
)
except subprocess.CalledProcessError:
log_print('ERROR: Failed checking PKGBUILD for "{}"'.format(pkg))
return "abort"
@ -383,6 +400,7 @@ def get_pkgbuild_version(pkg, force_check_srcinfo, pkg_state, other_state):
'Running "makechrootpkg ... --nobuild" to ensure pkgver in PKGBUILD is updated...'
)
command_list = [
"/usr/bin/env",
"makechrootpkg",
"-c",
"-r",
@ -394,8 +412,8 @@ def get_pkgbuild_version(pkg, force_check_srcinfo, pkg_state, other_state):
if not dep_fullpath:
log_print('ERROR: Failed to get dep "{}"'.format(dep))
sys.exit(1)
command_list.insert(1, "-I")
command_list.insert(2, dep_fullpath)
command_list.insert(2, "-I")
command_list.insert(3, dep_fullpath)
for aur_dep in pkg_state[pkg]["aur_deps"]:
aur_dep_fullpath = get_latest_pkg(
aur_dep, other_state["pkg_out_dir"]
@ -405,8 +423,8 @@ def get_pkgbuild_version(pkg, force_check_srcinfo, pkg_state, other_state):
'ERROR: Failed to get aur_dep "{}"'.format(aur_dep)
)
sys.exit(1)
command_list.insert(1, "-I")
command_list.insert(2, aur_dep_fullpath)
command_list.insert(2, "-I")
command_list.insert(3, aur_dep_fullpath)
subprocess.run(
command_list + post_command_list,
check=True,
@ -428,11 +446,12 @@ def get_pkgbuild_version(pkg, force_check_srcinfo, pkg_state, other_state):
# TODO maybe sandbox sourcing the PKGBUILD
pkgbuild_output = subprocess.run(
[
(
"/usr/bin/env",
"bash",
"-c",
f"source {os.path.join(pkgdir, 'PKGBUILD')}; echo \"pkgver=$pkgver\"; echo \"pkgrel=$pkgrel\"; echo \"epoch=$epoch\"",
],
),
capture_output=True,
text=True,
)
@ -558,13 +577,17 @@ def get_pkg_current_version(pkg, pkg_state, repo):
current_version = None
try:
result = subprocess.run(
(
"/usr/bin/env",
"bash",
"-c"
"tar -tf {} | grep '{}.*/$'".format(
repo, pkg_state[pkg]["pkg_name"]
),
),
check=True,
capture_output=True,
encoding="UTF-8",
shell=True,
)
reprog = re.compile(
"^{}-(?P<epoch>[0-9]+:)?(?P<version>[^-/: ]*-[0-9]+)/$".format(
@ -600,11 +623,11 @@ def get_sudo_privileges():
if not SUDO_PROC:
log_print("sudo -v")
try:
subprocess.run(["sudo", "-v"], check=True)
subprocess.run(("/usr/bin/env", "sudo", "-v"), check=True)
except subprocess.CalledProcessError:
return False
SUDO_PROC = subprocess.Popen(
["while true; do sudo -v; sleep 2m; done"], shell=True
"while true; do sudo -v; sleep 2m; done", shell=True
)
atexit.register(cleanup_sudo, sudo_proc=SUDO_PROC)
return True
@ -631,32 +654,32 @@ def create_executable_script(dest_filename, script_contents):
tempf_name = tempf.name
try:
subprocess.run(
[
(
"/usr/bin/env",
"sudo",
"cp",
tempf_name,
dest_filename,
],
),
check=True,
)
subprocess.run(
[
(
"/usr/bin/env",
"sudo",
"chmod",
"a+rx",
dest_filename,
],
),
check=True,
)
subprocess.run(
[
(
"/usr/bin/env",
"rm",
"-f",
tempf_name,
],
),
check=True,
)
except subprocess.CalledProcessError:
@ -673,13 +696,14 @@ def setup_ccache(chroot):
# set up ccache stuff
try:
subprocess.run(
[
(
"/usr/bin/env",
"sudo",
"sed",
"-i",
"/^BUILDENV=/s/!ccache/ccache/",
f"{chroot}/root/etc/makepkg.conf",
],
),
check=True,
)
except subprocess.CalledProcessError:
@ -693,13 +717,14 @@ def cleanup_ccache(chroot):
# cleanup ccache stuff
try:
subprocess.run(
[
(
"/usr/bin/env",
"sudo",
"sed",
"-i",
"/^BUILDENV=/s/ ccache/ !ccache/",
f"{chroot}/root/etc/makepkg.conf",
],
),
check=True,
)
except subprocess.CalledProcessError:
@ -750,7 +775,8 @@ def cleanup_sccache(chroot):
# cleanup sccache stuff
try:
subprocess.run(
[
(
"/usr/bin/env",
"sudo",
"rm",
"-f",
@ -762,7 +788,7 @@ def cleanup_sccache(chroot):
f"{chroot}/root/usr/local/bin/clang",
f"{chroot}/root/usr/local/bin/clang++",
f"{chroot}/root/usr/local/bin/rustc",
],
),
check=False,
)
except BaseException:
@ -798,6 +824,7 @@ def update_pkg_list(
cleanup_sccache(other_state["chroot"])
command_list = [
"/usr/bin/env",
"makechrootpkg",
"-c",
"-r",
@ -815,8 +842,8 @@ def update_pkg_list(
if not dep_fullpath:
log_print('ERROR: Failed to get dep "{}"'.format(dep))
sys.exit(1)
command_list.insert(1, "-I")
command_list.insert(2, dep_fullpath)
command_list.insert(2, "-I")
command_list.insert(3, dep_fullpath)
for aur_dep in pkg_state[pkg]["aur_deps"]:
aur_dep_fullpath = get_latest_pkg(
aur_dep, other_state["pkg_out_dir"]
@ -824,15 +851,15 @@ def update_pkg_list(
if not aur_dep_fullpath:
log_print('ERROR: Failed to get aur_dep "{}"'.format(aur_dep))
sys.exit(1)
command_list.insert(1, "-I")
command_list.insert(2, aur_dep_fullpath)
command_list.insert(2, "-I")
command_list.insert(3, aur_dep_fullpath)
if "ccache_dir" in pkg_state[pkg]:
command_list.insert(1, "-d")
command_list.insert(2, f'{pkg_state[pkg]["ccache_dir"]}:/ccache')
command_list.insert(2, "-d")
command_list.insert(3, f'{pkg_state[pkg]["ccache_dir"]}:/ccache')
post_command_list.insert(1, "CCACHE_DIR=/ccache")
elif "sccache_dir" in pkg_state[pkg]:
command_list.insert(1, "-d")
command_list.insert(2, f'{pkg_state[pkg]["sccache_dir"]}:/sccache')
command_list.insert(2, "-d")
command_list.insert(3, f'{pkg_state[pkg]["sccache_dir"]}:/sccache')
post_command_list.insert(1, "SCCACHE_DIR=/sccache")
post_command_list.insert(
2, f'SCCACHE_CACHE_SIZE={pkg_state[pkg]["sccache_cache_size"]}'
@ -918,7 +945,7 @@ def update_pkg_list(
log_print(f'Signing "{other_state["repo"]}"...')
try:
subprocess.run(
[
(
"/usr/bin/rm",
"-f",
str(
@ -927,11 +954,12 @@ def update_pkg_list(
f"{other_state['repo']}.sig",
)
),
]
)
)
subprocess.run(
[
"/usr/bin/gpg",
(
"/usr/bin/env",
"gpg",
"--batch",
"--passphrase-fd",
"0",
@ -942,10 +970,10 @@ def update_pkg_list(
"--detach-sign",
str(
os.path.join(
other_state["pkg_out_dir"], f"{other_state['repo']}"
other_state["pkg_out_dir"], other_state["repo"]
)
),
],
),
check=True,
input=signing_gpg_pass,
text=True,
@ -955,17 +983,18 @@ def update_pkg_list(
if repo_sig_name.rfind("/") != -1:
repo_sig_name = repo_sig_name.rsplit(sep="/", maxsplit=1)[1]
subprocess.run(
[
"/usr/bin/ln",
(
"/usr/bin/env",
"ln",
"-sf",
repo_sig_name,
str(
os.path.join(
other_state["pkg_out_dir"], f"{other_state['repo']}"
other_state["pkg_out_dir"], other_state["repo"]
)
).removesuffix(".tar")
+ ".sig",
]
)
)
except subprocess.CalledProcessError:
log_print(f'WARNING: Failed to sign "{other_state["repo"]}"')
@ -1067,7 +1096,8 @@ def test_gpg_passphrase(signing_gpg_dir, signing_key_fp, passphrase):
tempnf.flush()
try:
subprocess.run(
[
(
"/usr/bin/env",
"gpg",
"--batch",
"--passphrase-fd",
@ -1078,7 +1108,7 @@ def test_gpg_passphrase(signing_gpg_dir, signing_key_fp, passphrase):
signing_key_fp,
"--detach-sign",
tempnf.name,
],
),
check=True,
input=passphrase,
text=True,
@ -1320,12 +1350,13 @@ if __name__ == "__main__":
log_print("Updating the chroot...")
try:
subprocess.run(
[
(
"/usr/bin/env",
"arch-nspawn",
"{}/root".format(other_state["chroot"]),
"pacman",
"-Syu",
],
),
check=True,
)
except subprocess.CalledProcessError: