47 lines
1009 B
Plaintext
47 lines
1009 B
Plaintext
|
#!/usr/bin/env python
|
||
|
#
|
||
|
# gen-lockedsig-cache <locked-sigs.inc> <input-cachedir> <output-cachedir>
|
||
|
#
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import glob
|
||
|
import shutil
|
||
|
import errno
|
||
|
|
||
|
def mkdir(d):
|
||
|
try:
|
||
|
os.makedirs(d)
|
||
|
except OSError as e:
|
||
|
if e.errno != errno.EEXIST:
|
||
|
raise e
|
||
|
|
||
|
if len(sys.argv) < 3:
|
||
|
print("Incorrect number of arguments specified")
|
||
|
sys.exit(1)
|
||
|
|
||
|
sigs = []
|
||
|
with open(sys.argv[1]) as f:
|
||
|
for l in f.readlines():
|
||
|
if ":" in l:
|
||
|
sigs.append(l.split(":")[2].split()[0])
|
||
|
|
||
|
files = set()
|
||
|
for s in sigs:
|
||
|
p = sys.argv[2] + "/" + s[:2] + "/*" + s + "*"
|
||
|
files |= set(glob.glob(p))
|
||
|
p = sys.argv[2] + "/*/" + s[:2] + "/*" + s + "*"
|
||
|
files |= set(glob.glob(p))
|
||
|
|
||
|
for f in files:
|
||
|
dst = f.replace(sys.argv[2], sys.argv[3])
|
||
|
destdir = os.path.dirname(dst)
|
||
|
mkdir(destdir)
|
||
|
|
||
|
if os.path.exists(dst):
|
||
|
os.remove(dst)
|
||
|
if (os.stat(f).st_dev == os.stat(destdir).st_dev):
|
||
|
os.link(f, dst)
|
||
|
else:
|
||
|
shutil.copyfile(f, dst)
|