mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-11-02 19:37:51 +00:00 
			
		
		
		
	make openwrt/profiles relative so moving or renaming the repo directory won't break the symlink Signed-off-by: Shubham Vishwakarma <shubhamvis98@fossfrog.in>
		
			
				
	
	
		
			165 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
from pathlib import Path
 | 
						|
from subprocess import run
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import yaml
 | 
						|
import getopt
 | 
						|
 | 
						|
def clone_tree():
 | 
						|
	try:
 | 
						|
		makefile = openwrt +"/Makefile"
 | 
						|
		if Path(makefile).is_file():
 | 
						|
			print("### OpenWrt checkout is already present. Please run --rebase")
 | 
						|
			sys.exit(-1)
 | 
						|
 | 
						|
		print("### Cloning tree")
 | 
						|
		Path(openwrt).mkdir(exist_ok=True, parents=True)
 | 
						|
		if git_ref != "":
 | 
						|
			run(["git", "clone", "--reference", git_ref, config["repo"], openwrt], check=True)
 | 
						|
		else:
 | 
						|
			run(["git", "clone", config["repo"], openwrt], check=True)
 | 
						|
		print("### Clone done")
 | 
						|
	except:
 | 
						|
		print("### Cloning the tree failed")
 | 
						|
		sys.exit(1)
 | 
						|
 | 
						|
def fetch_tree():
 | 
						|
	try:
 | 
						|
		makefile = openwrt +"/Makefile"
 | 
						|
		if not Path(makefile).is_file():
 | 
						|
			print("### OpenWrt checkout is not present. Please run --setup")
 | 
						|
			sys.exit(-1)
 | 
						|
 | 
						|
		print("### Fetch tree")
 | 
						|
		os.chdir(openwrt)
 | 
						|
		run(["git", "fetch"], check=True)
 | 
						|
		print("### Fetch done")
 | 
						|
	except:
 | 
						|
		print("### Fetching the tree failed")
 | 
						|
		sys.exit(1)
 | 
						|
	finally:
 | 
						|
		os.chdir(base_dir)
 | 
						|
 | 
						|
def reset_tree():
 | 
						|
	try:
 | 
						|
		print("### Resetting tree")
 | 
						|
		os.chdir(openwrt)
 | 
						|
		run(
 | 
						|
			["git", "checkout", config["branch"]], check=True,
 | 
						|
		)
 | 
						|
		run(
 | 
						|
			["git", "reset", "--hard", config.get("revision", config["branch"])],
 | 
						|
			check=True,
 | 
						|
		)
 | 
						|
		run(
 | 
						|
			["rm", "-r", "profiles"],
 | 
						|
		)
 | 
						|
		print("### Reset done")
 | 
						|
	except:
 | 
						|
		print("### Resetting tree failed")
 | 
						|
		sys.exit(1)
 | 
						|
	finally:
 | 
						|
		os.chdir(base_dir)
 | 
						|
 | 
						|
def setup_tree():
 | 
						|
	try:
 | 
						|
		print("### Applying patches")
 | 
						|
 | 
						|
		patches = []
 | 
						|
		for folder in config.get("patch_folders", []):
 | 
						|
			patch_folder = base_dir / folder
 | 
						|
			if not patch_folder.is_dir():
 | 
						|
				print(f"Patch folder {patch_folder} not found")
 | 
						|
				sys.exit(-1)
 | 
						|
 | 
						|
			print(f"Adding patches from {patch_folder}")
 | 
						|
 | 
						|
			patches.extend(
 | 
						|
				sorted(list((base_dir / folder).glob("*.patch")), key=os.path.basename)
 | 
						|
		)
 | 
						|
 | 
						|
		print(f"Found {len(patches)} patches")
 | 
						|
 | 
						|
		os.chdir(openwrt)
 | 
						|
 | 
						|
		for patch in patches:
 | 
						|
			run(["git", "am", "-3", str(base_dir / patch)], check=True)
 | 
						|
		run(
 | 
						|
			["ln", "-rs", profiles, "profiles"], check=True,
 | 
						|
		)
 | 
						|
		print("### Patches done")
 | 
						|
	except:
 | 
						|
		print("### Setting up the tree failed")
 | 
						|
		sys.exit(1)
 | 
						|
	finally:
 | 
						|
		os.chdir(base_dir)
 | 
						|
 | 
						|
def update_patches():
 | 
						|
	try:
 | 
						|
		print("### Updating patches")
 | 
						|
		run(
 | 
						|
			["rm", "-r", "patches"], check=True,
 | 
						|
		)
 | 
						|
		os.chdir(openwrt)
 | 
						|
		run(
 | 
						|
			["git", "format-patch", config.get("revision", config["branch"]), "-o", base_dir / "patches"],
 | 
						|
			check=True,
 | 
						|
		)
 | 
						|
		print("### Updating done")
 | 
						|
	except:
 | 
						|
		print("### updating failed failed")
 | 
						|
		sys.exit(1)
 | 
						|
	finally:
 | 
						|
		os.chdir(base_dir)
 | 
						|
 | 
						|
 | 
						|
base_dir = Path.cwd().absolute()
 | 
						|
setup = False
 | 
						|
update = False
 | 
						|
rebase = False
 | 
						|
config = "config.yml"
 | 
						|
profiles = base_dir / "profiles"
 | 
						|
openwrt = "openwrt"
 | 
						|
git_ref = ""
 | 
						|
 | 
						|
try:
 | 
						|
	opts, args = getopt.getopt(sys.argv[1:], "srd:c:f:u2", ["setup", "rebase", "config=", "folder=", "reference=", "update", "20x", "directory=" ])
 | 
						|
except getopt.GetoptError as err:
 | 
						|
	print(err)
 | 
						|
	sys.exit(2)
 | 
						|
 | 
						|
 | 
						|
for o, a in opts:
 | 
						|
	if o in ("-s", "--setup"):
 | 
						|
		setup = True
 | 
						|
	elif o in ("-r", "--rebase"):
 | 
						|
		rebase = True
 | 
						|
	elif o in ("-u", "--update"):
 | 
						|
		update = True
 | 
						|
	elif o in ("-c", "--config"):
 | 
						|
		config = a
 | 
						|
	elif o in ("--reference"):
 | 
						|
		git_ref = a
 | 
						|
	elif o in ("-d", "--directory"):
 | 
						|
		openwrt = a
 | 
						|
	else:
 | 
						|
		assert False, "unhandled option"
 | 
						|
 | 
						|
if not Path(config).is_file():
 | 
						|
	print(f"Missing {config}")
 | 
						|
	sys.exit(1)
 | 
						|
config = yaml.safe_load(open(config))
 | 
						|
 | 
						|
if setup:
 | 
						|
	clone_tree()
 | 
						|
	reset_tree()
 | 
						|
	setup_tree()
 | 
						|
elif rebase:
 | 
						|
	fetch_tree()
 | 
						|
	reset_tree()
 | 
						|
	setup_tree()
 | 
						|
elif update:
 | 
						|
	update_patches()
 |