[Add] First commit
This commit is contained in:
71
scripts/patch/apply.py
Normal file
71
scripts/patch/apply.py
Normal file
@ -0,0 +1,71 @@
|
||||
import os, sys
|
||||
import subprocess
|
||||
import re
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
from io import StringIO
|
||||
from traceback import print_tb
|
||||
|
||||
# https://github.com/techtonik/python-patch/
|
||||
# with the patch below to support creating and deleting files
|
||||
# https://storage.googleapis.com/google-code-attachments/python-patch/issue-28/comment-2/patch-support-new-files-20141214.diff
|
||||
import patch
|
||||
|
||||
VIRTUAL_ENVIRONMENT_PATH = Path('venv')
|
||||
PATCH_FILE = 'pyocd.diff'
|
||||
|
||||
|
||||
def run(venv, revert=False):
|
||||
|
||||
patchdir = os.path.dirname(os.path.abspath(__file__))
|
||||
patchset = patch.fromfile(Path(patchdir) / PATCH_FILE)
|
||||
if not patchset:
|
||||
print('Failed to read patch file')
|
||||
patch.setdebug()
|
||||
patchset = patch.fromfile(Path(patchdir) / PATCH_FILE)
|
||||
return 1
|
||||
try:
|
||||
if revert:
|
||||
ret = patchset.revert(root=venv)
|
||||
else:
|
||||
ret = patchset.apply(root=venv)
|
||||
if not ret:
|
||||
raise AssertionError('Failed to patch')
|
||||
except:
|
||||
exc_type, exc_value, exc_tb = sys.exc_info()
|
||||
print(f'Exception: {exc_type} {exc_value}')
|
||||
print_tb(exc_tb)
|
||||
print('Retry with debug log on:')
|
||||
patch.setdebug()
|
||||
if revert:
|
||||
patchset.revert(root=venv)
|
||||
else:
|
||||
patchset.apply(root=venv)
|
||||
else:
|
||||
print('Patched successfully')
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--revert', action='store_true', help='revert the changes')
|
||||
parser.add_argument('--venv', help='the path to the virtual environment')
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.venv:
|
||||
venv = args.venv
|
||||
else:
|
||||
try:
|
||||
venv = subprocess.check_output('poetry env info --path', shell=True, universal_newlines=True).strip()
|
||||
except subprocess.CalledProcessError:
|
||||
#print(f'poetry not found, use {VIRTUAL_ENVIRONMENT_PATH} instead')
|
||||
venv = VIRTUAL_ENVIRONMENT_PATH
|
||||
|
||||
venv = Path(venv)
|
||||
if os.name == 'nt':
|
||||
venv = venv / 'Lib'
|
||||
elif os.name == 'posix':
|
||||
venv = venv / 'lib' / 'python{}.{}'.format(sys.version_info.major, sys.version_info.minor)
|
||||
else:
|
||||
print('Unknown OS {}'.format(os.name))
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(run(venv, args.revert))
|
||||
Reference in New Issue
Block a user