annotate contrib/gcc-changelog/git_repository.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 from datetime import datetime
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 try:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 from git import Repo
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 except ImportError:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 print('Cannot import GitPython package, please install the package:')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 print(' Fedora, openSUSE: python3-GitPython')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 print(' Debian, Ubuntu: python3-git')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27 exit(1)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 from git_commit import GitCommit
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 def parse_git_revisions(repo_path, revisions, strict=False):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 repo = Repo(repo_path)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 parsed_commits = []
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 if '..' in revisions:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 commits = list(repo.iter_commits(revisions))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 commits = [repo.commit(revisions)]
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 for commit in commits:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 diff = repo.commit(commit.hexsha + '~').diff(commit.hexsha)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 modified_files = []
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 for file in diff:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 if file.new_file:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 t = 'A'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 elif file.deleted_file:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 t = 'D'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 t = 'M'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 modified_files.append((file.b_path, t))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 date = datetime.utcfromtimestamp(commit.committed_date)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 author = '%s <%s>' % (commit.author.name, commit.author.email)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 git_commit = GitCommit(commit.hexsha, date, author,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 commit.message.split('\n'), modified_files,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 strict=strict)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 parsed_commits.append(git_commit)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 return parsed_commits