Google Chromium, sans integration with Google
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.3 KiB

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
# Copyright (c) 2019 The ungoogled-chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Prune binaries from the source tree"""
import argparse
from pathlib import Path
from _common import ENCODING, get_logger, add_common_params
import sys
import os
import stat
def prune_dir(unpack_root, prune_files):
Delete files under unpack_root listed in prune_files. Returns an iterable of unremovable files.
unpack_root is a pathlib.Path to the directory to be pruned
prune_files is an iterable of files to be removed.
unremovable_files = set()
for relative_file in prune_files:
file_path = unpack_root / relative_file
# read-only files can't be deleted on Windows
# so remove the flag and try again.
except PermissionError:
os.chmod(file_path, stat.S_IWRITE)
except FileNotFoundError:
return unremovable_files
def _callback(args):
if not
get_logger().error('Specified directory does not exist: %s',
if not args.pruning_list.exists():
get_logger().error('Could not find the pruning list: %s', args.pruning_list)
prune_files = tuple(filter(len, args.pruning_list.read_text(encoding=ENCODING).splitlines()))
unremovable_files = prune_dir(, prune_files)
if unremovable_files:
get_logger().error('%d files could not be pruned.', len(unremovable_files))
get_logger().debug('Files could not be pruned:\n%s',
'\n'.join(f for f in unremovable_files))
def main():
"""CLI Entrypoint"""
parser = argparse.ArgumentParser()
parser.add_argument('directory', type=Path, help='The directory to apply binary pruning.')
parser.add_argument('pruning_list', type=Path, help='Path to pruning.list')
args = parser.parse_args()
if __name__ == '__main__':