annotate contrib/gcc-changelog/git_email.py @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 2b5abeee2509
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 #!/usr/bin/env python3
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 #
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3 # This file is part of GCC.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 #
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5 # GCC is free software; you can redistribute it and/or modify it under
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6 # the terms of the GNU General Public License as published by the Free
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7 # Software Foundation; either version 3, or (at your option) any later
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8 # version.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 #
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 # for more details.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 #
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 # You should have received a copy of the GNU General Public License
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 # along with GCC; see the file COPYING3. If not see
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17 # <http://www.gnu.org/licenses/>. */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 import os
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 import sys
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 from itertools import takewhile
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 from dateutil.parser import parse
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 from git_commit import GitCommit
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27 from unidiff import PatchSet
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 DATE_PREFIX = 'Date: '
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 FROM_PREFIX = 'From: '
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 class GitEmail(GitCommit):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 def __init__(self, filename, strict=False):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 self.filename = filename
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 diff = PatchSet.from_filename(filename)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 date = None
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 author = None
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40 lines = open(self.filename).read().splitlines()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 lines = list(takewhile(lambda line: line != '---', lines))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 for line in lines:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 if line.startswith(DATE_PREFIX):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 date = parse(line[len(DATE_PREFIX):])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 elif line.startswith(FROM_PREFIX):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 author = GitCommit.format_git_author(line[len(FROM_PREFIX):])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 header = list(takewhile(lambda line: line != '', lines))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 body = lines[len(header) + 1:]
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 modified_files = []
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 for f in diff:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 if f.is_added_file:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53 t = 'A'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 elif f.is_removed_file:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 t = 'D'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 t = 'M'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 modified_files.append((f.path, t))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 super().__init__(None, date, author, body, modified_files,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 strict=strict)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 if __name__ == '__main__':
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64 if len(sys.argv) == 1:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 allfiles = []
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 for root, _dirs, files in os.walk('patches'):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 for f in files:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 full = os.path.join(root, f)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 allfiles.append(full)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 success = 0
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 for full in sorted(allfiles):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 email = GitEmail(full, False)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 print(email.filename)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75 if email.success:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 success += 1
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77 print(' OK')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79 for error in email.errors:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 print(' ERR: %s' % error)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
82 print()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
83 print('Successfully parsed: %d/%d' % (success, len(allfiles)))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
84 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
85 email = GitEmail(sys.argv[1], False)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
86 if email.success:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
87 print('OK')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
88 email.print_output()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
89 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
90 if not email.lines:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
91 print('Error: patch contains no parsed lines', file=sys.stderr)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
92 email.print_errors()