11#!/usr/bin/env python
2- # -*- coding: utf-8 -*-
3- """
4- make-release
5- ~~~~~~~~~~~~
6-
7- Helper script that performs a release. Does pretty much everything
8- automatically for us.
9-
10- :copyright: (c) 2015 by Armin Ronacher.
11- :license: BSD, see LICENSE for more details.
12- """
132from __future__ import print_function
14- import sys
3+
154import os
165import re
17- from datetime import datetime , date
18- from subprocess import Popen , PIPE
6+ import sys
7+ from datetime import date , datetime
8+ from subprocess import PIPE , Popen
199
20- _date_clean_re = re .compile (r'(\d+ )(st|nd|rd|th)' )
10+ _date_strip_re = re .compile (r'(?<=\d )(st|nd|rd|th)' )
2111
2212
2313def parse_changelog ():
2414 with open ('CHANGES' ) as f :
2515 lineiter = iter (f )
2616 for line in lineiter :
2717 match = re .search ('^Version\s+(.*)' , line .strip ())
18+
2819 if match is None :
2920 continue
21+
3022 version = match .group (1 ).strip ()
31- if lineiter .next ().count ('-' ) != len (match .group (0 )):
23+
24+ if next (lineiter ).count ('-' ) != len (match .group (0 )):
3225 continue
26+
3327 while 1 :
34- change_info = lineiter .next ().strip ()
28+ change_info = next (lineiter ).strip ()
29+
3530 if change_info :
3631 break
3732
38- match = re .search (r'released on (\w+\s+\d+\w+\s+\d+)'
39- r'(?:, codename (.*))?(?i)' , change_info )
33+ match = re .search (
34+ r'released on (\w+\s+\d+\w+\s+\d+)(?:, codename (.*))?' ,
35+ change_info ,
36+ flags = re .IGNORECASE
37+ )
38+
4039 if match is None :
4140 continue
4241
@@ -46,15 +45,16 @@ def parse_changelog():
4645
4746def bump_version (version ):
4847 try :
49- parts = map ( int , version .split ('.' ))
48+ parts = [ int ( i ) for i in version .split ('.' )]
5049 except ValueError :
5150 fail ('Current version is not numeric' )
51+
5252 parts [- 1 ] += 1
5353 return '.' .join (map (str , parts ))
5454
5555
5656def parse_date (string ):
57- string = _date_clean_re .sub (r'\1 ' , string )
57+ string = _date_strip_re .sub (' ' , string )
5858 return datetime .strptime (string , '%B %d %Y' )
5959
6060
@@ -65,9 +65,13 @@ def inject_version(match):
6565 before , old , after = match .groups ()
6666 changed .append (True )
6767 return before + version_number + after
68+
6869 with open (filename ) as f :
69- contents = re .sub (r"^(\s*%s\s*=\s*')(.+?)(')(?sm)" % pattern ,
70- inject_version , f .read ())
70+ contents = re .sub (
71+ r"^(\s*%s\s*=\s*')(.+?)(')" % pattern ,
72+ inject_version , f .read (),
73+ flags = re .DOTALL | re .MULTILINE
74+ )
7175
7276 if not changed :
7377 fail ('Could not find %s in %s' , pattern , filename )
@@ -81,8 +85,9 @@ def set_init_version(version):
8185 set_filename_version ('flask/__init__.py' , version , '__version__' )
8286
8387
84- def build_and_upload ():
85- Popen ([sys .executable , 'setup.py' , 'release' , 'sdist' , 'bdist_wheel' , 'upload' ]).wait ()
88+ def build ():
89+ cmd = [sys .executable , 'setup.py' , 'sdist' , 'bdist_wheel' ]
90+ Popen (cmd ).wait ()
8691
8792
8893def fail (message , * args ):
@@ -95,7 +100,9 @@ def info(message, *args):
95100
96101
97102def get_git_tags ():
98- return set (Popen (['git' , 'tag' ], stdout = PIPE ).communicate ()[0 ].splitlines ())
103+ return set (
104+ Popen (['git' , 'tag' ], stdout = PIPE ).communicate ()[0 ].splitlines ()
105+ )
99106
100107
101108def git_is_clean ():
@@ -116,29 +123,40 @@ def main():
116123 os .chdir (os .path .join (os .path .dirname (__file__ ), '..' ))
117124
118125 rv = parse_changelog ()
126+
119127 if rv is None :
120128 fail ('Could not parse changelog' )
121129
122130 version , release_date , codename = rv
123- dev_version = bump_version (version ) + '- dev'
131+ dev_version = bump_version (version ) + '. dev'
124132
125- info ('Releasing %s (codename %s, release date %s)' ,
126- version , codename , release_date .strftime ('%d/%m/%Y' ))
133+ info (
134+ 'Releasing %s (codename %s, release date %s)' ,
135+ version , codename , release_date .strftime ('%d/%m/%Y' )
136+ )
127137 tags = get_git_tags ()
128138
129139 if version in tags :
130140 fail ('Version "%s" is already tagged' , version )
141+
131142 if release_date .date () != date .today ():
132- fail ('Release date is not today (%s != %s)' ,
133- release_date .date (), date .today ())
143+ fail (
144+ 'Release date is not today (%s != %s)' ,
145+ release_date .date (), date .today ()
146+ )
134147
135148 if not git_is_clean ():
136149 fail ('You have uncommitted changes in git' )
137150
151+ try :
152+ import wheel # noqa: F401
153+ except ImportError :
154+ fail ('You need to install the wheel package.' )
155+
138156 set_init_version (version )
139157 make_git_commit ('Bump version number to %s' , version )
140158 make_git_tag (version )
141- build_and_upload ()
159+ build ()
142160 set_init_version (dev_version )
143161
144162
0 commit comments