~ember/update-manager/ubuntu.bug1002956

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/python

import warnings
warnings.filterwarnings("ignore", "apt API not stable yet", FutureWarning)
import apt

from DistUpgrade.DistUpgradeVersion import VERSION

from UpdateManager.Core.MetaRelease import MetaReleaseCore
from UpdateManager.Core.DistUpgradeFetcherCore import DistUpgradeFetcherCore
from optparse import OptionParser
import locale
import gettext
from gettext import gettext as _

import os
import sys
import time
from DistUpgrade.utils import init_proxy

RELEASE_AVAILABLE=0
NO_RELEASE_AVAILABLE=1

if __name__ == "__main__":

  gettext.bindtextdomain("update-manager", "/usr/share/locale")
  gettext.textdomain("update-manager")

  try:
    locale.setlocale(locale.LC_ALL, "")
  except:
    pass

  init_proxy()

  # when run as "check-new-release" we go into "check only" mode
  check_only = sys.argv[0].endswith("check-new-release")

  parser = OptionParser()
  #FIXME: Workaround a bug in optparser which doesn't handle unicode/str
  #       correctly, see http://bugs.python.org/issue4391
  #       Should be resolved by Python3
  enc = locale.getpreferredencoding()
  parser.add_option ("-V", "--version", action="store_true",
                     dest="show_version", default=False,
                     help=_("Show version and exit").decode(enc))
  parser.add_option ("-d", "--devel-release", action="store_true",
                     dest="devel_release", default=False,
                     help=_("Check if upgrading to the latest devel release "
                          "is possible").decode(enc))
  parser.add_option ("-p", "--proposed", action="store_true",
                     dest="proposed_release", default=False,
                     help=_("Try upgrading to the latest release using "
                            "the upgrader from $distro-proposed").decode(enc))
  parser.add_option ("-m", "--mode", default="server",
                     dest="mode", 
                     help=_("Run in a special upgrade mode.\n"
                            "Currently 'desktop' for regular upgrades of "
                            "a desktop system and 'server' for server "
                            "systems are supported.").decode(enc))
  parser.add_option ("-f", "--frontend", default="DistUpgradeViewText",
                     dest="frontend", 
                     help=_("Run the specified frontend").decode(enc))
  parser.add_option ("-s","--sandbox", action="store_true", default=False,
                     help=_("Test upgrade with a sandbox aufs overlay").decode(enc))
  parser.add_option ("-c", "--check-dist-upgrade-only", action="store_true",
                     default=check_only,
                     help=_("Check only if a new distribution release is "
                            "available and report the result via the "
                            "exit code").decode(enc))
  parser.add_option ("-q", "--quiet", default=False, action="store_true",
                     dest="quiet")

  (options, args) = parser.parse_args()


  if options.show_version:
    print "%s: version %s" % (os.path.basename(sys.argv[0]), VERSION)
    sys.exit(0)

  if not options.quiet:
    print _("Checking for a new Ubuntu release")

  m = MetaReleaseCore(useDevelopmentRelease=options.devel_release,
                      useProposed=options.proposed_release)
  # this will timeout eventually
  while m.downloading:
    time.sleep(0.5)

  # make sure to inform the user if his distro is no longer supported
  # this will make it appear in motd (that calls do-release-upgrade in
  #  chech-new-release mode)
  if m.no_longer_supported is not None:
    url = "http://www.ubuntu.com/releaseendoflife"
    print _("Your Ubuntu release is not supported anymore.")
    print _("For upgrade information, please visit:\n"
            "%(url)s\n") % { 'url' : url }

  # now inform about a new release
  if m.new_dist is None:
    if not options.quiet:
      print _("No new release found")
    sys.exit(NO_RELEASE_AVAILABLE)

  if m.new_dist.upgrade_broken:
    if not options.quiet:
      print _("Release upgrade not possible right now") 
      print _("The release upgrade can not be performed currently, "
              "please try again later. The server reported: '%s'") % m.new_dist.upgrade_broken
    sys.exit(NO_RELEASE_AVAILABLE)

  # we have a new dist
  if options.check_dist_upgrade_only:
    print _("New release '%s' available.") % m.new_dist.version
    print _("Run 'do-release-upgrade' to upgrade to it.")
    sys.exit(RELEASE_AVAILABLE)

  progress = apt.progress.text.AcquireProgress()
  fetcher = DistUpgradeFetcherCore(new_dist=m.new_dist,
				   progress=progress)
  fetcher.run_options += ["--mode=%s" % options.mode,
                          "--frontend=%s" % options.frontend,
                          ]
  if options.sandbox:
    fetcher.run_options.append("--sandbox")
  fetcher.run()