~straemer/ubuntu/quantal/update-manager/fix-for-1058070

« back to all changes in this revision

Viewing changes to AutoUpgradeTester/install_all_main.py

  • Committer: Package Import Robot
  • Author(s): Colin Watson, Colin Watson, Adam Conrad, Barry Warsaw, Michael Vogt, Stéphane Graber, Steve Langasek
  • Date: 2012-06-14 00:57:42 UTC
  • Revision ID: package-import@ubuntu.com-20120614005742-2tnicupbt5io911y
Tags: 1:0.163
[ Colin Watson ]
* Isolate tests from local configuration in
  /etc/update-manager/release-upgrades.d/.
* Use Python attributes rather than GObject.get_data and GObject.set_data,
  which have been removed upstream (LP: #1009859).
* Switch default view class to Gtk3 and replace python-gobject dependency
  with python-gi.
* Port away from old-style apt.Package candidateFoo and installedFoo
  properties, preferring candidate.foo and installed.foo.  In a number of
  cases we have to check whether candidate/installed is non-None first.
* Use apt_pkg.version_compare rather than apt_pkg.VersionCompare.
* Use apt_pkg.uri_to_filename rather than apt_pkg.URItoFileName.
* Use apt_pkg.TagFile (and related new-style API) rather than
  apt_pkg.ParseTagFile.
* Use apt_pkg.PackageManager rather than apt_pkg.GetPackageManager.
* Use apt_pkg.Acquire rather than apt_pkg.GetAcquire.
* Use mark_foo/marked_foo rather than markFoo/markedFoo.
* Use apt_pkg.ActionGroup rather than apt_pkg.GetPkgActionGroup.
* Use apt_pkg.ProblemResolver rather than apt_pkg.GetPkgProblemResolver.
* Use apt_pkg.read_config_file rather than apt_pkg.ReadConfigFile.
* Use new spelling of apt_pkg.DepCache methods.
* Rename several local cache methods to PEP-8 style to avoid showing up in
  the output of /usr/share/python-apt/migrate-0.8.py.
* Use apt_pkg.size_to_str rather than apt_pkg.SizeToStr.
* Use apt_pkg.PackageManager.get_archives rather than
  apt_pkg.PackageManager.GetArchives.
* Use apt_pkg.Acquire.fetch_needed rather than
  apt_pkg.Acquire.FetchNeeded.
* Use new spelling of apt_pkg.Package/Version/Dependency methods.
* Use apt_pkg.pkgsystem_lock rather than apt_pkg.PkgSystemLock.
* Use new spelling of apt_pkg dependency parsing methods.
* Use new spelling of apt_pkg.SourceList methods.
* Bump python-apt (build-)dependency to >= 0.8.0.
* Add a scheme for excluding false positives from the pyflakes test, and
  enable it by default.
* Rearrange the OptionParser workaround from 1:0.154.5 to work with Python
  3, using gettext or ugettext as appropriate.
* Always pass bytes to hashlib.md5.update.
* Fix DistUpgradeAptCdrom to account for gzip files being opened in binary
  mode.
* Convert the last use of os.popen to subprocess.check_output, which makes
  it easier to read str rather than bytes.  (This requires Python 2.7.)
* Decode bytes read from urlopened file objects.
* UpdateManager/backend/InstallBackendSynaptic.py
  - Keep a reference to the data tuple passed to GObject.child_watch_add
    to avoid attempts to destroy it without a thread context
    (LP: #724687).
  - Open temporary synaptic selections file in text mode.
* Define __bool__ rather than __nonzero__ method in Python 3.
* sort(cmp=) and sorted(cmp=) no longer work in Python 3.  Use appropriate
  key= arguments instead.
* Fix ResourceWarning while reading /proc/mounts.
* Make update-manager-kde depend on psmisc, for killall.
* DistUpgrade/DistUpgradeView.py:
  - Use floor division in FuzzyTimeToStr.
* DistUpgrade/DistUpgradeViewText.py:
  - Flush stdout after printing confirmation message, since it doesn't
    have a trailing newline.
* Use the appropriate Unicode gettext methods in both Python 2 and 3, and
  drop lots of Python-3-unfriendly Unicode mangling as a result.
* DistUpgrade/DistUpgradeViewKDE.py:
  - Open the terminal log in binary mode.
* data/do-release-upgrade.8:
  - Provide a more useful NAME section.
* DistUpgrade/DistUpgradeCache.py:
  - Tolerate SyntaxError from attempting to import NvidiaDetector, until
    such time as a complete ubuntu-drivers-common Python 3 port is in the
    archive.
* Switch #! lines over to python3, apart from dist-upgrader which needs to
  stay as Python 2 for a while longer (and have some special arrangement
  for running with Python 3 for upgrades from >= quantal).
* Run tests under both Python 2 and 3.

[ Adam Conrad ]
* Merge branch from Michael Terry to drop auto-upgrade-tester
  from update-manager and move it into its own source package

[ Barry Warsaw ]
* Begin refactoring of Computer Janitor code by renaming and
  re-situating all of it to janitor/plugincore.  This will eventually be
  removed from here into its own separate branch.
* Merge the temporary Python 3 sprint branch back into trunk, and close
  the py3 sprint branch.
* Moved UpdateManager/backend and UpdateManager/UnitySupport.py to the
  python*-update-manager packages for apturl.

[ Michael Vogt ]
* UpdateManager/GtkProgress.py:
  - fix python-apt 0.8 API crash

[ Stéphane Graber ]
* Drop fdsend as it's not used and doesn't build with python3.
* Make update-manager-core a binary all packages (everything is python).
* Split update-manager-core into python-update-manager,
  python3-update-manager and update-manager-core.
* Build-depend and depend on python-apt >= 0.8.5~ as we need proper
  python3 support.

[ Steve Langasek ]
* tests/test_country_mirror.py: the test suite shouldn't fail if $LANG
  isn't set in the environment.
* update-manager is now using python3 as an interpreter, so fix these up
  to actually be python3 packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
 
3
 
from __future__ import print_function
4
 
 
5
 
import apt
6
 
import apt_pkg
7
 
 
8
 
def blacklisted(name):
9
 
    # we need to blacklist linux-image-* as it does not install
10
 
    # cleanly in the chroot (postinst failes)
11
 
    blacklist = ["linux-image-","ltsp-client",
12
 
                 "glibc-doc-reference", "libpthread-dev",
13
 
                 "cman", "mysql-server", "fuse-utils",
14
 
                 "ltspfs", "gfs2-tools", "edubuntu-server",
15
 
                 "gnbd-client", "gnbd-server", "mysql-server-5.0",
16
 
                 "rgmanager", "clvm","redhat-cluster-suit",
17
 
                 # has a funny "can not be upgraded automatically" policy
18
 
                 # see debian #368226
19
 
                 "quagga",
20
 
                 "system-config-cluster", "gfs-tools"]
21
 
    for b in blacklist:
22
 
        if name.startswith(b):
23
 
            return True
24
 
    return False
25
 
 
26
 
#apt_pkg.config.set("Dir::State::status","./empty")
27
 
 
28
 
cache = apt.Cache()
29
 
group = apt_pkg.GetPkgActionGroup(cache._depcache)
30
 
#print([pkg.name for pkg in cache if pkg.is_installed])
31
 
 
32
 
troublemaker = set()
33
 
for pkg in cache:
34
 
    for c in pkg.candidateOrigin:
35
 
        if c.component == "main":
36
 
            current = set([p.name for p in cache if p.marked_install])
37
 
            if not (pkg.is_installed or blacklisted(pkg.name)):
38
 
                pkg.mark_install()
39
 
            new = set([p.name for p in cache if p.marked_install])
40
 
            #if not pkg.markedInstall or len(new) < len(current):
41
 
            if not (pkg.is_installed or pkg.marked_install):
42
 
                print("Can't install: %s" % pkg.name)
43
 
            if len(current-new) > 0:
44
 
                troublemaker.add(pkg.name)
45
 
                print("Installing '%s' caused removals_ %s" % (pkg.name, current - new))
46
 
 
47
 
#print(len(troublemaker))
48
 
for pkg in ["ubuntu-desktop", "ubuntu-minimal", "ubuntu-standard"]:
49
 
    cache[pkg].mark_install()
50
 
 
51
 
# make sure we don't install blacklisted stuff
52
 
for pkg in cache:
53
 
    if blacklisted(pkg.name):
54
 
        pkg.mark_keep()
55
 
 
56
 
print("We can install:")
57
 
print(len([pkg.name for pkg in cache if pkg.marked_install]))
58
 
print("Download: ")
59
 
pm = apt_pkg.GetPackageManager(cache._depcache)
60
 
fetcher = apt_pkg.GetAcquire()
61
 
pm.GetArchives(fetcher, cache._list, cache._records)
62
 
print(apt_pkg.SizeToStr(fetcher.FetchNeeded))
63
 
print("Total space: ", apt_pkg.SizeToStr(cache._depcache.UsrSize))
64
 
 
65
 
res = False
66
 
current = 0
67
 
maxRetries = 3
68
 
while current < maxRetries:
69
 
    try:
70
 
        res = cache.commit(apt.progress.text.AcquireProgress(),
71
 
                           apt.progress.base.InstallProgress())    
72
 
    except IOError as e:
73
 
        # fetch failed, will be retried
74
 
        current += 1
75
 
        print("Retrying to fetch: ", current)
76
 
        continue
77
 
    except SystemError as e:
78
 
        print("Error installing packages! ")
79
 
        print(e)
80
 
    print("Install result: ", res)
81
 
    break