15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def List(remote_manifest, local_manifest, display_revisions):
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  any_bundles_need_update = False
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print 'Bundles:'
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print ' I: installed\n *: update available\n'
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for bundle in remote_manifest.GetBundles():
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    local_bundle = local_manifest.GetBundle(bundle.name)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    needs_update = local_bundle and local_manifest.BundleNeedsUpdate(bundle)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if needs_update:
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      any_bundles_need_update = True
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    _PrintBundle(local_bundle, bundle, needs_update, display_revisions)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not any_bundles_need_update:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print '\nAll installed bundles are up-to-date.'
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  local_only_bundles = set([b.name for b in local_manifest.GetBundles()])
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  local_only_bundles -= set([b.name for b in remote_manifest.GetBundles()])
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if local_only_bundles:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print '\nBundles installed locally that are not available remotely:'
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for bundle_name in local_only_bundles:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      local_bundle = local_manifest.GetBundle(bundle_name)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      _PrintBundle(local_bundle, None, False, display_revisions)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _PrintBundle(local_bundle, bundle, needs_update, display_revisions):
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installed = local_bundle is not None
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # If bundle is None, there is no longer a remote bundle with this name.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if bundle is None:
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bundle = local_bundle
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if display_revisions:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if needs_update:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      revision = ' (r%s -> r%s)' % (local_bundle.revision, bundle.revision)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      revision = ' (r%s)' % (bundle.revision,)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    revision = ''
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print ('  %s%s %s (%s)%s' % (
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'I' if installed else ' ',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    '*' if needs_update else ' ',
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bundle.name,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bundle.stability,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    revision))
49