Commit fbc78cd3 authored by Jack Jansen's avatar Jack Jansen

- Added a scheme whereby pimp can update itself, by importing a module

  pimp_update if it exists. Upped the version number to indicate this.
  Fixes #731626.
- Added -V (print version) and -u (specify database URL) options when run
  as a command line tool.
parent d10fef93
...@@ -26,7 +26,8 @@ import tarfile ...@@ -26,7 +26,8 @@ import tarfile
import tempfile import tempfile
import shutil import shutil
__all__ = ["PimpPreferences", "PimpDatabase", "PimpPackage", "main"] __all__ = ["PimpPreferences", "PimpDatabase", "PimpPackage", "main",
"PIMP_VERSION", "main"]
_scriptExc_NotInstalled = "pimp._scriptExc_NotInstalled" _scriptExc_NotInstalled = "pimp._scriptExc_NotInstalled"
_scriptExc_OldInstalled = "pimp._scriptExc_OldInstalled" _scriptExc_OldInstalled = "pimp._scriptExc_OldInstalled"
...@@ -34,7 +35,7 @@ _scriptExc_BadInstalled = "pimp._scriptExc_BadInstalled" ...@@ -34,7 +35,7 @@ _scriptExc_BadInstalled = "pimp._scriptExc_BadInstalled"
NO_EXECUTE=0 NO_EXECUTE=0
PIMP_VERSION="0.1" PIMP_VERSION="0.2"
# Flavors: # Flavors:
# source: setup-based package # source: setup-based package
...@@ -252,10 +253,17 @@ class PimpDatabase: ...@@ -252,10 +253,17 @@ class PimpDatabase:
fp = urllib2.urlopen(url).fp fp = urllib2.urlopen(url).fp
dict = plistlib.Plist.fromFile(fp) dict = plistlib.Plist.fromFile(fp)
# Test here for Pimp version, etc # Test here for Pimp version, etc
if not included: if included:
self._version = dict.get('Version', '0.1') version = dict.get('Version')
if self._version != PIMP_VERSION: if version and version > self._version:
sys.stderr.write("Warning: database version %s does not match %s\n" sys.stderr.write("Warning: included database %s is for pimp version %s\n" %
(url, version))
else:
self._version = dict.get('Version')
if not self._version:
sys.stderr.write("Warning: database has no Version information\n")
elif self._version > PIMP_VERSION:
sys.stderr.write("Warning: database version %s newer than pimp version %s\n"
% (self._version, PIMP_VERSION)) % (self._version, PIMP_VERSION))
self._maintainer = dict.get('Maintainer', '') self._maintainer = dict.get('Maintainer', '')
self._description = dict.get('Description', '') self._description = dict.get('Description', '')
...@@ -885,15 +893,19 @@ def main(): ...@@ -885,15 +893,19 @@ def main():
print " pimp [options] -l [package ...] Show package information" print " pimp [options] -l [package ...] Show package information"
print " pimp [options] -i package ... Install packages" print " pimp [options] -i package ... Install packages"
print " pimp -d Dump database to stdout" print " pimp -d Dump database to stdout"
print " pimp -V Print version number"
print "Options:" print "Options:"
print " -v Verbose" print " -v Verbose"
print " -f Force installation" print " -f Force installation"
print " -D dir Set destination directory (default: site-packages)" 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) sys.exit(1)
try: try:
opts, args = getopt.getopt(sys.argv[1:], "slifvdD:") opts, args = getopt.getopt(sys.argv[1:], "slifvdD:Vu:")
except getopt.Error: except getopt.GetoptError:
_help() _help()
if not opts and not args: if not opts and not args:
_help() _help()
...@@ -914,6 +926,10 @@ def main(): ...@@ -914,6 +926,10 @@ def main():
if mode: if mode:
_help() _help()
mode = 'dump' mode = 'dump'
if o == '-V':
if mode:
_help()
mode = 'version'
if o == '-i': if o == '-i':
mode = 'install' mode = 'install'
if o == '-f': if o == '-f':
...@@ -922,10 +938,32 @@ def main(): ...@@ -922,10 +938,32 @@ def main():
verbose = 1 verbose = 1
if o == '-D': if o == '-D':
prefargs['installDir'] = a prefargs['installDir'] = a
if o == '-u':
prefargs['pimpDatabase'] = a
if not mode: if not mode:
_help() _help()
_run(mode, verbose, force, args, prefargs) if mode == 'version':
print 'Pimp version %s; module name is %s' % (PIMP_VERSION, __name__)
else:
_run(mode, verbose, force, args, prefargs)
# Finally, try to update ourselves to a newer version.
# If the end-user updates pimp through pimp the new version
# will be called pimp_update and live in site-packages
# or somewhere similar
if __name__ != 'pimp_update':
try:
import pimp_update
except ImportError:
pass
else:
if pimp_update.PIMP_VERSION <= PIMP_VERSION:
import warnings
warnings.warn("pimp_update is version %s, not newer than pimp version %s" %
(pimp_update.PIMP_VERSION, PIMP_VERSION))
else:
from pimp_update import *
if __name__ == '__main__': if __name__ == '__main__':
main() main()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment