gen-lockedsig-cache 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python
  2. import os
  3. import sys
  4. import glob
  5. import shutil
  6. import errno
  7. def mkdir(d):
  8. try:
  9. os.makedirs(d)
  10. except OSError as e:
  11. if e.errno != errno.EEXIST:
  12. raise e
  13. if len(sys.argv) < 5:
  14. print("Incorrect number of arguments specified")
  15. print("syntax: gen-lockedsig-cache <locked-sigs.inc> <input-cachedir> <output-cachedir> <nativelsbstring>")
  16. sys.exit(1)
  17. print('Reading %s' % sys.argv[1])
  18. sigs = []
  19. with open(sys.argv[1]) as f:
  20. for l in f.readlines():
  21. if ":" in l:
  22. sigs.append(l.split(":")[2].split()[0])
  23. print('Gathering file list')
  24. files = set()
  25. for s in sigs:
  26. p = sys.argv[2] + "/" + s[:2] + "/*" + s + "*"
  27. files |= set(glob.glob(p))
  28. p = sys.argv[2] + "/%s/" % sys.argv[4] + s[:2] + "/*" + s + "*"
  29. files |= set(glob.glob(p))
  30. print('Processing files')
  31. for f in files:
  32. sys.stdout.write('Processing %s... ' % f)
  33. _, ext = os.path.splitext(f)
  34. if not ext in ['.tgz', '.siginfo', '.sig']:
  35. # Most likely a temp file, skip it
  36. print('skipping')
  37. continue
  38. dst = os.path.join(sys.argv[3], os.path.relpath(f, sys.argv[2]))
  39. destdir = os.path.dirname(dst)
  40. mkdir(destdir)
  41. if os.path.exists(dst):
  42. os.remove(dst)
  43. if (os.stat(f).st_dev == os.stat(destdir).st_dev):
  44. print('linking')
  45. os.link(f, dst)
  46. else:
  47. print('copying')
  48. shutil.copyfile(f, dst)
  49. print('Done!')