Source code

Revision control

Copy as Markdown

Other Tools

# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Extracts the zipfile from the cipd instance and commits it to the repo."""
import argparse
import os
import pathlib
import shutil
import subprocess
import sys
from typing import List
import zipfile
_SRC_PATH = pathlib.Path(__file__).resolve().parents[2]
_TO_COMMIT_ZIP_NAME = 'to_commit.zip'
_CHROMIUM_SRC_PREFIX = 'CHROMIUM_SRC'
def _HasChanges(repo):
output = subprocess.check_output(
['git', '-C', repo, 'status', '--porcelain=v1'])
return bool(output)
def main(committed_dir_path):
parser = argparse.ArgumentParser(
description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument(
'--cipd-package-path', required=True, help='Path to cipd package.')
parser.add_argument(
'--no-git-add',
action='store_false',
dest='git_add',
help='Whether to git add the extracted files.')
options = parser.parse_args()
cipd_package_path = pathlib.Path(options.cipd_package_path)
to_commit_zip_path = cipd_package_path / _TO_COMMIT_ZIP_NAME
if not to_commit_zip_path.exists():
print(f'No zipfile found at {to_commit_zip_path}', file=sys.stderr)
print('Doing nothing', file=sys.stderr)
return
if os.path.exists(committed_dir_path):
# Delete original contents.
shutil.rmtree(committed_dir_path)
os.makedirs(committed_dir_path)
# Replace with the contents of the zip.
with zipfile.ZipFile(to_commit_zip_path) as z:
z.extractall(committed_dir_path)
changed_file_paths: List[str] = [
str(committed_dir_path.relative_to(_SRC_PATH))
]
committed_chromium_src_dir = committed_dir_path / _CHROMIUM_SRC_PREFIX
for root, _, files in os.walk(committed_chromium_src_dir):
for file in files:
file_path = os.path.join(root, file)
path_relative_to_src = os.path.relpath(file_path,
committed_chromium_src_dir)
full_src_path = _SRC_PATH / path_relative_to_src
if full_src_path.exists():
full_src_path.unlink()
shutil.move(file_path, full_src_path)
changed_file_paths.append(path_relative_to_src)
if not _HasChanges(_SRC_PATH):
print("No changes found after extracting zip. Did you run this script "
"before?")
return
if options.git_add:
git_add_cmd = ['git', '-C', _SRC_PATH, 'add'] + changed_file_paths
subprocess.check_call(git_add_cmd)