##// END OF EJS Templates
add do_where
add do_where

File last commit:

r21970:06f7830c
r21970:06f7830c
Show More
update_whatsnew.py
80 lines | 2.5 KiB | text/x-python | PythonLexer
/ tools / update_whatsnew.py
Min RK
make update_whatsnew script executable...
r20268 #!/usr/bin/env python
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 """Update the What's New doc (development version)
This collects the snippets from whatsnew/pr/, moves their content into
whatsnew/development.rst (chronologically ordered), and deletes the snippets.
"""
import io
import os
Matthias Bussonnier
add do_where
r21970 from glob import glob
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 from os.path import dirname, basename, abspath, join as pjoin
from subprocess import check_call, check_output
repo_root = dirname(dirname(abspath(__file__)))
whatsnew_dir = pjoin(repo_root, 'docs', 'source', 'whatsnew')
pr_dir = pjoin(whatsnew_dir, 'pr')
target = pjoin(whatsnew_dir, 'development.rst')
FEATURE_MARK = ".. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT."
INCOMPAT_MARK = ".. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT."
# 1. Collect the whatsnew snippet files ---------------------------------------
Matthias Bussonnier
add do_where
r21970 files = set()
for f in glob(pjoin(pr_dir, '*.rst')):
files.add(f)
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 # Ignore explanatory and example files
Matthias Bussonnier
add do_where
r21970 files.difference_update({pjoin(pr_dir, f) for f in {'README.md',
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 'incompat-switching-to-perl.rst',
'antigravity-feature.rst'}
Matthias Bussonnier
add do_where
r21970 })
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901
def getmtime(f):
return check_output(['git', 'log', '-1', '--format="%ai"', '--', f])
files = sorted(files, key=getmtime)
features, incompats = [], []
for path in files:
with io.open(path, encoding='utf-8') as f:
Matthias Bussonnier
add do_where
r21970 try:
content = f.read().rstrip()
except Exception as e:
raise Exception('Error reading "{}"'.format(f))
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 if basename(path).startswith('incompat-'):
incompats.append(content)
else:
features.append(content)
# Put the insertion markers back on the end, so they're ready for next time.
feature_block = '\n\n'.join(features + [FEATURE_MARK])
incompat_block = '\n\n'.join(incompats + [INCOMPAT_MARK])
# 2. Update the target file ---------------------------------------------------
with io.open(target, encoding='utf-8') as f:
content = f.read()
assert content.count(FEATURE_MARK) == 1
assert content.count(INCOMPAT_MARK) == 1
content = content.replace(FEATURE_MARK, feature_block)
content = content.replace(INCOMPAT_MARK, incompat_block)
# Clean trailing whitespace
content = '\n'.join(l.rstrip() for l in content.splitlines())
with io.open(target, 'w', encoding='utf-8') as f:
f.write(content)
# 3. Stage the changes in git -------------------------------------------------
for file in files:
check_call(['git', 'rm', file])
check_call(['git', 'add', target])
Matthias Bussonnier
add do_where
r21970 print("Merged what's new changes. Check the diff and commit the change.")