From d04f390b49c4eff94b633a7fb1189bee27dc3605 Mon Sep 17 00:00:00 2001 From: poikilos <7557867+poikilos@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:25:22 -0500 Subject: [PATCH] Add --skip-missing option. Add color to differs/missing messages & improve wording. --- pyenliven/mtpatches.py | 70 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/pyenliven/mtpatches.py b/pyenliven/mtpatches.py index 20fc237..e373140 100755 --- a/pyenliven/mtpatches.py +++ b/pyenliven/mtpatches.py @@ -1,4 +1,16 @@ #!/usr/bin/env python3 +''' +mtpatches +--------- +Check for Minetest game patches stored in the form of regular +text/binary files that can be directly copied to the program. + +Usage: +mtpatches.py [options] + +Options: +--skip-missing Do not list files in heads that are not in sources. +''' import os import platform import shlex @@ -6,6 +18,26 @@ import shutil import sys import subprocess + +class Fore: + """Print these to change console color + (emulate colorama) + See + + Example: Use Fore.RED as if you had done + `from colorama import Fore`, but you don't need to + import anything from colorama. + """ + RED = "\033[31m" + GREEN = "\033[32m" + YELLOW = "\033[33m" + BLUE = "\033[34m" + PURPLE = "\033[35m" + CYAN = "\033[36m" + WHITE = "\033[37m" + RESET = "\033[0m" + + MODULE_DIR = os.path.dirname(os.path.realpath(__file__)) REPO_DIR = os.path.dirname(MODULE_DIR) if __name__ == "__main__": @@ -355,6 +387,10 @@ def find_modpack(parent, name): ) +def usage(): + echo0(__doc__) + + def main(): bases = ( "/opt/minebest/assemble/bucket_game", @@ -366,10 +402,18 @@ def main(): os.path.join(HOME, "metaprojects", "pull-requests", "Bucket_Game-branches"), ) - return check_if_head_files_applied(bases, head_parents) + for arg in sys.argv[1:]: + if arg == "--skip-missing": + skip_missing = True + else: + usage() + echo0("Error: unknown argument {}".format(arg)) + return 1 + return check_if_head_files_applied(bases, head_parents, + skip_missing=skip_missing) -def check_if_head_files_applied(bases, head_parents): +def check_if_head_files_applied(bases, head_parents, skip_missing=False): """Check if head files are applied. Args: @@ -510,14 +554,26 @@ def check_if_head_files_applied(bases, head_parents): diffs = diff_only_head(base_sub_path, patch_root, log_level=-1) for diff in diffs: missing = bool(diff.get("new")) - adjective = "missing" if missing else "differs" - # TODO: echo0(" * {}: {}".format(adjective, diff)) + if missing: + if skip_missing: + continue + color = Fore.GREEN + else: + color = Fore.YELLOW + why = "MISSING" if missing else "differs" + # echo0(" * {}: {}".format(why, diff)) # if not missing: + if diff['rel'].startswith(os.path.sep): + raise NotImplementedError( + "rel cannot start with {}" + " or it will override base or head." + "".format(os.path.sep) + ) echo0(" "+shlex.join([ "meld", - os.path.join(base, diff['rel']), - os.path.join(head, diff['rel']), - ])+" # base (original) vs head (patch)") + os.path.join(base_sub_path, diff['rel']), + os.path.join(head_sub_path, diff['rel']), + ])+"{} # {} in base (original) vs head (patch) {}".format(color, why, Fore.RESET)) # endregion check whether base has it installed return 0