45 lines
1.5 KiB
Python
Executable File
45 lines
1.5 KiB
Python
Executable File
import subprocess
|
|
import yaml
|
|
import os
|
|
import argparse
|
|
|
|
# Set up argument parsing
|
|
parser = argparse.ArgumentParser(
|
|
description="Checkout modules from target branch that are not in source branch."
|
|
)
|
|
parser.add_argument("yaml_file", help="Path to the YAML file")
|
|
parser.add_argument("source_branch", help="The source branch")
|
|
parser.add_argument("target_branch", help="The target branch")
|
|
parser.add_argument("root_repo", help="Path to the root repository")
|
|
|
|
# Parse the arguments
|
|
args = parser.parse_args()
|
|
|
|
yaml_file = args.yaml_file
|
|
source_branch = args.source_branch
|
|
target_branch = args.target_branch
|
|
root_repo = args.root_repo
|
|
|
|
# Change to the repository directory
|
|
os.chdir(root_repo)
|
|
# Read YAML file
|
|
with open(yaml_file, "r") as file:
|
|
data = yaml.safe_load(file)
|
|
|
|
# Extract module lists for source and target branches
|
|
modules_source = data["branches"].get(source_branch, {}).get("modules", [])
|
|
modules_target = data["branches"].get(target_branch, {}).get("modules", [])
|
|
|
|
# Ensure the latest changes are fetched
|
|
subprocess.run(["git", "fetch", "origin"], check=True)
|
|
|
|
# Checkout source branch first
|
|
print(f"Checking out source branch: {source_branch}")
|
|
subprocess.run(["git", "checkout", source_branch], check=True)
|
|
|
|
# Checkout modules in target_branch that are not in source_branch
|
|
for module in modules_target:
|
|
if module not in modules_source:
|
|
print(f"Checking out module: {module}")
|
|
subprocess.run(["git", "checkout", target_branch, "--", module], check=True)
|