mirror of
https://github.com/elliotnunn/tbxi.git
synced 2024-09-29 04:54:46 +00:00
Make patch algorithm way cooler
This commit is contained in:
parent
9f8b423994
commit
fe8a281d2d
@ -2,6 +2,7 @@ import importlib
|
||||
|
||||
from subprocess import run, PIPE
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
from os import path
|
||||
|
||||
@ -18,6 +19,17 @@ class WrongFormat(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def strip_patch_name_ext(name):
|
||||
# We need to match patch filenames to other filenames using fnmatch,
|
||||
# but first we need to remove '.patch.sh' or '.patch' from the title
|
||||
|
||||
# If it isn't a patch, return None
|
||||
|
||||
for i in range(2):
|
||||
name, ext = path.splitext(name)
|
||||
if ext.lower() == '.patch': return name
|
||||
|
||||
|
||||
def build_dir(p):
|
||||
for fmt in FORMATS:
|
||||
mod = importlib.import_module('..%s_build' % fmt, __name__)
|
||||
@ -52,11 +64,23 @@ def build_path(p):
|
||||
# Search the directory of the file for executable patches
|
||||
for sib in sorted(os.scandir(parent), key=lambda ent: ent.name):
|
||||
# Does the filename match?
|
||||
if sib.name.startswith(name) and 'patch' in sib.name[len(name):]:
|
||||
pattern = strip_patch_name_ext(sib.name)
|
||||
if pattern and fnmatch.fnmatch(name, pattern):
|
||||
# This is a bit unsafe, so prompt the user (to pipe in `yes`...)
|
||||
if input('Apply %s to %s? [y/N] ' % (sib.name, name)).lower().startswith('y'):
|
||||
result = run([sib.path], cwd=parent, input=data, stdout=PIPE, check=True)
|
||||
data = result.stdout
|
||||
# The script is told the original filename, but it should READ FROM STDIN!
|
||||
cmd = [sib.path, name]
|
||||
|
||||
# Run the script as a unixy filter
|
||||
result = run(cmd, cwd=parent, input=data, stdout=PIPE)
|
||||
|
||||
# Return 0 to apply stdout, 1 to nop, anything else to fail
|
||||
if result.returncode == 0:
|
||||
data = result.stdout
|
||||
elif result.returncode == 1:
|
||||
pass
|
||||
else:
|
||||
result.check_returncode()
|
||||
|
||||
return data
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user