#!/usr/bin/python
#
-# Copyright (C) 2011 Google Inc.
+# Copyright (C) 2011, 2012 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
"""
+# pylint: disable=C0103
+# [C0103] Invalid name
+
import sys
import time
import datetime
RELEASED_RE = re.compile(r"^\*\(Released (?P<day>[A-Z][a-z]{2}),"
r" (?P<date>.+)\)\*$")
UNRELEASED_RE = re.compile(r"^\*\(unreleased\)\*$")
+VERSION_RE = re.compile(r"^Version \d+(\.\d+)+( (beta|rc)\d+)?$")
+
+errors = []
+
+
+def Error(msg):
+ """Log an error for later display.
+
+ """
+ errors.append(msg)
+
+
+def ReqNLines(req, count_empty, lineno, line):
+ """Check if we have N empty lines.
+
+ """
+ if count_empty < req:
+ Error("Line %s: Missing empty line(s) before %s,"
+ " %d needed but got only %d" %
+ (lineno, line, req, count_empty))
+ if count_empty > req:
+ Error("Line %s: Too many empty lines before %s,"
+ " %d needed but got %d" %
+ (lineno, line, req, count_empty))
def main():
# Ensure "C" locale is used
curlocale = locale.getlocale()
if curlocale != (None, None):
- raise Exception("Invalid locale %s" % curlocale)
+ Error("Invalid locale %s" % curlocale)
prevline = None
expect_date = False
+ count_empty = 0
for line in fileinput.input():
line = line.rstrip("\n")
+ if VERSION_RE.match(line):
+ ReqNLines(2, count_empty, fileinput.filelineno(), line)
+
+ if UNRELEASED_RE.match(line) or RELEASED_RE.match(line):
+ ReqNLines(1, count_empty, fileinput.filelineno(), line)
+
+ if line:
+ count_empty = 0
+ else:
+ count_empty += 1
+
if DASHES_RE.match(line):
- if not prevline.startswith("Version "):
- raise Exception("Line %s: Invalid title" % (fileinput.filelineno() - 1))
+ if not VERSION_RE.match(prevline):
+ Error("Line %s: Invalid title" %
+ (fileinput.filelineno() - 1))
+ if len(line) != len(prevline):
+ Error("Line %s: Invalid dashes length" %
+ (fileinput.filelineno()))
expect_date = True
elif expect_date:
m = RELEASED_RE.match(line)
if not m:
- raise Exception("Line %s: Invalid release line" %
- fileinput.filelineno())
+ Error("Line %s: Invalid release line" % fileinput.filelineno())
# Including the weekday in the date string does not work as time.strptime
# would return an inconsistent result if the weekday is incorrect.
# Check weekday
if m.group("day") != weekday:
- raise Exception("Line %s: %s was/is a %s, not %s" %
- (fileinput.filelineno(), parsed, weekday,
- m.group("day")))
+ Error("Line %s: %s was/is a %s, not %s" %
+ (fileinput.filelineno(), parsed, weekday,
+ m.group("day")))
expect_date = False
prevline = line
- sys.exit(0)
+ if errors:
+ for msg in errors:
+ print >> sys.stderr, msg
+ sys.exit(1)
+ else:
+ sys.exit(0)
if __name__ == "__main__":