mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00

This adds SPDX license headers in place of the wide assortment of things currently in our script headers. We default to GPL-2.0-only except for the oeqa code where it was clearly submitted and marked as MIT on the most part or some scripts which had the "or later" GPL versioning. The patch also drops other obsolete bits of file headers where they were encoountered such as editor modelines, obsolete maintainer information or the phrase "All rights reserved" which is now obsolete and not required in copyright headers (in this case its actually confusing for licensing as all rights were not reserved). More work is needed for OE-Core but this takes care of the bulk of the scripts and meta/lib directories. The top level LICENSE files are tweaked to match the new structure and the SPDX naming. (From OE-Core rev: f8c9c511b5f1b7dbd45b77f345cb6c048ae6763e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
146 lines
5.1 KiB
Python
Executable File
146 lines
5.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# OpenEmbedded SDK publishing tool
|
|
#
|
|
# Copyright (C) 2015-2016 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
|
|
import sys
|
|
import os
|
|
import argparse
|
|
import glob
|
|
import re
|
|
import subprocess
|
|
import logging
|
|
import shutil
|
|
import errno
|
|
|
|
scripts_path = os.path.dirname(os.path.realpath(__file__))
|
|
lib_path = scripts_path + '/lib'
|
|
sys.path = sys.path + [lib_path]
|
|
import scriptutils
|
|
import argparse_oe
|
|
logger = scriptutils.logger_create('sdktool')
|
|
|
|
def mkdir(d):
|
|
try:
|
|
os.makedirs(d)
|
|
except OSError as e:
|
|
if e.errno != errno.EEXIST:
|
|
raise e
|
|
|
|
def publish(args):
|
|
logger.debug("In publish function")
|
|
target_sdk = args.sdk
|
|
destination = args.dest
|
|
logger.debug("target_sdk = %s, update_server = %s" % (target_sdk, destination))
|
|
sdk_basename = os.path.basename(target_sdk)
|
|
|
|
# Ensure the SDK exists
|
|
if not os.path.exists(target_sdk):
|
|
logger.error("Specified SDK %s doesn't exist" % target_sdk)
|
|
return -1
|
|
if os.path.isdir(target_sdk):
|
|
logger.error("%s is a directory - expected path to SDK installer file" % target_sdk)
|
|
return -1
|
|
|
|
if ':' in destination:
|
|
is_remote = True
|
|
host, destdir = destination.split(':')
|
|
dest_sdk = os.path.join(destdir, sdk_basename)
|
|
else:
|
|
is_remote = False
|
|
dest_sdk = os.path.join(destination, sdk_basename)
|
|
destdir = destination
|
|
|
|
# Making sure the directory exists
|
|
logger.debug("Making sure the destination directory exists")
|
|
if not is_remote:
|
|
mkdir(destination)
|
|
else:
|
|
cmd = "ssh %s 'mkdir -p %s'" % (host, destdir)
|
|
ret = subprocess.call(cmd, shell=True)
|
|
if ret != 0:
|
|
logger.error("Making directory %s on %s failed" % (destdir, host))
|
|
return ret
|
|
|
|
# Copying the SDK to the destination
|
|
logger.info("Copying the SDK to destination")
|
|
if not is_remote:
|
|
if os.path.exists(dest_sdk):
|
|
os.remove(dest_sdk)
|
|
if (os.stat(target_sdk).st_dev == os.stat(destination).st_dev):
|
|
os.link(target_sdk, dest_sdk)
|
|
else:
|
|
shutil.copy(target_sdk, dest_sdk)
|
|
else:
|
|
cmd = "scp %s %s" % (target_sdk, destination)
|
|
ret = subprocess.call(cmd, shell=True)
|
|
if ret != 0:
|
|
logger.error("scp %s %s failed" % (target_sdk, destination))
|
|
return ret
|
|
|
|
# Unpack the SDK
|
|
logger.info("Unpacking SDK")
|
|
if not is_remote:
|
|
cmd = "sh %s -p -y -d %s" % (dest_sdk, destination)
|
|
ret = subprocess.call(cmd, shell=True)
|
|
if ret == 0:
|
|
logger.info('Successfully unpacked %s to %s' % (dest_sdk, destination))
|
|
os.remove(dest_sdk)
|
|
else:
|
|
logger.error('Failed to unpack %s to %s' % (dest_sdk, destination))
|
|
return ret
|
|
else:
|
|
cmd = "ssh %s 'sh %s -p -y -d %s && rm -f %s'" % (host, dest_sdk, destdir, dest_sdk)
|
|
ret = subprocess.call(cmd, shell=True)
|
|
if ret == 0:
|
|
logger.info('Successfully unpacked %s to %s' % (dest_sdk, destdir))
|
|
else:
|
|
logger.error('Failed to unpack %s to %s' % (dest_sdk, destdir))
|
|
return ret
|
|
|
|
# Setting up the git repo
|
|
if not is_remote:
|
|
cmd = 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; cp .git/hooks/post-update.sample .git/hooks/post-commit; echo "*.pyc\n*.pyo\npyshtables.py" > .gitignore; fi; git add -A .; git config user.email "oe@oe.oe" && git config user.name "OE" && git commit -q -m "init repo" || true' % (destination, destination)
|
|
else:
|
|
cmd = "ssh %s 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; cp .git/hooks/post-update.sample .git/hooks/post-commit; echo '*.pyc\n*.pyo\npyshtables.py' > .gitignore; fi; git add -A .; git config user.email 'oe@oe.oe' && git config user.name 'OE' && git commit -q -m \"init repo\" || true'" % (host, destdir, destdir)
|
|
ret = subprocess.call(cmd, shell=True)
|
|
if ret == 0:
|
|
logger.info('SDK published successfully')
|
|
else:
|
|
logger.error('Failed to set up layer git repo')
|
|
return ret
|
|
|
|
|
|
def main():
|
|
parser = argparse_oe.ArgumentParser(description="OpenEmbedded extensible SDK publishing tool - writes server-side data to support the extensible SDK update process to a specified location")
|
|
parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true')
|
|
parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
|
|
|
|
parser.add_argument('sdk', help='Extensible SDK to publish (path to .sh installer file)')
|
|
parser.add_argument('dest', help='Destination to publish SDK to; can be local path or remote in the form of user@host:/path (in the latter case ssh/scp will be used).')
|
|
|
|
parser.set_defaults(func=publish)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.debug:
|
|
logger.setLevel(logging.DEBUG)
|
|
elif args.quiet:
|
|
logger.setLevel(logging.ERROR)
|
|
|
|
ret = args.func(args)
|
|
return ret
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
ret = main()
|
|
except Exception:
|
|
ret = 1
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(ret)
|