[svn] r4756 - trunk/tools/yam
packagers at lists.rpmforge.net
packagers at lists.rpmforge.net
Sat Sep 23 09:21:26 CEST 2006
Author: dag
Date: 2006-09-23 09:21:17 +0200 (Sat, 23 Sep 2006)
New Revision: 4756
Modified:
trunk/tools/yam/yam
Log:
Initial reporting infrastructure.
Modified: trunk/tools/yam/yam
===================================================================
--- trunk/tools/yam/yam 2006-09-22 13:16:05 UTC (rev 4755)
+++ trunk/tools/yam/yam 2006-09-23 07:21:17 UTC (rev 4756)
@@ -207,8 +207,6 @@
self.rhndownloadall = self.getoption('main', 'rhn-download-all', 'no') not in disable
-# self.skipmetadata = self.getoption('main', 'skip-metadata', 'all')
-
self.shareiso = self.getoption('main', 'shareiso', 'yes') not in disable
self.dists = []
@@ -480,8 +478,10 @@
self.wwwdir = os.path.join(cf.wwwdir, dist.nick, 'RPMS.' + self.name)
self.changed = False
- self.skip = False
+ self.oldlist = None
+ self.newlist = None
+
def __repr__(self):
# return "%s/%s" % (self.dist.nick, self.name)
return self.name
@@ -491,6 +491,10 @@
global exitcode
if self.name == 'all':
return
+
+ ### Make a snapshot of the directory
+ self.oldlist = self.rpmlist()
+
for url in self.url.split():
try:
info(2, '%s: Mirror packages from %s to %s' % (self.dist.nick, url, self.srcdir))
@@ -521,6 +525,9 @@
### Create directory in case no URL is given
mkdir(self.srcdir)
+ ### Make a snapshot of the directory
+ self.newlist = self.rpmlist()
+
def clean(self):
info(5, '%s: Removing %s symlinks' % (self.dist.nick, self.name))
mkdir(self.wwwdir)
@@ -544,13 +551,19 @@
info(5, '%s: Symlink %s packages from %s' % (self.dist.nick, self.name, srcdir))
os.path.walk(srcdir, rpmlink, (self.dist, self.name))
+ def rpmlist(self):
+ "Capture a list of packages in the repository"
+ list = []
+ for root, dirs, files in os.walk(self.srcdir):
+ for file in files:
+ if file.endswith('.rpm'):
+ size = os.stat(os.path.join(root, file)).st_size
+ list.append( (file, size) )
+ list.sort()
+ return set(list)
+
def check(self):
"Return what repositories require an update and write .newsha1sum"
-# for repo in self.listrepos():
-# ### Skip metadata generation if required (usually repo all)
-# if repo.name in cf.skipmetadata.split():
-# info(4, '%s: Skip metadata generation for repository %s' % (self.nick, repo.name))
-# continue
if not os.path.isdir(self.wwwdir):
return
sha1file = os.path.join(self.wwwdir, '.sha1sum')
@@ -569,8 +582,6 @@
info(5, '%s: New repository %s detected.' % (self.dist.nick, self.name))
writesha1(sha1file + '.tmp', cursha1)
self.changed = True
-# if 'all' not in cf.skipmetadata.split():
-# self.repos['all'].new = True
def writesha1(self):
"Verify .newsha1sum and write a .sha1sum file per repository"
@@ -1368,6 +1379,15 @@
info(2, '%s: Repository %s does not exist' % (dist.nick, repo.name))
dist.unlock('update', repo.name)
+ new = repo.newlist.difference(repo.oldlist)
+ removed = repo.oldlist.difference(repo.newlist)
+
+ if new or removed:
+ info(1, '%s: Repository %s changed (new: %d, removed: %d)' % (dist.nick, repo.name, len(new), len(removed)))
+ info(4, '%s: New packages: %s' % (dist.nick, new))
+ info(4, '%s: Removed packages: %s' % (dist.nick, removed))
+ repo.changed = True
+
if not op.generate:
sys.exit(0)
More information about the svn-commits
mailing list