if os.path.isfile (attempt):
return attempt
else:
+ pattern="%s/*.spec"%self.edge_dir()
try:
- return glob("%s/*.spec"%self.edge_dir())[0]
+ return glob(pattern)[0]
except:
- raise Exception, 'Cannot guess specfile for module %s'%self.name
+ raise Exception, 'Cannot guess specfile for module %s -- pattern was %s'%(self.name,pattern)
def all_specnames (self):
return glob("%s/*.spec"%self.edge_dir())
class Build (Module):
- def __init__ (self, buildtag,options):
- self.buildtag=buildtag
- Module.__init__(self,"build@%s"%buildtag,options)
-
# we cannot get build's svnpath as for other packages as we'd get something in svn+ssh
# xxx quick & dirty
- def get_svnpath (self):
- self.svnpath="http://svn.planet-lab.org/svn/build/tags/%s"%self.buildtag
+ def __init__ (self, buildtag,options):
+ self.buildtag=buildtag
+ # if the buildtag start with a : (to use a branch rather than a tag)
+ if buildtag.find(':') == 0 :
+ module_name="build%(buildtag)s"%locals()
+ self.display=buildtag[1:]
+ self.svnpath="http://svn.planet-lab.org/svn/build/branches/%s"%self.display
+ else :
+ module_name="build@%(buildtag)s"%locals()
+ self.display=buildtag
+ self.svnpath="http://svn.planet-lab.org/svn/build/tags/%s"%self.buildtag
+ Module.__init__(self,module_name,options)
@staticmethod
def get_distro_from_distrotag (distrotag):
print "----"
print "----"
print "----"
- print "= build tag %s to %s = #build-%s"%(buildtag_old,buildtag_new,buildtag_new)
(build_new,build_old) = (Build (buildtag_new,options), Build (buildtag_old,options))
+ print "= build tag %s to %s = #build-%s"%(build_old.display,build_new.display,build_new.display)
for b in (build_new,build_old):
b.init_module_dir()
b.init_edge_dir()
b.update_edge_dir()
- b.get_svnpath()
# find out the tags files that are common, unless option was specified
if options.distrotags:
distrotags=options.distrotags
first_distrotag=False
else:
print '----'
- print '== distro %s (%s to %s) == #distro-%s-%s'%(distrotag,buildtag_old,buildtag_new,distro,buildtag_new)
+ print '== distro %s (%s to %s) == #distro-%s-%s'%(distrotag,build_old.display,build_new.display,distro,build_new.display)
print ' * from %s/%s'%(build_old.svnpath,distrotag)
print ' * to %s/%s'%(build_new.svnpath,distrotag)
# parse make packages
packages_new=build_new.get_packages(distrotag)
pnames_new=set(packages_new.keys())
- if options.verbose: print 'got packages for ',buildtag_new
+ if options.verbose: print 'got packages for ',build_new.display
packages_old=build_old.get_packages(distrotag)
pnames_old=set(packages_old.keys())
- if options.verbose: print 'got packages for ',buildtag_old
+ if options.verbose: print 'got packages for ',build_old.display
# get created, deprecated, and preserved package names
pnames_created = list(pnames_new-pnames_old)
# display created and deprecated
for name in pnames_created:
- print '=== %s : new package %s -- appeared in %s === #package-%s-%s-%s'%(distrotag,name,buildtag_new,name,distro,buildtag_new)
+ print '=== %s : new package %s -- appeared in %s === #package-%s-%s-%s'%(
+ distrotag,name,build_new.display,name,distro,build_new.display)
pobj=packages_new[name]
print ' * %s'%pobj.details()
for name in pnames_deprecated:
- print '=== %s : package %s -- deprecated, last occurrence in %s === #package-%s-%s-%s'%(distrotag,name,buildtag_old,name,distro,buildtag_new)
+ print '=== %s : package %s -- deprecated, last occurrence in %s === #package-%s-%s-%s'%(
+ distrotag,name,build_old.display,name,distro,build_new.display)
pobj=packages_old[name]
if not pobj.svnpath:
print ' * codebase stored in CVS, specfile is %s'%pobj.spec
if options.verbose: print 'got diff from cache'
if not specdiff:
continue
- print '=== %s - %s to %s : package %s === #package-%s-%s-%s'%(distrotag,buildtag_old,buildtag_new,name,name,distro,buildtag_new)
+ print '=== %s - %s to %s : package %s === #package-%s-%s-%s'%(
+ distrotag,build_old.display,build_new.display,name,name,distro,build_new.display)
print ' * from %s to %s'%(pobj_old.details(),pobj_new.details())
trac_diff_url=pobj_old.trac_full_diff(pobj_new)
if trac_diff_url:
"""
release_usage="""Usage: %prog [options] tag1 .. tagn
Extract release notes from the changes in specfiles between several build tags, latest first
+ Examples:
+ release-changelog 4.2-rc25 4.2-rc24 4.2-rc23 4.2-rc22
+ You can refer to a (build) branch by prepending a colon, like in
+ release-changelog :4.2 4.2-rc25
"""
common_usage="""More help:
see http://svn.planet-lab.org/wiki/ModuleTools"""