poky/scripts/oe-publish-sdk
Paul Eggleton 905286ce46 oe-publish-sdk: drop SDK installer file from published output
We don't really need the SDK installer in the published output, for two
reasons:

1) The directory produced is for the consumption of devtool sdk-update,
   and the installer isn't used by that at all
2) It wouldn't really make sense to point users at the update directory
   to download the SDK installer because it contains a bunch of things
   that aren't meant for manual download, so it wouldn't be very tidy.

Leaving the file present can mislead you into thinking the opposite of
both of the above.

(From OE-Core rev: a9ec72b7897ffc0b901c1ccbcbe3cabbc7ac41ee)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-03-25 10:29:13 +00:00

5.0 KiB
Executable File

#!/usr/bin/env python

OpenEmbedded SDK publishing tool

oe-publish-sdk publish

: extensible SDK to publish (path to the installer shell script)

: local or remote location which servers as an SDK update server

e.g.

oe-publish-sdk /path/to/sdk-ext.sh /mnt/poky/sdk-ext

oe-publish-sdk /path/to/sdk-ext.sh user@host:/opt/poky/sdk-ext

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("%s doesn't exist" % 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")
cleanupfiles = [dest_sdk, os.path.join(destdir, 'ext-sdk-prepare.py')]
if not is_remote:
    cmd = "sh %s -n -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))
        for cleanupfile in cleanupfiles:
            os.remove(cleanupfile)
    else:
        logger.error('Failed to unpack %s to %s' % (dest_sdk, destination))
        return ret
else:
    cmd = "ssh %s 'sh %s -n -y -d %s && rm -f %s'" % (host, dest_sdk, destdir, ' '.join(cleanupfiles))
    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 .; mv .git/hooks/post-update.sample .git/hooks/post-update; fi; git add -A .; git commit -q -m "init repo" || true; git update-server-info' % (destination, destination)
else:
    cmd = "ssh %s 'set -e; mkdir-p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; fi; git add -A .; git commit -q -m \"init repo\" || true; git update-server-info'" % (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 development tool", epilog="Use %(prog)s --help to get help on a specific command") 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')
parser.add_argument('dest', help='Destination to publish SDK to')

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(5) sys.exit(ret)