~mvo/update-manager/not-automatic

« back to all changes in this revision

Viewing changes to UpdateManager/Core/DistUpgradeFetcherCore.py

  • Committer: Michael Vogt
  • Date: 2009-01-26 16:26:13 UTC
  • Revision ID: michael.vogt@ubuntu.com-20090126162613-yvx1zkwdwspbwqow
improve logic that detects what mirror is in use by
sources.list inspection (LP: #107983)

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
import sys
34
34
import GnuPGInterface
35
35
from gettext import gettext as _
 
36
 
36
37
try:
37
 
  from utils import country_mirror, url_downloadable
 
38
  from utils import *
38
39
except Exception:
39
 
  from UpdateManager.Common.utils import country_mirror, url_downloadable
40
 
 
 
40
  from UpdateManager.Common.utils import *
41
41
 
42
42
class DistUpgradeFetcherCore(object):
43
43
    " base class (without GUI) for the upgrade fetcher "
 
44
 
 
45
    DEFAULT_MIRROR="http://archive.ubuntu.com/ubuntu"
 
46
    DEFAULT_COMPONENT="main"
44
47
    
45
48
    def __init__(self, new_dist, progress):
46
49
        self.new_dist = new_dist
 
50
        self.current_dist = get_dist()
47
51
        self._progress = progress
48
52
        # options to pass to the release upgrader when it is run
49
53
        self.run_options = []
132
136
                         _("Could not run the upgrade tool") + ".  " + _("This is most likely a bug in the upgrade tool. "
133
137
                          "Please report it as a bug"))
134
138
        return True
135
 
    
 
139
 
 
140
    def mirror_from_sources_list(self, uri, default_uri):
 
141
      """
 
142
      try to figure what the mirror is from current sources.list
 
143
 
 
144
      do this by looing for matching DEFAULT_COMPONENT, current dist
 
145
      in sources.list and then doing a http HEAD/ftp size request
 
146
      to see if the uri is available on this server
 
147
      """
 
148
      from aptsources.sourceslist import SourcesList
 
149
      sources = SourcesList(withMatcher=False)
 
150
      seen = set()
 
151
      for e in sources.list:
 
152
        if e.disabled or e.invalid or not e.type == "deb":
 
153
          continue
 
154
        # check if we probed this mirror already
 
155
        if e.uri in seen:
 
156
          continue
 
157
        # we are using the main mirror already, so we are fine
 
158
        if (e.uri.startswith(default_uri) and 
 
159
            e.dist == self.current_dist and
 
160
            self.DEFAULT_COMPONENT in e.comps):
 
161
          return uri
 
162
        elif (e.dist == self.current_dist and
 
163
              "main" in e.comps):
 
164
          mirror_uri = e.uri+uri[len(default_uri):]
 
165
          if url_downloadable(mirror_uri):
 
166
            return mirror_uri
 
167
          seen.add(e.uri)
 
168
      return ""
 
169
 
136
170
    def _expandUri(self, uri):
 
171
        """
 
172
        expand the uri so that it uses a mirror if the url starts
 
173
        with a well know string (like archive.ubuntu.com)
 
174
        """
 
175
        # try to guess the mirror from the sources.list
 
176
        if uri.startswith(self.DEFAULT_MIRROR):
 
177
          new_uri = self.mirror_from_sources_list(uri, self.DEFAULT_URI)
 
178
          if new_uri:
 
179
            return new_uri
 
180
 
 
181
        # if that fails, use old method
137
182
        uri_template = Template(uri)
138
183
        m = country_mirror()
139
184
        new_uri = uri_template.safe_substitute(countrymirror=m)
225
270
        return True
226
271
 
227
272
if __name__ == "__main__":
228
 
    self.error("summary","message")
229
 
    d = DistUpgradeFetcher(None,None)
230
 
    print d.authenticate('/tmp/Release','/tmp/Release.gpg')
231
 
 
 
273
    d = DistUpgradeFetcherCore(None,None)
 
274
#    print d.authenticate('/tmp/Release','/tmp/Release.gpg')
 
275
    print "got mirror: '%s'" % d.mirror_from_sources_list("http://archive.ubuntu.com/ubuntu/dists/intrepid-proposed/main/dist-upgrader-all/0.93.34/intrepid.tar.gz", "http://archive.ubuntu.com/ubuntu")