]> git.pld-linux.org Git - projects/pld-ftp-admin.git/commitdiff
- from-incoming.py uses Base{FtpTree,Pkg}; now I can implement sending errors
authorMariusz Mazur <mmazur@pld-linux.org>
Mon, 29 Nov 2004 19:18:57 +0000 (19:18 +0000)
committerMariusz Mazur <mmazur@pld-linux.org>
Mon, 29 Nov 2004 19:18:57 +0000 (19:18 +0000)
Changed files:
    bin/pfa-from-incoming -> 1.2
    modules/baseftptree.py -> 1.3
    modules/ftptree.py -> 1.8

bin/pfa-from-incoming
modules/baseftptree.py
modules/ftptree.py

index 099b3cfbad95f5f64c1fbc7ae82b75ebefae2318..a4680d6480779e7f629d988c08d9461da3e49dc9 100644 (file)
@@ -5,7 +5,8 @@ import sys, os
 sys.path.insert(0, os.environ['HOME']+'/pld-ftp-admin/modules')
 from config import incoming_dir, default_to, ftp_archs
 import config
-from common import fileexists
+from common import noarchcachedir, tmpdir
+from baseftptree import BaseFtpTree, BasePkg
 
 def log(msg):
     print msg
@@ -26,11 +27,6 @@ def findfiles(dir):
             return False
     return filter(filterinfos, os.listdir(dir))
 
-def getsrcrpm(content):
-    for line in content.splitlines():
-        if line[:11]=='file:SRPMS:':
-            return line.split(':')[2]
-
 def getcontent(file):
     f=open(file, 'r')
     content=f.read()
@@ -40,50 +36,69 @@ def getcontent(file):
     else:
         return content[:-4]
 
+ftptree=BaseFtpTree(config.value['default_to'])
+
 for uploadinfo in findfiles(incoming_dir+'SRPMS'):
     content=getcontent(incoming_dir+'SRPMS/'+uploadinfo)
     if not content:
         continue # Uploading not finished
 
