| #!/usr/bin/env python3 | |
| # | |
| # Conversion script to update SRC_URI to add branch to git urls | |
| # | |
| # Copyright (C) 2021 Richard Purdie | |
| # | |
| # SPDX-License-Identifier: GPL-2.0-only | |
| # | |
| import re | |
| import os | |
| import sys | |
| import tempfile | |
| import shutil | |
| import mimetypes | |
| if len(sys.argv) < 2: | |
| print("Please specify a directory to run the conversion script against.") | |
| sys.exit(1) | |
| def processfile(fn): | |
| def matchline(line): | |
| if "MIRROR" in line or ".*" in line or "GNOME_GIT" in line: | |
| return False | |
| return True | |
| print("processing file '%s'" % fn) | |
| try: | |
| if "distro_alias.inc" in fn or "linux-yocto-custom.bb" in fn: | |
| return | |
| fh, abs_path = tempfile.mkstemp() | |
| modified = False | |
| with os.fdopen(fh, 'w') as new_file: | |
| with open(fn, "r") as old_file: | |
| for line in old_file: | |
| if ("git://" in line or "gitsm://" in line) and "branch=" not in line and matchline(line): | |
| if line.endswith('"\n'): | |
| line = line.replace('"\n', ';branch=master"\n') | |
| elif re.search('\s*\\\\$', line): | |
| line = re.sub('\s*\\\\$', ';branch=master \\\\', line) | |
| modified = True | |
| if ("git://" in line or "gitsm://" in line) and "github.com" in line and "protocol=https" not in line and matchline(line): | |
| if "protocol=git" in line: | |
| line = line.replace('protocol=git', 'protocol=https') | |
| elif line.endswith('"\n'): | |
| line = line.replace('"\n', ';protocol=https"\n') | |
| elif re.search('\s*\\\\$', line): | |
| line = re.sub('\s*\\\\$', ';protocol=https \\\\', line) | |
| modified = True | |
| new_file.write(line) | |
| if modified: | |
| shutil.copymode(fn, abs_path) | |
| os.remove(fn) | |
| shutil.move(abs_path, fn) | |
| except UnicodeDecodeError: | |
| pass | |
| ourname = os.path.basename(sys.argv[0]) | |
| ourversion = "0.1" | |
| if os.path.isfile(sys.argv[1]): | |
| processfile(sys.argv[1]) | |
| sys.exit(0) | |
| for targetdir in sys.argv[1:]: | |
| print("processing directory '%s'" % targetdir) | |
| for root, dirs, files in os.walk(targetdir): | |
| for name in files: | |
| if name == ourname: | |
| continue | |
| fn = os.path.join(root, name) | |
| if os.path.islink(fn): | |
| continue | |
| if "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff"): | |
| continue | |
| processfile(fn) | |
| print("All files processed with version %s" % ourversion) |