##// END OF EJS Templates
Merge pull request #4349 from takluyver/update-whatsnew...
Min RK -
r12916:30c4c7ca merge
parent child Browse files
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
@@ -14,6 +14,24 b' This document describes in-flight development work.'
14 - `%%capture` cell magic now captures the rich display output, not just
14 - `%%capture` cell magic now captures the rich display output, not just
15 stdout/stderr
15 stdout/stderr
16
16
17 Select Notebook Name When Renaming a Notebook
18 ---------------------------------------------
19
20 The default notebook name is Untitled. It's unlikely you want to keep this name
21 or part of it when naming your notebook. Instead, IPython will select the text
22 in the input field so the user can easily type over the name and change it.
23
24 clear_output changes
25 --------------------
26
27 * There is no longer a 500ms delay when calling ``clear_output``.
28 * The ability to clear stderr and stdout individually was removed.
29 * A new ``wait`` flag that prevents ``clear_output`` from being executed until new
30 output is available. This eliminates animation flickering by allowing the
31 user to double buffer the output.
32 * The output div height is remembered when the ``wait=True`` flag is used.
33
34 .. DO NOT EDIT THIS LINE BEFORE RELEASE. FEATURE INSERTION POINT.
17
35
18 Backwards incompatible changes
36 Backwards incompatible changes
19 ------------------------------
37 ------------------------------
@@ -24,3 +42,21 b' Backwards incompatible changes'
24 their `call` methods for them have been renamed to `preprocess`.
42 their `call` methods for them have been renamed to `preprocess`.
25 * The `call` methods of nbconvert post-processsors have been renamed to
43 * The `call` methods of nbconvert post-processsors have been renamed to
26 `postprocess`.
44 `postprocess`.
45
46 * The module ``IPython.core.fakemodule`` has been removed.
47
48 * The alias system has been reimplemented to use magic functions. There should be little
49 visible difference while automagics are enabled, as they are by default, but parts of the
50 :class:`~IPython.core.alias.AliasManager` API have been removed.
51
52 * We fixed an issue with switching between matplotlib inline and GUI backends,
53 but the fix requires matplotlib 1.1 or newer. So from now on, we consider
54 matplotlib 1.1 to be the minimally supported version for IPython. Older
55 versions for the most part will work, but we make no guarantees about it.
56
57 * The :command:`pycolor` command has been removed. We recommend the much more capable
58 :command:`pygmentize` command from the `Pygments <http://pygments.org/>`_ project.
59 If you need to keep the exact output of :command:`pycolor`, you can still use
60 ``python -m IPython.utils.PyColorize foo.py``.
61
62 .. DO NOT EDIT THIS LINE BEFORE RELEASE. INCOMPAT INSERTION POINT. No newline at end of file
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now