From 9433b5e797848546351ae3dc7602813191e01bf6 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sat, 8 Apr 2023 14:20:06 +0100 Subject: update : handle KeyboardInterrupt gracefully --- src/backend/syncenv.py | 108 ++++++++++++++++++++++++++++++++++++++++++++----- src/backend/update.py | 8 ++++ 2 files changed, 106 insertions(+), 10 deletions(-) diff --git a/src/backend/syncenv.py b/src/backend/syncenv.py index 25b418e..9e41b78 100644 --- a/src/backend/syncenv.py +++ b/src/backend/syncenv.py @@ -1,10 +1,18 @@ #!/usr/bin/python3 import os +import signal import subprocess import sisyphus.getfs +def sigint_handler(signal, frame): + sys.exit(0) + + +signal.signal(signal.SIGINT, sigint_handler) + + def g_repo(): os.chdir(sisyphus.getfs.g_src_dir) lcl_brch = subprocess.check_output( @@ -14,11 +22,27 @@ def g_repo(): g_exe1 = subprocess.Popen(['git', 'fetch', '--depth=1', 'origin'] + lcl_brch.decode().strip().split() + ['--quiet'], stdout=subprocess.PIPE) - g_exe1.wait() + try: + g_exe1.wait() + except KeyboardInterrupt: + g_exe1.terminate() + try: + g_exe1.wait(1) + except subprocess.TimeoutExpired: + g_exe1.kill() + sys.exit() g_exe2 = subprocess.Popen(['git', 'reset', '--hard'] + rmt_brch.decode().strip( ).replace('refs/remotes/', '').split() + ['--quiet'], stdout=subprocess.PIPE) - g_exe2.wait() + try: + g_exe2.wait() + except KeyboardInterrupt: + g_exe2.terminate() + try: + g_exe2.wait() + except subprocess.TimeoutExpired: + g_exe2.kill() + sys.exit() def r_repo(): @@ -30,11 +54,27 @@ def r_repo(): g_exe1 = subprocess.Popen(['git', 'fetch', '--depth=1', 'origin'] + lcl_brch.decode().strip().split() + ['--quiet'], stdout=subprocess.PIPE) - g_exe1.wait() + try: + g_exe1.wait() + except KeyboardInterrupt: + g_exe1.terminate() + try: + g_exe1.wait(1) + except subprocess.TimeoutExpired: + g_exe1.kill() + sys.exit() g_exe2 = subprocess.Popen(['git', 'reset', '--hard'] + rmt_brch.decode().strip( ).replace('refs/remotes/', '').split() + ['--quiet'], stdout=subprocess.PIPE) - g_exe2.wait() + try: + g_exe2.wait() + except KeyboardInterrupt: + g_exe2.terminate() + try: + g_exe2.wait(1) + except subprocess.TimeoutExpired: + g_exe2.kill() + sys.exit() def p_cfg_repo(): @@ -45,19 +85,67 @@ def p_cfg_repo(): ['git', 'rev-parse', '--symbolic-full-name', '@{u}']) g_exe1 = subprocess.Popen(['git', 'stash'], stdout=subprocess.PIPE) - g_exe1.wait() + try: + g_exe1.wait() + except KeyboardInterrupt: + g_exe1.terminate() + try: + g_exe1.wait(1) + except subprocess.TimeoutExpired: + g_exe1.kill() + sys.exit() g_exe2 = subprocess.Popen(['git', 'fetch', '--depth=1', 'origin'] + lcl_brch.decode().strip().split() + ['--quiet'], stdout=subprocess.PIPE) - g_exe2.wait() + try: + g_exe2.wait() + except KeyboardInterrupt: + g_exe2.terminate() + try: + g_exe2.wait(1) + except subprocess.TimeoutExpired: + g_exe2.kill() + sys.exit() g_exe3 = subprocess.Popen(['git', 'reset', '--hard'] + rmt_brch.decode().strip( ).replace('refs/remotes/', '').split() + ['--quiet'], stdout=subprocess.PIPE) - g_exe3.wait() + try: + g_exe3.wait() + except KeyboardInterrupt: + g_exe3.terminate() + try: + g_exe3.wait(1) + except subprocess.TimeoutExpired: + g_exe3.kill() + sys.exit() g_exe4 = subprocess.Popen( ['git', 'stash', 'apply'], stdout=subprocess.PIPE) - g_exe4.wait() + try: + g_exe4.wait() + except KeyboardInterrupt: + g_exe4.terminate() + try: + g_exe4.wait(1) + except subprocess.TimeoutExpired: + g_exe4.kill() + sys.exit() g_exe5 = subprocess.Popen( ['git', 'stash', 'clear'], stdout=subprocess.PIPE) - g_exe5.wait() + try: + g_exe5.wait() + except KeyboardInterrupt: + g_exe5.terminate() + try: + g_exe5.wait(1) + except subprocess.TimeoutExpired: + g_exe5.kill() + sys.exit() g_exe6 = subprocess.Popen( ['git', 'gc', '--prune=now', '--quiet'], stdout=subprocess.PIPE) - g_exe6.wait() + try: + g_exe6.wait() + except KeyboardInterrupt: + g_exe6.terminate() + try: + g_exe6.wait(1) + except subprocess.TimeoutExpired: + g_exe6.kill() + sys.exit() diff --git a/src/backend/update.py b/src/backend/update.py index 54e07e3..0c25068 100644 --- a/src/backend/update.py +++ b/src/backend/update.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 import animation +import signal import sys import time import sisyphus.checkenv @@ -11,6 +12,13 @@ import sisyphus.syncdb import sisyphus.syncenv +def sigint_handler(signal, frame): + sys.exit(0) + + +signal.signal(signal.SIGINT, sigint_handler) + + def sync_evrth(): sisyphus.syncenv.g_repo() sisyphus.syncenv.r_repo() -- cgit v1.2.3