mirror of
https://github.com/twbs/bootstrap.git
synced 2024-12-03 15:24:19 +01:00
Merge branch 'master' into docs_derp
This commit is contained in:
commit
6315043b1c
12
.travis.yml
12
.travis.yml
@ -2,15 +2,19 @@ language: node_js
|
|||||||
node_js:
|
node_js:
|
||||||
- 0.10
|
- 0.10
|
||||||
before_install:
|
before_install:
|
||||||
- time sudo pip install --use-mirrors -r ./test-infra/requirements.txt
|
- time sudo pip install --use-mirrors -r test-infra/requirements.txt
|
||||||
|
- rvm use 1.9.3 --fuzzy
|
||||||
|
- if [ "$TWBS_TEST" = validate-html ]; then echo "ruby=$(basename $(rvm gemdir)) jekyll=$JEKYLL_VERSION" > pseudo_Gemfile.lock; fi
|
||||||
install:
|
install:
|
||||||
- if [ "$TWBS_TEST" = validate-html ]; then time gem install jekyll; fi
|
|
||||||
- time npm install -g grunt-cli
|
- time npm install -g grunt-cli
|
||||||
- time ./test-infra/node_modules_cache.py download package.json ./node_modules || time npm install
|
- time ./test-infra/s3_cache.py download 'node.js packages' package.json ./node_modules || time npm install
|
||||||
|
- if [ "$TWBS_TEST" = validate-html ]; then time ./test-infra/s3_cache.py download rubygems pseudo_Gemfile.lock $(rvm gemdir) || gem install -N jekyll -v $JEKYLL_VERSION; fi
|
||||||
after_script:
|
after_script:
|
||||||
- if [ "$TWBS_TEST" = core ]; then time ./test-infra/node_modules_cache.py upload package.json ./node_modules; fi
|
- if [ "$TWBS_TEST" = core ]; then time ./test-infra/s3_cache.py upload 'node.js packages' package.json ./node_modules; fi
|
||||||
|
- if [ "$TWBS_TEST" = validate-html ]; then time ./test-infra/s3_cache.py upload rubygems pseudo_Gemfile.lock $(rvm gemdir); fi
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
|
- JEKYLL_VERSION: 1.4.1
|
||||||
- SAUCE_USERNAME: bootstrap
|
- SAUCE_USERNAME: bootstrap
|
||||||
- secure: "pJkBwnuae9dKU5tEcCqccfS1QQw7/meEcfz63fM7ba7QJNjoA6BaXj08L5Z3Vb5vBmVPwBawxo5Hp0jC0r/Z/O0hGnAmz/Cz09L+cy7dSAZ9x4hvZePSja/UAusaB5ogMoO8l2b773MzgQeSmrLbExr9BWLeqEfjC2hFgdgHLaQ="
|
- secure: "pJkBwnuae9dKU5tEcCqccfS1QQw7/meEcfz63fM7ba7QJNjoA6BaXj08L5Z3Vb5vBmVPwBawxo5Hp0jC0r/Z/O0hGnAmz/Cz09L+cy7dSAZ9x4hvZePSja/UAusaB5ogMoO8l2b773MzgQeSmrLbExr9BWLeqEfjC2hFgdgHLaQ="
|
||||||
- secure: "gqjqISbxBJK6byFbsmr1AyP1qoWH+rap06A2gI7v72+Tn2PU2nYkIMUkCvhZw6K889jv+LhQ/ybcBxDOXHpNCExCnSgB4dcnmYp+9oeNZb37jSP0rQ+Ib4OTLjzc3/FawE/fUq5kukZTC7porzc/k0qJNLAZRx3YLALmK1GIdUY="
|
- secure: "gqjqISbxBJK6byFbsmr1AyP1qoWH+rap06A2gI7v72+Tn2PU2nYkIMUkCvhZw6K889jv+LhQ/ybcBxDOXHpNCExCnSgB4dcnmYp+9oeNZb37jSP0rQ+Ib4OTLjzc3/FawE/fUq5kukZTC7porzc/k0qJNLAZRx3YLALmK1GIdUY="
|
||||||
|
86
Gruntfile.js
86
Gruntfile.js
@ -195,6 +195,7 @@ module.exports = function (grunt) {
|
|||||||
options: {
|
options: {
|
||||||
charset: 'utf-8',
|
charset: 'utf-8',
|
||||||
doctype: 'HTML5',
|
doctype: 'HTML5',
|
||||||
|
failHard: true,
|
||||||
reset: true,
|
reset: true,
|
||||||
relaxerror: [
|
relaxerror: [
|
||||||
'Bad value X-UA-Compatible for attribute http-equiv on element meta.',
|
'Bad value X-UA-Compatible for attribute http-equiv on element meta.',
|
||||||
@ -238,90 +239,7 @@ module.exports = function (grunt) {
|
|||||||
build: process.env.TRAVIS_JOB_ID,
|
build: process.env.TRAVIS_JOB_ID,
|
||||||
concurrency: 3,
|
concurrency: 3,
|
||||||
urls: ['http://127.0.0.1:3000/js/tests/index.html'],
|
urls: ['http://127.0.0.1:3000/js/tests/index.html'],
|
||||||
browsers: [
|
browsers: grunt.file.readYAML('sauce_browsers.yml')
|
||||||
// See https://saucelabs.com/docs/platforms/webdriver
|
|
||||||
{
|
|
||||||
browserName: 'safari',
|
|
||||||
version: '7',
|
|
||||||
platform: 'OS X 10.9'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'chrome',
|
|
||||||
version: '31',
|
|
||||||
platform: 'OS X 10.9'
|
|
||||||
},
|
|
||||||
/* FIXME: currently fails 1 tooltip test
|
|
||||||
{
|
|
||||||
browserName: 'firefox',
|
|
||||||
version: '25',
|
|
||||||
platform: 'OS X 10.6'
|
|
||||||
},*/
|
|
||||||
// Mac Opera not currently supported by Sauce Labs
|
|
||||||
/* FIXME: currently fails 1 tooltip test
|
|
||||||
{
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '11',
|
|
||||||
platform: 'Windows 8.1'
|
|
||||||
},*/
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '10',
|
|
||||||
platform: 'Windows 8'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '9',
|
|
||||||
platform: 'Windows 7'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '8',
|
|
||||||
platform: 'Windows 7'
|
|
||||||
},
|
|
||||||
{// unofficial
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '7',
|
|
||||||
platform: 'Windows XP'
|
|
||||||
},
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
browserName: 'chrome',
|
|
||||||
version: '31',
|
|
||||||
platform: 'Windows 8.1'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'firefox',
|
|
||||||
version: '25',
|
|
||||||
platform: 'Windows 8.1'
|
|
||||||
},
|
|
||||||
// Win Opera 15+ not currently supported by Sauce Labs
|
|
||||||
{
|
|
||||||
browserName: 'iphone',
|
|
||||||
version: '6.1',
|
|
||||||
platform: 'OS X 10.8'
|
|
||||||
},
|
|
||||||
// iOS Chrome not currently supported by Sauce Labs
|
|
||||||
// Linux (unofficial)
|
|
||||||
{
|
|
||||||
browserName: 'chrome',
|
|
||||||
version: '30',
|
|
||||||
platform: 'Linux'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'firefox',
|
|
||||||
version: '25',
|
|
||||||
platform: 'Linux'
|
|
||||||
}
|
|
||||||
// Android Chrome not currently supported by Sauce Labs
|
|
||||||
/* Android Browser (super-unofficial)
|
|
||||||
{
|
|
||||||
browserName: 'android',
|
|
||||||
version: '4.0',
|
|
||||||
platform: 'Linux'
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#browsers">Browser and device support</a>
|
<a href="#support">Browser and device support</a>
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li><a href="#support-browsers">Supported browsers</a></li>
|
<li><a href="#support-browsers">Supported browsers</a></li>
|
||||||
<li><a href="#support-ie8-ie9">Internet Explorer 8-9</a></li>
|
<li><a href="#support-ie8-ie9">Internet Explorer 8-9</a></li>
|
||||||
|
@ -1372,7 +1372,7 @@ base_url: "../"
|
|||||||
|
|
||||||
<h2 id="navbar-forms">Forms</h2>
|
<h2 id="navbar-forms">Forms</h2>
|
||||||
<p>Place form content within <code>.navbar-form</code> for proper vertical alignment and collapsed behavior in narrow viewports. Use the alignment options to decide where it resides within the navbar content.</p>
|
<p>Place form content within <code>.navbar-form</code> for proper vertical alignment and collapsed behavior in narrow viewports. Use the alignment options to decide where it resides within the navbar content.</p>
|
||||||
<p>As a heads up, <code>.navbar-form</code> shares much of its code with <code>.form-inline</code> via mixin.</p>
|
<p>As a heads up, <code>.navbar-form</code> shares much of its code with <code>.form-inline</code> via mixin. <strong class="text-danger">Some form controls, like input groups, may require fixed widths to be show up properly within a navbar.</strong></p>
|
||||||
<div class="bs-example">
|
<div class="bs-example">
|
||||||
<nav class="navbar navbar-default" role="navigation">
|
<nav class="navbar navbar-default" role="navigation">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
|
40
dist/css/bootstrap.css
vendored
40
dist/css/bootstrap.css
vendored
@ -378,31 +378,49 @@ h6 .small,
|
|||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
h1,
|
h1,
|
||||||
|
.h1,
|
||||||
h2,
|
h2,
|
||||||
h3 {
|
.h2,
|
||||||
|
h3,
|
||||||
|
.h3 {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
h1 small,
|
h1 small,
|
||||||
|
.h1 small,
|
||||||
h2 small,
|
h2 small,
|
||||||
|
.h2 small,
|
||||||
h3 small,
|
h3 small,
|
||||||
|
.h3 small,
|
||||||
h1 .small,
|
h1 .small,
|
||||||
|
.h1 .small,
|
||||||
h2 .small,
|
h2 .small,
|
||||||
h3 .small {
|
.h2 .small,
|
||||||
|
h3 .small,
|
||||||
|
.h3 .small {
|
||||||
font-size: 65%;
|
font-size: 65%;
|
||||||
}
|
}
|
||||||
h4,
|
h4,
|
||||||
|
.h4,
|
||||||
h5,
|
h5,
|
||||||
h6 {
|
.h5,
|
||||||
|
h6,
|
||||||
|
.h6 {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
h4 small,
|
h4 small,
|
||||||
|
.h4 small,
|
||||||
h5 small,
|
h5 small,
|
||||||
|
.h5 small,
|
||||||
h6 small,
|
h6 small,
|
||||||
|
.h6 small,
|
||||||
h4 .small,
|
h4 .small,
|
||||||
|
.h4 .small,
|
||||||
h5 .small,
|
h5 .small,
|
||||||
h6 .small {
|
.h5 .small,
|
||||||
|
h6 .small,
|
||||||
|
.h6 .small {
|
||||||
font-size: 75%;
|
font-size: 75%;
|
||||||
}
|
}
|
||||||
h1,
|
h1,
|
||||||
@ -3361,8 +3379,10 @@ textarea.input-group-sm > .input-group-btn > .btn {
|
|||||||
.input-group .form-control:first-child,
|
.input-group .form-control:first-child,
|
||||||
.input-group-addon:first-child,
|
.input-group-addon:first-child,
|
||||||
.input-group-btn:first-child > .btn,
|
.input-group-btn:first-child > .btn,
|
||||||
|
.input-group-btn:first-child > .btn-group > .btn,
|
||||||
.input-group-btn:first-child > .dropdown-toggle,
|
.input-group-btn:first-child > .dropdown-toggle,
|
||||||
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
|
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
|
||||||
|
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
|
||||||
border-top-right-radius: 0;
|
border-top-right-radius: 0;
|
||||||
border-bottom-right-radius: 0;
|
border-bottom-right-radius: 0;
|
||||||
}
|
}
|
||||||
@ -3372,8 +3392,10 @@ textarea.input-group-sm > .input-group-btn > .btn {
|
|||||||
.input-group .form-control:last-child,
|
.input-group .form-control:last-child,
|
||||||
.input-group-addon:last-child,
|
.input-group-addon:last-child,
|
||||||
.input-group-btn:last-child > .btn,
|
.input-group-btn:last-child > .btn,
|
||||||
|
.input-group-btn:last-child > .btn-group > .btn,
|
||||||
.input-group-btn:last-child > .dropdown-toggle,
|
.input-group-btn:last-child > .dropdown-toggle,
|
||||||
.input-group-btn:first-child > .btn:not(:first-child) {
|
.input-group-btn:first-child > .btn:not(:first-child),
|
||||||
|
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
|
||||||
border-top-left-radius: 0;
|
border-top-left-radius: 0;
|
||||||
border-bottom-left-radius: 0;
|
border-bottom-left-radius: 0;
|
||||||
}
|
}
|
||||||
@ -3396,10 +3418,12 @@ textarea.input-group-sm > .input-group-btn > .btn {
|
|||||||
.input-group-btn > .btn:active {
|
.input-group-btn > .btn:active {
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
.input-group-btn:first-child > .btn {
|
.input-group-btn:first-child > .btn,
|
||||||
|
.input-group-btn:first-child > .btn-group {
|
||||||
margin-right: -1px;
|
margin-right: -1px;
|
||||||
}
|
}
|
||||||
.input-group-btn:last-child > .btn {
|
.input-group-btn:last-child > .btn,
|
||||||
|
.input-group-btn:last-child > .btn-group {
|
||||||
margin-left: -1px;
|
margin-left: -1px;
|
||||||
}
|
}
|
||||||
.nav {
|
.nav {
|
||||||
|
2
dist/css/bootstrap.min.css
vendored
2
dist/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
@ -40,6 +40,7 @@ body {
|
|||||||
.site-wrapper {
|
.site-wrapper {
|
||||||
display: table;
|
display: table;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%; /* For at leat Firefox */
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
}
|
}
|
||||||
.site-wrapper-inner {
|
.site-wrapper-inner {
|
||||||
|
@ -95,8 +95,10 @@
|
|||||||
.input-group .form-control:first-child,
|
.input-group .form-control:first-child,
|
||||||
.input-group-addon:first-child,
|
.input-group-addon:first-child,
|
||||||
.input-group-btn:first-child > .btn,
|
.input-group-btn:first-child > .btn,
|
||||||
|
.input-group-btn:first-child > .btn-group > .btn,
|
||||||
.input-group-btn:first-child > .dropdown-toggle,
|
.input-group-btn:first-child > .dropdown-toggle,
|
||||||
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
|
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
|
||||||
|
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
|
||||||
.border-right-radius(0);
|
.border-right-radius(0);
|
||||||
}
|
}
|
||||||
.input-group-addon:first-child {
|
.input-group-addon:first-child {
|
||||||
@ -105,8 +107,10 @@
|
|||||||
.input-group .form-control:last-child,
|
.input-group .form-control:last-child,
|
||||||
.input-group-addon:last-child,
|
.input-group-addon:last-child,
|
||||||
.input-group-btn:last-child > .btn,
|
.input-group-btn:last-child > .btn,
|
||||||
|
.input-group-btn:last-child > .btn-group > .btn,
|
||||||
.input-group-btn:last-child > .dropdown-toggle,
|
.input-group-btn:last-child > .dropdown-toggle,
|
||||||
.input-group-btn:first-child > .btn:not(:first-child) {
|
.input-group-btn:first-child > .btn:not(:first-child),
|
||||||
|
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
|
||||||
.border-left-radius(0);
|
.border-left-radius(0);
|
||||||
}
|
}
|
||||||
.input-group-addon:last-child {
|
.input-group-addon:last-child {
|
||||||
@ -138,10 +142,16 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Negative margin to only have a 1px border between the two
|
// Negative margin to only have a 1px border between the two
|
||||||
&:first-child > .btn {
|
&:first-child {
|
||||||
margin-right: -1px;
|
> .btn,
|
||||||
|
> .btn-group {
|
||||||
|
margin-right: -1px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
&:last-child > .btn {
|
&:last-child {
|
||||||
margin-left: -1px;
|
> .btn,
|
||||||
|
> .btn-group {
|
||||||
|
margin-left: -1px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,9 @@ h1, h2, h3, h4, h5, h6,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h1,
|
h1, .h1,
|
||||||
h2,
|
h2, .h2,
|
||||||
h3 {
|
h3, .h3 {
|
||||||
margin-top: @line-height-computed;
|
margin-top: @line-height-computed;
|
||||||
margin-bottom: (@line-height-computed / 2);
|
margin-bottom: (@line-height-computed / 2);
|
||||||
|
|
||||||
@ -32,9 +32,9 @@ h3 {
|
|||||||
font-size: 65%;
|
font-size: 65%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
h4,
|
h4, .h4,
|
||||||
h5,
|
h5, .h5,
|
||||||
h6 {
|
h6, .h6 {
|
||||||
margin-top: (@line-height-computed / 2);
|
margin-top: (@line-height-computed / 2);
|
||||||
margin-bottom: (@line-height-computed / 2);
|
margin-bottom: (@line-height-computed / 2);
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
"grunt-contrib-uglify": "~0.2.4",
|
"grunt-contrib-uglify": "~0.2.4",
|
||||||
"grunt-contrib-watch": "~0.5.3",
|
"grunt-contrib-watch": "~0.5.3",
|
||||||
"grunt-csscomb": "~1.1.0",
|
"grunt-csscomb": "~1.1.0",
|
||||||
"grunt-html-validation": "~0.1.6",
|
"grunt-html-validation": "~0.1.11",
|
||||||
"grunt-jekyll": "~0.4.0",
|
"grunt-jekyll": "~0.4.0",
|
||||||
"grunt-jscs-checker": "~0.2.5",
|
"grunt-jscs-checker": "~0.2.5",
|
||||||
"grunt-saucelabs": "~4.1.2",
|
"grunt-saucelabs": "~4.1.2",
|
||||||
|
91
sauce_browsers.yml
Normal file
91
sauce_browsers.yml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
[
|
||||||
|
# Docs: https://saucelabs.com/docs/platforms/webdriver
|
||||||
|
|
||||||
|
{
|
||||||
|
browserName: "safari",
|
||||||
|
version: "6",
|
||||||
|
platform: "OS X 10.8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
browserName: "chrome",
|
||||||
|
version: "31",
|
||||||
|
platform: "OS X 10.9"
|
||||||
|
},
|
||||||
|
|
||||||
|
# { # FIXME: currently fails 1 tooltip test
|
||||||
|
# browserName: "firefox",
|
||||||
|
# version: "25",
|
||||||
|
# platform: "OS X 10.6"
|
||||||
|
# },
|
||||||
|
|
||||||
|
# Mac Opera not currently supported by Sauce Labs
|
||||||
|
|
||||||
|
# { # FIXME: currently fails 1 tooltip test
|
||||||
|
# browserName: "internet explorer",
|
||||||
|
# version: "11",
|
||||||
|
# platform: "Windows 8.1"
|
||||||
|
# },
|
||||||
|
|
||||||
|
# {
|
||||||
|
# browserName: "internet explorer",
|
||||||
|
# version: "10",
|
||||||
|
# platform: "Windows 8"
|
||||||
|
# },
|
||||||
|
# {
|
||||||
|
# browserName: "internet explorer",
|
||||||
|
# version: "9",
|
||||||
|
# platform: "Windows 7"
|
||||||
|
# },
|
||||||
|
# {
|
||||||
|
# browserName: "internet explorer",
|
||||||
|
# version: "8",
|
||||||
|
# platform: "Windows 7"
|
||||||
|
# },
|
||||||
|
|
||||||
|
# { # Unofficial
|
||||||
|
# browserName: "internet explorer",
|
||||||
|
# version: "7",
|
||||||
|
# platform: "Windows XP"
|
||||||
|
# },
|
||||||
|
|
||||||
|
{
|
||||||
|
browserName: "chrome",
|
||||||
|
version: "31",
|
||||||
|
platform: "Windows 8.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
browserName: "firefox",
|
||||||
|
version: "25",
|
||||||
|
platform: "Windows 8.1"
|
||||||
|
},
|
||||||
|
|
||||||
|
# Win Opera 15+ not currently supported by Sauce Labs
|
||||||
|
|
||||||
|
{
|
||||||
|
browserName: "iphone",
|
||||||
|
version: "6.1",
|
||||||
|
platform: "OS X 10.8"
|
||||||
|
},
|
||||||
|
|
||||||
|
# iOS Chrome not currently supported by Sauce Labs
|
||||||
|
|
||||||
|
# Linux (unofficial):
|
||||||
|
{
|
||||||
|
browserName: "chrome",
|
||||||
|
version: "30",
|
||||||
|
platform: "Linux"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
browserName: "firefox",
|
||||||
|
version: "25",
|
||||||
|
platform: "Linux"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Android Chrome not currently supported by Sauce Labs
|
||||||
|
|
||||||
|
# { # Android Browser (super-unofficial)
|
||||||
|
# browserName: "android",
|
||||||
|
# version: "4.0",
|
||||||
|
# platform: "Linux"
|
||||||
|
# }
|
||||||
|
]
|
@ -58,22 +58,22 @@ def _extract_tarball(directory):
|
|||||||
def download(directory):
|
def download(directory):
|
||||||
_delete_file_quietly(NEED_TO_UPLOAD_MARKER)
|
_delete_file_quietly(NEED_TO_UPLOAD_MARKER)
|
||||||
try:
|
try:
|
||||||
print("Downloading {} tarball from S3...".format(basename(directory)))
|
print("Downloading {} tarball from S3...".format(friendly_name))
|
||||||
key.get_contents_to_filename(_tarball_filename_for(directory))
|
key.get_contents_to_filename(_tarball_filename_for(directory))
|
||||||
except S3ResponseError as err:
|
except S3ResponseError as err:
|
||||||
open(NEED_TO_UPLOAD_MARKER, 'a').close()
|
open(NEED_TO_UPLOAD_MARKER, 'a').close()
|
||||||
print(err)
|
print(err)
|
||||||
raise SystemExit("Cached {} download failed!".format(basename(directory)))
|
raise SystemExit("Cached {} download failed!".format(friendly_name))
|
||||||
print("Downloaded {}.".format(_tarball_size(directory)))
|
print("Downloaded {}.".format(_tarball_size(directory)))
|
||||||
_extract_tarball(directory)
|
_extract_tarball(directory)
|
||||||
print("{} successfully installed from cache.".format(directory))
|
print("{} successfully installed from cache.".format(friendly_name))
|
||||||
|
|
||||||
|
|
||||||
def upload(directory):
|
def upload(directory):
|
||||||
_create_tarball(directory)
|
_create_tarball(directory)
|
||||||
print("Uploading {} tarball to S3... ({})".format(basename(directory), _tarball_size(directory)))
|
print("Uploading {} tarball to S3... ({})".format(friendly_name, _tarball_size(directory)))
|
||||||
key.set_contents_from_filename(_tarball_filename_for(directory))
|
key.set_contents_from_filename(_tarball_filename_for(directory))
|
||||||
print("{} cache successfully updated.".format(directory))
|
print("{} cache successfully updated.".format(friendly_name))
|
||||||
_delete_file_quietly(NEED_TO_UPLOAD_MARKER)
|
_delete_file_quietly(NEED_TO_UPLOAD_MARKER)
|
||||||
|
|
||||||
|
|
||||||
@ -82,9 +82,9 @@ if __name__ == '__main__':
|
|||||||
# AWS_ACCESS_KEY_ID - AWS Access Key ID
|
# AWS_ACCESS_KEY_ID - AWS Access Key ID
|
||||||
# AWS_SECRET_ACCESS_KEY - AWS Secret Access Key
|
# AWS_SECRET_ACCESS_KEY - AWS Secret Access Key
|
||||||
argv.pop(0)
|
argv.pop(0)
|
||||||
if len(argv) != 3:
|
if len(argv) != 4:
|
||||||
raise SystemExit("USAGE: node_modules_cache.py <download | upload> <dependencies file> <directory>")
|
raise SystemExit("USAGE: node_modules_cache.py <download | upload> <friendly name> <dependencies file> <directory>")
|
||||||
mode, dependencies_file, directory = argv
|
mode, friendly_name, dependencies_file, directory = argv
|
||||||
|
|
||||||
conn = S3Connection()
|
conn = S3Connection()
|
||||||
bucket = conn.lookup(BUCKET_NAME)
|
bucket = conn.lookup(BUCKET_NAME)
|
Loading…
Reference in New Issue
Block a user