blob: 2852612954b013923011fd501045a7357987d865 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Usage: merge-event-log-tags.py [-o output_file] [input_files...]
Merge together zero or more event-logs-tags files to produce a single
output file, stripped of comments. Checks that no tag numbers conflict
and fails if they do.
-h to display this usage message and exit.
"""
import cStringIO
import getopt
import sys
import event_log_tags
by_tagnum = {}
errors = []
warnings = []
output_file = None
try:
opts, args = getopt.getopt(sys.argv[1:], "ho:")
except getopt.GetoptError, err:
print str(err)
print __doc__
sys.exit(2)
for o, a in opts:
if o == "-h":
print __doc__
sys.exit(2)
elif o == "-o":
output_file = a
else:
print >> sys.stderr, "unhandled option %s" % (o,)
sys.exit(1)
for fn in args:
tagfile = event_log_tags.TagFile(fn)
for t in tagfile.tags:
tagnum = t.tagnum
tagname = t.tagname
description = t.description
if t.tagnum in by_tagnum:
orig = by_tagnum[t.tagnum]
if (t.tagname == orig.tagname and
t.description == orig.description):
# if the name and description are identical, issue a warning
# instead of failing (to make it easier to move tags between
# projects without breaking the build).
tagfile.AddWarning("tag %d \"%s\" duplicated in %s:%d" %
(t.tagnum, t.tagname, orig.filename, orig.linenum),
linenum=t.linenum)
else:
tagfile.AddError("tag %d used by conflicting \"%s\" from %s:%d" %
(t.tagnum, orig.tagname, orig.filename, orig.linenum),
linenum=t.linenum)
continue
by_tagnum[t.tagnum] = t
errors.extend(tagfile.errors)
warnings.extend(tagfile.warnings)
if errors:
for fn, ln, msg in errors:
print >> sys.stderr, "%s:%d: error: %s" % (fn, ln, msg)
sys.exit(1)
if warnings:
for fn, ln, msg in warnings:
print >> sys.stderr, "%s:%d: warning: %s" % (fn, ln, msg)
buffer = cStringIO.StringIO()
for n in sorted(by_tagnum):
t = by_tagnum[n]
if t.description:
buffer.write("%d %s %s\n" % (t.tagnum, t.tagname, t.description))
else:
buffer.write("%d %s\n" % (t.tagnum, t.tagname))
event_log_tags.WriteOutput(output_file, buffer)