vagrantup 0.8.7 → 0.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +21 -0
  3. data/CHANGELOG.md +25 -0
  4. data/README.md +38 -8
  5. data/Rakefile +13 -6
  6. data/bin/vagrant +6 -1
  7. data/config/default.rb +2 -2
  8. data/lib/vagrant/action/box/download.rb +14 -2
  9. data/lib/vagrant/action/vm/check_box.rb +8 -1
  10. data/lib/vagrant/action/vm/check_guest_additions.rb +6 -3
  11. data/lib/vagrant/action/vm/share_folders.rb +12 -1
  12. data/lib/vagrant/command/init.rb +1 -1
  13. data/lib/vagrant/downloaders/http.rb +29 -2
  14. data/lib/vagrant/hosts.rb +1 -0
  15. data/lib/vagrant/hosts/bsd.rb +1 -0
  16. data/lib/vagrant/hosts/freebsd.rb +51 -0
  17. data/lib/vagrant/provisioners/chef.rb +6 -5
  18. data/lib/vagrant/provisioners/chef_client.rb +1 -1
  19. data/lib/vagrant/provisioners/chef_solo.rb +13 -4
  20. data/lib/vagrant/ssh.rb +24 -49
  21. data/lib/vagrant/ssh/session.rb +1 -1
  22. data/lib/vagrant/systems/solaris.rb +57 -11
  23. data/lib/vagrant/test_helpers.rb +23 -0
  24. data/lib/vagrant/ui.rb +1 -1
  25. data/lib/vagrant/util.rb +0 -1
  26. data/lib/vagrant/util/file_checksum.rb +38 -0
  27. data/lib/vagrant/util/platform.rb +1 -1
  28. data/lib/vagrant/util/safe_exec.rb +2 -1
  29. data/lib/vagrant/version.rb +1 -1
  30. data/tasks/acceptance.rake +113 -0
  31. data/tasks/bundler.rake +3 -0
  32. data/tasks/test.rake +15 -0
  33. data/templates/commands/init/Vagrantfile.erb +3 -0
  34. data/templates/locales/en.yml +1 -1
  35. data/test/acceptance/base.rb +48 -0
  36. data/test/acceptance/box_test.rb +77 -0
  37. data/test/acceptance/destroy_test.rb +37 -0
  38. data/test/acceptance/halt_test.rb +72 -0
  39. data/test/acceptance/init_test.rb +33 -0
  40. data/test/acceptance/resume_test.rb +17 -0
  41. data/test/acceptance/ssh_test.rb +41 -0
  42. data/test/acceptance/support/config.rb +42 -0
  43. data/test/acceptance/support/isolated_environment.rb +226 -0
  44. data/test/acceptance/support/matchers/have_color.rb +9 -0
  45. data/test/acceptance/support/matchers/match_output.rb +14 -0
  46. data/test/acceptance/support/output.rb +87 -0
  47. data/test/acceptance/support/shared/base_context.rb +65 -0
  48. data/test/acceptance/support/shared/command_examples.rb +33 -0
  49. data/test/acceptance/support/tempdir.rb +34 -0
  50. data/test/acceptance/support/virtualbox.rb +36 -0
  51. data/test/acceptance/suspend_test.rb +56 -0
  52. data/test/acceptance/up_basic_test.rb +58 -0
  53. data/test/acceptance/up_with_box_url.rb +40 -0
  54. data/test/acceptance/vagrant_test.rb +47 -0
  55. data/test/acceptance/version_test.rb +20 -0
  56. data/test/buildbot/README.md +72 -0
  57. data/test/buildbot/buildbot_config/__init__.py +0 -0
  58. data/test/buildbot/buildbot_config/config/__init__.py +0 -0
  59. data/test/buildbot/buildbot_config/config/loader.py +24 -0
  60. data/test/buildbot/buildbot_config/config/master.py +24 -0
  61. data/test/buildbot/buildbot_config/config/slave.py +22 -0
  62. data/test/buildbot/buildbot_config/master/__init__.py +6 -0
  63. data/test/buildbot/buildbot_config/master/builders.py +78 -0
  64. data/test/buildbot/buildbot_config/master/buildsteps.py +100 -0
  65. data/test/buildbot/buildbot_config/master/change_sources.py +8 -0
  66. data/test/buildbot/buildbot_config/master/schedulers.py +32 -0
  67. data/test/buildbot/buildbot_config/master/slaves.py +60 -0
  68. data/test/buildbot/buildbot_config/master/status.py +52 -0
  69. data/test/buildbot/master/Makefile.sample +28 -0
  70. data/test/buildbot/master/buildbot.tac +36 -0
  71. data/test/buildbot/master/master.cfg +67 -0
  72. data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
  73. data/test/buildbot/master/public_html/default.css +545 -0
  74. data/test/buildbot/master/public_html/favicon.ico +0 -0
  75. data/test/buildbot/master/public_html/robots.txt +10 -0
  76. data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +356 -0
  77. data/test/buildbot/master/public_html/static/css/prettify.css +97 -0
  78. data/test/buildbot/master/public_html/static/css/syntax.css +60 -0
  79. data/test/buildbot/master/public_html/static/css/vagrant.base.css +205 -0
  80. data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
  81. data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
  82. data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
  83. data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
  84. data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
  85. data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
  86. data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
  87. data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
  88. data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
  89. data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
  90. data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
  91. data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
  92. data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
  93. data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
  94. data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +80 -0
  95. data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +4 -0
  96. data/test/buildbot/master/templates/authfail.html +9 -0
  97. data/test/buildbot/master/templates/build.html +205 -0
  98. data/test/buildbot/master/templates/builder.html +118 -0
  99. data/test/buildbot/master/templates/builders.html +33 -0
  100. data/test/buildbot/master/templates/buildslave.html +72 -0
  101. data/test/buildbot/master/templates/buildslaves.html +70 -0
  102. data/test/buildbot/master/templates/change.html +15 -0
  103. data/test/buildbot/master/templates/layouts/base.html +58 -0
  104. data/test/buildbot/master/templates/macros/box.html +37 -0
  105. data/test/buildbot/master/templates/macros/build_line.html +50 -0
  106. data/test/buildbot/master/templates/macros/change.html +81 -0
  107. data/test/buildbot/master/templates/macros/forms.html +300 -0
  108. data/test/buildbot/master/templates/root.html +42 -0
  109. data/test/buildbot/master/templates/waterfall.html +53 -0
  110. data/test/buildbot/requirements.txt +4 -0
  111. data/test/buildbot/scripts/deploy.sh +38 -0
  112. data/test/buildbot/scripts/setup.sh +107 -0
  113. data/test/buildbot/slave/buildbot.tac +43 -0
  114. data/test/buildbot/slave/info/admin +1 -0
  115. data/test/buildbot/slave/info/host +1 -0
  116. data/test/buildbot/tests/__init__.py +0 -0
  117. data/test/buildbot/tests/master/__init__.py +0 -0
  118. data/test/buildbot/tests/master/test_slaves.py +41 -0
  119. data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
  120. data/test/config/acceptance_boxes.yml +7 -0
  121. data/test/unit/test_helper.rb +4 -0
  122. data/test/unit/vagrant/action/box/download_test.rb +2 -2
  123. data/test/unit/vagrant/action/vm/check_box_test.rb +6 -1
  124. data/test/unit/vagrant/action/vm/share_folders_test.rb +1 -1
  125. data/test/unit/vagrant/command/init_test.rb +10 -0
  126. data/test/unit/vagrant/downloaders/http_test.rb +12 -1
  127. data/test/unit/vagrant/provisioners/chef_test.rb +7 -0
  128. data/test/unit/vagrant/ssh/session_test.rb +2 -2
  129. data/test/unit/vagrant/ssh_test.rb +5 -8
  130. data/vagrant.gemspec +6 -0
  131. metadata +177 -1
