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"
17 if os.path.isdir(specsdir):
20 cmd = ['git', 'clone', '--depth=1', 'git://git.pld-linux.org/SPECS', specsdir]
22 p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
23 (out, err) = p.communicate(None)
33 self.re_n = re.compile('^(.*)-([^-]*)-([^-]*)\.src\.rpm$')
35 def __get_from_rpm(self, file_name):
36 m = self.re_n.match(file_name)
39 name = m.group(1).strip()
40 version = m.group(2).strip()
41 release = m.group(3).strip()
42 return (name, version, release)
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()
50 return (name, version, release)
52 def __update_cvs(self, name):
53 if not self.cvs.has_key(name):
54 self.cvs[name] = self.__get_from_cvs(name)
56 def __update_new(self, name):
57 cvs_nvr = self.cvs[name]
58 pkg_nvr = self.pkg[name]
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], ""))
65 if rpm_cvs_v < 0 and cvs_rpm_v > 0:
66 self.cvs_new_nv.append(name)
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)
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))
77 pkgs = list(self.pkg) + list(self.cvs)
79 for name in list(set(pkgs)):
80 self.__update_new(name)
82 def add_rpm(self, file_name):
83 nvr = self.__get_from_rpm(file_name)
87 if self.pkg.has_key(name):
88 if rpm.labelCompare(nvr, self.pkg[name]) > 0:
93 self.__update_cvs(name)
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])
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])
114 for rpm_file_name in os.listdir(d):
115 p.add_rpm(rpm_file_name)