]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - wwwbin/ftp-freshness.py
fix arg passing
[projects/pld-ftp-admin.git] / wwwbin / ftp-freshness.py
CommitLineData
ed1ec331
ER
1#!/usr/bin/python
2# arekm, 2007
3
4import os
5import re
6import struct
7import rpm
8import subprocess
9
10# earlier == more important
11dirs = [ "/home/ftp/pub/Linux/PLD/dists/th/test/SRPMS/RPMS/",
12 "/home/ftp/pub/Linux/PLD/dists/th/ready/SRPMS/RPMS/",
13 "/home/ftp/pub/Linux/PLD/dists/th/PLD/SRPMS/RPMS/" ]
14#dirs = [ "/home/pld/admins/th/1" ]
c8ce29df
KK
15specsdir = "/home/pld/admins/th/SPECS"
16
17if os.path.isdir(specsdir):
3a72e9a1 18 os.chdir(specsdir)
c8ce29df
KK
19 cmd = ['git', 'pull']
20else:
21 cmd = ['git', 'clone', '--depth=1', 'git://git.pld-linux.org/SPECS', specsdir]
ed1ec331 22
ed1ec331
ER
23p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
24(out, err) = p.communicate(None)
ed1ec331 25
c8ce29df
KK
26
27os.chdir(specsdir)
ed1ec331
ER
28class Pkgs(object):
29 def __init__(self):
30 self.pkg = {}
31 self.cvs = {}
32 self.cvs_new_nvr = []
33 self.cvs_new_nv = []
34 self.re_n = re.compile('^(.*)-([^-]*)-([^-]*)\.src\.rpm$')
35
36 def __get_from_rpm(self, file_name):
37 m = self.re_n.match(file_name)
38 if not m:
39 return False
40 name = m.group(1).strip()
41 version = m.group(2).strip()
42 release = m.group(3).strip()
43 return (name, version, release)
44
45 def __get_from_cvs(self, name):
c8ce29df 46 f = os.popen('rpm --specfile -q --queryformat "%{name}\n%{version}\n%{release}\n" ' + specsdir + '/' + name + '.spec 2> /dev/null', 'r')
ed1ec331
ER
47 name = f.readline().strip()
48 version = f.readline().strip()
49 release = f.readline().strip()
50 f.close()
51 return (name, version, release)
52
53 def __update_cvs(self, name):
54 if not self.cvs.has_key(name):
55 self.cvs[name] = self.__get_from_cvs(name)
56
57 def __update_new(self, name):
58 cvs_nvr = self.cvs[name]
59 pkg_nvr = self.pkg[name]
60
61 cvs_rpm_vr = rpm.labelCompare((cvs_nvr[0], cvs_nvr[1], cvs_nvr[2]), (pkg_nvr[0], pkg_nvr[1], pkg_nvr[2]))
62 cvs_rpm_v = rpm.labelCompare((cvs_nvr[0], cvs_nvr[1], ""), (pkg_nvr[0], pkg_nvr[1], ""))
63 rpm_cvs_vr = rpm.labelCompare((pkg_nvr[0], pkg_nvr[1], pkg_nvr[2]), (cvs_nvr[0], cvs_nvr[1], cvs_nvr[2]))
64 rpm_cvs_v = rpm.labelCompare((pkg_nvr[0], pkg_nvr[1], ""), (cvs_nvr[0], cvs_nvr[1], ""))
65
66 if rpm_cvs_v < 0 and cvs_rpm_v > 0:
67 self.cvs_new_nv.append(name)
68 else:
69 if rpm_cvs_vr < 0 and cvs_rpm_vr > 0 and cvs_nvr[1] == pkg_nvr[1]:
70 self.cvs_new_nvr.append(name)
71
72 def prepare(self):
73 self.cvs_new_nvr.sort()
74 self.cvs_new_nvr = list(set(self.cvs_new_nvr))
75 self.cvs_new_nv.sort()
76 self.cvs_new_nv = list(set(self.cvs_new_nv))
77
78 pkgs = list(self.pkg) + list(self.cvs)
79
80 for name in list(set(pkgs)):
81 self.__update_new(name)
82
83 def add_rpm(self, file_name):
84 nvr = self.__get_from_rpm(file_name)
85 if not nvr:
86 return False
87 name = nvr[0]
88 if self.pkg.has_key(name):
89 if rpm.labelCompare(nvr, self.pkg[name]) > 0:
90 del self.pkg[name]
91 self.pkg[name] = nvr
92 else:
93 self.pkg[name] = nvr
94 self.__update_cvs(name)
95
96 def print_nvr(self):
97 print "*** VERSION-RELEASE COMPARE FOR THE SAME VERSIONS ONLY ***"
98 for name in self.cvs_new_nvr:
99 self.cvs_new_nvr.sort()
100 cvs_nvr = self.cvs[name]
101 pkg_nvr = self.pkg[name]
3a72e9a1 102 print "GIT: [%s.spec] %s-%s-%s vs FTP: %s-%s-%s" % (name, cvs_nvr[0], cvs_nvr[1], cvs_nvr[2], pkg_nvr[0], pkg_nvr[1], pkg_nvr[2])
ed1ec331
ER
103
104 def print_nv(self):
105 print "*** VERSION COMPARE ONLY ***"
106 self.cvs_new_nv.sort()
107 for name in self.cvs_new_nv:
108 cvs_nvr = self.cvs[name]
109 pkg_nvr = self.pkg[name]
3a72e9a1 110 print "GIT: [%s.spec] %s-%s-%s vs FTP: %s-%s-%s" % (name, cvs_nvr[0], cvs_nvr[1], cvs_nvr[2], pkg_nvr[0], pkg_nvr[1], pkg_nvr[2])
ed1ec331
ER
111
112p = Pkgs()
113
114for d in dirs:
115 for rpm_file_name in os.listdir(d):
116 p.add_rpm(rpm_file_name)
117
118p.prepare()
119
120p.print_nv()
121print "\n\n"
122p.print_nvr()
This page took 0.319041 seconds and 4 git commands to generate.