blob: 6765891d1986f9ef4bec8bb753791ba5ce148767 [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001#!/usr/bin/env python3
2
3import os
4import sys
5import glob
6import shutil
7import errno
8
9def mkdir(d):
10 try:
11 os.makedirs(d)
12 except OSError as e:
13 if e.errno != errno.EEXIST:
14 raise e
15
16if len(sys.argv) < 5:
17 print("Incorrect number of arguments specified")
18 print("syntax: gen-lockedsig-cache <locked-sigs.inc> <input-cachedir> <output-cachedir> <nativelsbstring> [filterfile]")
19 sys.exit(1)
20
21filterlist = []
22if len(sys.argv) > 5:
23 print('Reading filter file %s' % sys.argv[5])
24 with open(sys.argv[5]) as f:
25 for l in f.readlines():
26 if ":" in l:
27 filterlist.append(l.rstrip())
28
29print('Reading %s' % sys.argv[1])
30sigs = []
31with open(sys.argv[1]) as f:
32 for l in f.readlines():
33 if ":" in l:
34 task, sig = l.split()[0].rsplit(':', 1)
35 if filterlist and not task in filterlist:
36 print('Filtering out %s' % task)
37 else:
38 sigs.append(sig)
39
40print('Gathering file list')
41files = set()
42for s in sigs:
43 p = sys.argv[2] + "/" + s[:2] + "/*" + s + "*"
44 files |= set(glob.glob(p))
45 p = sys.argv[2] + "/%s/" % sys.argv[4] + s[:2] + "/*" + s + "*"
46 files |= set(glob.glob(p))
47
48print('Processing files')
49for f in files:
50 sys.stdout.write('Processing %s... ' % f)
51 _, ext = os.path.splitext(f)
52 if not ext in ['.tgz', '.siginfo', '.sig']:
53 # Most likely a temp file, skip it
54 print('skipping')
55 continue
56 dst = os.path.join(sys.argv[3], os.path.relpath(f, sys.argv[2]))
57 destdir = os.path.dirname(dst)
58 mkdir(destdir)
59
60 src = os.path.realpath(f)
61 if os.path.exists(dst):
62 os.remove(dst)
63 if (os.stat(src).st_dev == os.stat(destdir).st_dev):
64 print('linking')
65 try:
66 os.link(src, dst)
67 except OSError as e:
68 print('hard linking failed, copying')
69 shutil.copyfile(src, dst)
70 else:
71 print('copying')
72 shutil.copyfile(src, dst)
73
74print('Done!')