mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-29 17:42:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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", "-s", 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()
 | 
