]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport of 1.29 and 1.30 (1.28 is obsolete):
authorJack Jansen <jack.jansen@cwi.nl>
Sat, 28 Feb 2004 23:21:50 +0000 (23:21 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sat, 28 Feb 2004 23:21:50 +0000 (23:21 +0000)
Started on version 0.4: better scheme for finding correct database:
- Try not only "darwin-7.X.Y" but also "darwin-7.X" and "darwin-7",
  so far we've never had to create anew database for a minor release.
- Distinguish between the various different installs (user-installed
  MacPython, apple-installed MacPython, other).

Lib/plat-mac/pimp.py

index 1b0ff21d752d48e0fc1d13a9e403cf2e2279370b..131d5b0dca3013bfb7f0f9cf035b380457eb22e6 100644 (file)
@@ -35,7 +35,7 @@ _scriptExc_BadInstalled = "pimp._scriptExc_BadInstalled"
 
 NO_EXECUTE=0
 
-PIMP_VERSION="0.3"
+PIMP_VERSION="0.4"
 
 # Flavors:
 # source: setup-based package
@@ -44,7 +44,52 @@ DEFAULT_FLAVORORDER=['source', 'binary']
 DEFAULT_DOWNLOADDIR='/tmp'
 DEFAULT_BUILDDIR='/tmp'
 DEFAULT_INSTALLDIR=distutils.sysconfig.get_python_lib()
-DEFAULT_PIMPDATABASE="http://www.python.org/packman/version-0.3/%s.plist" % distutils.util.get_platform()
+DEFAULT_PIMPDATABASE_FMT="http://www.python.org/packman/version-%s/%s-%s-%s-%s-%s.plist"
+
+def getDefaultDatabase(experimental=False):
+       if experimental:
+               status = "exp"
+       else:
+               status = "prod"
+               
+       major, minor, micro, state, extra = sys.version_info
+       pyvers = '%d.%d' % (major, minor)
+       if state != 'final':
+               pyvers = pyvers + '%s%d' % (state, extra)
+               
+       longplatform = distutils.util.get_platform()
+       osname, release, machine = longplatform.split('-')
+       # For some platforms we may want to differentiate between
+       # installation types
+       if osname == 'darwin':
+               if sys.prefix.startswith('/System/Library/Frameworks/Python.framework'):
+                       osname = 'darwin_apple'
+               elif sys.prefix.startswith('/Library/Frameworks/Python.framework'):
+                       osname = 'darwin_macpython'
+               # Otherwise we don't know...
+       # Now we try various URLs by playing with the release string.
+       # We remove numbers off the end until we find a match.
+       rel = release
+       while True:
+               url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, rel, machine)
+               try:
+                       urllib2.urlopen(url)
+               except urllib2.HTTPError, arg:
+                       pass
+               else:
+                       break
+               if not rel:
+                       # We're out of version numbers to try. Use the
+                       # full release number, this will give a reasonable
+                       # error message later
+                       url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, release, machine)
+                       break
+               idx = rel.rfind('.')
+               if idx < 0:
+                       rel = ''
+               else:
+                       rel = rel[:idx]
+       return url
 
 def _cmd(output, dir, *cmditems):
     """Internal routine to run a shell command in a given directory."""
@@ -163,7 +208,7 @@ class PimpPreferences:
         if not buildDir:
             buildDir = DEFAULT_BUILDDIR
         if not pimpDatabase:
-            pimpDatabase = DEFAULT_PIMPDATABASE
+            pimpDatabase = getDefaultDatabase()
         self.setInstallDir(installDir)
         self.flavorOrder = flavorOrder
         self.downloadDir = downloadDir
@@ -932,7 +977,6 @@ def main():
         print "       -D dir Set destination directory"
         print "              (default: %s)" % DEFAULT_INSTALLDIR
         print "       -u url URL for database"
-        print "              (default: %s)" % DEFAULT_PIMPDATABASE
         sys.exit(1)
         
     try: