You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.8 KiB
94 lines
2.8 KiB
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Updates the ExoPlayer version in platform/external/exoplayer."""
|
|
import argparse
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import atexit
|
|
import shutil
|
|
import re
|
|
import datetime
|
|
|
|
TEMPORARY_TREE_CHECKOUT_DIR = ".temp_tree/"
|
|
TREE_LOCATION = "tree/"
|
|
METADATA_FILE = "METADATA"
|
|
|
|
def run(command, check=True):
|
|
print(f"Running: {command}")
|
|
return (subprocess.run(
|
|
command, shell=True, check=check, capture_output=True, text=True)
|
|
.stdout.strip())
|
|
|
|
# Argument parsing.
|
|
parser = argparse.ArgumentParser(
|
|
description=f"Update the ExoPlayer version in the {TREE_LOCATION}"
|
|
" directory and stage changes for commit.")
|
|
parser.add_argument(
|
|
"--tag",
|
|
help="The tag to update the ExoPlayer version to.")
|
|
parser.add_argument(
|
|
"--commit",
|
|
help="The commit SHA to update the ExoPlayer version to.")
|
|
parser.add_argument(
|
|
"--branch",
|
|
help="The branch to create for the change.",
|
|
default="update-exoplayer")
|
|
args = parser.parse_args()
|
|
|
|
script_directory = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
os.chdir(script_directory)
|
|
|
|
if (args.tag is None) == (args.commit is None):
|
|
parser.print_help()
|
|
sys.exit("\nError: Please provide the tag or the commit. But not both.")
|
|
|
|
# Check whether the branch exists, and abort if it does.
|
|
if run(f"git rev-parse --verify --quiet {args.branch}", check=False):
|
|
parser.print_help()
|
|
sys.exit(f"\nBranch {args.branch} already exists. Please delete, or change "
|
|
"branch.")
|
|
|
|
run(f"repo start {args.branch}")
|
|
|
|
# Cleanup function.
|
|
def cleanup():
|
|
print(f"Restoring branch {args.branch}")
|
|
run(f"git checkout {args.branch}")
|
|
shutil.rmtree(TEMPORARY_TREE_CHECKOUT_DIR, ignore_errors=True)
|
|
atexit.register(cleanup)
|
|
|
|
# Update remote branches.
|
|
run("git fetch --all --tags")
|
|
if args.tag:
|
|
# Get the commit SHA associated to the tag.
|
|
commit = run(f"git rev-list -n 1 {args.tag}")
|
|
else: # a commit SHA was provided.
|
|
commit = args.commit
|
|
|
|
# Checkout the version we want to update to.
|
|
run(f"git checkout {commit}")
|
|
# Checkout all files into a temporary dir.
|
|
run(f"git checkout-index -a --prefix={TEMPORARY_TREE_CHECKOUT_DIR}")
|
|
run(f"git checkout {args.branch}")
|
|
shutil.rmtree(TREE_LOCATION)
|
|
run(f"mv {TEMPORARY_TREE_CHECKOUT_DIR} {TREE_LOCATION}")
|
|
run(f"git add {TREE_LOCATION} {METADATA_FILE}")
|
|
|
|
with open(METADATA_FILE) as metadata_file:
|
|
metadata_lines = metadata_file.readlines()
|
|
|
|
# Update the metadata file.
|
|
today = datetime.date.today()
|
|
with open(METADATA_FILE, "w") as metadata_file:
|
|
for line in metadata_lines:
|
|
line = re.sub(
|
|
r"version: \".+\"", f"version: \"{args.tag or commit}\"", line)
|
|
line = re.sub(r"last_upgrade_date {.+}", f"last_upgrade_date "
|
|
f"{{ year: {today.year} month: {today.month} day: {today.day} }}",
|
|
line)
|
|
metadata_file.write(line)
|
|
|
|
run(f"git add {METADATA_FILE}")
|
|
print("All done. Ready to commit.")
|