extras-repoclosure PackageOwners.py, 1.4, 1.5 PackageOwnersTests.py, 1.2, 1.3 rc-report.py, 1.18, 1.19
Michael Schwendt (mschwendt)
fedora-extras-commits at redhat.com
Fri Sep 22 12:26:41 UTC 2006
Author: mschwendt
Update of /cvs/fedora/extras-repoclosure
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv10657/extras-repoclosure
Modified Files:
PackageOwners.py PackageOwnersTests.py rc-report.py
Log Message:
download owners.list via viewcvs
Index: PackageOwners.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/PackageOwners.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PackageOwners.py 15 Sep 2006 11:32:21 -0000 1.4
+++ PackageOwners.py 22 Sep 2006 12:26:38 -0000 1.5
@@ -20,11 +20,27 @@
import os, sys, time
import shutil
import tempfile
+import urllib
class PackageOwners:
- """interface to Fedora Extras CVS owners/owners.list file"""
+ """interface to Fedora Extras owners/owners.list file"""
+
+ def __init__(self):
+ self.dict = {}
+ self.how = 'unknown'
+
+
+ def FromURL(self, retries=3, retrysecs=300, url='http://cvs.fedora.redhat.com/viewcvs/*checkout*/owners/owners.list?root=extras'):
+ self.how = 'url'
+ self.url = url
+ self.retries = retries
+ self.retrysecs = retrysecs
+ self._refresh()
+
- def __init__(self, retries=3, retrysecs=300, workdir=''):
+ def FromCVS(self, retries=3, retrysecs=300, command='LC_ALL=C CVS_RSH=ssh cvs -f -d :pserver:anonymous at cvs.fedora.redhat.com:/cvs/extras co owners', workdir=''):
+ self.how = 'cvs'
+ self.command = command
self.retries = retries
self.retrysecs = retrysecs
self.workdir = workdir
@@ -32,10 +48,12 @@
self.cwdstack = []
self._refresh()
+
def __getitem__(self,rpmname):
"""return e-mail address from initialowner field"""
return self.GetOwner(rpmname)
+
def GetOwner(self,rpmname):
"""return e-mail address from initialowner field"""
try:
@@ -44,6 +62,7 @@
r = ''
return r
+
def GetOwners(self,rpmname):
"""return list of e-mail addresses from initialowner+initialcclist fields"""
r = self.GetCoOwnerList(rpmname)
@@ -52,6 +71,7 @@
r.append(r2)
return r
+
def GetCoOwnerList(self,rpmname):
"""return list of e-mail addresses from initialcclist field"""
try:
@@ -60,34 +80,25 @@
r = []
return r
+
def _enterworkdir(self):
self.cwdstack.append( os.getcwd() )
if self.workdir != '':
os.chdir(self.workdir)
+
def _leaveworkdir(self):
if len(self.cwdstack):
os.chdir( self.cwdstack.pop() )
-
+
+
def _refresh(self):
self.dict = {} # map package name to email address, dict[name]
- self._enterworkdir()
- # Dumb caching. Check that file exists and is "quite recent".
- try:
- fstats = os.stat(self.ownersfile)
- if ( not fstats.st_size or
- ((time.time() - fstats.st_ctime) > 3600*2) ):
- raise Exception
- except:
- self._download()
- try:
- f = file( self.ownersfile )
- except IOError, (err, strerr):
- print 'ERROR: %s' % strerr
- # TODO: customise behaviour on error conditions
- self._leaveworkdir()
- sys.exit(err)
- for line in f:
+ self._download()
+
+
+ def _parse(self,ownerslist):
+ for line in ownerslist:
if line.startswith('#') or line.isspace():
continue
try:
@@ -103,27 +114,78 @@
except:
print 'ERROR: owners.list is broken'
print line
+
+
+ def _downloadfromcvs(self):
+ self._enterworkdir()
+ # Dumb caching. Check that file exists and is "quite recent".
+ cached = False
+ try:
+ fstats = os.stat(self.ownersfile)
+ if ( fstats.st_size or
+ ((time.time() - fstats.st_ctime) > 3600*2) ):
+ cached = True
+ except OSError:
+ pass
+
+ if not cached:
+ # Remove 'owners' directory contents, if it exists.
+ for root, dirs, files in os.walk( 'owners', topdown=False ):
+ for fname in files:
+ os.remove(os.path.join( root, fname ))
+ for dname in dirs:
+ os.rmdir(os.path.join( root, dname ))
+ # Retry CVS checkout a few times.
+ for count in range(self.retries):
+ (rc, rv) = commands.getstatusoutput(self.command)
+ if not rc:
+ break
+ print rv
+ time.sleep(self.retrysecs)
+ if rc:
+ # TODO: customise behaviour on error conditions
+ self._leaveworkdir()
+ sys.exit(1)
+
+ try:
+ f = file( self.ownersfile )
+ except IOError, (err, strerr):
+ print 'ERROR: %s' % strerr
+ # TODO: customise behaviour on error conditions
+ self._leaveworkdir()
+ sys.exit(err)
+ ownerslist = f.readlines()
f.close()
+ self._parse(ownerslist)
self._leaveworkdir()
- def _download(self):
- self._enterworkdir()
- # Remove 'owners' directory contents, if it exists.
- for root, dirs, files in os.walk( 'owners', topdown=False ):
- for fname in files:
- os.remove(os.path.join( root, fname ))
- for dname in dirs:
- os.rmdir(os.path.join( root, dname ))
- # Retry CVS checkout a few times.
+
+ def _downloadfromurl(self):
+ # Retry URL download a few times.
for count in range(self.retries):
- (rc, rv) = commands.getstatusoutput('LC_ALL=C CVS_RSH=ssh cvs -f -d :pserver:anonymous at cvs.fedora.redhat.com:/cvs/extras co owners')
- if not rc:
+ try:
+ f = urllib.urlopen(self.url)
+ rc = 0
break
- print rv
- time.sleep(self.retrysecs)
+ except IOError, (err, strerr):
+ rc = 1
+ time.sleep(self.retrysecs)
if rc:
# TODO: customise behaviour on error conditions
- self._leaveworkdir()
+ print 'ERROR: Could not download owners.list from %s' % self.url
sys.exit(1)
- self._leaveworkdir()
+ else:
+ ownerslist = f.readlines()
+ f.close()
+ self._parse(ownerslist)
+
+
+ def _download(self):
+ if self.how == 'url':
+ self._downloadfromurl()
+ elif self.how == 'cvs':
+ self._downloadfromcvs()
+ else:
+ self.__init__()
+
Index: PackageOwnersTests.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/PackageOwnersTests.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PackageOwnersTests.py 8 Aug 2006 16:01:49 -0000 1.2
+++ PackageOwnersTests.py 22 Sep 2006 12:26:38 -0000 1.3
@@ -8,30 +8,44 @@
sys.path.append('.')
from PackageOwners import PackageOwners
-class TestSequenceFunctions(unittest.TestCase):
+po = PackageOwners()
- o = PackageOwners(retries=1,retrysecs=1,workdir='.')
- def setUp(self):
- pass
-
+class TestDownloadFromURL(unittest.TestCase):
+ def testFromURL(self):
+ po.FromURL(retries=1,retrysecs=1)
+
+
+class TestDownloadFromCVS(unittest.TestCase):
+ def testFromCVS(self):
+ po.FromCVS(retries=1,retrysecs=1,workdir=os.getcwd())
+
+
+class TestSequenceFunctions(unittest.TestCase):
+
def testowner(self):
- self.assertEqual( self.o.GetOwner('sylpheed'),
+ self.assertEqual( po.GetOwner('sylpheed'),
'bugs.michael at gmx.net' )
def testowners(self):
- a = self.o.GetOwners('perl-MailTools')
+ a = po.GetOwners('perl-MailTools')
a.sort()
b = ['paul at city-fan.org','fedora-perl-devel-list at redhat.com']
b.sort()
self.assertEqual(a,b)
def testwrongpackage(self):
- self.assertEqual( self.o.GetOwner('thisPkgDoesNotExist'), '' )
+ self.assertEqual( po.GetOwner('thisPkgDoesNotExist'), '' )
def testcc(self):
- self.assertEqual( self.o.GetCoOwnerList('perl-MIME-tools'),
+ self.assertEqual( po.GetCoOwnerList('perl-MIME-tools'),
['fedora-perl-devel-list at redhat.com'] )
+
if __name__ == '__main__':
- unittest.main()
+ suite1 = unittest.makeSuite(TestDownloadFromCVS)
+ suite2 = unittest.makeSuite(TestDownloadFromURL)
+ suitemain = unittest.makeSuite(TestSequenceFunctions)
+
+ alltests = unittest.TestSuite((suite1,suitemain,suite2,suitemain))
+ unittest.TextTestRunner(verbosity=2).run(alltests)
Index: rc-report.py
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-report.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- rc-report.py 12 Sep 2006 17:40:53 -0000 1.18
+++ rc-report.py 22 Sep 2006 12:26:38 -0000 1.19
@@ -177,7 +177,9 @@
print 'SYNTAX: %s <release> <logfile> [release] [logfile]...' % sys.argv[0]
sys.exit(22)
-owners = PackageOwners(workdir = ownersworkdir)
+owners = PackageOwners()
+#owners.FromCVS(workdir=ownersworkdir)
+owners.FromURL()
summail = ''
pkgbyowner = {} # map, pkgbyowner[email], list of pkgids for all owner's broken packages
summary = {} # map of maps, summary[repoid][pkgid], unresolved deps line by line
More information about the fedora-extras-commits
mailing list