##// END OF EJS Templates
Open 0.13 series for development.
Fernando Perez -
Show More
@@ -1,140 +1,141
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Release data for the IPython project."""
2 """Release data for the IPython project."""
3
3
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (c) 2008-2011, IPython Development Team.
5 # Copyright (c) 2008-2011, IPython Development Team.
6 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
6 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
7 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
7 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
8 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
8 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
9 #
9 #
10 # Distributed under the terms of the Modified BSD License.
10 # Distributed under the terms of the Modified BSD License.
11 #
11 #
12 # The full license is in the file COPYING.txt, distributed with this software.
12 # The full license is in the file COPYING.txt, distributed with this software.
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14
14
15 # Name of the package for release purposes. This is the name which labels
15 # Name of the package for release purposes. This is the name which labels
16 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
16 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
17 name = 'ipython'
17 name = 'ipython'
18
18
19 # IPython version information. An empty _version_extra corresponds to a full
19 # IPython version information. An empty _version_extra corresponds to a full
20 # release. 'dev' as a _version_extra string means this is a development
20 # release. 'dev' as a _version_extra string means this is a development
21 # version
21 # version
22 _version_major = 0
22 _version_major = 0
23 _version_minor = 12
23 _version_minor = 13
24 _version_micro = '' # use '' for first of series, number for 1 and above
24 _version_micro = '' # use '' for first of series, number for 1 and above
25 _version_extra = 'dev'
25 #_version_extra = 'rc1'
26 #_version_extra = 'rc1'
26 _version_extra = '' # Uncomment this for full releases
27 #_version_extra = '' # Uncomment this for full releases
27
28
28 # Construct full version string from these.
29 # Construct full version string from these.
29 _ver = [_version_major, _version_minor]
30 _ver = [_version_major, _version_minor]
30 if _version_micro:
31 if _version_micro:
31 _ver.append(_version_micro)
32 _ver.append(_version_micro)
32 if _version_extra:
33 if _version_extra:
33 _ver.append(_version_extra)
34 _ver.append(_version_extra)
34
35
35 __version__ = '.'.join(map(str, _ver))
36 __version__ = '.'.join(map(str, _ver))
36
37
37 version = __version__ # backwards compatibility name
38 version = __version__ # backwards compatibility name
38
39
39 description = "IPython: Productive Interactive Computing"
40 description = "IPython: Productive Interactive Computing"
40
41
41 long_description = \
42 long_description = \
42 """
43 """
43 IPython provides a rich toolkit to help you make the most out of using Python
44 IPython provides a rich toolkit to help you make the most out of using Python
44 interactively. Its main components are:
45 interactively. Its main components are:
45
46
46 * Powerful interactive Python shells (terminal- and Qt-based).
47 * Powerful interactive Python shells (terminal- and Qt-based).
47 * Support for interactive data visualization and use of GUI toolkits.
48 * Support for interactive data visualization and use of GUI toolkits.
48 * Flexible, embeddable interpreters to load into your own projects.
49 * Flexible, embeddable interpreters to load into your own projects.
49 * Tools for high level and interactive parallel computing.
50 * Tools for high level and interactive parallel computing.
50
51
51 The enhanced interactive Python shells have the following main features:
52 The enhanced interactive Python shells have the following main features:
52
53
53 * Comprehensive object introspection.
54 * Comprehensive object introspection.
54
55
55 * Input history, persistent across sessions.
56 * Input history, persistent across sessions.
56
57
57 * Caching of output results during a session with automatically generated
58 * Caching of output results during a session with automatically generated
58 references.
59 references.
59
60
60 * Readline based name completion.
61 * Readline based name completion.
61
62
62 * Extensible system of 'magic' commands for controlling the environment and
63 * Extensible system of 'magic' commands for controlling the environment and
63 performing many tasks related either to IPython or the operating system.
64 performing many tasks related either to IPython or the operating system.
64
65
65 * Configuration system with easy switching between different setups (simpler
66 * Configuration system with easy switching between different setups (simpler
66 than changing $PYTHONSTARTUP environment variables every time).
67 than changing $PYTHONSTARTUP environment variables every time).
67
68
68 * Session logging and reloading.
69 * Session logging and reloading.
69
70
70 * Extensible syntax processing for special purpose situations.
71 * Extensible syntax processing for special purpose situations.
71
72
72 * Access to the system shell with user-extensible alias system.
73 * Access to the system shell with user-extensible alias system.
73
74
74 * Easily embeddable in other Python programs and wxPython GUIs.
75 * Easily embeddable in other Python programs and wxPython GUIs.
75
76
76 * Integrated access to the pdb debugger and the Python profiler.
77 * Integrated access to the pdb debugger and the Python profiler.
77
78
78 The parallel computing architecture has the following main features:
79 The parallel computing architecture has the following main features:
79
80
80 * Quickly parallelize Python code from an interactive Python/IPython session.
81 * Quickly parallelize Python code from an interactive Python/IPython session.
81
82
82 * A flexible and dynamic process model that be deployed on anything from
83 * A flexible and dynamic process model that be deployed on anything from
83 multicore workstations to supercomputers.
84 multicore workstations to supercomputers.
84
85
85 * An architecture that supports many different styles of parallelism, from
86 * An architecture that supports many different styles of parallelism, from
86 message passing to task farming.
87 message passing to task farming.
87
88
88 * Both blocking and fully asynchronous interfaces.
89 * Both blocking and fully asynchronous interfaces.
89
90
90 * High level APIs that enable many things to be parallelized in a few lines
91 * High level APIs that enable many things to be parallelized in a few lines
91 of code.
92 of code.
92
93
93 * Share live parallel jobs with other users securely.
94 * Share live parallel jobs with other users securely.
94
95
95 * Dynamically load balanced task farming system.
96 * Dynamically load balanced task farming system.
96
97
97 * Robust error handling in parallel code.
98 * Robust error handling in parallel code.
98
99
99 The latest development version is always available from IPython's `GitHub
100 The latest development version is always available from IPython's `GitHub
100 site <http://github.com/ipython>`_.
101 site <http://github.com/ipython>`_.
101 """
102 """
102
103
103 license = 'BSD'
104 license = 'BSD'
104
105
105 authors = {'Fernando' : ('Fernando Perez','fperez.net@gmail.com'),
106 authors = {'Fernando' : ('Fernando Perez','fperez.net@gmail.com'),
106 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
107 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
107 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
108 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
108 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
109 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
109 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
110 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
110 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com')
111 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com')
111 }
112 }
112
113
113 author = 'The IPython Development Team'
114 author = 'The IPython Development Team'
114
115
115 author_email = 'ipython-dev@scipy.org'
116 author_email = 'ipython-dev@scipy.org'
116
117
117 url = 'http://ipython.org'
118 url = 'http://ipython.org'
118
119
119 # This will only be valid for actual releases sent to PyPI, but that's OK since
120 # This will only be valid for actual releases sent to PyPI, but that's OK since
120 # those are the ones we want pip/easy_install to be able to find.
121 # those are the ones we want pip/easy_install to be able to find.
121 download_url = 'http://archive.ipython.org/release/%s' % version
122 download_url = 'http://archive.ipython.org/release/%s' % version
122
123
123 platforms = ['Linux','Mac OSX','Windows XP/2000/NT']
124 platforms = ['Linux','Mac OSX','Windows XP/2000/NT']
124
125
125 keywords = ['Interactive','Interpreter','Shell','Parallel','Distributed']
126 keywords = ['Interactive','Interpreter','Shell','Parallel','Distributed']
126
127
127 classifiers = [
128 classifiers = [
128 'Intended Audience :: Developers',
129 'Intended Audience :: Developers',
129 'Intended Audience :: Science/Research'
130 'Intended Audience :: Science/Research'
130 'License :: OSI Approved :: BSD License',
131 'License :: OSI Approved :: BSD License',
131 'Programming Language :: Python',
132 'Programming Language :: Python',
132 'Programming Language :: Python :: 2',
133 'Programming Language :: Python :: 2',
133 'Programming Language :: Python :: 2.6',
134 'Programming Language :: Python :: 2.6',
134 'Programming Language :: Python :: 2.7',
135 'Programming Language :: Python :: 2.7',
135 'Programming Language :: Python :: 3',
136 'Programming Language :: Python :: 3',
136 'Programming Language :: Python :: 3.1',
137 'Programming Language :: Python :: 3.1',
137 'Programming Language :: Python :: 3.2',
138 'Programming Language :: Python :: 3.2',
138 'Topic :: System :: Distributed Computing',
139 'Topic :: System :: Distributed Computing',
139 'Topic :: System :: Shells'
140 'Topic :: System :: Shells'
140 ]
141 ]
@@ -1,136 +1,138
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 """Script to commit the doc build outputs into the github-pages repo.
2 """Script to commit the doc build outputs into the github-pages repo.
3
3
4 Use:
4 Use:
5
5
6 gh-pages.py [tag]
6 gh-pages.py [tag]
7
7
8 If no tag is given, the current output of 'git describe' is used. If given,
8 If no tag is given, the current output of 'git describe' is used. If given,
9 that is how the resulting directory will be named.
9 that is how the resulting directory will be named.
10
10
11 In practice, you should use either actual clean tags from a current build or
11 In practice, you should use either actual clean tags from a current build or
12 something like 'current' as a stable URL for the most current version of the """
12 something like 'current' as a stable URL for the most current version of the """
13
13
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15 # Imports
15 # Imports
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17 import os
17 import os
18 import re
18 import re
19 import shutil
19 import shutil
20 import sys
20 import sys
21 from os import chdir as cd
21 from os import chdir as cd
22 from os.path import join as pjoin
22 from os.path import join as pjoin
23
23
24 from subprocess import Popen, PIPE, CalledProcessError, check_call
24 from subprocess import Popen, PIPE, CalledProcessError, check_call
25
25
26 #-----------------------------------------------------------------------------
26 #-----------------------------------------------------------------------------
27 # Globals
27 # Globals
28 #-----------------------------------------------------------------------------
28 #-----------------------------------------------------------------------------
29
29
30 pages_dir = 'gh-pages'
30 pages_dir = 'gh-pages'
31 html_dir = 'build/html'
31 html_dir = 'build/html'
32 pdf_dir = 'build/latex'
32 pdf_dir = 'build/latex'
33 pages_repo = 'git@github.com:ipython/ipython-doc.git'
33 pages_repo = 'git@github.com:ipython/ipython-doc.git'
34
34
35 #-----------------------------------------------------------------------------
35 #-----------------------------------------------------------------------------
36 # Functions
36 # Functions
37 #-----------------------------------------------------------------------------
37 #-----------------------------------------------------------------------------
38 def sh(cmd):
38 def sh(cmd):
39 """Execute command in a subshell, return status code."""
39 """Execute command in a subshell, return status code."""
40 return check_call(cmd, shell=True)
40 return check_call(cmd, shell=True)
41
41
42
42
43 def sh2(cmd):
43 def sh2(cmd):
44 """Execute command in a subshell, return stdout.
44 """Execute command in a subshell, return stdout.
45
45
46 Stderr is unbuffered from the subshell.x"""
46 Stderr is unbuffered from the subshell.x"""
47 p = Popen(cmd, stdout=PIPE, shell=True)
47 p = Popen(cmd, stdout=PIPE, shell=True)
48 out = p.communicate()[0]
48 out = p.communicate()[0]
49 retcode = p.returncode
49 retcode = p.returncode
50 if retcode:
50 if retcode:
51 raise CalledProcessError(retcode, cmd)
51 raise CalledProcessError(retcode, cmd)
52 else:
52 else:
53 return out.rstrip()
53 return out.rstrip()
54
54
55
55
56 def sh3(cmd):
56 def sh3(cmd):
57 """Execute command in a subshell, return stdout, stderr
57 """Execute command in a subshell, return stdout, stderr
58
58
59 If anything appears in stderr, print it out to sys.stderr"""
59 If anything appears in stderr, print it out to sys.stderr"""
60 p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
60 p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
61 out, err = p.communicate()
61 out, err = p.communicate()
62 retcode = p.returncode
62 retcode = p.returncode
63 if retcode:
63 if retcode:
64 raise CalledProcessError(retcode, cmd)
64 raise CalledProcessError(retcode, cmd)
65 else:
65 else:
66 return out.rstrip(), err.rstrip()
66 return out.rstrip(), err.rstrip()
67
67
68
68
69 def init_repo(path):
69 def init_repo(path):
70 """clone the gh-pages repo if we haven't already."""
70 """clone the gh-pages repo if we haven't already."""
71 sh("git clone %s %s"%(pages_repo, path))
71 sh("git clone %s %s"%(pages_repo, path))
72 here = os.getcwdu()
72 here = os.getcwdu()
73 cd(path)
73 cd(path)
74 sh('git checkout gh-pages')
74 sh('git checkout gh-pages')
75 cd(here)
75 cd(here)
76
76
77 #-----------------------------------------------------------------------------
77 #-----------------------------------------------------------------------------
78 # Script starts
78 # Script starts
79 #-----------------------------------------------------------------------------
79 #-----------------------------------------------------------------------------
80 if __name__ == '__main__':
80 if __name__ == '__main__':
81 # The tag can be given as a positional argument
81 # The tag can be given as a positional argument
82 try:
82 try:
83 tag = sys.argv[1]
83 tag = sys.argv[1]
84 except IndexError:
84 except IndexError:
85 try:
85 try:
86 tag = sh2('git describe --exact-match')
86 tag = sh2('git describe --exact-match')
87 except CalledProcessError:
87 except CalledProcessError:
88 tag = "dev" # Fallback
88 tag = "dev" # Fallback
89
89
90 startdir = os.getcwdu()
90 startdir = os.getcwdu()
91 if not os.path.exists(pages_dir):
91 if not os.path.exists(pages_dir):
92 # init the repo
92 # init the repo
93 init_repo(pages_dir)
93 init_repo(pages_dir)
94 else:
94 else:
95 # ensure up-to-date before operating
95 # ensure up-to-date before operating
96 cd(pages_dir)
96 cd(pages_dir)
97 sh('git checkout gh-pages')
97 sh('git checkout gh-pages')
98 sh('git pull')
98 sh('git pull')
99 cd(startdir)
99 cd(startdir)
100
100
101 dest = pjoin(pages_dir, tag)
101 dest = pjoin(pages_dir, tag)
102
102
103 # don't `make html` here, because gh-pages already depends on html in Makefile
103 # don't `make html` here, because gh-pages already depends on html in Makefile
104 # sh('make html')
104 # sh('make html')
105 if tag != 'dev':
105 if tag != 'dev':
106 # only build pdf for non-dev targets
106 # only build pdf for non-dev targets
107 sh2('make pdf')
107 #sh2('make pdf')
108 pass
108
109
109 # This is pretty unforgiving: we unconditionally nuke the destination
110 # This is pretty unforgiving: we unconditionally nuke the destination
110 # directory, and then copy the html tree in there
111 # directory, and then copy the html tree in there
111 shutil.rmtree(dest, ignore_errors=True)
112 shutil.rmtree(dest, ignore_errors=True)
112 shutil.copytree(html_dir, dest)
113 shutil.copytree(html_dir, dest)
113 if tag != 'dev':
114 if tag != 'dev':
114 shutil.copy(pjoin(pdf_dir, 'ipython.pdf'), pjoin(dest, 'ipython.pdf'))
115 #shutil.copy(pjoin(pdf_dir, 'ipython.pdf'), pjoin(dest, 'ipython.pdf'))
116 pass
115
117
116 try:
118 try:
117 cd(pages_dir)
119 cd(pages_dir)
118 status = sh2('git status | head -1')
120 status = sh2('git status | head -1')
119 branch = re.match('\# On branch (.*)$', status).group(1)
121 branch = re.match('\# On branch (.*)$', status).group(1)
120 if branch != 'gh-pages':
122 if branch != 'gh-pages':
121 e = 'On %r, git branch is %r, MUST be "gh-pages"' % (pages_dir,
123 e = 'On %r, git branch is %r, MUST be "gh-pages"' % (pages_dir,
122 branch)
124 branch)
123 raise RuntimeError(e)
125 raise RuntimeError(e)
124
126
125 sh('git add -A %s' % tag)
127 sh('git add -A %s' % tag)
126 sh('git commit -m"Updated doc release: %s"' % tag)
128 sh('git commit -m"Updated doc release: %s"' % tag)
127 print
129 print
128 print 'Most recent 3 commits:'
130 print 'Most recent 3 commits:'
129 sys.stdout.flush()
131 sys.stdout.flush()
130 sh('git --no-pager log --oneline HEAD~3..')
132 sh('git --no-pager log --oneline HEAD~3..')
131 finally:
133 finally:
132 cd(startdir)
134 cd(startdir)
133
135
134 print
136 print
135 print 'Now verify the build in: %r' % dest
137 print 'Now verify the build in: %r' % dest
136 print "If everything looks good, 'git push'"
138 print "If everything looks good, 'git push'"
@@ -1,31 +1,32
1 .. Developers should add in this file, during each release cycle, information
1 .. Developers should add in this file, during each release cycle, information
2 .. about important changes they've made, in a summary format that's meant for
2 .. about important changes they've made, in a summary format that's meant for
3 .. end users. For each release we normally have three sections: features, bug
3 .. end users. For each release we normally have three sections: features, bug
4 .. fixes and api breakage.
4 .. fixes and api breakage.
5 .. Please remember to credit the authors of the contributions by name,
5 .. Please remember to credit the authors of the contributions by name,
6 .. especially when they are new users or developers who do not regularly
6 .. especially when they are new users or developers who do not regularly
7 .. participate in IPython's development.
7 .. participate in IPython's development.
8
8
9 .. _whatsnew_index:
9 .. _whatsnew_index:
10
10
11 =====================
11 =====================
12 What's new in IPython
12 What's new in IPython
13 =====================
13 =====================
14
14
15 This section documents the changes that have been made in various versions of
15 This section documents the changes that have been made in various versions of
16 IPython. Users should consult these pages to learn about new features, bug
16 IPython. Users should consult these pages to learn about new features, bug
17 fixes and backwards incompatibilities. Developers should summarize the
17 fixes and backwards incompatibilities. Developers should summarize the
18 development work they do here in a user friendly format.
18 development work they do here in a user friendly format.
19
19
20 .. toctree::
20 .. toctree::
21 :maxdepth: 1
21 :maxdepth: 1
22
22
23 development
23 version0.12
24 version0.12
24 github-stats-0.12
25 github-stats-0.12
25 version0.11
26 version0.11
26 github-stats-0.11
27 github-stats-0.11
27 version0.10
28 version0.10
28 version0.9
29 version0.9
29 version0.8
30 version0.8
30
31
31
32
General Comments 0
You need to be logged in to leave comments. Login now