annotate contrib/gcc-changelog/git_update_version.py @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
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 argparse
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 import datetime
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 import os
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 from git import Repo
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 from git_repository import parse_git_revisions
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27 current_timestamp = datetime.datetime.now().strftime('%Y%m%d\n')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 def read_timestamp(path):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 return open(path).read()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 def prepend_to_changelog_files(repo, folder, git_commit):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 if not git_commit.success:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 for error in git_commit.errors:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 print(error)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 raise AssertionError()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 for entry, output in git_commit.to_changelog_entries(use_commit_ts=True):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40 full_path = os.path.join(folder, entry, 'ChangeLog')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 print('writting to %s' % full_path)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 if os.path.exists(full_path):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 content = open(full_path).read()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 content = ''
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 with open(full_path, 'w+') as f:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 f.write(output)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 if content:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 f.write('\n\n')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 f.write(content)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 repo.git.add(full_path)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 active_refs = ['master', 'releases/gcc-8', 'releases/gcc-9', 'releases/gcc-10']
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 parser = argparse.ArgumentParser(description='Update DATESTAMP and generate '
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 'ChangeLog entries')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 parser.add_argument('-g', '--git-path', default='.',
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 help='Path to git repository')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 args = parser.parse_args()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62 repo = Repo(args.git_path)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 origin = repo.remotes['origin']
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 for ref in origin.refs:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 assert ref.name.startswith('origin/')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 name = ref.name[len('origin/'):]
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 if name in active_refs:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 if name in repo.branches:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70 branch = repo.branches[name]
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 branch = repo.create_head(name, ref).set_tracking_branch(ref)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 print('=== Working on: %s ===' % branch, flush=True)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 origin.pull(rebase=True)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75 branch.checkout()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 print('branch pulled and checked out')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77 assert not repo.index.diff(None)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78 commit = branch.commit
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79 commit_count = 1
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 while commit:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81 if (commit.author.email == 'gccadmin@gcc.gnu.org'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
82 and commit.message.strip() == 'Daily bump.'):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
83 break
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
84 commit = commit.parents[0]
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
85 commit_count += 1
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
86
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
87 print('%d revisions since last Daily bump' % commit_count)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
88 datestamp_path = os.path.join(args.git_path, 'gcc/DATESTAMP')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
89 if read_timestamp(datestamp_path) != current_timestamp:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
90 print('DATESTAMP will be changed:')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
91 commits = parse_git_revisions(args.git_path, '%s..HEAD'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
92 % commit.hexsha)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
93 for git_commit in reversed(commits):
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
94 prepend_to_changelog_files(repo, args.git_path, git_commit)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
95 # update timestamp
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
96 with open(datestamp_path, 'w+') as f:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
97 f.write(current_timestamp)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
98 repo.git.add(datestamp_path)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
99 repo.index.commit('Daily bump.')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
100 # TODO: push the repository
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
101 # repo.git.push('origin', branch)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
102 else:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
103 print('DATESTAMP unchanged')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
104 print('branch is done\n', flush=True)