Mercurial > hg > CbC > CbC_gcc
view 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 |
line wrap: on
line source
#!/usr/bin/env python3 # # This file is part of GCC. # # GCC is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3, or (at your option) any later # version. # # GCC is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # You should have received a copy of the GNU General Public License # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. */ import os import sys from itertools import takewhile from dateutil.parser import parse from git_commit import GitCommit from unidiff import PatchSet DATE_PREFIX = 'Date: ' FROM_PREFIX = 'From: ' class GitEmail(GitCommit): def __init__(self, filename, strict=False): self.filename = filename diff = PatchSet.from_filename(filename) date = None author = None lines = open(self.filename).read().splitlines() lines = list(takewhile(lambda line: line != '---', lines)) for line in lines: if line.startswith(DATE_PREFIX): date = parse(line[len(DATE_PREFIX):]) elif line.startswith(FROM_PREFIX): author = GitCommit.format_git_author(line[len(FROM_PREFIX):]) header = list(takewhile(lambda line: line != '', lines)) body = lines[len(header) + 1:] modified_files = [] for f in diff: if f.is_added_file: t = 'A' elif f.is_removed_file: t = 'D' else: t = 'M' modified_files.append((f.path, t)) super().__init__(None, date, author, body, modified_files, strict=strict) if __name__ == '__main__': if len(sys.argv) == 1: allfiles = [] for root, _dirs, files in os.walk('patches'): for f in files: full = os.path.join(root, f) allfiles.append(full) success = 0 for full in sorted(allfiles): email = GitEmail(full, False) print(email.filename) if email.success: success += 1 print(' OK') else: for error in email.errors: print(' ERR: %s' % error) print() print('Successfully parsed: %d/%d' % (success, len(allfiles))) else: email = GitEmail(sys.argv[1], False) if email.success: print('OK') email.print_output() else: if not email.lines: print('Error: patch contains no parsed lines', file=sys.stderr) email.print_errors()