##// END OF EJS Templates
using pathlib on update_whatsnew.py
using pathlib on update_whatsnew.py

File last commit:

r26044:383e7dac
r26044:383e7dac
Show More
update_whatsnew.py
81 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
Matthias Bussonnier
Tell if no automatic update possible
r22041 import sys
dswij
using pathlib on update_whatsnew.py
r26044 from pathlib import Path
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 from subprocess import check_call, check_output
dswij
using pathlib on update_whatsnew.py
r26044 repo_root = Path(__file__).resolve().parent.parent
whatsnew_dir = repo_root / 'docs' / 'source' / 'whatsnew'
pr_dir = whatsnew_dir / 'pr'
target = whatsnew_dir / 'development.rst'
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901
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 ---------------------------------------
dswij
using pathlib on update_whatsnew.py
r26044 files = set(pr_dir.glob('*.rst'))
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 # Ignore explanatory and example files
dswij
using pathlib on update_whatsnew.py
r26044 files.difference_update({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
dswij
using pathlib on update_whatsnew.py
r26044 if path.name.startswith('incompat-'):
Thomas Kluyver
Add script to update whatsnew file from PR snippets
r12901 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.")