summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/third_party_build/filter_git_changes.py
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/webrtc/third_party_build/filter_git_changes.py')
-rw-r--r--dom/media/webrtc/third_party_build/filter_git_changes.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/dom/media/webrtc/third_party_build/filter_git_changes.py b/dom/media/webrtc/third_party_build/filter_git_changes.py
new file mode 100644
index 0000000000..ee6cdbcbd9
--- /dev/null
+++ b/dom/media/webrtc/third_party_build/filter_git_changes.py
@@ -0,0 +1,87 @@
+# 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 importlib
+import re
+import sys
+
+sys.path.insert(0, "./dom/media/webrtc/third_party_build")
+vendor_libwebrtc = importlib.import_module("vendor-libwebrtc")
+
+from run_operations import run_git
+
+
+def filter_git_changes(github_path, commit_sha, diff_filter):
+ command = [
+ "git",
+ "show",
+ "--oneline",
+ "--name-status",
+ "--pretty=format:",
+ None if not diff_filter else "--diff-filter={}".format(diff_filter),
+ commit_sha,
+ ]
+ # strip possible empty elements from command list
+ command = " ".join([x for x in command if x is not None])
+
+ # Get the list of changes in the upstream commit.
+ stdout_lines = run_git(command, github_path)
+
+ changed_files = [line.strip() for line in stdout_lines]
+ changed_files = [line for line in changed_files if line != ""]
+
+ # Fetch the list of excludes and includes used in the vendoring script.
+ exclude_file_list = vendor_libwebrtc.get_excluded_files()
+ exclude_dir_list = vendor_libwebrtc.get_excluded_dirs()
+ include_list = vendor_libwebrtc.get_included_path_overrides()
+
+ # First, search for changes in files that are specifically included.
+ # Do this first, because some of these files might be filtered out
+ # by the exclude list.
+ regex_includes = "|".join(["^.\t{}$".format(i) for i in include_list])
+ included_files = [
+ path for path in changed_files if re.findall(regex_includes, path)
+ ]
+
+ # Convert the directory exclude list to a regex string and filter
+ # out the excluded directory paths (note the lack of trailing '$'
+ # in the regex).
+ regex_excludes = "|".join(
+ ["^(M|A|D|R\d\d\d)\t{}".format(i) for i in exclude_dir_list]
+ )
+ files_not_excluded = [
+ path for path in changed_files if not re.findall(regex_excludes, path)
+ ]
+
+ # Convert the file exclude list to a regex string and filter out the
+ # excluded file paths. The trailing '$' in the regex ensures that
+ # we can exclude, for example, '.vpython' and not '.vpython3'.
+ regex_excludes = "|".join(["^.\t{}$".format(i) for i in exclude_file_list])
+ files_not_excluded = [
+ path for path in files_not_excluded if not re.findall(regex_excludes, path)
+ ]
+
+ return included_files + files_not_excluded
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ description="Get relevant change count from an upstream git commit"
+ )
+ parser.add_argument(
+ "--repo-path",
+ required=True,
+ help="path to libwebrtc repo",
+ )
+ parser.add_argument("--commit-sha", required=True, help="sha of commit to examine")
+ parser.add_argument(
+ "--diff-filter",
+ choices=("A", "D", "R"),
+ help="filter for adds (A), deletes (D), or renames (R)",
+ )
+ args = parser.parse_args()
+
+ paths = filter_git_changes(args.repo_path, args.commit_sha, args.diff_filter)
+ for path in paths:
+ print(path)