Changeset View
Changeset View
Standalone View
Standalone View
swh/model/cli.py
# Copyright (C) 2018 The Software Heritage developers | # Copyright (C) 2018 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import click | import click | ||||
import os | import os | ||||
import sys | import sys | ||||
from functools import partial | from functools import partial | ||||
from swh.model import identifiers as pids | from swh.model import identifiers as pids | ||||
from swh.model.exceptions import ValidationError | from swh.model.exceptions import ValidationError | ||||
from swh.model.from_disk import Content, Directory | from swh.model.from_disk import Content, Directory | ||||
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help']) | |||||
class PidParamType(click.ParamType): | class PidParamType(click.ParamType): | ||||
name = 'persistent identifier' | name = 'persistent identifier' | ||||
def convert(self, value, param, ctx): | def convert(self, value, param, ctx): | ||||
try: | try: | ||||
pids.parse_persistent_identifier(value) | pids.parse_persistent_identifier(value) | ||||
return value # return as string, as we need just that | return value # return as string, as we need just that | ||||
Show All 33 Lines | def identify_object(obj_type, follow_symlinks, obj): | ||||
else: # shouldn't happen, due to option validation | else: # shouldn't happen, due to option validation | ||||
raise click.BadParameter('invalid object type: ' + obj_type) | raise click.BadParameter('invalid object type: ' + obj_type) | ||||
# note: we return original obj instead of path here, to preserve user-given | # note: we return original obj instead of path here, to preserve user-given | ||||
# file name in output | # file name in output | ||||
return (obj, pid) | return (obj, pid) | ||||
@click.command() | @click.command(context_settings=CONTEXT_SETTINGS) | ||||
@click.option('--dereference/--no-dereference', 'follow_symlinks', | @click.option('--dereference/--no-dereference', 'follow_symlinks', | ||||
default=True, | default=True, | ||||
help='follow (or not) symlinks for OBJECTS passed as arguments ' | help='follow (or not) symlinks for OBJECTS passed as arguments ' | ||||
+ '(default: follow)') | + '(default: follow)') | ||||
@click.option('--filename/--no-filename', 'show_filename', default=True, | @click.option('--filename/--no-filename', 'show_filename', default=True, | ||||
help='show/hide file name (default: show)') | help='show/hide file name (default: show)') | ||||
@click.option('--type', '-t', 'obj_type', default='auto', | @click.option('--type', '-t', 'obj_type', default='auto', | ||||
type=click.Choice(['auto', 'content', 'directory']), | type=click.Choice(['auto', 'content', 'directory']), | ||||
help='type of object to identify (default: auto)') | help='type of object to identify (default: auto)') | ||||
@click.option('--verify', '-v', metavar='PID', type=PidParamType(), | @click.option('--verify', '-v', metavar='PID', type=PidParamType(), | ||||
help='reference identifier to be compared with computed one') | help='reference identifier to be compared with computed one') | ||||
@click.argument('objects', nargs=-1, | @click.argument('objects', nargs=-1, required=True, | ||||
type=click.Path(exists=True, readable=True, | type=click.Path(exists=True, readable=True, | ||||
allow_dash=True, path_type=bytes)) | allow_dash=True, path_type=bytes)) | ||||
def identify(obj_type, verify, show_filename, follow_symlinks, objects): | def identify(obj_type, verify, show_filename, follow_symlinks, objects): | ||||
"""Compute the Software Heritage persistent identifier (PID) for the given | """Compute the Software Heritage persistent identifier (PID) for the given | ||||
source code object(s). | source code object(s). | ||||
For more details about Software Heritage PIDs see: | For more details about Software Heritage PIDs see: | ||||
Show All 40 Lines |