1#!/usr/bin/env python3 2# 3# Conversion script to update SRC_URI to add branch to git urls 4# 5# Copyright (C) 2021 Richard Purdie 6# 7# SPDX-License-Identifier: GPL-2.0-only 8# 9 10import re 11import os 12import sys 13import tempfile 14import shutil 15import mimetypes 16 17if len(sys.argv) < 2: 18 print("Please specify a directory to run the conversion script against.") 19 sys.exit(1) 20 21def processfile(fn): 22 def matchline(line): 23 if "MIRROR" in line or ".*" in line or "GNOME_GIT" in line: 24 return False 25 return True 26 print("processing file '%s'" % fn) 27 try: 28 if "distro_alias.inc" in fn or "linux-yocto-custom.bb" in fn: 29 return 30 fh, abs_path = tempfile.mkstemp() 31 modified = False 32 with os.fdopen(fh, 'w') as new_file: 33 with open(fn, "r") as old_file: 34 for line in old_file: 35 if ("git://" in line or "gitsm://" in line) and "branch=" not in line and matchline(line): 36 if line.endswith('"\n'): 37 line = line.replace('"\n', ';branch=master"\n') 38 elif re.search('\s*\\\\$', line): 39 line = re.sub('\s*\\\\$', ';branch=master \\\\', line) 40 modified = True 41 if ("git://" in line or "gitsm://" in line) and "github.com" in line and "protocol=https" not in line and matchline(line): 42 if "protocol=git" in line: 43 line = line.replace('protocol=git', 'protocol=https') 44 elif line.endswith('"\n'): 45 line = line.replace('"\n', ';protocol=https"\n') 46 elif re.search('\s*\\\\$', line): 47 line = re.sub('\s*\\\\$', ';protocol=https \\\\', line) 48 modified = True 49 new_file.write(line) 50 if modified: 51 shutil.copymode(fn, abs_path) 52 os.remove(fn) 53 shutil.move(abs_path, fn) 54 except UnicodeDecodeError: 55 pass 56 57ourname = os.path.basename(sys.argv[0]) 58ourversion = "0.1" 59 60if os.path.isfile(sys.argv[1]): 61 processfile(sys.argv[1]) 62 sys.exit(0) 63 64for targetdir in sys.argv[1:]: 65 print("processing directory '%s'" % targetdir) 66 for root, dirs, files in os.walk(targetdir): 67 for name in files: 68 if name == ourname: 69 continue 70 fn = os.path.join(root, name) 71 if os.path.islink(fn): 72 continue 73 if "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff"): 74 continue 75 processfile(fn) 76 77print("All files processed with version %s" % ourversion) 78