summaryrefslogtreecommitdiffstats
path: root/Tools/versioncheck/pyversioncheck.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-12-23 18:43:55 (GMT)
committerGuido van Rossum <guido@python.org>1997-12-23 18:43:55 (GMT)
commit5291037c704a0e092313b70fa09364296e3149fa (patch)
tree4eaf8bc2858903c36ab3a0457412358466ef6b2e /Tools/versioncheck/pyversioncheck.py
parent7f96291ee28ead21ab79b2f21a2dc14ca384c316 (diff)
downloadcpython-5291037c704a0e092313b70fa09364296e3149fa.zip
cpython-5291037c704a0e092313b70fa09364296e3149fa.tar.gz
cpython-5291037c704a0e092313b70fa09364296e3149fa.tar.bz2
Adding Jack Jansen's version checking utility.
Diffstat (limited to 'Tools/versioncheck/pyversioncheck.py')
-rw-r--r--Tools/versioncheck/pyversioncheck.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/Tools/versioncheck/pyversioncheck.py b/Tools/versioncheck/pyversioncheck.py
new file mode 100644
index 0000000..074e917
--- /dev/null
+++ b/Tools/versioncheck/pyversioncheck.py
@@ -0,0 +1,101 @@
+"""pyversioncheck - Module to help with checking versions"""
+import Types
+import rfc822
+import urllib
+import sys
+import string
+
+# Verbose options
+VERBOSE_SILENT=0 # Single-line reports per package
+VERBOSE_NORMAL=1 # Single-line reports per package, more info if outdated
+VERBOSE_EACHFILE=2 # Report on each URL checked
+VERBOSE_CHECKALL=3 # Check each URL for each package
+
+# Test directory
+## urllib bug: _TESTDIR="ftp://ftp.cwi.nl/pub/jack/python/versiontestdir/"
+_TESTDIR="http://www.cwi.nl/~jack/versiontestdir/"
+
+def versioncheck(package, url, version, verbose=0):
+ ok, newversion, fp = checkonly(package, url, version, verbose)
+ if verbose > VERBOSE_NORMAL:
+ return ok
+ if ok < 0:
+ print '%s: No correctly formatted current version file found'%(package)
+ elif ok == 1:
+ print '%s: up-to-date (version %s)'%(package, version)
+ else:
+ print '%s: version %s installed, version %s found:' % \
+ (package, version, newversion)
+ if verbose > VERBOSE_SILENT:
+ while 1:
+ line = fp.readline()
+ if not line: break
+ sys.stdout.write('\t'+line)
+ return ok
+
+def checkonly(package, url, version, verbose=0):
+ if verbose >= VERBOSE_EACHFILE:
+ print '%s:'%package
+ if type(url) == Types.StringType:
+ ok, newversion, fp = _check1version(package, url, version, verbose)
+ else:
+ for u in url:
+ ok, newversion, fp = _check1version(package, u, version, verbose)
+ if ok >= 0 and verbose < VERBOSE_CHECKALL:
+ break
+ return ok, newversion, fp
+
+def _check1version(package, url, version, verbose=0):
+ if verbose >= VERBOSE_EACHFILE:
+ print ' Checking %s'%url
+ try:
+ fp = urllib.urlopen(url)
+ except IOError, arg:
+ if verbose >= VERBOSE_EACHFILE:
+ print ' Cannot open:', arg
+ return -1, None, None
+ msg = rfc822.Message(fp, seekable=0)
+ newversion = msg.getheader('current-version')
+ if not newversion:
+ if verbose >= VERBOSE_EACHFILE:
+ print ' No "Current-Version:" header in URL or URL not found'
+ return -1, None, None
+ version = string.strip(string.lower(version))
+ newversion = string.strip(string.lower(newversion))
+ if version == newversion:
+ if verbose >= VERBOSE_EACHFILE:
+ print ' Version identical (%s)'%newversion
+ return 1, version, fp
+ else:
+ if verbose >= VERBOSE_EACHFILE:
+ print ' Versions different (installed: %s, new: %s)'% \
+ (version, newversion)
+ return 0, newversion, fp
+
+
+def _test():
+ print '--- TEST VERBOSE=1'
+ print '--- Testing existing and identical version file'
+ versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=1)
+ print '--- Testing existing package with new version'
+ versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=1)
+ print '--- Testing package with non-existing version file'
+ versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=1)
+ print '--- Test package with 2 locations, first non-existing second ok'
+ versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']
+ versioncheck('VersionTestPackage', versfiles, '1.0', verbose=1)
+ print '--- TEST VERBOSE=2'
+ print '--- Testing existing and identical version file'
+ versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=2)
+ print '--- Testing existing package with new version'
+ versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=2)
+ print '--- Testing package with non-existing version file'
+ versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=2)
+ print '--- Test package with 2 locations, first non-existing second ok'
+ versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']
+ versioncheck('VersionTestPackage', versfiles, '1.0', verbose=2)
+
+if __name__ == '__main__':
+ _test()
+
+