Show More
@@ -0,0 +1,74 b'' | |||
|
1 | """Update the What's New doc (development version) | |
|
2 | ||
|
3 | This collects the snippets from whatsnew/pr/, moves their content into | |
|
4 | whatsnew/development.rst (chronologically ordered), and deletes the snippets. | |
|
5 | """ | |
|
6 | ||
|
7 | import io | |
|
8 | import os | |
|
9 | from os.path import dirname, basename, abspath, join as pjoin | |
|
10 | from subprocess import check_call, check_output | |
|
11 | ||
|
12 | repo_root = dirname(dirname(abspath(__file__))) | |
|
13 | whatsnew_dir = pjoin(repo_root, 'docs', 'source', 'whatsnew') | |
|
14 | pr_dir = pjoin(whatsnew_dir, 'pr') | |
|
15 | target = pjoin(whatsnew_dir, 'development.rst') | |
|
16 | ||
|
17 | FEATURE_MARK = ".. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT." | |
|
18 | INCOMPAT_MARK = ".. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT." | |
|
19 | ||
|
20 | # 1. Collect the whatsnew snippet files --------------------------------------- | |
|
21 | ||
|
22 | files = set(os.listdir(pr_dir)) | |
|
23 | # Ignore explanatory and example files | |
|
24 | files.difference_update({'README.md', | |
|
25 | 'incompat-switching-to-perl.rst', | |
|
26 | 'antigravity-feature.rst'} | |
|
27 | ) | |
|
28 | ||
|
29 | # Absolute paths | |
|
30 | files = {pjoin(pr_dir, f) for f in files} | |
|
31 | ||
|
32 | def getmtime(f): | |
|
33 | return check_output(['git', 'log', '-1', '--format="%ai"', '--', f]) | |
|
34 | ||
|
35 | files = sorted(files, key=getmtime) | |
|
36 | ||
|
37 | features, incompats = [], [] | |
|
38 | for path in files: | |
|
39 | with io.open(path, encoding='utf-8') as f: | |
|
40 | content = f.read().rstrip() | |
|
41 | if basename(path).startswith('incompat-'): | |
|
42 | incompats.append(content) | |
|
43 | else: | |
|
44 | features.append(content) | |
|
45 | ||
|
46 | # Put the insertion markers back on the end, so they're ready for next time. | |
|
47 | feature_block = '\n\n'.join(features + [FEATURE_MARK]) | |
|
48 | incompat_block = '\n\n'.join(incompats + [INCOMPAT_MARK]) | |
|
49 | ||
|
50 | # 2. Update the target file --------------------------------------------------- | |
|
51 | ||
|
52 | with io.open(target, encoding='utf-8') as f: | |
|
53 | content = f.read() | |
|
54 | ||
|
55 | assert content.count(FEATURE_MARK) == 1 | |
|
56 | assert content.count(INCOMPAT_MARK) == 1 | |
|
57 | ||
|
58 | content = content.replace(FEATURE_MARK, feature_block) | |
|
59 | content = content.replace(INCOMPAT_MARK, incompat_block) | |
|
60 | ||
|
61 | # Clean trailing whitespace | |
|
62 | content = '\n'.join(l.rstrip() for l in content.splitlines()) | |
|
63 | ||
|
64 | with io.open(target, 'w', encoding='utf-8') as f: | |
|
65 | f.write(content) | |
|
66 | ||
|
67 | # 3. Stage the changes in git ------------------------------------------------- | |
|
68 | ||
|
69 | for file in files: | |
|
70 | check_call(['git', 'rm', file]) | |
|
71 | ||
|
72 | check_call(['git', 'add', target]) | |
|
73 | ||
|
74 | print("Merged what's new changes. Check the diff and commit the change.") No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now