-# unsupported yet
-#"""
-# branch:Mom
-# the branch_id is deduced from the current *version* in the trunk's specfile
-# e.g. if Mom/trunk/Mom.spec specifies %define version 2.3, then this script
-# would use Mom/branches/2.2
-# if if stated %define version 3.0, then the script fails
-#"""
-
-functions={
- 'diff' : "show difference between trunk and latest tag",
- 'tag' : """increment taglevel in specfile, insert changelog in specfile,
- create new tag and and adopt it in build/*-tags*.mk""",
- 'init' : "create initial tag",
- 'version' : "only check specfile and print out details",
- 'branch' : """create a branch for this module.
- either from trunk, or from a tag""",
-}
-
-def main():
-
- mode=None
- for function in functions.keys():
- if sys.argv[0].find(function) >= 0:
- mode = function
- break
- if not mode:
- print "Unsupported command",sys.argv[0]
- sys.exit(1)
-
- global usage
- usage += "module-%s.py : %s"%(mode,functions[mode])
- all_modules=os.path.dirname(sys.argv[0])+"/modules.list"
-
- parser=OptionParser(usage=usage,version=subversion_id)
- parser.add_option("-a","--all",action="store_true",dest="all_modules",default=False,
- help="run on all modules as found in %s"%all_modules)
- parser.add_option("-f","--fast-checks",action="store_true",dest="fast_checks",default=False,
- help="skip safety checks, such as svn updates -- use with care")
- if mode == "tag" or mode == 'branch':
- parser.add_option("-s","--set-version",action="store",dest="new_version",default=None,
- help="set new version and reset taglevel to 0")
- if mode == "tag" :
- parser.add_option("-c","--no-changelog", action="store_false", dest="changelog", default=True,
- help="do not update changelog section in specfile when tagging")
- if mode == "tag" or mode == "init" :
- parser.add_option("-e","--editor", action="store", dest="editor", default="emacs",
- help="specify editor")
- if mode == "init" :
- parser.add_option("-m","--message", action="store", dest="message", default=None,
- help="specify log message")
- if mode == "diff" :
- parser.add_option("-o","--only", action="store_true", dest="only", default=False,
- help="report diff only for modules that exhibit differences")
- if mode == "diff" :
- parser.add_option("-l","--list", action="store_true", dest="list", default=False,
- help="just list modules that exhibit differences")
- parser.add_option("-w","--workdir", action="store", dest="workdir",
- default="%s/%s"%(os.getenv("HOME"),"modules"),
- help="""name for dedicated working dir - defaults to ~/modules
+ 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
+ You can refer to the build trunk by just mentioning 'trunk', e.g.
+ release-changelog -t coblitz-tags.mk coblitz-2.01-rc6 trunk
+"""
+ common_usage="""More help:
+ see http://svn.planet-lab.org/wiki/ModuleTools"""
+
+ modes={
+ 'list' : "displays a list of available tags or branches",
+ 'version' : "check latest specfile and print out details",
+ 'diff' : "show difference between module (trunk or branch) and latest tag",
+ 'tag' : """increment taglevel in specfile, insert changelog in specfile,
+ create new tag and and monitor its adoption in build/*-tags*.mk""",
+ 'branch' : """create a branch for this module, from the latest tag on the trunk,
+ and change trunk's version number to reflect the new branch name;
+ you can specify the new branch name by using module:branch""",
+ 'sync' : """create a tag from the module
+ this is a last resort option, mostly for repairs""",
+ 'changelog' : """extract changelog between build tags
+ expected arguments are a list of tags""",
+ }
+
+ silent_modes = ['list']
+ release_modes = ['changelog']
+
+ @staticmethod
+ def optparse_list (option, opt, value, parser):
+ try:
+ setattr(parser.values,option.dest,getattr(parser.values,option.dest)+value.split())
+ except:
+ setattr(parser.values,option.dest,value.split())
+
+ def run(self):
+
+ mode=None
+ for function in Main.modes.keys():
+ if sys.argv[0].find(function) >= 0:
+ mode = function
+ break
+ if not mode:
+ print "Unsupported command",sys.argv[0]
+ print "Supported commands:" + Modes.modes.keys.join(" ")
+ sys.exit(1)
+
+ if mode not in Main.release_modes:
+ usage = Main.module_usage
+ usage += Main.common_usage
+ usage += "\nmodule-%s : %s"%(mode,Main.modes[mode])
+ else:
+ usage = Main.release_usage
+ usage += Main.common_usage
+
+ parser=OptionParser(usage=usage,version=subversion_id)
+
+ if mode == 'list':
+ parser.add_option("-b","--branches",action="store_true",dest="list_branches",default=False,
+ help="list branches")
+ parser.add_option("-t","--tags",action="store_false",dest="list_branches",
+ help="list tags")
+ parser.add_option("-m","--match",action="store",dest="list_pattern",default=None,
+ help="grep pattern for filtering output")
+ parser.add_option("-x","--exact-match",action="store",dest="list_exact",default=None,
+ help="exact grep pattern for filtering output")
+ if mode == "tag" or mode == 'branch':
+ parser.add_option("-s","--set-version",action="store",dest="new_version",default=None,
+ help="set new version and reset taglevel to 0")
+ if mode == "tag" :
+ parser.add_option("-c","--no-changelog", action="store_false", dest="changelog", default=True,
+ help="do not update changelog section in specfile when tagging")
+ parser.add_option("-b","--build-branch", action="store", dest="build_branch", default=None,
+ help="specify a build branch; used for locating the *tags*.mk files where adoption is to take place")
+ if mode == "tag" or mode == "sync" :
+ parser.add_option("-e","--editor", action="store", dest="editor", default=default_editor(),
+ help="specify editor")
+ if mode == "sync" :
+ parser.add_option("-m","--message", action="store", dest="message", default=None,
+ help="specify log message")
+ if mode in ["diff","version"] :
+ parser.add_option("-W","--www", action="store", dest="www", default=False,
+ help="export diff in html format, e.g. -W trunk")
+ if mode == "diff" :
+ parser.add_option("-l","--list", action="store_true", dest="list", default=False,
+ help="just list modules that exhibit differences")
+
+ if mode == 'version':
+ parser.add_option("-u","--url", action="store_true", dest="show_urls", default=False,
+ help="display URLs")
+
+ default_modules_list=os.path.dirname(sys.argv[0])+"/modules.list"
+ if mode not in Main.release_modes:
+ parser.add_option("-a","--all",action="store_true",dest="all_modules",default=False,
+ help="run on all modules as found in %s"%default_modules_list)
+ parser.add_option("-f","--file",action="store",dest="modules_list",default=None,
+ help="run on all modules found in specified file")
+ else:
+ parser.add_option("-n","--dry-run",action="store_true",dest="dry_run",default=False,
+ help="dry run - shell commands are only displayed")
+ parser.add_option("-i","--inline-diff",action="store_true",dest="inline_diff",default=False,
+ help="calls svn diff on whole module, not just only the spec file")
+ parser.add_option("-t","--distrotags",action="callback",callback=Main.optparse_list, dest="distrotags",
+ default=[], nargs=1,type="string",
+ help="""specify distro-tags files, e.g. onelab-tags-4.2.mk
+-- can be set multiple times, or use quotes""")
+
+ parser.add_option("-w","--workdir", action="store", dest="workdir",
+ default="%s/%s"%(os.getenv("HOME"),"modules"),
+ help="""name for dedicated working dir - defaults to ~/modules