diff -r f5050f1da672 -r 04becd199f91 build/buildutils/svnchangeids.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build/buildutils/svnchangeids.py Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,82 @@ +#!/usr/bin/python +# +# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +# Script for parsing TeleLogic Change ids and svn revisions from svn log. +# + +import os, re, sys, traceback +from optparse import OptionParser + +def main(): + parser = OptionParser( + usage = "python -u %prog [options] ") + parser.add_option("-r", "--release", dest="release", + help="release to which the change is targeted, e.g. 92 or mcl") + (opts, args) = parser.parse_args() + svn_url = args[0] + svn_rev_1 = args[1] + svn_rev_2 = args[2] + if len(args) > 3: + print "ERROR: Too many arguments" + sys.exit(1) + + try: + svn_change_ids = get_svn_change_ids(opts.release, svn_url, svn_rev_1, svn_rev_2) + change_ids = svn_change_ids.keys() + change_ids.sort() + for change_id in change_ids: + print "%s %s" % (change_id, ",".join(svn_change_ids[change_id])) + except: + print "ERROR: Unexpected exception" + traceback.print_exc() + sys.exit(1) + +def get_svn_change_ids(release, url, rev_1, rev_2): + """Return svn change id dictionary. + + Returns a dictionary where keys are change ids and values + are list of svn revisions where the change is made. + """ + + change_id_keyword = "changeid\s*" # Matches to change ids with no release. + if not release is None: + # Matches to change ids for given release only. + change_id_keyword = "changeid[_-]?" + release + "\s*" + re_rev = re.compile("^r(\d+) \| ", re.I | re.M) + re_change_id = re.compile("(\w+\#\d+)\s*,?", re.I | re.M) + re_change_id_keyword = re.compile(change_id_keyword + "[:=]?\s*(\w+\#\d+)", + re.I | re.M) + svn_change_ids = {} + cmd = "svn log -r " + rev_2 + ":" + rev_1 + " " + url + #print cmd + for line in os.popen(cmd).readlines(): + rev = re_rev.findall(line) + if rev: + current_rev = rev[0] + change_ids = re_change_id_keyword.findall(line) + while change_ids: + for change_id in change_ids: + if change_id in svn_change_ids: + if not current_rev in svn_change_ids[change_id]: + svn_change_ids[change_id] += [current_rev] + else: + svn_change_ids[change_id] = [current_rev] + line = re_change_id.sub("", line, 1) + change_ids = re_change_id_keyword.findall(line) + return svn_change_ids + +if __name__ == "__main__": + main()