summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chromium/tools/licenses/sbom.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/chromium/tools/licenses/sbom.py b/chromium/tools/licenses/sbom.py
index fcae6cd4ab4..511ea0e1638 100644
--- a/chromium/tools/licenses/sbom.py
+++ b/chromium/tools/licenses/sbom.py
@@ -30,6 +30,10 @@ PACKAGES_TO_CLEAN_BAD_URL = [
'PSM (Private Set Membership) client side',
]
+# Command to find the first "Baseline" git commit in src/3rdparty
+FIND_BASELINE_COMMIT_GIT_COMMAND = \
+ ['git', 'rev-list', '-n1', '--first-parent', '--grep=^BASELINE: Update Chromium', 'HEAD', '--']
+
# Hardcoded metadata for GN
GN_BASE_METADATA = {
'Id': 'GN',
@@ -124,7 +128,7 @@ class ExtendedSpdxJsonWriter(spdx_writer._SPDXJSONWriter):
def GetDirectoryRevisionInfo(d):
git_rev_list_result = subprocess.check_output(
- ['git', 'rev-list', '-n1', '--first-parent', '--grep=BASELINE: Update Chromium', 'HEAD', '--', d],
+ FIND_BASELINE_COMMIT_GIT_COMMAND + [d],
cwd=ROOT,
text=True)
commit_sha = git_rev_list_result.strip()
@@ -139,6 +143,14 @@ def GetDirectoryRevisionInfo(d):
comment_text = f'{num_revisions} revision{plural} added by Qt'
return comment_text
+def IsChromiumSubmoduleGitHistoryAvailable():
+ baseline_cmd_result = subprocess.run(
+ FIND_BASELINE_COMMIT_GIT_COMMAND + ['.'],
+ cwd=ROOT,
+ capture_output=True,
+ encoding='utf-8')
+ return baseline_cmd_result.returncode == 0 and baseline_cmd_result.stdout.strip()
+
def GetTargetMetadatas(gn_binary: str, gn_out_dir: str, gn_target: str):
optional_keys = list(CHROMIUM_TO_SPDX_KEY.keys()) + ['Short Name', 'CPEPrefix']
@@ -147,6 +159,12 @@ def GetTargetMetadatas(gn_binary: str, gn_out_dir: str, gn_target: str):
third_party_dirs = license_tools.FindThirdPartyDeps(gn_binary, gn_out_dir, gn_target, True, 'all')
os.chdir(prev_cwd)
+ # If src/3rdparty is not a git repo, skip adding revision info since it would fail on trying
+ # to invoke git.
+ can_include_git_info = IsChromiumSubmoduleGitHistoryAvailable()
+ if not can_include_git_info:
+ logger.warning("Could not find git history for '%s', git revision info will be missing" % os.path.join(ROOT, '..'))
+
metadatas = {}
for d in third_party_dirs:
if d in DIRECTORIES_TO_SKIP_BECAUSE_THEY_HAVE_VARIOUS_PARSING_ISSUES:
@@ -160,7 +178,7 @@ def GetTargetMetadatas(gn_binary: str, gn_out_dir: str, gn_target: str):
if not dir_metadata:
print("Warning: Parsing '%s' returned nothing" % d)
metadatas[d] = dir_metadata
- git_revision_info = GetDirectoryRevisionInfo(d)
+ git_revision_info = GetDirectoryRevisionInfo(d) if can_include_git_info else None
for dep_metadata in dir_metadata:
num_licenses = len(dep_metadata['License File'])
if num_licenses != 1: