mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 01:22:25 +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()
|