Gaudi Framework, version v20r4

Generated: 8 Jan 2009

update_versions Namespace Reference


Functions

def extract_version
def change_version
def gather_new_versions
def update_release_notes
def main

Variables

string __author__ = "Marco Clemencic <Marco.Clemencic@cern.ch>"
string __version__ = "$Id: update_versions.py,v 1.3 2008/11/10 19:43:31 marcocle Exp $"
tuple _req_version_pattern = re.compile(r"^\s*version\s*(v[0-9]+r[0-9]+(?:p[0-9]+)?)\s*$")
tuple _use_pattern = re.compile(r"^\s*use\s*(\w+)\s*(v[0-9]+r[0-9]+(?:p[0-9]+)?)\s*(\w+)?\s*$")


Function Documentation

def update_versions::change_version (   packagedir,
  newversion 
)

Compare the version of the package with the new one and update the package if
needed.

Returns true if the package have been modified. 

Definition at line 23 of file update_versions.py.

00023                                           :
00024     """
00025     Compare the version of the package with the new one and update the package if
00026     needed.
00027     
00028     Returns true if the package have been modified. 
00029     """
00030     global _req_version_pattern
00031     changed = False
00032     out = []
00033     req = os.path.join(packagedir,"requirements")
00034     for l in open(req):
00035         m = _req_version_pattern.match(l)
00036         if m:
00037             if m.group(1) != newversion:
00038                 print "%s: %s -> %s"%(packagedir,m.group(1),newversion)
00039                 l = l.replace(m.group(1),newversion)
00040                 changed = True
00041         out.append(l)
00042     if changed:
00043         open(req,"w").writelines(out)
00044     # verify the version.cmt file
00045     ver = os.path.join(packagedir,"version.cmt")
00046     if os.path.exists(ver):
00047         current = open(ver).read().strip()
00048         if current != newversion:
00049             open(ver,"w").write(newversion + "\n")
00050     return changed
00051 
_use_pattern = re.compile(r"^\s*use\s*(\w+)\s*(v[0-9]+r[0-9]+(?:p[0-9]+)?)\s*(\w+)?\s*$")

def update_versions::extract_version (   f  ) 

Find the version number in a requirements file.

Definition at line 12 of file update_versions.py.

00012                       :
00013     """
00014     Find the version number in a requirements file.
00015     """ 
00016     global _req_version_pattern
00017     for l in open(f):
00018         m = _req_version_pattern.match(l)
00019         if m:
00020             return m.group(1)
00021     return None
00022 
def change_version(packagedir, newversion):

def update_versions::gather_new_versions (   f  ) 

Definition at line 53 of file update_versions.py.

00053                           :
00054     global _use_pattern
00055     versions = {}
00056     for l in open(f):
00057         m = _use_pattern.match(l)
00058         if m:
00059             versions[m.group(1)] = m.group(2)
00060     return versions
00061 
def update_release_notes(filename, pkg, version):

def update_versions::main (  ) 

Definition at line 88 of file update_versions.py.

00088           :
00089     
00090     m = re.search("use\s*LCGCMT\s*LCGCMT_(\S*)",open(os.path.join("..","..","cmt","project.cmt")).read())
00091     if m:
00092         LCGCMTVers = m.group(1)
00093     else:
00094         print "Cannot find LCGCMT version"
00095         sys.exit(1)  
00096     
00097     all_packages = {}
00098     exec(os.popen(r"""cmt broadcast 'echo "all_packages[\"<package>\"]" = \"$PWD\"'""","r").read())
00099 
00100     versions = gather_new_versions("requirements")
00101     release_notes = {}
00102     for pkg in all_packages:
00103         if pkg in versions:
00104             print "Updating %s"%pkg
00105             if change_version(all_packages[pkg],versions[pkg]):
00106                 relnotes = os.path.join(all_packages[pkg],"..","doc","release.notes")
00107                 release_notes[pkg] = update_release_notes(relnotes, pkg, versions[pkg])
00108             else:
00109                 print "%s unchanged"%pkg
00110 
00111     print "<!-- ====================================================================== -->"
00112     data = { "vers": versions["Gaudi"], "date": time.strftime("%Y-%m-%d") }
00113     print '<h2><a name="%(vers)s">Gaudi %(vers)s</a> (%(date)s)</h2>' % data
00114     data = { "vers": LCGCMTVers }
00115     print '<h3>Externals version: <a href="http://lcgsoft.cern.ch/index.py?page=cfg_overview&cfg=%(vers)s">LCGCMT_%(vers)s</a></h3>' % data
00116     print "<h3>Packages Changes</h3>"
00117     print "<ul>"
00118     for pkg in release_notes:
00119         if release_notes[pkg]:
00120             print '<li>%s (%s):\n<ul>\n<li><br/>\n    (<span class="author"></span>)</li>\n</ul>\n<pre>'%(pkg,versions[pkg])
00121             print release_notes[pkg].replace('&','&amp;') \
00122                                     .replace('<','&lt;') \
00123                                     .replace('>','&gt;') + "<pre>"
00124             print "</li>"
00125     print "</ul>"
00126 
if __name__ == '__main__':

def update_versions::update_release_notes (   filename,
  pkg,
  version 
)

Definition at line 62 of file update_versions.py.

00062                                                 :
00063     changelog_entry = re.compile(r'^(! [0-9]{4}-[0-9]{2}-[0-9]{2} -)|============')
00064     separator_entry = re.compile(r'^============')
00065     separator = "================ %s %s ====================================\n"
00066     out = []
00067     notes = []
00068     state = "searching"
00069     for l in open(filename):
00070         if state == "searching":
00071             if changelog_entry.match(l):
00072                 out.append(separator%(pkg,version))
00073                 state = "found"
00074         if state == "found":
00075             if not separator_entry.match(l):
00076                 notes.append(l)
00077             else:
00078                 state = "over"
00079         out.append(l)
00080     if state != "searching":
00081         open(filename,"w").writelines(out)
00082     else:
00083         print "Warning: could not update release.notes in %s"%pkg
00084     # remove trailing empty lines
00085     while notes and not notes[-1].strip(): notes.pop()
00086     return "".join(notes)
00087 
def main():


Variable Documentation

string update_versions::__author__ = "Marco Clemencic <Marco.Clemencic@cern.ch>"

Definition at line 3 of file update_versions.py.

string update_versions::__version__ = "$Id: update_versions.py,v 1.3 2008/11/10 19:43:31 marcocle Exp $"

Definition at line 4 of file update_versions.py.

tuple update_versions::_req_version_pattern = re.compile(r"^\s*version\s*(v[0-9]+r[0-9]+(?:p[0-9]+)?)\s*$")

Definition at line 11 of file update_versions.py.

tuple update_versions::_use_pattern = re.compile(r"^\s*use\s*(\w+)\s*(v[0-9]+r[0-9]+(?:p[0-9]+)?)\s*(\w+)?\s*$")

Definition at line 52 of file update_versions.py.


Generated at Thu Jan 8 17:54:27 2009 for Gaudi Framework, version v20r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004