@@ -0,0 +1,52 @@
1
+ """
2
+ This module returns the given status handlers to enable for the
3
+ buildbot master.
4
+ """
5
+
6
+ from buildbot.status import html, words
7
+ from buildbot.status.web.authz import Authz
8
+ from buildbot.status.web.auth import BasicAuth
9
+
10
+ def get_status(options):
11
+ """
12
+ Returns a list of status targets for the build master.
13
+ """
14
+ # Load the users that are allowed to perform authenticated
15
+ # actions from the configuration
16
+ auth_users = []
17
+ if options.http_users is not None:
18
+ for pair in options.http_users.split(","):
19
+ user, password = pair.split(":")
20
+ auth_users.append((user, password))
21
+
22
+ # Setup the rules for who can do what to the WebStatus
23
+ authz = Authz(
24
+ auth = BasicAuth(auth_users),
25
+ gracefulShutdown = False,
26
+ forceBuild = 'auth',
27
+ forceAllBuilds = 'auth',
28
+ pingBuilder = True,
29
+ stopBuild = 'auth',
30
+ stopAllBuilds = 'auth',
31
+ cancelPendingBuild = 'auth',
32
+ stopChange = 'auth',
33
+ cleanShutdown= False
34
+ )
35
+
36
+ # The web status gives us the nice web interface to our buildbot
37
+ web_status = html.WebStatus(
38
+ http_port = options.web_port,
39
+ authz = authz,
40
+ order_console_by_time = True,
41
+ change_hook_dialects=dict(github=True)
42
+ )
43
+
44
+ # Hook up an IRC bot into our channel
45
+ irc = words.IRC("irc.freenode.net", "vagrant-ci",
46
+ channels=[{"channel": "#vagrant"}],
47
+ notify_events={
48
+ 'exception': 1,
49
+ 'successToFailure': 1,
50
+ 'failureToSuccess': 1})
51
+
52
+ return [web_status, irc]
@@ -0,0 +1,28 @@
1
+ # -*- makefile -*-
2
+
3
+ # This is a simple makefile which lives in a buildmaster
4
+ # directory (next to the buildbot.tac file). It allows you to start/stop the
5
+ # master by doing 'make start' or 'make stop'.
6
+
7
+ # The 'reconfig' target will tell a buildmaster to reload its config file.
8
+
9
+ start:
10
+ twistd --no_save -y buildbot.tac
11
+
12
+ stop:
13
+ if [ -e twistd.pid ]; \
14
+ then kill `cat twistd.pid`; \
15
+ else echo "Nothing to stop."; \
16
+ fi
17
+
18
+ reconfig:
19
+ if [ -e twistd.pid ]; \
20
+ then kill -HUP `cat twistd.pid`; \
21
+ else echo "Nothing to reconfig."; \
22
+ fi
23
+
24
+ log:
25
+ if [ -e twistd.log ]; \
26
+ then tail -f twistd.log; \
27
+ else echo "Nothing to tail."; \
28
+ fi
@@ -0,0 +1,36 @@
1
+
2
+ import os
3
+
4
+ from twisted.application import service
5
+ from buildbot.master import BuildMaster
6
+
7
+ basedir = r'.'
8
+ rotateLength = 10000000
9
+ maxRotatedFiles = 10
10
+
11
+ # if this is a relocatable tac file, get the directory containing the TAC
12
+ if basedir == '.':
13
+ import os.path
14
+ basedir = os.path.abspath(os.path.dirname(__file__))
15
+
16
+ # note: this line is matched against to check that this is a buildmaster
17
+ # directory; do not edit it.
18
+ application = service.Application('buildmaster')
19
+
20
+ try:
21
+ from twisted.python.logfile import LogFile
22
+ from twisted.python.log import ILogObserver, FileLogObserver
23
+ logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength,
24
+ maxRotatedFiles=maxRotatedFiles)
25
+ application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
26
+ except ImportError:
27
+ # probably not yet twisted 8.2.0 and beyond, can't set log yet
28
+ pass
29
+
30
+ configfile = r'master.cfg'
31
+
32
+ m = BuildMaster(basedir, configfile)
33
+ m.setServiceParent(application)
34
+ m.log_rotation.rotateLength = rotateLength
35
+ m.log_rotation.maxRotatedFiles = maxRotatedFiles
36
+
@@ -0,0 +1,67 @@
1
+ # -*- python -*-
2
+ # ex: set syntax=python:
3
+
4
+ from buildbot_config.config.master import options
5
+ from buildbot_config.master import (
6
+ get_builders,
7
+ get_change_sources,
8
+ get_schedulers,
9
+ get_slaves_from_config,
10
+ get_status)
11
+
12
+ # This is the special key that Buildbot looks for. We use
13
+ # an alias to ``c`` to save us a lot of typing.
14
+ c = BuildmasterConfig = {}
15
+
16
+ #----------------------------------------------------------------------
17
+ # Project Identity and Basic Configuration
18
+ #----------------------------------------------------------------------
19
+ # Title and URL of project
20
+ c['title'] = options.title
21
+ c['titleURL'] = options.title_url
22
+
23
+ # URL to the actual buildbot installation
24
+ c['buildbotURL'] = options.buildbot_url
25
+
26
+ # This specifies what database buildbot uses to store change and scheduler
27
+ # state. You can leave this at its default for all but the largest
28
+ # installations.
29
+ c['db_url'] = "sqlite:///state.sqlite"
30
+
31
+ #----------------------------------------------------------------------
32
+ # Data Storage and Caching
33
+ #----------------------------------------------------------------------
34
+ # Time horizons. These specify the number of items that are kept
35
+ # persisted on disk before being pruned away. See the buildbot
36
+ # documentation for more information on each horizon setting.
37
+ c['changeHorizon'] = 0
38
+ c['buildHorizon'] = 0
39
+ c['eventHorizon'] = 0
40
+ c['logHorizon'] = 0
41
+
42
+ # Cache sizes. These are the number of the respective objects to
43
+ # hold in memory while buildbot is running. By default buildbot
44
+ # only stores 1, so all the numbers are greatly increased.
45
+ c['caches'] = {
46
+ 'Changes' : 100,
47
+ 'chdicts' : 100,
48
+ 'BuildRequests' : 10,
49
+ 'SourceStamps' : 20,
50
+ 'ssdicts' : 20,
51
+ 'objectids' : 10,
52
+ 'usdicts' : 100,
53
+ }
54
+ c['buildCacheSize'] = 500
55
+
56
+ #----------------------------------------------------------------------
57
+ # Build Slaves
58
+ #----------------------------------------------------------------------
59
+ # The port that the buildmaster listens for buildslaves on.
60
+ c['slavePortnum'] = 9989
61
+
62
+ # The actual list of slave machines we have.
63
+ c['slaves'] = get_slaves_from_config(options.slaves)
64
+ c['status'] = get_status(options)
65
+ c['builders'] = get_builders(c['slaves'])
66
+ c['schedulers'] = get_schedulers(c['builders'])
67
+ c['change_source'] = get_change_sources()
@@ -0,0 +1,545 @@
1
+ body.interface {
2
+ margin-left: 30px;
3
+ margin-right: 30px;
4
+ margin-top: 20px;
5
+ margin-bottom: 50px;
6
+ padding: 0;
7
+ background: url(bg_gradient.jpg) repeat-x;
8
+ font-family: Verdana, sans-serif;
9
+ font-size: 10px;
10
+ background-color: #fff;
11
+ color: #333;
12
+ }
13
+
14
+ a:link,a:visited,a:active {
15
+ color: #444;
16
+ }
17
+
18
+ table {
19
+ border-spacing: 1px 1px;
20
+ }
21
+
22
+ table td {
23
+ padding: 3px 4px 3px 4px;
24
+ text-align: center;
25
+ }
26
+
27
+ .Project {
28
+ min-width: 6em;
29
+ }
30
+
31
+ .LastBuild,.Activity {
32
+ padding: 0 0 0 4px;
33
+ }
34
+
35
+ .LastBuild,.Activity,.Builder,.BuildStep {
36
+ min-width: 5em;
37
+ }
38
+
39
+ /* Chromium Specific styles */
40
+ div.BuildResultInfo {
41
+ color: #444;
42
+ }
43
+
44
+ div.Announcement {
45
+ margin-bottom: 1em;
46
+ }
47
+
48
+ div.Announcement>a:hover {
49
+ color: black;
50
+ }
51
+
52
+ div.Announcement>div.Notice {
53
+ background-color: #afdaff;
54
+ padding: 0.5em;
55
+ font-size: 16px;
56
+ text-align: center;
57
+ }
58
+
59
+ div.Announcement>div.Open {
60
+ border: 3px solid #8fdf5f;
61
+ padding: 0.5em;
62
+ font-size: 16px;
63
+ text-align: center;
64
+ }
65
+
66
+ div.Announcement>div.Closed {
67
+ border: 5px solid #e98080;
68
+ padding: 0.5em;
69
+ font-size: 24px;
70
+ font-weight: bold;
71
+ text-align: center;
72
+ }
73
+
74
+ td.Time {
75
+ color: #000;
76
+ border-bottom: 1px solid #aaa;
77
+ background-color: #eee;
78
+ }
79
+
80
+ td.Activity,td.Change,td.Builder {
81
+ color: #333333;
82
+ background-color: #CCCCCC;
83
+ }
84
+
85
+ td.Change {
86
+ border-radius: 5px;
87
+ -webkit-border-radius: 5px;
88
+ -moz-border-radius: 5px;
89
+ }
90
+
91
+ td.Event {
92
+ color: #777;
93
+ background-color: #ddd;
94
+ border-radius: 5px;
95
+ -webkit-border-radius: 5px;
96
+ -moz-border-radius: 5px;
97
+ }
98
+
99
+ td.Activity {
100
+ border-top-left-radius: 10px;
101
+ -webkit-border-top-left-radius: 10px;
102
+ -moz-border-radius-topleft: 10px;
103
+ min-height: 20px;
104
+ padding: 2px 0 2px 0;
105
+ }
106
+
107
+ td.idle,td.waiting,td.offline,td.building {
108
+ border-top-left-radius: 0px;
109
+ -webkit-border-top-left-radius: 0px;
110
+ -moz-border-radius-topleft: 0px;
111
+ }
112
+
113
+ .LastBuild {
114
+ border-top-left-radius: 5px;
115
+ -webkit-border-top-left-radius: 5px;
116
+ -moz-border-radius-topleft: 5px;
117
+ border-top-right-radius: 5px;
118
+ -webkit-border-top-right-radius: 5px;
119
+ -moz-border-radius-topright: 5px;
120
+ }
121
+
122
+ /* Console view styles */
123
+ td.DevRev {
124
+ padding: 4px 8px 4px 8px;
125
+ color: #333333;
126
+ border-top-left-radius: 5px;
127
+ -webkit-border-top-left-radius: 5px;
128
+ -moz-border-radius-topleft: 5px;
129
+ background-color: #eee;
130
+ width: 1%;
131
+ }
132
+
133
+ td.DevRevCollapse {
134
+ border-bottom-left-radius: 5px;
135
+ -webkit-border-bottom-left-radius: 5px;
136
+ -moz-border-radius-bottomleft: 5px;
137
+ }
138
+
139
+ td.DevName {
140
+ padding: 4px 8px 4px 8px;
141
+ color: #333333;
142
+ background-color: #eee;
143
+ width: 1%;
144
+ text-align: left;
145
+ }
146
+
147
+ td.DevStatus {
148
+ padding: 4px 4px 4px 4px;
149
+ color: #333333;
150
+ background-color: #eee;
151
+ }
152
+
153
+ td.DevSlave {
154
+ padding: 4px 4px 4px 4px;
155
+ color: #333333;
156
+ background-color: #eee;
157
+ }
158
+
159
+ td.first {
160
+ border-top-left-radius: 5px;
161
+ -webkit-border-top-left-radius: 5px;
162
+ -moz-border-radius-topleft: 5px;
163
+ }
164
+
165
+ td.last {
166
+ border-top-right-radius: 5px;
167
+ -webkit-border-top-right-radius: 5px;
168
+ -moz-border-radius-topright: 5px;
169
+ }
170
+
171
+ td.DevStatusCategory {
172
+ border-radius: 5px;
173
+ -webkit-border-radius: 5px;
174
+ -moz-border-radius: 5px;
175
+ border-width: 1px;
176
+ border-style: solid;
177
+ }
178
+
179
+ td.DevStatusCollapse {
180
+ border-bottom-right-radius: 5px;
181
+ -webkit-border-bottom-right-radius: 5px;
182
+ -moz-border-radius-bottomright: 5px;
183
+ }
184
+
185
+ td.DevDetails {
186
+ font-weight: normal;
187
+ padding: 8px 8px 8px 8px;
188
+ color: #333333;
189
+ background-color: #eee;
190
+ text-align: left;
191
+ }
192
+
193
+ td.DevDetails li a {
194
+ padding-right: 5px;
195
+ }
196
+
197
+ td.DevComment {
198
+ font-weight: normal;
199
+ padding: 8px 8px 8px 8px;
200
+ color: #333333;
201
+ border-bottom-right-radius: 5px;
202
+ -webkit-border-bottom-right-radius: 5px;
203
+ -moz-border-radius-bottomright: 5px;
204
+ border-bottom-left-radius: 5px;
205
+ -webkit-border-bottom-left-radius: 5px;
206
+ -moz-border-radius-bottomleft: 5px;
207
+ background-color: #eee;
208
+ text-align: left;
209
+ }
210
+
211
+ td.Alt {
212
+ background-color: #ddd;
213
+ }
214
+
215
+ .legend {
216
+ border-radius: 5px;
217
+ -webkit-border-radius: 5px;
218
+ -moz-border-radius: 5px;
219
+ width: 100px;
220
+ max-width: 100px;
221
+ text-align: center;
222
+ padding: 2px 2px 2px 2px;
223
+ height: 14px;
224
+ white-space: nowrap;
225
+ }
226
+
227
+ .DevStatusBox {
228
+ text-align: center;
229
+ height: 20px;
230
+ padding: 0 2px;
231
+ line-height: 0;
232
+ white-space: nowrap;
233
+ }
234
+
235
+ .DevStatusBox a {
236
+ opacity: 0.85;
237
+ border-width: 1px;
238
+ border-style: solid;
239
+ border-radius: 4px;
240
+ -webkit-border-radius: 4px;
241
+ -moz-border-radius: 4px;
242
+ display: block;
243
+ width: 90%;
244
+ height: 20px;
245
+ line-height: 20px;
246
+ margin-left: auto;
247
+ margin-right: auto;
248
+ }
249
+
250
+ .DevSlaveBox {
251
+ text-align: center;
252
+ height: 10px;
253
+ padding: 0 2px;
254
+ line-height: 0;
255
+ white-space: nowrap;
256
+ }
257
+
258
+ .DevSlaveBox a {
259
+ opacity: 0.85;
260
+ border-width: 1px;
261
+ border-style: solid;
262
+ border-radius: 4px;
263
+ -webkit-border-radius: 4px;
264
+ -moz-border-radius: 4px;
265
+ display: block;
266
+ width: 90%;
267
+ height: 10px;
268
+ line-height: 20px;
269
+ margin-left: auto;
270
+ margin-right: auto;
271
+ }
272
+
273
+ a.noround {
274
+ border-radius: 0px;
275
+ -webkit-border-radius: 0px;
276
+ -moz-border-radius: 0px;
277
+ position: relative;
278
+ margin-top: -8px;
279
+ margin-bottom: -8px;
280
+ height: 36px;
281
+ border-top-width: 0;
282
+ border-bottom-width: 0;
283
+ }
284
+
285
+ a.begin {
286
+ border-top-width: 1px;
287
+ position: relative;
288
+ margin-top: 0px;
289
+ margin-bottom: -7px;
290
+ height: 27px;
291
+ border-top-left-radius: 4px;
292
+ -webkit-border-top-left-radius: 4px;
293
+ -moz-border-radius-topleft: 4px;
294
+ border-top-right-radius: 4px;
295
+ -webkit-border-top-right-radius: 4px;
296
+ -moz-border-radius-topright: 4px;
297
+ }
298
+
299
+ a.end {
300
+ border-bottom-width: 1px;
301
+ position: relative;
302
+ margin-top: -7px;
303
+ margin-bottom: 0px;
304
+ height: 27px;
305
+ border-bottom-left-radius: 4px;
306
+ -webkit-border-bottom-left-radius: 4px;
307
+ -moz-border-radius-bottomleft: 4px;
308
+ border-bottom-right-radius: 4px;
309
+ -webkit-border-bottom-right-radius: 4px;
310
+ -moz-border-radius-bottomright: 4px;
311
+ }
312
+
313
+ .center_align {
314
+ text-align: center;
315
+ }
316
+
317
+ .right_align {
318
+ text-align: right;
319
+ }
320
+
321
+ .left_align {
322
+ text-align: left;
323
+ }
324
+
325
+ div.BuildWaterfall {
326
+ border-radius: 7px;
327
+ -webkit-border-radius: 7px;
328
+ -moz-border-radius: 7px;
329
+ position: absolute;
330
+ left: 0px;
331
+ top: 0px;
332
+ background-color: #FFFFFF;
333
+ padding: 4px 4px 4px 4px;
334
+ float: left;
335
+ display: none;
336
+ border-width: 1px;
337
+ border-style: solid;
338
+ }
339
+
340
+ /* LastBuild, BuildStep states */
341
+ .success {
342
+ color: #000;
343
+ background-color: #8d4;
344
+ border-color: #4F8530;
345
+ }
346
+
347
+ .failure {
348
+ color: #000;
349
+ background-color: #e88;
350
+ border-color: #A77272;
351
+ }
352
+
353
+ .warnings {
354
+ color: #FFFFFF;
355
+ background-color: #fa3;
356
+ border-color: #C29D46;
357
+ }
358
+
359
+ .skipped {
360
+ color: #000;
361
+ background: #AADDEE;
362
+ border-color: #AADDEE;
363
+ }
364
+
365
+ .exception,.retry {
366
+ color: #FFFFFF;
367
+ background-color: #c6c;
368
+ border-color: #ACA0B3;
369
+ }
370
+
371
+ .start {
372
+ color: #000;
373
+ background-color: #ccc;
374
+ border-color: #ccc;
375
+ }
376
+
377
+ .running,.waiting,td.building {
378
+ color: #000;
379
+ background-color: #fd3;
380
+ border-color: #C5C56D;
381
+ }
382
+
383
+ .offline,td.offline {
384
+ color: #FFFFFF;
385
+ background-color: #777777;
386
+ border-color: #dddddd;
387
+ }
388
+
389
+
390
+ .start {
391
+ border-bottom-left-radius: 10px;
392
+ -webkit-border-bottom-left-radius: 10px;
393
+ -moz-border-radius-bottomleft: 10px;
394
+ border-bottom-right-radius: 10px;
395
+ -webkit-border-bottom-right-radius: 10px;
396
+ -moz-border-radius-bottomright: 10px;
397
+ }
398
+
399
+ .notstarted {
400
+ border-width: 1px;
401
+ border-style: solid;
402
+ border-color: #aaa;
403
+ background-color: #fff;
404
+ }
405
+
406
+ .closed {
407
+ background-color: #ff0000;
408
+ }
409
+
410
+ .closed .large {
411
+ font-size: 1.5em;
412
+ font-weight: bolder;
413
+ }
414
+
415
+ td.Project a:hover,td.start a:hover {
416
+ color: #000;
417
+ }
418
+
419
+ .mini-box {
420
+ text-align: center;
421
+ height: 20px;
422
+ padding: 0 2px;
423
+ line-height: 0;
424
+ white-space: nowrap;
425
+ }
426
+
427
+ .mini-box a {
428
+ border-radius: 0;
429
+ -webkit-border-radius: 0;
430
+ -moz-border-radius: 0;
431
+ display: block;
432
+ width: 100%;
433
+ height: 20px;
434
+ line-height: 20px;
435
+ margin-top: -30px;
436
+ }
437
+
438
+ .mini-closed {
439
+ -box-sizing: border-box;
440
+ -webkit-box-sizing: border-box;
441
+ border: 4px solid red;
442
+ }
443
+
444
+ /* grid styles */
445
+ table.Grid {
446
+ border-collapse: collapse;
447
+ }
448
+
449
+ table.Grid tr td {
450
+ padding: 0.2em;
451
+ margin: 0px;
452
+ text-align: center;
453
+ }
454
+
455
+ table.Grid tr td.title {
456
+ font-size: 90%;
457
+ border-right: 1px gray solid;
458
+ border-bottom: 1px gray solid;
459
+ }
460
+
461
+ table.Grid tr td.sourcestamp {
462
+ font-size: 90%;
463
+ }
464
+
465
+ table.Grid tr td.builder {
466
+ text-align: right;
467
+ font-size: 90%;
468
+ }
469
+
470
+ table.Grid tr td.build {
471
+ border: 1px gray solid;
472
+ }
473
+
474
+ /* column container */
475
+ div.column {
476
+ margin: 0 2em 2em 0;
477
+ float: left;
478
+ }
479
+
480
+ /* info tables */
481
+ table.info {
482
+ border-spacing: 1px;
483
+ }
484
+
485
+ table.info td {
486
+ padding: 0.1em 1em 0.1em 1em;
487
+ text-align: center;
488
+ }
489
+
490
+ table.info th {
491
+ padding: 0.2em 1.5em 0.2em 1.5em;
492
+ text-align: center;
493
+ }
494
+
495
+ table.info td.left {
496
+ text-align: left
497
+ }
498
+
499
+ .alt {
500
+ background-color: #f6f6f6;
501
+ }
502
+
503
+ li {
504
+ padding: 0.1em 1em 0.1em 1em;
505
+ }
506
+
507
+ .result {
508
+ padding: 0.3em 1em 0.3em 1em;
509
+ }
510
+
511
+ /* log view */
512
+ .log * {
513
+ vlink: #800080;
514
+ font-family: "Courier New", courier, monotype, monospace;
515
+ }
516
+
517
+ span.stdout {
518
+ color: black;
519
+ }
520
+
521
+ span.stderr {
522
+ color: red;
523
+ }
524
+
525
+ span.header {
526
+ color: blue;
527
+ }
528
+
529
+ /* revision & email */
530
+ .revision .full {
531
+ display: none;
532
+ }
533
+
534
+ .user .email {
535
+ display: none;
536
+ }
537
+
538
+ /* change comments (use regular colors here) */
539
+ pre.comments>a:link,pre.comments>a:visited {
540
+ color: blue;
541
+ }
542
+
543
+ pre.comments>a:active {
544
+ color: purple;
545
+ }