From b47d4686b3274a52abd8c5251a5756e7693a62f5 Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Sat, 25 Nov 2017 09:22:15 +0100 Subject: gen_fast_metamanifest: Support signing --- utils/gen_fast_metamanifest.py | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'utils') diff --git a/utils/gen_fast_metamanifest.py b/utils/gen_fast_metamanifest.py index fe5d615..7c06057 100755 --- a/utils/gen_fast_metamanifest.py +++ b/utils/gen_fast_metamanifest.py @@ -50,21 +50,37 @@ def manifest_dir_generator(iter_n): yield 'metadata' -def make_toplevel(d, ts): +def make_toplevel(d, ts, pgp_key): for suffix in ('.gz', ''): src = os.path.join(d, 'Manifest' + suffix) if os.path.exists(src): dstsplit = os.path.join(d, 'Manifest.files' + suffix) dsttop = os.path.join(d, 'Manifest') os.rename(src, dstsplit) + + me = gen_fast_manifest.get_manifest_entry('MANIFEST', + dstsplit, 'Manifest.files' + suffix) + data = me + b'\n' + ts + + if pgp_key is not None: + cmd = [] + p = subprocess.Popen(['gpg', '--batch', '-u', pgp_key, + '--armor', '--clearsign'], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + sout, serr = p.communicate(data) + if p.wait() != 0: + raise ValueError('GPG error: {}'.format(serr)) + data = sout + with io.open(dsttop, 'wb') as f: - me = gen_fast_manifest.get_manifest_entry('MANIFEST', - dstsplit, 'Manifest.files' + suffix) - f.write(me + b'\n' + ts) + f.write(data) + break -def gen_metamanifest(top_dir): +def gen_metamanifest(top_dir, pgp_key): os.chdir(top_dir) # pre-populate IGNORE entries @@ -96,8 +112,8 @@ IGNORE packages # special directories: we split Manifest there, and add timestamp ts = datetime.datetime.utcnow().strftime( 'TIMESTAMP %Y-%m-%dT%H:%M:%SZ\n').encode('ascii') - make_toplevel('metadata/glsa', ts) - make_toplevel('metadata/news', ts) + make_toplevel('metadata/glsa', ts, pgp_key) + make_toplevel('metadata/news', ts, pgp_key) # 2nd batch (files depending on results of 1st batch) # this one is fast to generate, so let's pass a list and let map() @@ -110,12 +126,12 @@ IGNORE packages # final split ts = datetime.datetime.utcnow().strftime( 'TIMESTAMP %Y-%m-%dT%H:%M:%SZ\n').encode('ascii') - make_toplevel('', ts) + make_toplevel('', ts, pgp_key) if __name__ == '__main__': - if len(sys.argv) != 2: - print('Usage: {} '.format(sys.argv[0])) + if len(sys.argv) not in (2, 3): + print('Usage: {} []'.format(sys.argv[0])) sys.exit(1) - gen_metamanifest(sys.argv[1]) + gen_metamanifest(sys.argv[1], sys.argv[2] if len(sys.argv) == 3 else None) -- cgit v1.2.3