-    if fileexists(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info'):
-        f=open(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info', 'a')
-        for line in content.splitlines(True):
-            if line[:5]=='file:':
-                srpm=line.strip().split(':')[2]
-                log("%s already present in %s; removing newer files" %
-                    (srpm, config.value['default_to']))
-                rm(incoming_dir+'SRPMS/'+srpm)
-            elif line[:5]=='info:':
-                f.write(line)
-            else:
-                log("Uknown line in uploadinfo file: "+line.strip())
+    pkg=BasePkg(uploadinfo[:-19], content=content)
+    srpm=pkg.files['SRPMS'][0]
+
+    if ftptree.has_key(`pkg`):
+        log("%s already present in %s; removing newer files" %
+            (srpm, ftptree))
+        rm(incoming_dir+'SRPMS/'+srpm)
+        f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
+        bid=pkg.build.keys()[0]
+        build=pkg.build[bid]
+        f.write("info:build:%s:requester:%s\ninfo:build:%s:requester_email:%s\n"
+                 % (bid, build.requester, bid, build.requester_email))
         f.close()
     else:
-        mv(incoming_dir+'SRPMS/'+getsrcrpm(content), default_to+'SRPMS/RPMS')
+        mv(incoming_dir+'SRPMS/'+srpm, default_to+'SRPMS/RPMS')
  
-        f=open(default_to+'SRPMS/.metadata/'+uploadinfo[:-11]+'.info', 'w')
+        f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'w')
         f.write(content)
         f.close()
 
     rm(incoming_dir+'SRPMS/'+uploadinfo)
 
-
-def getfiles(filename):
-    f=open(filename, 'r')
-    file={}
-    noarch_arch={}
-    for line in f.readlines():
-        if line[:5]=='file:':
-            entry=line.split(':')
-            if not file.has_key(entry[1]):
-                file[entry[1]]=[]
-            file[entry[1]].append(entry[2])
-        elif line[:17]=='info:noarch_arch:':
-            entry=line.split(':')
-            noarch_arch[entry[2]]=entry[3]
-    f.close()
-    return (file, noarch_arch)
-
+def send_noarch_msg(files_differ, reqs_differ):
+    pass
+
+def move_noarch(f, arch, rpm, dstpkg):
+    if dstpkg.noarch_arch.has_key(rpm):
+        os.system("rpm -qlp %s > %s/files.new" %
+                  (incoming_dir+arch+'/'+rpm, tmpdir))
+        os.system("rpm -qRp %s |sort|uniq > %s/reqs.new" %
+                  (incoming_dir+arch+'/'+rpm, tmpdir))
+
+        files_differ=False
+        reqs_differ=False
+
+        if os.system("diff -u %s/%s.filelist %s/files.new > %s/files.diff" %
+                     (noarchcachedir, rpm, tmpdir, tmpdir)):
+            files_differ=True
+        if os.system("diff -u %s/%s.reqlist %s/reqs.new > %s/reqs.diff" %
+                     (noarchcachedir, rpm, tmpdir, tmpdir)):
+            reqs_differ=True
+
+        if files_differ or reqs_differ:
+            # TODO: sending this thing will be a little more problematic
+            # than I originally thought
+            #send_noarch_msg(files_differ, reqs_differ)
+            print 'files or reqs differ'
+
+        rm(incoming_dir+arch+'/'+rpm)
+    else:
+        os.system("rpm -qlp %s > %s/%s.filelist" %
+                  (incoming_dir+arch+'/'+rpm, noarchcachedir, rpm))
+        os.system("rpm -qRp %s |sort|uniq > %s/%s.reqlist" % 
+                  (incoming_dir+arch+'/'+rpm, noarchcachedir, rpm))
+        f.write("file:noarch:%s\ninfo:noarch_arch:%s:%s\n" % (rpm, rpm, arch))
+        mv(incoming_dir+arch+'/'+rpm, default_to+'noarch/RPMS')
 
 for arch in ftp_archs:
     for uploadinfo in findfiles(incoming_dir+arch):
@@ -91,27 +106,26 @@ for arch in ftp_archs:
         if not content:
             continue # Uploading not finished
 
-        srcrpm=getsrcrpm(content)
-        dstinfofile=default_to+'SRPMS/.metadata/'+srcrpm+'.info'
+        srcpkg=BasePkg(uploadinfo[:-19], content=content)
+        srpm=srcpkg.files['SRPMS'][0]
 
-        if not fileexists(dstinfofile):
+        if not ftptree.has_key(`srcpkg`):
             continue # We require the src.rpm to be present
 
-        (files, noarch_arch)=getfiles(dstinfofile)
+        dstpkg=BasePkg(`srcpkg`, ftptree)
 
-        if files.has_key(arch):
-            log("files from %s for arch %s already present in %s; removing newer files" % (srcrpm, arch, config.value['default_to']))
-            for line in content.splitlines():
-                if line[:10]=='file:ARCH:':
-                    rpm=line.split(':')[2]
-                    rm(incoming_dir+arch+'/'+rpm)
+        if dstpkg.files.has_key(arch):
+            log("files from %s for arch %s already present in %s; removing newer files" % (`srcpkg`, arch, ftptree))
+            for rpm in srcpkg.files['ARCH']:
+                rm(incoming_dir+arch+'/'+rpm)
             rm(incoming_dir+arch+'/'+uploadinfo)
             continue
 
-        f=open(dstinfofile, 'a')
-        for line in content.splitlines():
-            if line[:10]=='file:ARCH:':
-                rpm=line.split(':')[2]
+        f=open(default_to+'SRPMS/.metadata/'+srpm+'.info', 'a')
+        for rpm in srcpkg.files['ARCH']:
+            if rpm[-11:]=='.noarch.rpm':
+                move_noarch(f, arch, rpm, dstpkg)
+            else:
                 f.write("file:%s:%s\n" % (arch, rpm))
                 mv(incoming_dir+arch+'/'+rpm, default_to+arch+'/RPMS')
         f.close()
index 4ce40b3138f915c32aba5d092cc2cd584c0bb490..8524420b938b7e2c2483b46c88873d541b96a3bf 100644 (file)
@@ -1,6 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import string, config
+from common import fileexists
 
 class Build:
     def __init__(self):
@@ -8,20 +9,28 @@ class Build:
         self.requester_email=''
 
 class BasePkg:
-    def __init__(self, name, tree):
+    def __init__(self, name, tree=None, content=None):
         self.files={}
         self.info={}
         self.build={}
+        self.noarch_arch={}
         self.tree=tree
         self.name=name
-        self.load()
+        self.load(content)
 
     def __repr__(self):
         return self.name
 
-    def load(self):
-        f=open(self.tree.basedir+'/SRPMS/.metadata/'+self.name+'.src.rpm.info', 'r')
-        for entry in f.readlines():
+    def load(self, content=None):
+        if content:
+            lines=content.splitlines()
+        else:
+            f=open("%s/SRPMS/.metadata/%s.src.rpm.info" % 
+                   (self.tree.basedir, self.name), 'r')
+            lines=f.readlines()
+            f.close()
+
+        for entry in lines:
             i=string.split(string.strip(entry), ':')
             if i[0] == 'info':
                 if len(i)==3:
@@ -33,13 +42,14 @@ class BasePkg:
                         self.build[i[2]].requester=i[4]
                     elif i[3]=='requester_email':
                         self.build[i[2]].requester_email=i[4]
+                elif i[1]=='noarch_arch':
+                    self.noarch_arch[i[2]]=i[3]
                 else:
                     self.info[i[1]]=i[2:]
             elif i[0] == 'file':
                 if not self.files.has_key(i[1]):
                     self.files[i[1]]=[]
                 self.files[i[1]].append(i[2])
-        f.close()
 
 class BaseFtpTree:
     def __init__(self, tree):
@@ -49,3 +59,9 @@ class BaseFtpTree:
     def __repr__(self):
         return self.treename
 
+    def has_key(self, key):
+        if fileexists(self.basedir+'/SRPMS/.metadata/'+key+'.src.rpm.info'):
+            return True
+        else:
+            return False
+
index f7efffcd4fda370ce108367d59b99d03892699e9..de3a597141c9508e3a83ec44262d7d9dfb180d18 100644 (file)
@@ -42,8 +42,8 @@ class Pkg(BasePkg):
             self.tree.marked4removal.append(self)
             self.marked4removal=True
 
-    def load(self):
-        BasePkg.load(self)
+    def load(self, content=None):
+        BasePkg.load(self, content)
         if self.info.has_key('move'):
             self.mark4moving()
 
This page took 0.062232 seconds and 4 git commands to generate.