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