Statistics
| Branch: | Tag: | Revision:

root / autotools / check-news @ d72ff6c3

History | View | Annotate | Download (2.4 kB)

1 7385c51d Michael Hanselmann
#!/usr/bin/python
2 7385c51d Michael Hanselmann
#
3 7385c51d Michael Hanselmann
4 7385c51d Michael Hanselmann
# Copyright (C) 2011 Google Inc.
5 7385c51d Michael Hanselmann
#
6 7385c51d Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 7385c51d Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 7385c51d Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 7385c51d Michael Hanselmann
# (at your option) any later version.
10 7385c51d Michael Hanselmann
#
11 7385c51d Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 7385c51d Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 7385c51d Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 7385c51d Michael Hanselmann
# General Public License for more details.
15 7385c51d Michael Hanselmann
#
16 7385c51d Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 7385c51d Michael Hanselmann
# along with this program; if not, write to the Free Software
18 7385c51d Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 7385c51d Michael Hanselmann
# 02110-1301, USA.
20 7385c51d Michael Hanselmann
21 7385c51d Michael Hanselmann
22 7385c51d Michael Hanselmann
"""Script to check NEWS file.
23 7385c51d Michael Hanselmann
24 7385c51d Michael Hanselmann
"""
25 7385c51d Michael Hanselmann
26 7385c51d Michael Hanselmann
import sys
27 7385c51d Michael Hanselmann
import time
28 7385c51d Michael Hanselmann
import datetime
29 7385c51d Michael Hanselmann
import locale
30 7385c51d Michael Hanselmann
import fileinput
31 7385c51d Michael Hanselmann
import re
32 7385c51d Michael Hanselmann
33 7385c51d Michael Hanselmann
34 7385c51d Michael Hanselmann
DASHES_RE = re.compile(r"^\s*-+\s*$")
35 7385c51d Michael Hanselmann
RELEASED_RE = re.compile(r"^\*\(Released (?P<day>[A-Z][a-z]{2}),"
36 7385c51d Michael Hanselmann
                         r" (?P<date>.+)\)\*$")
37 7385c51d Michael Hanselmann
UNRELEASED_RE = re.compile(r"^\*\(unreleased\)\*$")
38 7385c51d Michael Hanselmann
39 7385c51d Michael Hanselmann
40 7385c51d Michael Hanselmann
def main():
41 7385c51d Michael Hanselmann
  # Ensure "C" locale is used
42 7385c51d Michael Hanselmann
  curlocale = locale.getlocale()
43 7385c51d Michael Hanselmann
  if curlocale != (None, None):
44 7385c51d Michael Hanselmann
    raise Exception("Invalid locale %s" % curlocale)
45 7385c51d Michael Hanselmann
46 7385c51d Michael Hanselmann
  prevline = None
47 7385c51d Michael Hanselmann
  expect_date = False
48 7385c51d Michael Hanselmann
49 7385c51d Michael Hanselmann
  for line in fileinput.input():
50 7385c51d Michael Hanselmann
    line = line.rstrip("\n")
51 7385c51d Michael Hanselmann
52 7385c51d Michael Hanselmann
    if DASHES_RE.match(line):
53 7385c51d Michael Hanselmann
      if not prevline.startswith("Version "):
54 7385c51d Michael Hanselmann
        raise Exception("Line %s: Invalid title" % (fileinput.lineno() - 1))
55 7385c51d Michael Hanselmann
      expect_date = True
56 7385c51d Michael Hanselmann
57 7385c51d Michael Hanselmann
    elif expect_date:
58 7385c51d Michael Hanselmann
      if not line:
59 7385c51d Michael Hanselmann
        # Ignore empty lines
60 7385c51d Michael Hanselmann
        continue
61 7385c51d Michael Hanselmann
62 7385c51d Michael Hanselmann
      if UNRELEASED_RE.match(line):
63 7385c51d Michael Hanselmann
        # Ignore unreleased versions
64 7385c51d Michael Hanselmann
        expect_date = False
65 7385c51d Michael Hanselmann
        continue
66 7385c51d Michael Hanselmann
67 7385c51d Michael Hanselmann
      m = RELEASED_RE.match(line)
68 7385c51d Michael Hanselmann
      if not m:
69 7385c51d Michael Hanselmann
        raise Exception("Line %s: Invalid release line" % fileinput.lineno())
70 7385c51d Michael Hanselmann
71 7385c51d Michael Hanselmann
      # Including the weekday in the date string does not work as time.strptime
72 7385c51d Michael Hanselmann
      # would return an inconsistent result if the weekday is incorrect.
73 7385c51d Michael Hanselmann
      parsed_ts = time.mktime(time.strptime(m.group("date"), "%d %b %Y"))
74 7385c51d Michael Hanselmann
      parsed = datetime.date.fromtimestamp(parsed_ts)
75 7385c51d Michael Hanselmann
      weekday = parsed.strftime("%a")
76 7385c51d Michael Hanselmann
77 7385c51d Michael Hanselmann
      # Check weekday
78 7385c51d Michael Hanselmann
      if m.group("day") != weekday:
79 7385c51d Michael Hanselmann
        raise Exception("Line %s: %s was/is a %s, not %s" %
80 7385c51d Michael Hanselmann
                        (fileinput.lineno(), parsed, weekday, m.group("day")))
81 7385c51d Michael Hanselmann
82 7385c51d Michael Hanselmann
      expect_date = False
83 7385c51d Michael Hanselmann
84 7385c51d Michael Hanselmann
    prevline = line
85 7385c51d Michael Hanselmann
86 7385c51d Michael Hanselmann
  sys.exit(0)
87 7385c51d Michael Hanselmann
88 7385c51d Michael Hanselmann
89 7385c51d Michael Hanselmann
if __name__ == "__main__":
90 7385c51d Michael Hanselmann
  main()