cosmetic
[build.git] / module-tools.py
index 27265d3..0834f58 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/python -u
 
-import sys, os
+import sys, os, os.path
 import re
 import time
 import tempfile
@@ -16,14 +16,11 @@ RENAMED_SVN_MODULES = {
     "PLCAPI": "plcapi",
     "BootManager": "bootmanager",
     "BootCD": "bootcd",
-    "VserverReference": "vserver-reference",
-    "BootstrapFS": "bootstrapfs",
     "MyPLC": "myplc",
     "CoDemux": "codemux",
     "NodeManager": "nodemanager",
     "NodeUpdate": "nodeupdate",
     "Monitor": "monitor",
-
     }
 
 def svn_to_git_name(module):
@@ -417,7 +414,7 @@ class Repository:
 # support for tagged module is minimal, and is for the Build class only
 class Module:
 
-    svn_magic_line="--This line, and those below, will be ignored--"
+    edit_magic_line="--This line, and those below, will be ignored--"
     setting_tag_format = "Setting tag %s"
     
     redirectors=[ # ('module_name_varname','name'),
@@ -787,7 +784,7 @@ that for other purposes than tagging""" % options.workdir
         result=[]
         white_line_matcher = re.compile("\A\s*\Z")
         for logline in file(logfile).readlines():
-            if logline.strip() == Module.svn_magic_line:
+            if logline.strip() == Module.edit_magic_line:
                 break
             elif white_line_matcher.match(logline):
                 continue
@@ -796,7 +793,7 @@ that for other purposes than tagging""" % options.workdir
         return result
 
     # creates a copy of the input with only the unignored lines
-    def stripped_magic_line_filename (self, filein, fileout ,new_tag_name):
+    def strip_magic_line_filename (self, filein, fileout ,new_tag_name):
        f=file(fileout,'w')
        f.write(self.setting_tag_format%new_tag_name + '\n')
        for line in self.unignored_lines(filein):
@@ -958,36 +955,36 @@ that for other purposes than tagging""" % options.workdir
             if not prompt ("No pending difference in module %s, want to tag anyway"%self.pathname,False):
                 return
 
-        # side effect in trunk's specfile
+        # side effect in head's specfile
         self.patch_spec_var(spec_dict)
 
         # prepare changelog file 
-        # we use the standard subversion magic string (see svn_magic_line)
+        # we use the standard subversion magic string (see edit_magic_line)
         # so we can provide useful information, such as version numbers and diff
         # in the same file
-        changelog="/tmp/%s-%d.edit"%(self.name,os.getpid())
-        changelog_svn="/tmp/%s-%d.svn"%(self.name,os.getpid())
+        changelog_plain="/tmp/%s-%d.edit"%(self.name,os.getpid())
+        changelog_strip="/tmp/%s-%d.strip"%(self.name,os.getpid())
         setting_tag_line=Module.setting_tag_format%new_tag_name
-        file(changelog,"w").write("""
+        file(changelog_plain,"w").write("""
 %s
 %s
-Please write a changelog for this new tag in the section above
-"""%(Module.svn_magic_line,setting_tag_line))
+Please write a changelog for this new tag in the section below
+"""%(Module.edit_magic_line,setting_tag_line))
 
         if not self.options.verbose or prompt('Want to see diffs while writing changelog',True):
-            file(changelog,"a").write('DIFF=========\n' + diff_output)
+            file(changelog_plain,"a").write('DIFF=========\n' + diff_output)
         
         if self.options.debug:
             prompt('Proceed ?')
 
         # edit it        
-        self.run("%s %s"%(self.options.editor,changelog))
+        self.run("%s %s"%(self.options.editor,changelog_plain))
         # strip magic line in second file - looks like svn has changed its magic line with 1.6
         # so we do the job ourselves
-        self.stripped_magic_line_filename(changelog,changelog_svn,new_tag_name)
+        self.strip_magic_line_filename(changelog_plain,changelog_strip,new_tag_name)
         # insert changelog in spec
         if self.options.changelog:
-            self.insert_changelog (changelog,old_tag_name,new_tag_name)
+            self.insert_changelog (changelog_plain,old_tag_name,new_tag_name)
 
         ## update build
         build_path = os.path.join(self.options.workdir,
@@ -1052,14 +1049,14 @@ n: move to next file"""%locals()
             build.commit(log)
 
         self.run_prompt("Review module and build", diff_all_changes)
-        self.run_prompt("Commit module and build", commit_all_changes, changelog_svn)
-        self.run_prompt("Create tag", self.repository.tag, new_tag_name, changelog_svn)
+        self.run_prompt("Commit module and build", commit_all_changes, changelog_strip)
+        self.run_prompt("Create tag", self.repository.tag, new_tag_name, changelog_strip)
 
         if self.options.debug:
-            print 'Preserving',changelog,'and stripped',changelog_svn
+            print 'Preserving',changelog_plain,'and stripped',changelog_strip
         else:
-            os.unlink(changelog)
-            os.unlink(changelog_svn)
+            os.unlink(changelog_plain)
+            os.unlink(changelog_strip)
 
 
 ##############################
@@ -1265,29 +1262,38 @@ def modules_diff(first, second):
 
 def release_changelog(options, buildtag_old, buildtag_new):
 
-    try:
-        tagfile = options.distrotags[0]
-        if not tagfile: raise 
-    except:
-        print "ERROR: provide a tagfile name (eg. onelab, onelab-k27, planetlab)"
+    # the command line expects new old, so we treat the tagfiles in the same order
+    nb_tags=len(options.distrotags)
+    if nb_tags==1:
+        tagfile_new=tagfile_old=options.distrotags[0]
+    elif nb_tags==2:
+        [tagfile_new,tagfile_old]=options.distrotags
+    else:
+        print "ERROR: provide one or two tagfile name (eg. onelab-k32-tags.mk)"
+        print "two tagfiles can be mentioned when a tagfile has been renamed"
         return
-    tagfile = "%s-tags.mk" % tagfile
-    
+
+    if options.dry_run:
+        print "------------------------------ Computing Changelog from"
+        print "buildtag_old",buildtag_old,"tagfile_old",tagfile_old
+        print "buildtag_new",buildtag_new,"tagfile_new",tagfile_new
+        return
+
     print '----'
     print '----'
     print '----'
     print '= build tag %s to %s =' % (buildtag_old, buildtag_new)
-    print '== distro %s (%s to %s) ==' % (tagfile, buildtag_old, buildtag_new)
+    print '== distro %s (%s to %s) ==' % (tagfile_new, buildtag_old, buildtag_new)
 
     build = Build("build@%s" % buildtag_old, options)
     build.init_module_dir()
-    first = build.get_modules(tagfile)
+    first = build.get_modules(tagfile_old)
 
     print ' * from', buildtag_old, build.repository.gitweb()
 
     build = Build("build@%s" % buildtag_new, options)
     build.init_module_dir()
-    second = build.get_modules(tagfile)
+    second = build.get_modules(tagfile_new)
 
     print ' * to', buildtag_new, build.repository.gitweb()
 
@@ -1302,7 +1308,7 @@ def release_changelog(options, buildtag_old, buildtag_new):
 
 
     for module in diff:
-        print '=== %s - %s to %s : package %s ===' % (tagfile, buildtag_old, buildtag_new, module)
+        print '=== %s - %s to %s : package %s ===' % (tagfile_new, buildtag_old, buildtag_new, module)
 
         first, second = diff[module]
         m = get_module(module, first)
@@ -1328,16 +1334,16 @@ def release_changelog(options, buildtag_old, buildtag_new):
             print ' * to', second, m.repository.gitweb()
 
         print '{{{'
-        os.system("diff -u %s %s" % (tmpfile, specfile))
+        os.system("diff -u %s %s | sed -e 's,%s,[[previous version]],'" % (tmpfile, specfile,tmpfile))
         print '}}}'
 
         os.unlink(tmpfile)
 
     for module in new_modules:
-        print '=== %s : new package in build %s ===' % (tagfile, module)
+        print '=== %s : new package in build %s ===' % (tagfile_new, module)
 
     for module in removed_modules:
-        print '=== %s : removed package from build %s ===' % (tagfile, module)
+        print '=== %s : removed package from build %s ===' % (tagfile_new, module)
 
 
 def adopt_tag (options, args):
@@ -1363,11 +1369,11 @@ module-tools : a set of tools to manage subversion tags and specfile
   * define *version* and *taglevel*
   OR alternatively 
   * define redirection variables module_version_varname / module_taglevel_varname
-Trunk:
-  by default, the trunk of modules is taken into account
+Master:
+  by default, the 'master' branch of modules is the target
   in this case, just mention the module name as <module_desc>
 Branches:
-  if you wish to work on a branch rather than on the trunk
+  if you wish to work on another branch
   you can use something like e.g. Mom:2.1 as <module_desc>
 """
     release_usage="""Usage: %prog [options] tag1 .. tagn
@@ -1378,6 +1384,8 @@ Branches:
       release-changelog :4.2 4.2-rc25
   You can refer to the build trunk by just mentioning 'trunk', e.g.
       release-changelog -t coblitz-tags.mk coblitz-2.01-rc6 trunk
+  You can use 2 different tagfile names if that was renamed meanwhile
+      release-changelog -t onelab-tags.mk 5.0-rc29 -t onelab-k32-tags.mk 5.0-rc28
 """
     adopt_usage="""Usage: %prog [options] tag-file[s]
   With this command you can adopt a specifi tag or branch in your tag files
@@ -1573,8 +1581,10 @@ Branches:
                 Module.html_dump_footer()
         else:
             # if we provide, say a b c d, we want to build (a,b) (b,c) and (c,d)
-            for (f,t) in zip ( args[:-1], args [1:]):
-                release_changelog(options, f,t)
+            # remember that the changelog in the twiki comes latest first, so
+            # we typically have here latest latest-1 latest-2
+            for (tag_new,tag_old) in zip ( args[:-1], args [1:]):
+                release_changelog(options, tag_old, tag_new)
             
     
 ####################