diff options
Diffstat (limited to 'src/hydrilla/builder')
-rw-r--r-- | src/hydrilla/builder/__main__.py | 51 | ||||
-rw-r--r-- | src/hydrilla/builder/build.py | 31 |
2 files changed, 31 insertions, 51 deletions
diff --git a/src/hydrilla/builder/__main__.py b/src/hydrilla/builder/__main__.py index e60c50d..87dc9e2 100644 --- a/src/hydrilla/builder/__main__.py +++ b/src/hydrilla/builder/__main__.py @@ -1,50 +1,9 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later +# SPDX-License-Identifier: CC0-1.0 -# Command line interface of Hydrilla package builder. +# Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org> # -# This file is part of Hydrilla -# -# Copyright (C) 2022 Wojtek Kosior -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <https://www.gnu.org/licenses/>. -# -# -# I, Wojtek Kosior, thereby promise not to sue for violation of this -# file's license. Although I request that you do not make use this code -# in a proprietary program, I am not going to enforce this in court. - -from pathlib import Path - -import click - -from .build import Build - -dir_type = click.Path(exists=True, file_okay=False, resolve_path=True) +# Available under the terms of Creative Commons Zero v1.0 Universal. -@click.command() -@click.option('-s', '--srcdir', default='./', type=dir_type, show_default=True, - help='Source directory to build from.') -@click.option('-i', '--index-json', default='index.json', type=click.Path(), - help='Path to file to be processed instead of index.json (if not absolute, resolved relative to srcdir).') -@click.option('-d', '--dstdir', type=dir_type, required=True, - help='Destination directory to write built package files to.') -def preform_build(srcdir, index_json, dstdir): - """ - Build Hydrilla package from scrdir and write the resulting files under - dstdir. - """ - build = Build(Path(srcdir), Path(index_json)) - build.write_package_files(Path(dstdir)) +from . import build -preform_build() +build.perform() diff --git a/src/hydrilla/builder/build.py b/src/hydrilla/builder/build.py index cdbfad3..8d25b19 100644 --- a/src/hydrilla/builder/build.py +++ b/src/hydrilla/builder/build.py @@ -32,9 +32,12 @@ from hashlib import sha256 from sys import stderr import jsonschema +import click from .. import util +_ = util.get_gettext('hydrilla_builder') + index_validator = util.validator_for('package_source-1.schema.json') class FileReferenceError(Exception): @@ -99,12 +102,12 @@ def generate_spdx_report(root): try: from reuse._main import main as reuse_main except ModuleNotFoundError: - ReuseError("Could not import 'reuse'. Is the tool installed and visible to this Python instance?") + ReuseError(_('couldnt_import_reuse_is_it_installed')) mocked_output = FileBuffer() if reuse_main(args=['--root', str(root), 'lint'], out=mocked_output) != 0: stderr.write(mocked_output.get_bytes().decode()) - raise ReuseError('Attempt to generate an SPDX report for a REUSE-incompliant package.') + raise ReuseError(_('spdx_report_from_reuse_incompliant')) mocked_output = FileBuffer() if reuse_main(args=['--root', str(root), 'spdx'], out=mocked_output) != 0: @@ -188,10 +191,11 @@ class Build: path = path.resolve() if not path.is_relative_to(self.srcdir): - raise FileReferenceError(f"Attempt to load '{filename}' which lies outside package source directory.") + raise FileReferenceError(_('loading_{}_outside_package_dir') + .format(filename)) if str(path.relative_to(self.srcdir)) == 'index.json': - raise FileReferenceError("Attempt to load 'index.json' which is a reserved filename.") + raise FileReferenceError(_('loading_reserved_index_json')) file_ref = self.files_by_path.get(path) if file_ref is None: @@ -305,7 +309,7 @@ class Build: [self._process_file(f['file']) for f in index_obj['copyright']] if generate_spdx and not spdx_ref.include_in_distribution: - raise FileReferenceError("Told to generate 'report.spdx' but 'report.spdx' is not listed among copyright files. Refusing to proceed.") + raise FileReferenceError(_('report_spdx_not_in_copyright_list')) item_refs = [self._process_item(d) for d in index_obj['definitions']] @@ -373,3 +377,20 @@ class Build: version = '.'.join([str(n) for n in item_def['version']]) with open(item_dir_path / version, 'wt') as output: json.dump(item_def, output) + +dir_type = click.Path(exists=True, file_okay=False, resolve_path=True) + +@click.option('-s', '--srcdir', default='./', type=dir_type, show_default=True, + help=_('source_directory_to_build_from')) +@click.option('-i', '--index-json', default='index.json', type=click.Path(), + help=_('path_instead_of_index_json')) +@click.option('-d', '--dstdir', type=dir_type, required=True, + help=_('built_package_files_destination')) +def perform(srcdir, index_json, dstdir): + """<this will be replaced by a localized docstring for Click to pick up>""" + build = Build(Path(srcdir), Path(index_json)) + build.write_package_files(Path(dstdir)) + +perform.__doc__ = _('build_package_from_srcdir_to_dstdir') + +perform = click.command()(perform) |