diff options
Diffstat (limited to 'yocto-poky/scripts/lib/devtool/sdk.py')
-rw-r--r-- | yocto-poky/scripts/lib/devtool/sdk.py | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/yocto-poky/scripts/lib/devtool/sdk.py b/yocto-poky/scripts/lib/devtool/sdk.py index 2f416b36f..f15a6a9ed 100644 --- a/yocto-poky/scripts/lib/devtool/sdk.py +++ b/yocto-poky/scripts/lib/devtool/sdk.py @@ -40,14 +40,9 @@ def generate_update_dict(sigfile_new, sigfile_old): continue return update_dict -def get_sstate_objects(update_dict, newsdk_path): +def get_sstate_objects(update_dict, sstate_dir): """Return a list containing sstate objects which are to be installed""" sstate_objects = [] - # Ensure newsdk_path points to an extensible SDK - sstate_dir = os.path.join(newsdk_path, 'sstate-cache') - if not os.path.exists(sstate_dir): - logger.error("sstate-cache directory not found under %s" % newsdk_path) - raise for k in update_dict: files = set() hashval = update_dict[k] @@ -85,16 +80,12 @@ def install_sstate_objects(sstate_objects, src_sdk, dest_sdk): def sdk_update(args, config, basepath, workspace): # Fetch locked-sigs.inc file from remote/local destination - from ConfigParser import NoSectionError updateserver = args.updateserver if not updateserver: - try: - updateserver = config.get('SDK', 'updateserver', None) - except NoSectionError: - pass + updateserver = config.get('SDK', 'updateserver', '') if not updateserver: raise DevtoolError("Update server not specified in config file, you must specify it on the command line") - logger.debug("updateserver: %s" % args.updateserver) + logger.debug("updateserver: %s" % updateserver) # Make sure we are using sdk-update from within SDK logger.debug("basepath = %s" % basepath) @@ -105,38 +96,45 @@ def sdk_update(args, config, basepath, workspace): else: logger.debug("Found conf/locked-sigs.inc in %s" % basepath) - if ':' in args.updateserver: + if ':' in updateserver: is_remote = True else: is_remote = False if not is_remote: # devtool sdk-update /local/path/to/latest/sdk - new_locked_sig_file_path = os.path.join(args.updateserver, 'conf/locked-sigs.inc') + new_locked_sig_file_path = os.path.join(updateserver, 'conf/locked-sigs.inc') if not os.path.exists(new_locked_sig_file_path): - logger.error("%s doesn't exist or is not an extensible SDK" % args.updateserver) + logger.error("%s doesn't exist or is not an extensible SDK" % updateserver) return -1 else: - logger.debug("Found conf/locked-sigs.inc in %s" % args.updateserver) + logger.debug("Found conf/locked-sigs.inc in %s" % updateserver) update_dict = generate_update_dict(new_locked_sig_file_path, old_locked_sig_file_path) logger.debug("update_dict = %s" % update_dict) - sstate_objects = get_sstate_objects(update_dict, args.updateserver) + sstate_dir = os.path.join(newsdk_path, 'sstate-cache') + if not os.path.exists(sstate_dir): + logger.error("sstate-cache directory not found under %s" % newsdk_path) + return 1 + sstate_objects = get_sstate_objects(update_dict, sstate_dir) logger.debug("sstate_objects = %s" % sstate_objects) if len(sstate_objects) == 0: logger.info("No need to update.") return 0 logger.info("Installing sstate objects into %s", basepath) - install_sstate_objects(sstate_objects, args.updateserver.rstrip('/'), basepath) + install_sstate_objects(sstate_objects, updateserver.rstrip('/'), basepath) logger.info("Updating configuration files") - new_conf_dir = os.path.join(args.updateserver, 'conf') + new_conf_dir = os.path.join(updateserver, 'conf') old_conf_dir = os.path.join(basepath, 'conf') shutil.rmtree(old_conf_dir) shutil.copytree(new_conf_dir, old_conf_dir) logger.info("Updating layers") - new_layers_dir = os.path.join(args.updateserver, 'layers') + new_layers_dir = os.path.join(updateserver, 'layers') old_layers_dir = os.path.join(basepath, 'layers') shutil.rmtree(old_layers_dir) - shutil.copytree(new_layers_dir, old_layers_dir) + ret = subprocess.call("cp -a %s %s" % (new_layers_dir, old_layers_dir), shell=True) + if ret != 0: + logger.error("Copying %s to %s failed" % (new_layers_dir, old_layers_dir)) + return ret else: # devtool sdk-update http://myhost/sdk tmpsdk_dir = '/tmp/sdk-ext' @@ -145,12 +143,12 @@ def sdk_update(args, config, basepath, workspace): os.makedirs(tmpsdk_dir) os.makedirs(os.path.join(tmpsdk_dir, 'conf')) # Fetch locked-sigs.inc from update server - ret = subprocess.call("wget -q -O - %s/conf/locked-sigs.inc > %s/locked-sigs.inc" % (args.updateserver, os.path.join(tmpsdk_dir, 'conf')), shell=True) + ret = subprocess.call("wget -q -O - %s/conf/locked-sigs.inc > %s/locked-sigs.inc" % (updateserver, os.path.join(tmpsdk_dir, 'conf')), shell=True) if ret != 0: - logger.error("Fetching conf/locked-sigs.inc from %s to %s/locked-sigs.inc failed" % (args.updateserver, os.path.join(tmpsdk_dir, 'conf'))) + logger.error("Fetching conf/locked-sigs.inc from %s to %s/locked-sigs.inc failed" % (updateserver, os.path.join(tmpsdk_dir, 'conf'))) return ret else: - logger.info("Fetching conf/locked-sigs.inc from %s to %s/locked-sigs.inc succeeded" % (args.updateserver, os.path.join(tmpsdk_dir, 'conf'))) + logger.info("Fetching conf/locked-sigs.inc from %s to %s/locked-sigs.inc succeeded" % (updateserver, os.path.join(tmpsdk_dir, 'conf'))) new_locked_sig_file_path = os.path.join(tmpsdk_dir, 'conf/locked-sigs.inc') update_dict = generate_update_dict(new_locked_sig_file_path, old_locked_sig_file_path) logger.debug("update_dict = %s" % update_dict) @@ -161,23 +159,23 @@ def sdk_update(args, config, basepath, workspace): logger.debug("Updating meta data via git ...") # Try using 'git pull', if failed, use 'git clone' if os.path.exists(os.path.join(basepath, 'layers/.git')): - ret = subprocess.call("cd layers && git pull", shell=True) + ret = subprocess.call("cd layers && git pull %s/layers/.git" % updateserver, shell=True) else: ret = -1 if ret != 0: - ret = subprocess.call("rm -rf layers && git clone %s/layers" % args.updateserver, shell=True) + ret = subprocess.call("rm -rf layers && git clone %s/layers/.git" % updateserver, shell=True) if ret != 0: logger.error("Updating meta data via git failed") return ret logger.debug("Updating conf files ...") - conf_files = ['local.conf', 'bblayers.conf', 'devtool.conf', 'work-config.inc', 'locked-sigs.inc'] + conf_files = ['local.conf', 'bblayers.conf', 'devtool.conf', 'locked-sigs.inc'] for conf in conf_files: - ret = subprocess.call("wget -q -O - %s/conf/%s > conf/%s" % (args.updateserver, conf, conf), shell=True) + ret = subprocess.call("wget -q -O - %s/conf/%s > conf/%s" % (updateserver, conf, conf), shell=True) if ret != 0: logger.error("Update %s failed" % conf) return ret with open(os.path.join(basepath, 'conf/local.conf'), 'a') as f: - f.write('SSTATE_MIRRORS_append = " file://.* %s/sstate-cache/PATH \\n "\n' % args.updateserver) + f.write('SSTATE_MIRRORS_append = " file://.* %s/sstate-cache/PATH \\n "\n' % updateserver) # Run bitbake command for the whole SDK sdk_targets = config.get('SDK', 'sdk_targets') |