poky/scripts/gen-lockedsig-cache
Paul Eggleton 0a78f987de gen-lockedsig-cache: ensure symlinks are dereferenced
If you set up a local mirror in SSTATE_MIRRORS then you can end up with
symlinks in SSTATE_DIR rather than real files. We don't want these
symlinks in the sstate-cache prodcued by gen-lockedsig-cache, so
dereference any symlinks before copying.

(From OE-Core rev: d65a6ee9e7a9c63b9a16bdb5025af8a7c6433c4f)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-08-17 10:35:40 +01:00

1.8 KiB
Executable File

#!/usr/bin/env python3

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) < 5: print("Incorrect number of arguments specified") print("syntax: gen-lockedsig-cache <locked-sigs.inc> [filterfile]") sys.exit(1)

filterlist = [] if len(sys.argv) > 5: print('Reading filter file %s' % sys.argv[5]) with open(sys.argv[5]) as f: for l in f.readlines(): if ":" in l: filterlist.append(l.rstrip())

print('Reading %s' % sys.argv[1]) sigs = [] with open(sys.argv[1]) as f: for l in f.readlines(): if ":" in l: task, sig = l.split()[0].rsplit(':', 1) if filterlist and not task in filterlist: print('Filtering out %s' % task) else: sigs.append(sig)

print('Gathering file list') files = set() for s in sigs: p = sys.argv[2] + "/" + s[:2] + "/" + s + "" files |= set(glob.glob(p)) p = sys.argv[2] + "/%s/" % sys.argv[4] + s[:2] + "/" + s + "" files |= set(glob.glob(p))

print('Processing files') for f in files: sys.stdout.write('Processing %s... ' % f) _, ext = os.path.splitext(f) if not ext in ['.tgz', '.siginfo', '.sig']: # Most likely a temp file, skip it print('skipping') continue dst = os.path.join(sys.argv[3], os.path.relpath(f, sys.argv[2])) destdir = os.path.dirname(dst) mkdir(destdir)

src = os.path.realpath(f)
if os.path.exists(dst):
    os.remove(dst)
if (os.stat(src).st_dev == os.stat(destdir).st_dev):
    print('linking')
    os.link(src, dst)
else:
    print('copying')
    shutil.copyfile(src, dst)

print('Done!')