Merge lp:~teknico/juju-gui/harden-npm-dependencies into lp:juju-gui/experimental

Proposed by Nicola Larosa
Status: Merged
Merged at revision: 548
Proposed branch: lp:~teknico/juju-gui/harden-npm-dependencies
Merge into: lp:juju-gui/experimental
Diff against target: 1174 lines (+1085/-23)
3 files modified
HACKING (+45/-9)
npm-shrinkwrap.json (+1032/-0)
package.json (+8/-14)
To merge this branch: bzr merge lp:~teknico/juju-gui/harden-npm-dependencies
Reviewer Review Type Date Requested Status
Juju GUI Hackers Pending
Review via email: mp+158659@code.launchpad.net

Description of the change

Freeze the versions of all nodejs dependencies.

Add a generated npm-shrinkwrap.json file that freezes the current versions
of all nodejs dependecies, even the recursive ones.

Update the package.json file keeping the currently fixed package versions.
Also remove the misleading "engines" entry (see
<https://npmjs.org/doc/json.html#engines>), and remove the useless distinction
between "dependencies" and "devDependencies" (see
<https://npmjs.org/doc/json.html#devDependencies>).

Add a documentation section, "Updating the nodejs dependencies" at the
bottom of the docs/hacking.rst file, explaining how this works and how to
update dependencies to new versions. Please check that the whole thing is
understandable and workable: you will use this stuff, after all. :-)

Sorry for the change size: it's mainly due to the 1k+ lines of the generated
npm-shrinkwrap.json file. No need to go over that one, just look at the
changes in the docs/hacking.rst and package.json files.

https://codereview.appspot.com/8714043/

To post a comment you must log in.
Revision history for this message
Nicola Larosa (teknico) wrote :

Reviewers: mp+158659_code.launchpad.net,

Message:
Please take a look.

Description:
Freeze the versions of all nodejs dependencies.

Add a generated npm-shrinkwrap.json file that freezes the current
versions
of all nodejs dependecies, even the recursive ones.

Update the package.json file keeping the currently fixed package
versions, and
making all other ones have some leeway over the micro version by using
Tilde
Version Ranges (see
<https://npmjs.org/doc/json.html#Tilde-Version-Ranges>).
Also remove the misleading "engines" entry (see
<https://npmjs.org/doc/json.html#engines>), and remove the useless
distinction
between "dependencies" and "devDependencies" (see
<https://npmjs.org/doc/json.html#devDependencies>).

Add a documentation section, "Updating the nodejs dependencies" at the
bottom of the HACKING file, explaining how this works and how to update
dependencies to new versions. Please check that the whole thing is
understandable and workable: you will use this stuff, after all. :-)

Sorry for the change size: it's mainly due to the 1k+ lines of the
generated
npm-shrinkwrap.json file. No need to go over that one, just look at the
changes in the HACKING and package.json files.

https://code.launchpad.net/~teknico/juju-gui/harden-npm-dependencies/+merge/158659

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/8714043/

Affected files:
   M HACKING
   A [revision details]
   A npm-shrinkwrap.json
   M package.json

Revision history for this message
Gary Poster (gary) wrote :

LGTM. I tried this in the charm (PyJuju) and it worked great. Thank
you!

Gary

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (left):

https://codereview.appspot.com/8714043/diff/1/package.json#oldcode17
package.json:17: "devDependencies": {
I still think that collapsing dependencies and devDependencies makes
sense. Thank you.

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (right):

https://codereview.appspot.com/8714043/diff/1/package.json#newcode13
package.json:13: "d3": "~2.10.3",
Why don't we keep the values we had before, instead? They were working
pretty well for us, and now the shrinkwrap actually hardens. Perhaps
this is a misunderstanding--I only intended to suggest that we nail down
our dependencies when we didn't have the shrinkwrap functionality.

https://codereview.appspot.com/8714043/

Revision history for this message
Nicola Larosa (teknico) wrote :

Thanks for the review. No remarks on the docs?

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (left):

https://codereview.appspot.com/8714043/diff/1/package.json#oldcode17
package.json:17: "devDependencies": {
gary.poster wrote:
> I still think that collapsing dependencies and devDependencies
> makes sense. Thank you.

That's good. :-)

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (right):

https://codereview.appspot.com/8714043/diff/1/package.json#newcode13
package.json:13: "d3": "~2.10.3",
gary.poster wrote:
> Why don't we keep the values we had before, instead?
> They were working pretty well for us, and now the
> shrinkwrap actually hardens. Perhaps this is a
> misunderstanding--I only intended to suggest that we
> nail down our dependencies when we didn't have the
> shrinkwrap functionality.

Yes, it makes sense, I'm reverting most of these changes.

https://codereview.appspot.com/8714043/

540. By Nicola Larosa

Merge from trunk.

541. By Nicola Larosa

Revert most version constraint changes.

Revision history for this message
Nicola Larosa (teknico) wrote :
Revision history for this message
Francesco Banconi (frankban) wrote :

LGTM, see just a minor below.
Thank you.

https://codereview.appspot.com/8714043/diff/5001/HACKING
File HACKING (right):

https://codereview.appspot.com/8714043/diff/5001/HACKING#newcode57
HACKING:57: sudo apt-get install nodejs imagemagick lbox python-sphinx
python-yaml python-tz \
I know this preexisted, but, while you are here, you could wrap this
line at 80?

https://codereview.appspot.com/8714043/diff/5001/HACKING#newcode423
HACKING:423: 4) check that everything works well;
Very clear.

https://codereview.appspot.com/8714043/diff/5001/package.json
File package.json (right):

https://codereview.appspot.com/8714043/diff/5001/package.json#newcode9
package.json:9: "url": "lp:juju-gui"
Thank you!

https://codereview.appspot.com/8714043/

Revision history for this message
Nicola Larosa (teknico) wrote :

https://codereview.appspot.com/8714043/diff/5001/HACKING
File HACKING (right):

https://codereview.appspot.com/8714043/diff/5001/HACKING#newcode57
HACKING:57: sudo apt-get install nodejs imagemagick lbox python-sphinx
python-yaml python-tz \
frankban wrote:
> I know this preexisted, but, while you are here,
> you could wrap this line at 80?

Oh right, doing it, thanks.

https://codereview.appspot.com/8714043/

542. By Nicola Larosa

Fix wrapping of one doc line.

Revision history for this message
Nicola Larosa (teknico) wrote :

*** Submitted:

Freeze the versions of all nodejs dependencies.

Add a generated npm-shrinkwrap.json file that freezes the current
versions
of all nodejs dependecies, even the recursive ones.

Update the package.json file keeping the currently fixed package
versions.
Also remove the misleading "engines" entry (see
<https://npmjs.org/doc/json.html#engines>), and remove the useless
distinction
between "dependencies" and "devDependencies" (see
<https://npmjs.org/doc/json.html#devDependencies>).

Add a documentation section, "Updating the nodejs dependencies" at the
bottom of the docs/hacking.rst file, explaining how this works and how
to
update dependencies to new versions. Please check that the whole thing
is
understandable and workable: you will use this stuff, after all. :-)

Sorry for the change size: it's mainly due to the 1k+ lines of the
generated
npm-shrinkwrap.json file. No need to go over that one, just look at the
changes in the docs/hacking.rst and package.json files.

R=gary.poster, frankban
CC=
https://codereview.appspot.com/8714043

https://codereview.appspot.com/8714043/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'HACKING'
--- HACKING 2013-02-21 23:16:30 +0000
+++ HACKING 2013-04-15 10:53:24 +0000
@@ -44,8 +44,8 @@
4444
45 python improv.py -f sample.json45 python improv.py -f sample.json
4646
47Now it is time to actually get the GUI itself set up. Juju GUI uses nodejs-47Now it is time to actually get the GUI itself set up. Juju GUI uses
48based development tools, so you will need ``nodejs`` and ``npm`` from Chris48nodejs-based development tools, so you will need ``nodejs`` from Chris
49Lea's node PPA. You also need ImageMagick for sprite generation, lbox to49Lea's node PPA. You also need ImageMagick for sprite generation, lbox to
50propose branches, python-sphinx and python-yaml to build docs, PyTZ to make50propose branches, python-sphinx and python-yaml to build docs, PyTZ to make
51releases, python-shelltoolbox and python-selenium for browser tests, and51releases, python-shelltoolbox and python-selenium for browser tests, and
@@ -54,7 +54,8 @@
54 sudo add-apt-repository ppa:chris-lea/node.js54 sudo add-apt-repository ppa:chris-lea/node.js
55 sudo add-apt-repository ppa:gophers/go55 sudo add-apt-repository ppa:gophers/go
56 sudo apt-get update56 sudo apt-get update
57 sudo apt-get install nodejs npm imagemagick lbox python-sphinx python-yaml python-tz python-virtualenv python-shelltoolbox python-selenium57 sudo apt-get install nodejs imagemagick lbox python-sphinx python-yaml \
58 python-tz python-virtualenv python-shelltoolbox python-selenium
5859
59See docs/browser-testing.rst if you are curious about the reason for60See docs/browser-testing.rst if you are curious about the reason for
60python-shelltoolbox and python-selenium61python-shelltoolbox and python-selenium
@@ -272,16 +273,16 @@
272=============273=============
273274
274The ``make docs`` command generates the code and the project documentation275The ``make docs`` command generates the code and the project documentation
275together.276together. The ``make view-docs`` command does the above and also opens both
277docs in the browser.
276278
277Code Documentation279Code Documentation
278------------------280------------------
279281
280Generated documentation for the JavaScript code is available in the ``yuidoc``282Generated documentation for the JavaScript code is available in the ``yuidoc/``
281directory. You can build and view the docs by running::283directory. You can build and view the docs by running::
282284
283 make yuidoc285 make view-code-doc
284 xdg-open yuidoc/index.html
285286
286See the :ref:`style guide <embedded-docs>` document for details on how to287See the :ref:`style guide <embedded-docs>` document for details on how to
287write the embedded documentation.288write the embedded documentation.
@@ -293,8 +294,7 @@
293mentioned in the developer installation instructions above, it needs Sphinx294mentioned in the developer installation instructions above, it needs Sphinx
294and Python-yaml. To build and view the documentation, use these commands::295and Python-yaml. To build and view the documentation, use these commands::
295296
296 make sphinx297 make view-main-doc
297 xdg-open docs/_build/html/index.html
298298
299Filing Bugs299Filing Bugs
300===========300===========
@@ -399,3 +399,39 @@
399 ``IS_TRUNK_BRANCH`` and ``BRANCH_IS_CLEAN``. Example usage::399 ``IS_TRUNK_BRANCH`` and ``BRANCH_IS_CLEAN``. Example usage::
400400
401 BRANCH_IS_GOOD=1 make dist401 BRANCH_IS_GOOD=1 make dist
402
403Updating the ``nodejs`` dependencies
404====================================
405
406The ranges of allowed versions for the ``nodejs`` dependency packages are
407specified in the top-level ``package.json`` file. However, the actual installed
408versions are frozen in the top-level ``npm-shrinkwap.json`` file, which
409overrides the former.
410
411The ``npm-shrinkwap.json`` file is generated by the ``npm shrinkwrap`` command
412(see `shrinkwrap - Lock down dependency versions`_) on the basis of the
413packages currently installed by any of the ``make build-[something]`` commands.
414
415The procedure for updating the dependency versions is described in the
416`Building shrinkwrapped packages`_ section of the aforementioned document. In
417a nutshell:
418
4191) review the ``package.json`` file and see whether any constraints may be
420 updated, in order to allow using newer package versions;
4212) delete the ``npm-shrinkwrap.json`` file;
4223) run ``make``, getting all new dependencies;
4234) check that everything works well;
424
425If everything is fine, regenerate the ``npm-shrinkwap.json`` file by running
426the ``npm shrinkwrap`` command.
427
428If something is broken find the culprit, adjust the ``package.json`` file
429accordingly, and go back to step #3.
430
431Alternatively, you might use the ``npm outdated`` command to get the update
432candidates, and do the job one step at a time rather than all at once.
433
434.. _`shrinkwrap - Lock down dependency versions`:
435 https://npmjs.org/doc/shrinkwrap.html
436.. _`Building shrinkwrapped packages`:
437 https://npmjs.org/doc/shrinkwrap.html#Building-shrinkwrapped-packages
402438
=== added file 'npm-shrinkwrap.json'
--- npm-shrinkwrap.json 1970-01-01 00:00:00 +0000
+++ npm-shrinkwrap.json 2013-04-15 10:53:24 +0000
@@ -0,0 +1,1032 @@
1{
2 "name": "juju-ui",
3 "version": "0.0.1",
4 "dependencies": {
5 "cryptojs": {
6 "version": "2.5.3",
7 "from": "cryptojs@2.5.x"
8 },
9 "chai": {
10 "version": "1.5.0",
11 "from": "chai@1.5.x"
12 },
13 "expect.js": {
14 "version": "0.1.2",
15 "from": "expect.js@0.1.2"
16 },
17 "graceful-fs": {
18 "version": "1.1.14",
19 "from": "graceful-fs@1.1.x"
20 },
21 "node-markdown": {
22 "version": "0.1.1",
23 "from": "node-markdown@0.1.x"
24 },
25 "rimraf": {
26 "version": "2.0.3",
27 "from": "rimraf@2.0.x"
28 },
29 "should": {
30 "version": "1.2.2",
31 "from": "should@1.2.x"
32 },
33 "less": {
34 "version": "1.3.3",
35 "from": "less@1.3.x",
36 "dependencies": {
37 "ycssmin": {
38 "version": "1.0.1",
39 "from": "ycssmin@>=1.0.1"
40 }
41 }
42 },
43 "minimatch": {
44 "version": "0.2.11",
45 "from": "minimatch@0.2.x",
46 "dependencies": {
47 "lru-cache": {
48 "version": "2.3.0",
49 "from": "lru-cache@2"
50 },
51 "sigmund": {
52 "version": "1.0.0",
53 "from": "sigmund@~1.0.0"
54 }
55 }
56 },
57 "node-minify": {
58 "version": "0.7.2",
59 "from": "node-minify@0.7.x",
60 "dependencies": {
61 "sqwish": {
62 "version": "0.2.1",
63 "from": "sqwish@*"
64 }
65 }
66 },
67 "express": {
68 "version": "3.1.1",
69 "from": "express@3.1.x",
70 "dependencies": {
71 "connect": {
72 "version": "2.7.4",
73 "from": "connect@2.7.4",
74 "dependencies": {
75 "qs": {
76 "version": "0.5.1",
77 "from": "qs@0.5.1"
78 },
79 "formidable": {
80 "version": "1.0.11",
81 "from": "formidable@1.0.11"
82 },
83 "buffer-crc32": {
84 "version": "0.1.1",
85 "from": "buffer-crc32@0.1.1"
86 },
87 "bytes": {
88 "version": "0.2.0",
89 "from": "bytes@0.2.0"
90 },
91 "pause": {
92 "version": "0.0.1",
93 "from": "pause@0.0.1"
94 }
95 }
96 },
97 "commander": {
98 "version": "0.6.1",
99 "from": "commander@0.6.1"
100 },
101 "range-parser": {
102 "version": "0.0.4",
103 "from": "range-parser@0.0.4"
104 },
105 "mkdirp": {
106 "version": "0.3.5",
107 "from": "mkdirp@~0.3.4"
108 },
109 "cookie": {
110 "version": "0.0.5",
111 "from": "cookie@0.0.5"
112 },
113 "buffer-crc32": {
114 "version": "0.2.1",
115 "from": "buffer-crc32@~0.2.1"
116 },
117 "fresh": {
118 "version": "0.1.0",
119 "from": "fresh@0.1.0"
120 },
121 "methods": {
122 "version": "0.0.1",
123 "from": "methods@0.0.1"
124 },
125 "send": {
126 "version": "0.1.0",
127 "from": "send@0.1.0",
128 "dependencies": {
129 "mime": {
130 "version": "1.2.6",
131 "from": "mime@1.2.6"
132 }
133 }
134 },
135 "cookie-signature": {
136 "version": "0.0.1",
137 "from": "cookie-signature@0.0.1"
138 },
139 "debug": {
140 "version": "0.7.2",
141 "from": "debug@*"
142 }
143 }
144 },
145 "mocha": {
146 "version": "1.8.2",
147 "from": "mocha@1.8.x",
148 "dependencies": {
149 "commander": {
150 "version": "0.6.1",
151 "from": "commander@0.6.1"
152 },
153 "growl": {
154 "version": "1.7.0",
155 "from": "growl@1.7.x"
156 },
157 "jade": {
158 "version": "0.26.3",
159 "from": "jade@0.26.3",
160 "dependencies": {
161 "mkdirp": {
162 "version": "0.3.0",
163 "from": "mkdirp@0.3.0"
164 }
165 }
166 },
167 "diff": {
168 "version": "1.0.2",
169 "from": "diff@1.0.2"
170 },
171 "debug": {
172 "version": "0.7.2",
173 "from": "debug@*"
174 },
175 "mkdirp": {
176 "version": "0.3.3",
177 "from": "mkdirp@0.3.3"
178 },
179 "ms": {
180 "version": "0.3.0",
181 "from": "ms@0.3.0"
182 }
183 }
184 },
185 "recess": {
186 "version": "1.1.6",
187 "from": "recess@1.1.x",
188 "dependencies": {
189 "colors": {
190 "version": "0.6.0-1",
191 "from": "colors@>= 0.3.0"
192 },
193 "nopt": {
194 "version": "2.1.1",
195 "from": "nopt@>= 1.0.10",
196 "dependencies": {
197 "abbrev": {
198 "version": "1.0.4",
199 "from": "abbrev@1"
200 }
201 }
202 },
203 "underscore": {
204 "version": "1.4.4",
205 "from": "underscore@>= 1.2.1"
206 },
207 "watch": {
208 "version": "0.7.0",
209 "from": "watch@>= 0.5.1"
210 }
211 }
212 },
213 "uglify-js": {
214 "version": "2.2.5",
215 "from": "uglify-js@2.2.x",
216 "dependencies": {
217 "source-map": {
218 "version": "0.1.22",
219 "from": "source-map@~0.1.7",
220 "dependencies": {
221 "amdefine": {
222 "version": "0.0.4",
223 "from": "amdefine@>=0.0.4"
224 }
225 }
226 },
227 "optimist": {
228 "version": "0.3.7",
229 "from": "optimist@~0.3.5",
230 "dependencies": {
231 "wordwrap": {
232 "version": "0.0.2",
233 "from": "wordwrap@~0.0.2"
234 }
235 }
236 }
237 }
238 },
239 "yuidocjs": {
240 "version": "0.3.42",
241 "from": "yuidocjs@0.3.x",
242 "dependencies": {
243 "express": {
244 "version": "2.5.11",
245 "from": "express@~2.5.0",
246 "dependencies": {
247 "connect": {
248 "version": "1.9.2",
249 "from": "connect@1.x",
250 "dependencies": {
251 "formidable": {
252 "version": "1.0.13",
253 "from": "formidable@1.0.x"
254 }
255 }
256 },
257 "mime": {
258 "version": "1.2.4",
259 "from": "mime@1.2.4"
260 },
261 "qs": {
262 "version": "0.4.2",
263 "from": "qs@0.4.x"
264 },
265 "mkdirp": {
266 "version": "0.3.0",
267 "from": "mkdirp@0.3.0"
268 }
269 }
270 }
271 }
272 },
273 "jshint": {
274 "version": "0.9.1",
275 "from": "jshint@0.9.1",
276 "dependencies": {
277 "cli": {
278 "version": "0.4.3",
279 "from": "cli@0.4.3",
280 "dependencies": {
281 "glob": {
282 "version": "3.1.21",
283 "from": "glob@>= 3.1.4",
284 "dependencies": {
285 "minimatch": {
286 "version": "0.2.11",
287 "from": "minimatch@~0.2.11",
288 "dependencies": {
289 "lru-cache": {
290 "version": "2.3.0",
291 "from": "lru-cache@2"
292 },
293 "sigmund": {
294 "version": "1.0.0",
295 "from": "sigmund@~1.0.0"
296 }
297 }
298 },
299 "graceful-fs": {
300 "version": "1.2.0",
301 "from": "graceful-fs@~1.2.0"
302 },
303 "inherits": {
304 "version": "1.0.0",
305 "from": "inherits@1"
306 }
307 }
308 }
309 }
310 },
311 "minimatch": {
312 "version": "0.0.5",
313 "from": "minimatch@0.0.x",
314 "dependencies": {
315 "lru-cache": {
316 "version": "1.0.6",
317 "from": "lru-cache@~1.0.2"
318 }
319 }
320 }
321 }
322 },
323 "yui": {
324 "version": "3.9.1",
325 "from": "yui@3.9.1",
326 "dependencies": {
327 "request": {
328 "version": "2.12.0",
329 "from": "request@~2.12.0",
330 "dependencies": {
331 "form-data": {
332 "version": "0.0.3",
333 "from": "form-data",
334 "dependencies": {
335 "combined-stream": {
336 "version": "0.0.3",
337 "from": "combined-stream@0.0.3",
338 "dependencies": {
339 "delayed-stream": {
340 "version": "0.0.5",
341 "from": "delayed-stream@0.0.5"
342 }
343 }
344 },
345 "async": {
346 "version": "0.1.9",
347 "from": "async@0.1.9"
348 }
349 }
350 },
351 "mime": {
352 "version": "1.2.7",
353 "from": "mime"
354 }
355 }
356 }
357 }
358 },
359 "d3": {
360 "version": "2.10.3",
361 "from": "d3@2.10.x",
362 "dependencies": {
363 "jsdom": {
364 "version": "0.2.14",
365 "from": "jsdom@0.2.14",
366 "dependencies": {
367 "htmlparser": {
368 "version": "1.7.6",
369 "from": "htmlparser@1.x"
370 },
371 "request": {
372 "version": "2.16.6",
373 "from": "request@2.x",
374 "dependencies": {
375 "form-data": {
376 "version": "0.0.7",
377 "from": "form-data@~0.0.3",
378 "dependencies": {
379 "combined-stream": {
380 "version": "0.0.4",
381 "from": "combined-stream@~0.0.4",
382 "dependencies": {
383 "delayed-stream": {
384 "version": "0.0.5",
385 "from": "delayed-stream@0.0.5"
386 }
387 }
388 },
389 "async": {
390 "version": "0.1.22",
391 "from": "async@~0.1.9"
392 }
393 }
394 },
395 "mime": {
396 "version": "1.2.9",
397 "from": "mime@~1.2.7"
398 },
399 "hawk": {
400 "version": "0.10.2",
401 "from": "hawk@~0.10.2",
402 "dependencies": {
403 "hoek": {
404 "version": "0.7.6",
405 "from": "hoek@0.7.x"
406 },
407 "boom": {
408 "version": "0.3.8",
409 "from": "boom@0.3.x"
410 },
411 "cryptiles": {
412 "version": "0.1.3",
413 "from": "cryptiles@0.1.x"
414 },
415 "sntp": {
416 "version": "0.1.4",
417 "from": "sntp@0.1.x"
418 }
419 }
420 },
421 "node-uuid": {
422 "version": "1.4.0",
423 "from": "node-uuid@~1.4.0"
424 },
425 "cookie-jar": {
426 "version": "0.2.0",
427 "from": "cookie-jar@~0.2.0"
428 },
429 "aws-sign": {
430 "version": "0.2.0",
431 "from": "aws-sign@~0.2.0"
432 },
433 "oauth-sign": {
434 "version": "0.2.0",
435 "from": "oauth-sign@~0.2.0"
436 },
437 "forever-agent": {
438 "version": "0.2.0",
439 "from": "forever-agent@~0.2.0"
440 },
441 "tunnel-agent": {
442 "version": "0.2.0",
443 "from": "tunnel-agent@~0.2.0"
444 },
445 "json-stringify-safe": {
446 "version": "3.0.0",
447 "from": "json-stringify-safe@~3.0.0"
448 },
449 "qs": {
450 "version": "0.5.6",
451 "from": "qs@~0.5.4"
452 }
453 }
454 },
455 "cssom": {
456 "version": "0.2.5",
457 "from": "cssom@0.2.x"
458 },
459 "contextify": {
460 "version": "0.1.5",
461 "from": "contextify@0.1.x",
462 "dependencies": {
463 "bindings": {
464 "version": "1.1.0",
465 "from": "bindings@*"
466 }
467 }
468 }
469 }
470 },
471 "sizzle": {
472 "version": "1.1.0",
473 "from": "sizzle@1.1.x"
474 }
475 }
476 },
477 "node-spritesheet": {
478 "version": "0.4.0",
479 "from": "node-spritesheet@0.4.0",
480 "dependencies": {
481 "async": {
482 "version": "0.1.22",
483 "from": "async@~0.1.22"
484 },
485 "q-fs": {
486 "version": "0.1.36",
487 "from": "q-fs@~0.1.32",
488 "dependencies": {
489 "q": {
490 "version": "0.8.12",
491 "from": "q@0.8.x"
492 },
493 "q-io": {
494 "version": "0.0.18",
495 "from": "q-io@0.0.x"
496 },
497 "fs-boot": {
498 "version": "0.0.9",
499 "from": "fs-boot@0.0.x"
500 }
501 }
502 },
503 "grunt-contrib": {
504 "version": "0.2.0",
505 "from": "grunt-contrib@~0.2.0",
506 "dependencies": {
507 "grunt-contrib-clean": {
508 "version": "0.2.0",
509 "from": "grunt-contrib-clean@~0.2.0",
510 "dependencies": {
511 "grunt-contrib-lib": {
512 "version": "0.1.0",
513 "from": "grunt-contrib-lib@~0.1.0"
514 }
515 }
516 },
517 "grunt-contrib-coffee": {
518 "version": "0.2.0",
519 "from": "grunt-contrib-coffee@~0.2.0",
520 "dependencies": {
521 "coffee-script": {
522 "version": "1.3.3",
523 "from": "coffee-script@~1.3.3"
524 },
525 "grunt-contrib-lib": {
526 "version": "0.2.1",
527 "from": "grunt-contrib-lib@~0.2.0"
528 }
529 }
530 },
531 "grunt-contrib-compress": {
532 "version": "0.2.2",
533 "from": "grunt-contrib-compress@~0.2.0",
534 "dependencies": {
535 "tar": {
536 "version": "0.1.17",
537 "from": "tar@~0.1.13",
538 "dependencies": {
539 "inherits": {
540 "version": "1.0.0",
541 "from": "inherits@1.x"
542 },
543 "block-stream": {
544 "version": "0.0.6",
545 "from": "block-stream@*"
546 }
547 }
548 },
549 "fstream": {
550 "version": "0.1.22",
551 "from": "fstream@~0.1.18",
552 "dependencies": {
553 "mkdirp": {
554 "version": "0.3.5",
555 "from": "mkdirp@0.3.x"
556 },
557 "graceful-fs": {
558 "version": "1.2.0",
559 "from": "graceful-fs@~1.2.0"
560 },
561 "inherits": {
562 "version": "1.0.0",
563 "from": "inherits@1.x"
564 }
565 }
566 },
567 "zipstream-ctalkington": {
568 "version": "0.3.4",
569 "from": "zipstream-ctalkington@~0.3.0"
570 },
571 "grunt-contrib-lib": {
572 "version": "0.2.1",
573 "from": "grunt-contrib-lib@~0.2.0"
574 }
575 }
576 },
577 "grunt-contrib-copy": {
578 "version": "0.2.4",
579 "from": "grunt-contrib-copy@~0.2.0",
580 "dependencies": {
581 "grunt-contrib-lib": {
582 "version": "0.2.1",
583 "from": "grunt-contrib-lib@~0.2.0"
584 }
585 }
586 },
587 "grunt-contrib-handlebars": {
588 "version": "0.2.4",
589 "from": "grunt-contrib-handlebars@~0.2.0",
590 "dependencies": {
591 "handlebars": {
592 "version": "1.0.10",
593 "from": "handlebars@~1.0.4",
594 "dependencies": {
595 "optimist": {
596 "version": "0.3.7",
597 "from": "optimist@~0.3",
598 "dependencies": {
599 "wordwrap": {
600 "version": "0.0.2",
601 "from": "wordwrap@~0.0.2"
602 }
603 }
604 },
605 "uglify-js": {
606 "version": "1.2.6",
607 "from": "uglify-js@~1.2"
608 }
609 }
610 },
611 "grunt-contrib-lib": {
612 "version": "0.2.1",
613 "from": "grunt-contrib-lib@~0.2.0"
614 }
615 }
616 },
617 "grunt-contrib-jade": {
618 "version": "0.2.0",
619 "from": "grunt-contrib-jade@~0.2.0",
620 "dependencies": {
621 "jade": {
622 "version": "0.27.7",
623 "from": "jade@~0.27.2",
624 "dependencies": {
625 "commander": {
626 "version": "0.6.1",
627 "from": "commander@0.6.1"
628 },
629 "mkdirp": {
630 "version": "0.3.5",
631 "from": "mkdirp@0.3.x"
632 },
633 "coffee-script": {
634 "version": "1.4.0",
635 "from": "coffee-script@~1.4.0"
636 }
637 }
638 },
639 "grunt-contrib-lib": {
640 "version": "0.2.1",
641 "from": "grunt-contrib-lib@~0.2.0"
642 }
643 }
644 },
645 "grunt-contrib-jst": {
646 "version": "0.2.4",
647 "from": "grunt-contrib-jst@~0.2.0",
648 "dependencies": {
649 "underscore": {
650 "version": "1.3.3",
651 "from": "underscore@~1.3.3"
652 },
653 "grunt-contrib-lib": {
654 "version": "0.2.1",
655 "from": "grunt-contrib-lib@~0.2.0"
656 }
657 }
658 },
659 "grunt-contrib-less": {
660 "version": "0.2.2",
661 "from": "grunt-contrib-less@~0.2.0",
662 "dependencies": {
663 "grunt-contrib-lib": {
664 "version": "0.2.1",
665 "from": "grunt-contrib-lib@~0.2.0"
666 }
667 }
668 },
669 "grunt-contrib-mincss": {
670 "version": "0.2.0",
671 "from": "grunt-contrib-mincss@~0.2.0",
672 "dependencies": {
673 "clean-css": {
674 "version": "0.4.2",
675 "from": "clean-css@~0.4.1",
676 "dependencies": {
677 "optimist": {
678 "version": "0.3.7",
679 "from": "optimist@0.3.x",
680 "dependencies": {
681 "wordwrap": {
682 "version": "0.0.2",
683 "from": "wordwrap@~0.0.2"
684 }
685 }
686 }
687 }
688 },
689 "grunt-contrib-lib": {
690 "version": "0.2.1",
691 "from": "grunt-contrib-lib@~0.2.0"
692 }
693 }
694 },
695 "grunt-contrib-requirejs": {
696 "version": "0.2.0",
697 "from": "grunt-contrib-requirejs@~0.2.0",
698 "dependencies": {
699 "requirejs": {
700 "version": "2.0.6",
701 "from": "requirejs@~2.0.6"
702 },
703 "grunt-contrib-lib": {
704 "version": "0.2.1",
705 "from": "grunt-contrib-lib@~0.2.0"
706 }
707 }
708 },
709 "grunt-contrib-stylus": {
710 "version": "0.2.2",
711 "from": "grunt-contrib-stylus@~0.2.0",
712 "dependencies": {
713 "stylus": {
714 "version": "0.29.0",
715 "from": "stylus@~0.29.0",
716 "dependencies": {
717 "cssom": {
718 "version": "0.2.5",
719 "from": "cssom@0.2.x"
720 },
721 "mkdirp": {
722 "version": "0.3.5",
723 "from": "mkdirp@0.3.x"
724 },
725 "debug": {
726 "version": "0.7.2",
727 "from": "debug@*"
728 }
729 }
730 },
731 "nib": {
732 "version": "0.8.2",
733 "from": "nib@~0.8.2"
734 },
735 "grunt-contrib-lib": {
736 "version": "0.2.1",
737 "from": "grunt-contrib-lib@~0.2.0"
738 }
739 }
740 },
741 "grunt-contrib-yuidoc": {
742 "version": "0.2.0",
743 "from": "grunt-contrib-yuidoc@~0.2.0",
744 "dependencies": {
745 "grunt-contrib-lib": {
746 "version": "0.2.1",
747 "from": "grunt-contrib-lib@~0.2.0"
748 }
749 }
750 }
751 }
752 },
753 "grunt-lib-contrib": {
754 "version": "0.3.1",
755 "from": "grunt-lib-contrib@~0.3.0"
756 },
757 "underscore": {
758 "version": "1.4.4",
759 "from": "underscore@>= 1.2.1"
760 }
761 }
762 },
763 "grunt": {
764 "version": "0.3.17",
765 "from": "grunt@0.3.17",
766 "dependencies": {
767 "async": {
768 "version": "0.1.22",
769 "from": "async@~0.1.18"
770 },
771 "colors": {
772 "version": "0.6.0-1",
773 "from": "colors@~0.6.0"
774 },
775 "connect": {
776 "version": "2.4.6",
777 "from": "connect@~2.4.4",
778 "dependencies": {
779 "qs": {
780 "version": "0.5.1",
781 "from": "qs@0.5.1"
782 },
783 "formidable": {
784 "version": "1.0.11",
785 "from": "formidable@1.0.11"
786 },
787 "crc": {
788 "version": "0.2.0",
789 "from": "crc@0.2.0"
790 },
791 "cookie": {
792 "version": "0.0.4",
793 "from": "cookie@0.0.4"
794 },
795 "bytes": {
796 "version": "0.1.0",
797 "from": "bytes@0.1.0"
798 },
799 "send": {
800 "version": "0.0.4",
801 "from": "send@0.0.4",
802 "dependencies": {
803 "mime": {
804 "version": "1.2.6",
805 "from": "mime@1.2.6"
806 },
807 "range-parser": {
808 "version": "0.0.4",
809 "from": "range-parser@0.0.4"
810 }
811 }
812 },
813 "fresh": {
814 "version": "0.1.0",
815 "from": "fresh@0.1.0"
816 },
817 "pause": {
818 "version": "0.0.1",
819 "from": "pause@0.0.1"
820 },
821 "debug": {
822 "version": "0.7.2",
823 "from": "debug@*"
824 }
825 }
826 },
827 "dateformat": {
828 "version": "1.0.2-1.2.3",
829 "from": "dateformat@1.0.2-1.2.3"
830 },
831 "glob-whatev": {
832 "version": "0.1.8",
833 "from": "glob-whatev@~0.1.4"
834 },
835 "hooker": {
836 "version": "0.2.3",
837 "from": "hooker@~0.2.3"
838 },
839 "nodeunit": {
840 "version": "0.7.4",
841 "from": "nodeunit@~0.7.4",
842 "dependencies": {
843 "tap": {
844 "version": "0.4.1",
845 "from": "tap@>=0.2.3",
846 "dependencies": {
847 "inherits": {
848 "version": "1.0.0"
849 },
850 "yamlish": {
851 "version": "0.0.5"
852 },
853 "slide": {
854 "version": "1.1.3",
855 "from": "slide@*"
856 },
857 "runforcover": {
858 "version": "0.0.2",
859 "from": "runforcover@~0.0.2",
860 "dependencies": {
861 "bunker": {
862 "version": "0.1.2",
863 "from": "bunker@0.1.X",
864 "dependencies": {
865 "burrito": {
866 "version": "0.2.12",
867 "from": "burrito@>=0.2.5 <0.3",
868 "dependencies": {
869 "traverse": {
870 "version": "0.5.2",
871 "from": "traverse@~0.5.1"
872 },
873 "uglify-js": {
874 "version": "1.1.1",
875 "from": "uglify-js@~1.1.1"
876 }
877 }
878 }
879 }
880 }
881 }
882 },
883 "nopt": {
884 "version": "2.1.1",
885 "from": "nopt@~2",
886 "dependencies": {
887 "abbrev": {
888 "version": "1.0.4",
889 "from": "abbrev@1"
890 }
891 }
892 },
893 "mkdirp": {
894 "version": "0.3.5",
895 "from": "mkdirp@~0.3"
896 },
897 "difflet": {
898 "version": "0.2.3",
899 "from": "difflet@~0.2.0",
900 "dependencies": {
901 "traverse": {
902 "version": "0.6.3",
903 "from": "traverse@0.6.x"
904 },
905 "charm": {
906 "version": "0.0.8",
907 "from": "charm@0.0.x"
908 }
909 }
910 },
911 "deep-equal": {
912 "version": "0.0.0",
913 "from": "deep-equal@~0.0.0"
914 },
915 "buffer-equal": {
916 "version": "0.0.0",
917 "from": "buffer-equal@~0.0.0"
918 },
919 "glob": {
920 "version": "3.1.21",
921 "from": "glob@~3.1.14",
922 "dependencies": {
923 "graceful-fs": {
924 "version": "1.2.0",
925 "from": "graceful-fs@~1.2.0"
926 },
927 "inherits": {
928 "version": "1.0.0",
929 "from": "inherits@1"
930 }
931 }
932 }
933 }
934 }
935 }
936 },
937 "nopt": {
938 "version": "1.0.10",
939 "from": "nopt@~1.0.10",
940 "dependencies": {
941 "abbrev": {
942 "version": "1.0.4",
943 "from": "abbrev@1"
944 }
945 }
946 },
947 "prompt": {
948 "version": "0.1.12",
949 "from": "prompt@~0.1.12",
950 "dependencies": {
951 "pkginfo": {
952 "version": "0.3.0",
953 "from": "pkginfo@0.x.x"
954 },
955 "winston": {
956 "version": "0.5.11",
957 "from": "winston@0.5.x",
958 "dependencies": {
959 "eyes": {
960 "version": "0.1.8",
961 "from": "eyes@0.1.x"
962 },
963 "loggly": {
964 "version": "0.3.11",
965 "from": "loggly@0.3.x >=0.3.7",
966 "dependencies": {
967 "request": {
968 "version": "2.9.203",
969 "from": "request@2.9.x"
970 },
971 "timespan": {
972 "version": "2.2.0",
973 "from": "timespan@2.x.x"
974 }
975 }
976 },
977 "pkginfo": {
978 "version": "0.2.3",
979 "from": "pkginfo@0.2.x"
980 },
981 "stack-trace": {
982 "version": "0.0.6",
983 "from": "stack-trace@0.0.x"
984 }
985 }
986 }
987 }
988 },
989 "semver": {
990 "version": "1.0.14",
991 "from": "semver@~1.0.13"
992 },
993 "uglify-js": {
994 "version": "1.3.4",
995 "from": "uglify-js@~1.3.3"
996 },
997 "underscore": {
998 "version": "1.2.4",
999 "from": "underscore@~1.2.4"
1000 },
1001 "underscore.string": {
1002 "version": "2.1.1",
1003 "from": "underscore.string@~2.1.1"
1004 },
1005 "temporary": {
1006 "version": "0.0.5",
1007 "from": "temporary@~0.0.4",
1008 "dependencies": {
1009 "package": {
1010 "version": "1.0.1",
1011 "from": "package@>= 1.0.0 < 1.2.0"
1012 }
1013 }
1014 },
1015 "gzip-js": {
1016 "version": "0.3.1",
1017 "from": "gzip-js@~0.3.1",
1018 "dependencies": {
1019 "crc32": {
1020 "version": "0.2.2",
1021 "from": "crc32@>= 0.2.2"
1022 },
1023 "deflate-js": {
1024 "version": "0.2.2",
1025 "from": "deflate-js@>= 0.2.2"
1026 }
1027 }
1028 }
1029 }
1030 }
1031 }
1032}
01033
=== modified file 'package.json'
--- package.json 2013-04-08 11:13:07 +0000
+++ package.json 2013-04-15 10:53:24 +0000
@@ -1,22 +1,17 @@
1{1{
2 "author": "Juju Developers",2 "author": "Juju Developers",
3 "name": "juju-ui",3 "name": "juju-gui",
4 "description": "Juju GUI",4 "description": "Juju GUI build dependencies",
5 "version": "0.0.1",5 "version": "0.1.0",
6 "homepage": "http://launchpad.net/juju-ui",6 "homepage": "http://launchpad.net/juju-gui",
7 "repository": {7 "repository": {
8 "type": "bzr",8 "type": "bzr",
9 "url": "lp:juju-ui"9 "url": "lp:juju-gui"
10 },
11 "engines": {
12 "node": ">=0.10"
13 },10 },
14 "dependencies": {11 "dependencies": {
15 "cryptojs": ">= 2.5.3"12 "cryptojs": ">= 2.5.3",
16 },
17 "devDependencies": {
18 "d3": "<3.0.0",13 "d3": "<3.0.0",
19 "yui": "==3.9.1",14 "yui": "3.9.1",
20 "mocha": "1.8.x",15 "mocha": "1.8.x",
21 "express": "3.x",16 "express": "3.x",
22 "expect.js": "0.1.2",17 "expect.js": "0.1.2",
@@ -34,6 +29,5 @@
34 "grunt": "0.3.17",29 "grunt": "0.3.17",
35 "node-spritesheet": "0.4.0",30 "node-spritesheet": "0.4.0",
36 "node-minify": "0.7.x"31 "node-minify": "0.7.x"
37 },32 }
38 "optionalDependencies": {}
39}33}

Subscribers

People subscribed via source and target branches