]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Tools/versioncheck/pyversioncheck.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Tools / versioncheck / pyversioncheck.py
CommitLineData
4710c53d 1"""pyversioncheck - Module to help with checking versions"""\r
2import types\r
3import rfc822\r
4import urllib\r
5import sys\r
6\r
7# Verbose options\r
8VERBOSE_SILENT=0 # Single-line reports per package\r
9VERBOSE_NORMAL=1 # Single-line reports per package, more info if outdated\r
10VERBOSE_EACHFILE=2 # Report on each URL checked\r
11VERBOSE_CHECKALL=3 # Check each URL for each package\r
12\r
13# Test directory\r
14## urllib bug: _TESTDIR="ftp://ftp.cwi.nl/pub/jack/python/versiontestdir/"\r
15_TESTDIR="http://www.cwi.nl/~jack/versiontestdir/"\r
16\r
17def versioncheck(package, url, version, verbose=0):\r
18 ok, newversion, fp = checkonly(package, url, version, verbose)\r
19 if verbose > VERBOSE_NORMAL:\r
20 return ok\r
21 if ok < 0:\r
22 print '%s: No correctly formatted current version file found'%(package)\r
23 elif ok == 1:\r
24 print '%s: up-to-date (version %s)'%(package, version)\r
25 else:\r
26 print '%s: version %s installed, version %s found:' % \\r
27 (package, version, newversion)\r
28 if verbose > VERBOSE_SILENT:\r
29 while 1:\r
30 line = fp.readline()\r
31 if not line: break\r
32 sys.stdout.write('\t'+line)\r
33 return ok\r
34\r
35def checkonly(package, url, version, verbose=0):\r
36 if verbose >= VERBOSE_EACHFILE:\r
37 print '%s:'%package\r
38 if type(url) == types.StringType:\r
39 ok, newversion, fp = _check1version(package, url, version, verbose)\r
40 else:\r
41 for u in url:\r
42 ok, newversion, fp = _check1version(package, u, version, verbose)\r
43 if ok >= 0 and verbose < VERBOSE_CHECKALL:\r
44 break\r
45 return ok, newversion, fp\r
46\r
47def _check1version(package, url, version, verbose=0):\r
48 if verbose >= VERBOSE_EACHFILE:\r
49 print ' Checking %s'%url\r
50 try:\r
51 fp = urllib.urlopen(url)\r
52 except IOError, arg:\r
53 if verbose >= VERBOSE_EACHFILE:\r
54 print ' Cannot open:', arg\r
55 return -1, None, None\r
56 msg = rfc822.Message(fp, seekable=0)\r
57 newversion = msg.getheader('current-version')\r
58 if not newversion:\r
59 if verbose >= VERBOSE_EACHFILE:\r
60 print ' No "Current-Version:" header in URL or URL not found'\r
61 return -1, None, None\r
62 version = version.lower().strip()\r
63 newversion = newversion.lower().strip()\r
64 if version == newversion:\r
65 if verbose >= VERBOSE_EACHFILE:\r
66 print ' Version identical (%s)'%newversion\r
67 return 1, version, fp\r
68 else:\r
69 if verbose >= VERBOSE_EACHFILE:\r
70 print ' Versions different (installed: %s, new: %s)'% \\r
71 (version, newversion)\r
72 return 0, newversion, fp\r
73\r
74\r
75def _test():\r
76 print '--- TEST VERBOSE=1'\r
77 print '--- Testing existing and identical version file'\r
78 versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=1)\r
79 print '--- Testing existing package with new version'\r
80 versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=1)\r
81 print '--- Testing package with non-existing version file'\r
82 versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=1)\r
83 print '--- Test package with 2 locations, first non-existing second ok'\r
84 versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']\r
85 versioncheck('VersionTestPackage', versfiles, '1.0', verbose=1)\r
86 print '--- TEST VERBOSE=2'\r
87 print '--- Testing existing and identical version file'\r
88 versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=2)\r
89 print '--- Testing existing package with new version'\r
90 versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=2)\r
91 print '--- Testing package with non-existing version file'\r
92 versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=2)\r
93 print '--- Test package with 2 locations, first non-existing second ok'\r
94 versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt']\r
95 versioncheck('VersionTestPackage', versfiles, '1.0', verbose=2)\r
96\r
97if __name__ == '__main__':\r
98 _test()\r