Source code

Revision control

Copy as Markdown

Other Tools

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import argparse
import os
import re
import shutil
from run_operations import run_git, run_shell
# This script fetches the moz-libwebrtc github repro with the expected
# upstream remote and branch-heads setup. This is used by both the
# prep_repo.sh script as well as the restore_patch_stack.py script.
#
# For speed and conservation of network resources, after fetching all
# the data, a tar of the repo is made and used if available.
def fetch_repo(github_path, force_fetch, tar_path):
capture_output = False
# check for pre-existing repo - make sure we force the removal
if force_fetch and os.path.exists(github_path):
print(f"Removing existing repo: {github_path}")
shutil.rmtree(github_path)
if not os.path.exists(github_path):
# check for pre-existing tar, use it if we have it
if os.path.exists(tar_path):
print("Using tar file to reconstitute repo")
cmd = f"cd {os.path.dirname(github_path)} ; tar --extract --gunzip --file={os.path.basename(tar_path)}"
run_shell(cmd, capture_output)
else:
print("Cloning github repo")
run_shell(
f"git clone https://github.com/mozilla/libwebrtc {github_path}",
capture_output,
)
stdout_lines = run_git("git config --local --list", github_path)
stdout_lines = [
path for path in stdout_lines if re.findall("^remote.upstream.url.*", path)
]
if len(stdout_lines) == 0:
print("Fetching upstream")
run_git("git checkout master", github_path)
run_git(
"git remote add upstream https://webrtc.googlesource.com/src", github_path
)
run_git("git fetch upstream", github_path)
else:
print(
"Upstream remote (https://webrtc.googlesource.com/src) already configured"
)
# for sanity, ensure we're on master
run_git("git checkout master", github_path)
# make sure we successfully fetched upstream
run_git("git merge upstream/master", github_path)
# setup upstream branch-heads
stdout_lines = run_git(
"git config --local --get-all remote.upstream.fetch", github_path
)
if len(stdout_lines) == 1:
print("Fetching upstream branch-heads")
run_git(
"git config --local --add remote.upstream.fetch +refs/branch-heads/*:refs/remotes/branch-heads/*",
github_path,
)
run_git("git fetch upstream", github_path)
else:
print("Upstream remote branch-heads already configured")
# verify that a (quite old) branch-head exists
run_git("git show branch-heads/5059", github_path)
# prevent changing line endings when moving things out of the git repo
# (and into hg for instance)
run_git("git config --local core.autocrlf false", github_path)
# do a sanity fetch in case this was not a freshly cloned copy of the
# repo, meaning it may not have all the mozilla branches present.
run_git("git fetch --all", github_path)
# create tar to avoid time refetching
if not os.path.exists(tar_path):
print("Creating tar file for quicker restore")
cmd = f"cd {os.path.dirname(github_path)} ; tar --create --gzip --file={os.path.basename(tar_path)} {os.path.basename(github_path)}"
run_shell(cmd, capture_output)
if __name__ == "__main__":
default_state_dir = ".moz-fast-forward"
default_tar_name = "moz-libwebrtc.tar.gz"
parser = argparse.ArgumentParser(
description="Restore moz-libwebrtc github patch stack"
)
parser.add_argument(
"--repo-path",
required=True,
help="path to libwebrtc repo",
)
parser.add_argument(
"--force-fetch",
action="store_true",
default=False,
help="force rebuild an existing repo directory",
)
parser.add_argument(
"--tar-name",
default=default_tar_name,
help=f"name of tar file (defaults to {default_tar_name})",
)
parser.add_argument(
"--state-path",
default=default_state_dir,
help=f"path to state directory (defaults to {default_state_dir})",
)
args = parser.parse_args()
fetch_repo(
args.repo_path,
args.force_fetch,
os.path.join(args.state_path, args.tar_name),
)