123 lines
3.9 KiB
Python
Executable File
123 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Downloads a new ExoPlayer copy into platform/exoplayer/external.
|
|
|
|
The copy is put in tree_<SHA>/ directory, where <SHA> identifies the downloaded
|
|
commit.
|
|
"""
|
|
import argparse
|
|
import atexit
|
|
import datetime
|
|
import logging
|
|
import os
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
EXOPLAYER_SOURCE_REPO = "https://github.com/google/ExoPlayer.git"
|
|
METADATA_FILE = "METADATA"
|
|
SCRIPT_PARENT_DIRECTORY = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
TREE_LOCATION = "tree/"
|
|
|
|
|
|
def cd_to_script_parent_directory():
|
|
os.chdir(SCRIPT_PARENT_DIRECTORY)
|
|
|
|
|
|
def run(command, check=True):
|
|
logging.info(f"Running: $ {command}")
|
|
return (subprocess.run(
|
|
command, shell=True, check=check, capture_output=True,
|
|
text=True).stdout.strip())
|
|
|
|
|
|
def confirm_deletion_or_exit(files_to_delete):
|
|
print("The following files will not be added to exoplayer/external: \n" +
|
|
files_to_delete)
|
|
while True:
|
|
print("Please confirm [Y/n] ")
|
|
choice = input().lower()
|
|
if choice in ["y", "yes", ""]:
|
|
return
|
|
elif choice in ["n", "no"]:
|
|
sys.exit("User rejected the list of .mk files to exclude from the tree.")
|
|
else:
|
|
print("Please select y or n.")
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description=f"Downloads an ExoPlayer copy into the tree_<SHA>/ "
|
|
"directory, where <SHA> identifies the commit to download. This script "
|
|
"also stages the changes for commit. Either --tag or --commit must be "
|
|
"provided.")
|
|
refGroup = parser.add_mutually_exclusive_group(required=True)
|
|
refGroup.add_argument(
|
|
"--tag", help="The tag that identifies the ExoPlayer commit to download.")
|
|
refGroup.add_argument(
|
|
"--commit", help="The commit SHA of the ExoPlayer version to download.")
|
|
parser.add_argument(
|
|
"--branch",
|
|
help="The branch to create for the change.",
|
|
default="download-exoplayer")
|
|
args = parser.parse_args()
|
|
|
|
cd_to_script_parent_directory()
|
|
|
|
# Check whether the branch exists, and abort if it does.
|
|
if run(f"git rev-parse --verify --quiet {args.branch}", check=False):
|
|
sys.exit(f"\nBranch {args.branch} already exists. Please delete, or change "
|
|
"branch.")
|
|
|
|
if run(f"repo start {args.branch}"):
|
|
sys.exit(f"\nFailed to repo start {args.branch}. Check you don't have "
|
|
"uncommited changes in your current branch.")
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
logging.info(f"Created temporary directory {tmpdir}")
|
|
run("git clone --no-checkout --filter=tree:0 "
|
|
f"{EXOPLAYER_SOURCE_REPO} {tmpdir}")
|
|
os.chdir(tmpdir)
|
|
|
|
if args.tag:
|
|
# Get the commit SHA associated to the tag.
|
|
commit_sha = run(f"git rev-list -n 1 {args.tag}")
|
|
else: # A commit SHA was provided.
|
|
commit_sha = args.commit
|
|
|
|
# Checkout the version we want to update to.
|
|
run(f"git checkout {commit_sha}")
|
|
|
|
# Copy all files in the tree into tree_<SHA>.
|
|
shutil.rmtree(".git/", ignore_errors=True)
|
|
|
|
# Remove all Android.mk files in the exoplayer tree to avoid licensing issues.
|
|
mk_files_to_remove = run("find . -name \"*.mk\"")
|
|
confirm_deletion_or_exit(mk_files_to_remove)
|
|
run("find . -name \"*.mk\" -delete")
|
|
|
|
cd_to_script_parent_directory()
|
|
new_tree_location = f"tree_{commit_sha}"
|
|
run(f"mv {tmpdir} {new_tree_location}")
|
|
run(f"git add {new_tree_location}")
|
|
|
|
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_sha}\"",
|
|
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}")
|
|
logging.info("All done. Ready to commit.")
|