summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/third_party_build/fetch_github_repo.py
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/webrtc/third_party_build/fetch_github_repo.py')
-rw-r--r--dom/media/webrtc/third_party_build/fetch_github_repo.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/dom/media/webrtc/third_party_build/fetch_github_repo.py b/dom/media/webrtc/third_party_build/fetch_github_repo.py
new file mode 100644
index 0000000000..bfa40f5c7b
--- /dev/null
+++ b/dom/media/webrtc/third_party_build/fetch_github_repo.py
@@ -0,0 +1,122 @@
+# 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("Removing existing repo: {}".format(github_path))
+ shutil.rmtree(github_path)
+
+ # clone https://github.com/mozilla/libwebrtc
+ 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 = "cd {} ; tar --extract --gunzip --file={}".format(
+ os.path.dirname(github_path), os.path.basename(tar_path)
+ )
+ run_shell(cmd, capture_output)
+ else:
+ print("Cloning github repo")
+ run_shell(
+ "git clone https://github.com/mozilla/libwebrtc {}".format(github_path),
+ capture_output,
+ )
+
+ # setup upstream (https://webrtc.googlesource.com/src)
+ 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)
+ run_git("git merge upstream/master", github_path)
+ else:
+ print(
+ "Upstream remote (https://webrtc.googlesource.com/src) already configured"
+ )
+
+ # 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")
+
+ # 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 = "cd {} ; tar --create --gzip --file={} {}".format(
+ os.path.dirname(github_path),
+ 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="name of tar file (defaults to {})".format(default_tar_name),
+ )
+ parser.add_argument(
+ "--state-path",
+ default=default_state_dir,
+ help="path to state directory (defaults to {})".format(default_state_dir),
+ )
+ args = parser.parse_args()
+
+ fetch_repo(
+ args.repo_path, args.force_fetch, os.path.join(args.state_path, args.tar_name)
+ )