##// END OF EJS Templates
the __future__ is now.
the __future__ is now.

File last commit:

r22041:892b1c49
r22963:2961b531
Show More
update_whatsnew.py
82 lines | 2.6 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
Matthias Bussonnier
Tell if no automatic update possible
r22041 import sys
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
Take Thomas comments into account
r21974 files = set(glob(pjoin(pr_dir, '*.rst')))
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 # Ignore explanatory and example files
Matthias Bussonnier
Take Thomas comments into account
r21974 files.difference_update({pjoin(pr_dir, f) for f in {
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
Matthias Bussonnier
Tell if no automatic update possible
r22041 if not files:
print("No automatic update available for what's new")
sys.exit(0)
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:
Matthias Bussonnier
Take Thomas comments into account
r21974 raise Exception('Error reading "{}"'.format(f)) from e
Matthias Bussonnier
add do_where
r21970
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.")