diff --git a/bin/swh-loader-tar-retrieve-tarball b/bin/swh-loader-tar-retrieve-tarball index f925265..735041b 100755 --- a/bin/swh-loader-tar-retrieve-tarball +++ b/bin/swh-loader-tar-retrieve-tarball @@ -1,52 +1,78 @@ #!/usr/bin/env python3 # NOT FOR PRODUCTION (does not use the stable swh storage api yet) # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -from swh.core import hashutil +import argparse -from swh.storage.api.client import RemoteStorage as Storage +from swh.core import hashutil, config def escape_hash(sha1): """Escape an hexa sha1 to a ready queryable sha1.""" if isinstance(sha1, bytes): sha1 = hashutil.hash_to_hex(sha1) return '\\x%s' % sha1 -def upper_directory_from(db_url, revision_id): +def upper_directory_from(revision_id): """Return the directory sha1 the revision with id revision_id points to. """ for revision in storage.revision_get([revision_id]): return revision['directory'] -def list_files_from_directory(directory_id_bytes): - for entry in storage.directory_get(directory_id_bytes, recursive=True): +def directory_ls(directory_id, recursive=True): + """List entries from directory. + + """ + entries = storage.directory_get(directory_id, recursive=recursive) + for entry in entries: yield {'dir_id': hashutil.hash_to_hex(entry[0]), 'type': entry[1], 'target': hashutil.hash_to_hex(entry[2]), 'name': entry[3].decode('utf-8'), 'perms': entry[4]} -storage = Storage('http://localhost:5000/') # beware the / +def parse_args(): + """Parse the configuration from the cli. + + """ + cli = argparse.ArgumentParser( + description='Tarball creation from swh-storage.') + cli.add_argument('--config-file', '-c', help='configuration file') + + args = cli.parse_args() + + return args + + +if __name__ == '__main__': + args = parse_args() + conf = config.read(args.config_file) + + if conf['storage_class'] == 'remote_storage': + from swh.storage.api.client import RemoteStorage as Storage + else: + from swh.storage import Storage + + storage = Storage(conf['storage_args']) -db_url = 'dbname=softwareheritage-dev' -revision_id = hashutil.hex_to_hash('7c82241cb2a564c79f2930ac9416800bbb2a6d3e') + revision_id = hashutil.hex_to_hash( + '7c82241cb2a564c79f2930ac9416800bbb2a6d3e') -directory_sha1_bytes = upper_directory_from(db_url, revision_id) -print('directory id: %s' % hashutil.hash_to_hex(directory_sha1_bytes)) + directory_id = upper_directory_from(revision_id) + print('directory id: %s' % hashutil.hash_to_hex(directory_id)) -count = 0 -for entry in list_files_from_directory(directory_sha1_bytes): - count += 1 - print(entry['perms'], entry['name'], entry['target']) + count = 0 + for entry in directory_ls(directory_id, True): + count += 1 + print(entry['perms'], entry['name'], entry['target']) -print('nb entries: %s' % count) + print('nb entries: %s' % count) diff --git a/resources/create-tarball.ini b/resources/create-tarball.ini new file mode 100644 index 0000000..16ad955 --- /dev/null +++ b/resources/create-tarball.ini @@ -0,0 +1,7 @@ +[main] +storage_class = remote_storage +storage_args = http://localhost:5000/ + +# temporary hack for local testing +swh_storage = /home/storage/swh-storage/ +