X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=module-tools.py;h=b4f9d254ec127fd1028fdb71dc64e262ef6529ac;hb=67bfe0f64951be4a754ebf9b3ea02a03cae00f4f;hp=27265d31c74ba141d07b805a18444da57c896833;hpb=c6dbe97cccb1fd7a8653eeedea55c9b90f81ac75;p=build.git diff --git a/module-tools.py b/module-tools.py index 27265d31..b4f9d254 100755 --- a/module-tools.py +++ b/module-tools.py @@ -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)) +"""%(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) ############################## @@ -1271,7 +1268,14 @@ def release_changelog(options, buildtag_old, buildtag_new): except: print "ERROR: provide a tagfile name (eg. onelab, onelab-k27, planetlab)" return - tagfile = "%s-tags.mk" % tagfile + # mmh, sounds wrong to blindly add the extension + # if in a build directory, guess from existing files + if os.path.isfile (tagfile): + pass + elif os.path.isfile ("%s-tags.mk" % tagfile): + tagfile="%s-tags.mk" % tagfile + else: + tagfile = "%s-tags.mk" % tagfile print '----' print '----' @@ -1328,7 +1332,7 @@ 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) @@ -1363,11 +1367,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 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 """ release_usage="""Usage: %prog [options] tag1 .. tagn @@ -1573,8 +1577,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_to,tag_from) in zip ( args[:-1], args [1:]): + release_changelog(options, tag_from,tag_to) ####################