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