Merge lp:~frgomes/setuptoolsbzr/lp1254288 into lp:setuptoolsbzr

Proposed by Richard Gomes
Status: Merged
Approved by: Richard Gomes
Approved revision: 24
Merged at revision: 16
Proposed branch: lp:~frgomes/setuptoolsbzr/lp1254288
Merge into: lp:setuptoolsbzr
Diff against target: 376 lines (+46/-248)
4 files modified
README.txt (+1/-0)
ez_setup.py (+0/-228)
setup.py (+21/-8)
setuptools_bzr/__init__.py (+24/-12)
To merge this branch: bzr merge lp:~frgomes/setuptoolsbzr/lp1254288
Reviewer Review Type Date Requested Status
Richard Gomes Pending
Review via email: mp+201116@code.launchpad.net

Commit message

Merged with branch: ~frgomes/setuptoolsbzr/lp1254288

Description of the change

Merge for release 2.2

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'README.txt'
--- README.txt 2008-04-02 21:24:27 +0000
+++ README.txt 2014-01-09 22:49:08 +0000
@@ -57,6 +57,7 @@
57===================57===================
5858
59Author: Barry Warsaw <barry@python.org>59Author: Barry Warsaw <barry@python.org>
60Maintainer: Richard Gomes <rgomes.info@gmail.com>
6061
61This package is developed on Launchpad_. Please see the `project page`_ for62This package is developed on Launchpad_. Please see the `project page`_ for
62submitting bug reports.63submitting bug reports.
6364
=== removed file 'ez_setup.py'
--- ez_setup.py 2007-07-20 23:02:07 +0000
+++ ez_setup.py 1970-01-01 00:00:00 +0000
@@ -1,228 +0,0 @@
1#!python
2"""Bootstrap setuptools installation
3
4If you want to use setuptools in your package's setup.py, just include this
5file in the same directory with it, and add this to the top of your setup.py::
6
7 from ez_setup import use_setuptools
8 use_setuptools()
9
10If you want to require a specific version of setuptools, set a download
11mirror, or use an alternate download directory, you can do so by supplying
12the appropriate options to ``use_setuptools()``.
13
14This file can also be run as a script to install or upgrade setuptools.
15"""
16import sys
17DEFAULT_VERSION = "0.6c5"
18DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3]
19
20md5_data = {
21 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',
22 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb',
23 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b',
24 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',
25 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',
26 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',
27 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',
28 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',
29 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',
30 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',
31 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
32 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
33 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
34 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
35 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
36 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
37 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
38 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
39 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
40 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
41 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
42}
43
44import sys, os
45
46def _validate_md5(egg_name, data):
47 if egg_name in md5_data:
48 from md5 import md5
49 digest = md5(data).hexdigest()
50 if digest != md5_data[egg_name]:
51 print >>sys.stderr, (
52 "md5 validation of %s failed! (Possible download problem?)"
53 % egg_name
54 )
55 sys.exit(2)
56 return data
57
58
59def use_setuptools(
60 version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
61 download_delay=15
62):
63 """Automatically find/download setuptools and make it available on sys.path
64
65 `version` should be a valid setuptools version number that is available
66 as an egg for download under the `download_base` URL (which should end with
67 a '/'). `to_dir` is the directory where setuptools will be downloaded, if
68 it is not already available. If `download_delay` is specified, it should
69 be the number of seconds that will be paused before initiating a download,
70 should one be required. If an older version of setuptools is installed,
71 this routine will print a message to ``sys.stderr`` and raise SystemExit in
72 an attempt to abort the calling script.
73 """
74 try:
75 import setuptools
76 if setuptools.__version__ == '0.0.1':
77 print >>sys.stderr, (
78 "You have an obsolete version of setuptools installed. Please\n"
79 "remove it from your system entirely before rerunning this script."
80 )
81 sys.exit(2)
82 except ImportError:
83 egg = download_setuptools(version, download_base, to_dir, download_delay)
84 sys.path.insert(0, egg)
85 import setuptools; setuptools.bootstrap_install_from = egg
86
87 import pkg_resources
88 try:
89 pkg_resources.require("setuptools>="+version)
90
91 except pkg_resources.VersionConflict, e:
92 # XXX could we install in a subprocess here?
93 print >>sys.stderr, (
94 "The required version of setuptools (>=%s) is not available, and\n"
95 "can't be installed while this script is running. Please install\n"
96 " a more recent version first.\n\n(Currently using %r)"
97 ) % (version, e.args[0])
98 sys.exit(2)
99
100def download_setuptools(
101 version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
102 delay = 15
103):
104 """Download setuptools from a specified location and return its filename
105
106 `version` should be a valid setuptools version number that is available
107 as an egg for download under the `download_base` URL (which should end
108 with a '/'). `to_dir` is the directory where the egg will be downloaded.
109 `delay` is the number of seconds to pause before an actual download attempt.
110 """
111 import urllib2, shutil
112 egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
113 url = download_base + egg_name
114 saveto = os.path.join(to_dir, egg_name)
115 src = dst = None
116 if not os.path.exists(saveto): # Avoid repeated downloads
117 try:
118 from distutils import log
119 if delay:
120 log.warn("""
121---------------------------------------------------------------------------
122This script requires setuptools version %s to run (even to display
123help). I will attempt to download it for you (from
124%s), but
125you may need to enable firewall access for this script first.
126I will start the download in %d seconds.
127
128(Note: if this machine does not have network access, please obtain the file
129
130 %s
131
132and place it in this directory before rerunning this script.)
133---------------------------------------------------------------------------""",
134 version, download_base, delay, url
135 ); from time import sleep; sleep(delay)
136 log.warn("Downloading %s", url)
137 src = urllib2.urlopen(url)
138 # Read/write all in one block, so we don't create a corrupt file
139 # if the download is interrupted.
140 data = _validate_md5(egg_name, src.read())
141 dst = open(saveto,"wb"); dst.write(data)
142 finally:
143 if src: src.close()
144 if dst: dst.close()
145 return os.path.realpath(saveto)
146
147def main(argv, version=DEFAULT_VERSION):
148 """Install or upgrade setuptools and EasyInstall"""
149
150 try:
151 import setuptools
152 except ImportError:
153 egg = None
154 try:
155 egg = download_setuptools(version, delay=0)
156 sys.path.insert(0,egg)
157 from setuptools.command.easy_install import main
158 return main(list(argv)+[egg]) # we're done here
159 finally:
160 if egg and os.path.exists(egg):
161 os.unlink(egg)
162 else:
163 if setuptools.__version__ == '0.0.1':
164 # tell the user to uninstall obsolete version
165 use_setuptools(version)
166
167 req = "setuptools>="+version
168 import pkg_resources
169 try:
170 pkg_resources.require(req)
171 except pkg_resources.VersionConflict:
172 try:
173 from setuptools.command.easy_install import main
174 except ImportError:
175 from easy_install import main
176 main(list(argv)+[download_setuptools(delay=0)])
177 sys.exit(0) # try to force an exit
178 else:
179 if argv:
180 from setuptools.command.easy_install import main
181 main(argv)
182 else:
183 print "Setuptools version",version,"or greater has been installed."
184 print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'
185
186
187
188def update_md5(filenames):
189 """Update our built-in md5 registry"""
190
191 import re
192 from md5 import md5
193
194 for name in filenames:
195 base = os.path.basename(name)
196 f = open(name,'rb')
197 md5_data[base] = md5(f.read()).hexdigest()
198 f.close()
199
200 data = [" %r: %r,\n" % it for it in md5_data.items()]
201 data.sort()
202 repl = "".join(data)
203
204 import inspect
205 srcfile = inspect.getsourcefile(sys.modules[__name__])
206 f = open(srcfile, 'rb'); src = f.read(); f.close()
207
208 match = re.search("\nmd5_data = {\n([^}]+)}", src)
209 if not match:
210 print >>sys.stderr, "Internal error!"
211 sys.exit(2)
212
213 src = src[:match.start(1)] + repl + src[match.end(1):]
214 f = open(srcfile,'w')
215 f.write(src)
216 f.close()
217
218
219if __name__=='__main__':
220 if len(sys.argv)>2 and sys.argv[1]=='--md5update':
221 update_md5(sys.argv[2:])
222 else:
223 main(sys.argv[1:])
224
225
226
227
228
2290
=== modified file 'setup.py'
--- setup.py 2010-11-04 20:23:07 +0000
+++ setup.py 2014-01-09 22:49:08 +0000
@@ -15,10 +15,6 @@
15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
16# USA.16# USA.
1717
18
19import ez_setup
20ez_setup.use_setuptools()
21
22from setuptools import setup, find_packages18from setuptools import setup, find_packages
23from setuptools_bzr import __version__19from setuptools_bzr import __version__
2420
@@ -29,17 +25,34 @@
29 description = 'setuptools plugin for bzr',25 description = 'setuptools plugin for bzr',
30 author = 'Barry Warsaw',26 author = 'Barry Warsaw',
31 author_email = 'barry@python.org',27 author_email = 'barry@python.org',
28 maintainer = 'Richard Gomes',
29 maintainer_email= 'rgomes.info@gmail.com',
32 license = 'LGPLv3',30 license = 'LGPLv3',
33 # For historical reasons, the code lives under a different project name.31 # For historical reasons, the code lives under a different project name.
34 url = 'https://launchpad.net/setuptoolsbzr',32 url = 'https://launchpad.net/setuptoolsbzr',
35 keywords = 'distutils setuptools setup',33 keywords = 'distutils setuptools setup bzr bazaar',
36 packages = find_packages(),34 packages = find_packages(),
35 classifiers=[
36 "Development Status :: 5 - Production/Stable",
37 "Programming Language :: Python",
38 "Programming Language :: Python :: 2",
39 "Programming Language :: Python :: 2.4",
40 "Programming Language :: Python :: 2.5",
41 "Programming Language :: Python :: 2.6",
42 "Programming Language :: Python :: 2.7",
43 "Programming Language :: Python :: 3",
44 "Programming Language :: Python :: 3.1",
45 "Programming Language :: Python :: 3.2",
46 "Programming Language :: Python :: 3.3",
47 "Intended Audience :: Developers",
48 "Operating System :: OS Independent",
49 "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)",
50 "Topic :: Software Development :: Version Control",
51 "Framework :: Setuptools Plugin",
52 ],
37 entry_points = {53 entry_points = {
38 'setuptools.file_finders': [54 'setuptools.file_finders': [
39 'bzr = setuptools_bzr:find_files_for_bzr',55 'bzr = setuptools_bzr:find_files_for_bzr',
40 ],56 ],
41 },57 },
42 install_requires = {
43 'bzr': ['bzr'],
44 },
45 )58 )
4659
=== modified file 'setuptools_bzr/__init__.py'
--- setuptools_bzr/__init__.py 2010-11-04 20:23:07 +0000
+++ setuptools_bzr/__init__.py 2014-01-09 22:49:08 +0000
@@ -15,15 +15,17 @@
15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
16# USA.16# USA.
1717
18from __future__ import print_function
19
18"""setuptools plugin for projects maintained under Bazaar."""20"""setuptools plugin for projects maintained under Bazaar."""
1921
20__version__ = '2.1'22__version__ = '2.2'
21__all__ = [23__all__ = [
22 'find_files_for_bzr',24 'find_files_for_bzr',
23 ]25 ]
2426
2527
26import os28import os, sys
27import subprocess29import subprocess
2830
29try:31try:
@@ -34,6 +36,9 @@
34 Branch = None36 Branch = None
3537
3638
39PY3 = sys.version[0] == "3"
40
41
37if os.getenv('BZR_SETUPTOOLS_FORCE_CMD'):42if os.getenv('BZR_SETUPTOOLS_FORCE_CMD'):
38 Branch = None43 Branch = None
3944
@@ -47,11 +52,11 @@
47 branch.lock_read()52 branch.lock_read()
48 try:53 try:
49 # Get the inventory of the branch's last revision.54 # Get the inventory of the branch's last revision.
50 inv = branch.repository.get_revision_inventory(branch.last_revision())55 inv = branch.repository.get_inventory(branch.last_revision())
51 # Get the inventory entry for the path.56 # Get the inventory entry for the path.
52 entry = inv[inv.path2id(path)]57 entry = inv[inv.path2id(path)]
53 # Return the names of the children.58 # Return the names of the children.
54 return [os.path.join(path, child) for child in entry.children.keys()]59 return [os.path.join(path, child) for child in list(entry.children.keys())]
55 finally:60 finally:
56 branch.unlock()61 branch.unlock()
5762
@@ -76,14 +81,21 @@
7681
77def bzr_find_files_for_bzr(dirname):82def bzr_find_files_for_bzr(dirname):
78 """Use the program bzr(1) to recursively find versioned files."""83 """Use the program bzr(1) to recursively find versioned files."""
79 cmd = 'bzr ls --versioned ' + dirname84 cmd = 'bzr ls --recursive --versioned ' + dirname
80 proc = subprocess.Popen(cmd.split(),85 try:
81 stdin=subprocess.PIPE,86 proc = subprocess.Popen(cmd.split(),
82 stdout=subprocess.PIPE,87 stdin=subprocess.PIPE,
83 stderr=subprocess.PIPE)88 stdout=subprocess.PIPE,
84 stdout, stderr = proc.communicate()89 stderr=subprocess.PIPE)
85 # XXX check for errors and log stderr90 stdout, stderr = proc.communicate()
86 return stdout.splitlines()91 except Exception as e:
92 print('WARNING: bzr: {}'.format(e), file=sys.stderr)
93 return []
94
95 if not PY3:
96 return stdout.splitlines()
97 else:
98 return (line.decode('utf-8') for line in stdout.splitlines())
8799
88100
89def find_files_for_bzr(dirname):101def find_files_for_bzr(dirname):

Subscribers

People subscribed via source and target branches

to all changes: