Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1982)

Unified Diff: native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py

Issue 10854168: [NaCl SDK] Nicer display for 'naclsdk list' (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py
diff --git a/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py b/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py
index c5351ff982c4342457232cf402dd86b337db0093..14aac81892fd6186cd852f77983c36b70586ea05 100755
--- a/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py
+++ b/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py
@@ -35,11 +35,13 @@ this utility can download as as subdirectory into the SDK.
Commands:
help [command] - Get either general or command-specific help
+ info - Displays information about a bundle
list - Lists the available bundles
update/install - Updates/installs bundles in the SDK
sources - Manage external package sources
Example Usage:
+ naclsdk info pepper_canary
naclsdk list
naclsdk update --force pepper_17
naclsdk install recommended
@@ -360,33 +362,111 @@ class SDKConfig(object):
# Commands
+def Info(options, argv, config):
+ '''Usage: %prof [global_options] info [options] bundle_names...
+
+ Displays information about a SDK bundle.'''
+
+ DebugPrint("Running List command with: %s, %s" %(options, argv))
+
+ parser = optparse.OptionParser(usage=Info.__doc__)
+ (info_options, args) = parser.parse_args(argv)
+
+ if not args:
+ parser.print_help()
+ return
+
+ manifest = LoadManifestFromURLs([options.manifest_url] + config.GetSources())
+ valid_bundles = [bundle.name for bundle in manifest.GetBundles()]
+ valid_args = set(args) & set(valid_bundles)
+ invalid_args = set(args) - valid_args
+ if invalid_args:
+ InfoPrint('Unknown bundle(s): %s\n' % (', '.join(invalid_args)))
+
+ for bundle_name in args:
+ if bundle_name not in valid_args:
+ continue
+
+ bundle = manifest.GetBundle(bundle_name)
+
+ InfoPrint('%s' % bundle.name)
+ for key, value in bundle.iteritems():
+ if key == manifest_util.ARCHIVES_KEY:
+ archive = bundle.GetHostOSArchive()
+ InfoPrint(' Archive:')
+ for archive_key, archive_value in archive.iteritems():
+ InfoPrint(' %s: %s' % (archive_key, archive_value))
+ elif key not in (manifest_util.ARCHIVES_KEY, manifest_util.NAME_KEY):
+ InfoPrint(' %s: %s' % (key, value))
+ InfoPrint('')
+
+
def List(options, argv, config):
- '''Usage: %prog [options] list
+ '''Usage: %prog [global_options] list [options]
Lists the available SDK bundles that are available for download.'''
- def PrintBundles(bundles):
- for bundle in bundles:
- InfoPrint(' %s' % bundle.name)
- for key, value in bundle.iteritems():
- if key not in (manifest_util.ARCHIVES_KEY, manifest_util.NAME_KEY):
- InfoPrint(' %s: %s' % (key, value))
+
+ def PrintBundle(local_bundle, bundle, needs_update, display_revisions):
+ installed = local_bundle is not None
+ # If bundle is None, there is no longer a remote bundle with this name.
+ if bundle is None:
+ bundle = local_bundle
+
+ if display_revisions:
+ if needs_update:
+ revision = ' (r%s -> r%s)' % (local_bundle.revision, bundle.revision)
+ else:
+ revision = ' (r%s)' % (bundle.revision,)
+ else:
+ revision = ''
+
+ InfoPrint(' %s%s %s (%s)%s' % (
+ 'I' if installed else ' ',
+ '*' if needs_update else ' ',
+ bundle.name,
+ bundle.stability,
+ revision))
+
DebugPrint("Running List command with: %s, %s" %(options, argv))
parser = optparse.OptionParser(usage=List.__doc__)
+ parser.add_option(
+ '-r', '--revision', dest='revision',
+ default=False, action='store_true',
+ help='display revision numbers')
(list_options, args) = parser.parse_args(argv)
+
manifest = LoadManifestFromURLs([options.manifest_url] + config.GetSources())
- InfoPrint('Available bundles:')
- PrintBundles(manifest.GetBundles())
- # Print the local information.
manifest_path = os.path.join(options.user_data_dir, options.manifest_filename)
local_manifest = LoadFromFile(manifest_path, manifest_util.SDKManifest())
- InfoPrint('\nCurrently installed bundles:')
- PrintBundles(local_manifest.GetBundles())
+
+ any_bundles_need_update = False
+ InfoPrint('Bundles:')
+ InfoPrint(' I: installed\n *: update available\n')
+ for bundle in manifest.GetBundles():
+ local_bundle = local_manifest.GetBundle(bundle.name)
+ installed = local_bundle is not None
+ needs_update = local_bundle and local_manifest.BundleNeedsUpdate(bundle)
+ if needs_update:
+ any_bundles_need_update = True
+
+ PrintBundle(local_bundle, bundle, needs_update, list_options.revision)
+
+ if not any_bundles_need_update:
+ InfoPrint('\nAll installed bundles are up-to-date.')
+
+ local_only_bundles = set([b.name for b in local_manifest.GetBundles()])
+ local_only_bundles -= set([b.name for b in manifest.GetBundles()])
+ if local_only_bundles:
+ InfoPrint('\nBundles installed locally that are not available remotely:')
+ for bundle_name in local_only_bundles:
+ local_bundle = local_manifest.GetBundle(bundle_name)
+ PrintBundle(local_bundle, None, False, list_options.revision)
def Update(options, argv, config):
- '''Usage: %prog [options] update [target]
+ '''Usage: %prog [global_options] update [options] [target]
Updates the Native Client SDK to a specified version. By default, this
command updates all the recommended components. The update process works
@@ -498,7 +578,7 @@ def Update(options, argv, config):
InfoPrint('%s is already up-to-date.' % bundle.name)
def Sources(options, argv, config):
- '''Usage: %prog [options] sources [--list,--add URL,--remove URL]
+ '''Usage: %prog [global_options] sources [options] [--list,--add URL,--remove URL]
Manage additional package sources. URL should point to a valid package
manifest file for download.
@@ -545,9 +625,13 @@ def Sources(options, argv, config):
def main(argv):
'''Main entry for the sdk_update utility'''
- parser = optparse.OptionParser(usage=GLOBAL_HELP)
+ parser = optparse.OptionParser(usage=GLOBAL_HELP, add_help_option=False)
DEFAULT_SDK_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+ # Manually add help options so we can ignore it when auto-updating.
+ parser.add_option(
+ '-h', '--help', dest='help', action='store_true',
+ help='show this help message and exit')
parser.add_option(
'-U', '--manifest-url', dest='manifest_url',
default='https://commondatastorage.googleapis.com/nativeclient-mirror/'
@@ -590,6 +674,7 @@ def main(argv):
COMMANDS = {
+ 'info': Info,
'list': List,
'update': Update,
'install': Update,
@@ -633,6 +718,9 @@ def main(argv):
print "Need to supply a command"
PrintHelpAndExit()
+ if options.help:
+ PrintHelpAndExit()
+
def DefaultHandler(unused_options=None, unused_args=None, unused_config=None):
print "Unknown Command: %s" % args[0]
PrintHelpAndExit()
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698