1# Copyright (c) 2012 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5def List(remote_manifest, local_manifest, display_revisions):
6  any_bundles_need_update = False
7  print 'Bundles:'
8  print ' I: installed\n *: update available\n'
9  for bundle in remote_manifest.GetBundles():
10    local_bundle = local_manifest.GetBundle(bundle.name)
11    needs_update = local_bundle and local_manifest.BundleNeedsUpdate(bundle)
12    if needs_update:
13      any_bundles_need_update = True
14
15    _PrintBundle(local_bundle, bundle, needs_update, display_revisions)
16
17  if not any_bundles_need_update:
18    print '\nAll installed bundles are up-to-date.'
19
20  local_only_bundles = set([b.name for b in local_manifest.GetBundles()])
21  local_only_bundles -= set([b.name for b in remote_manifest.GetBundles()])
22  if local_only_bundles:
23    print '\nBundles installed locally that are not available remotely:'
24    for bundle_name in local_only_bundles:
25      local_bundle = local_manifest.GetBundle(bundle_name)
26      _PrintBundle(local_bundle, None, False, display_revisions)
27
28
29def _PrintBundle(local_bundle, bundle, needs_update, display_revisions):
30  installed = local_bundle is not None
31  # If bundle is None, there is no longer a remote bundle with this name.
32  if bundle is None:
33    bundle = local_bundle
34
35  if display_revisions:
36    if needs_update:
37      revision = ' (r%s -> r%s)' % (local_bundle.revision, bundle.revision)
38    else:
39      revision = ' (r%s)' % (bundle.revision,)
40  else:
41    revision = ''
42
43  print ('  %s%s %s (%s)%s' % (
44    'I' if installed else ' ',
45    '*' if needs_update else ' ',
46    bundle.name,
47    bundle.stability,
48    revision))
49