Merge lp:~danilo/linaro-license-protection/cleanup-and-readme into lp:~linaro-automation/linaro-license-protection/trunk
- cleanup-and-readme
- Merge into trunk
Proposed by
Данило Шеган
Status: | Merged |
---|---|
Approved by: | Stevan Radaković |
Approved revision: | 109 |
Merged at revision: | 105 |
Proposed branch: | lp:~danilo/linaro-license-protection/cleanup-and-readme |
Merge into: | lp:~linaro-automation/linaro-license-protection/trunk |
Diff against target: |
948 lines (+250/-592) 13 files modified
.bzrignore (+2/-0) HACKING (+96/-0) INSTALL (+78/-0) README (+72/-137) license_protected_downloads/tests/test_pep8.py (+1/-0) licenses/linaro.txt (+0/-1) licenses/samsung.txt (+0/-268) middleware.py (+0/-19) releases_urls.py (+0/-36) scripts/jenkins-post-www.sh (+0/-43) scripts/test_jenkins-post-www.sh_test_structure.sh (+0/-45) settings.py (+1/-7) snapshots_urls.py (+0/-36) |
To merge this branch: | bzr merge lp:~danilo/linaro-license-protection/cleanup-and-readme |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Stevan Radaković | Approve | ||
Review via email: mp+120184@code.launchpad.net |
Commit message
Description of the change
Remove unused code and cleanup README file (split out bits and pieces into
HACKING, INSTALL and a deployment README on http://
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
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2012-06-26 13:51:02 +0000 |
3 | +++ .bzrignore 2012-08-17 15:13:22 +0000 |
4 | @@ -1,2 +1,4 @@ |
5 | .testrepository |
6 | licenses.sqlite3 |
7 | +licenses.db |
8 | +static |
9 | |
10 | === added file 'HACKING' |
11 | --- HACKING 1970-01-01 00:00:00 +0000 |
12 | +++ HACKING 2012-08-17 15:13:22 +0000 |
13 | @@ -0,0 +1,96 @@ |
14 | +Linaro publishing platform development |
15 | +====================================== |
16 | + |
17 | +Dependencies |
18 | +------------ |
19 | + |
20 | + * python (>=2.7, untested with python3) |
21 | + * python-beautifulsoup |
22 | + * python-html2text, |
23 | + * python-mock |
24 | + * python-subunit |
25 | + * testrepository (>=0.0.6) |
26 | + |
27 | +Code structure |
28 | +-------------- |
29 | + |
30 | + * license_protected_downloads/ |
31 | + |
32 | + Django application doing the file serving for Linaro publishing platform |
33 | + |
34 | + * templates/, templates_releases/, templates_snapshots/ |
35 | + |
36 | + Default and overriding templates for several web sites we run this |
37 | + code on. |
38 | + |
39 | + * sampleroot/ |
40 | + |
41 | + Sample root, helpful for development testing. |
42 | + Contains all possible combinations of options that are supported. |
43 | + |
44 | + * scripts/ |
45 | + |
46 | + Contains a script for moving files from one location to the public |
47 | + location (publish_to_snapshots.py) and a deployment-helper script |
48 | + (update-deployment.py). |
49 | + |
50 | + jenkins-post-www.sh is an obsolete script replaced by |
51 | + publish_to_snapshots. |
52 | + |
53 | +Style |
54 | +----- |
55 | + |
56 | +https://wiki.linaro.org/Platform/Infrastructure/CodingStyle |
57 | + |
58 | +Upload system |
59 | +------------- |
60 | + |
61 | +Upload system deals with files in a private location and moves them into |
62 | +a corresponding subdirectory under the public location (being served through |
63 | +the web site). |
64 | + |
65 | +Script that does that lives in |
66 | + |
67 | + scripts/publish_to_snapshots.py |
68 | + |
69 | +The important concept here is that of "build types": they define what target |
70 | +directory a build will end up in, and what, if any, postprocessing to do on it. |
71 | + |
72 | +A simple 'openembedded' job type is added with the following change: |
73 | + |
74 | + https://code.launchpad.net/~fboudra/linaro-license-protection/openembedded-support-lp1032134/+merge/118060 |
75 | + |
76 | +Web site for downloads |
77 | +---------------------- |
78 | + |
79 | +This is a django application, so standard django steps apply: |
80 | + |
81 | + ./manage.py syncdb |
82 | + ./manage.py collectstatic |
83 | + ./manage.py runserver |
84 | + |
85 | +Run tests with |
86 | + |
87 | + ./manage.py test |
88 | + |
89 | +Overriding templates for particular hosts |
90 | +......................................... |
91 | + |
92 | +There is already support for providing separate templates for |
93 | +releases.linaro.org and snapshots.linaro.org. Simply put them |
94 | +inside one of |
95 | + |
96 | + templates_releases/ |
97 | + templates_snapshots/ |
98 | + |
99 | +using the same names as in templates/, and they will be given |
100 | +preference under appropriate subdomains. |
101 | + |
102 | +staging instances |
103 | +................. |
104 | + |
105 | +lp:linaro-license-protection code gets automatically rolled out every |
106 | +half an hour to |
107 | + |
108 | + staging.snapshots.linaro.org |
109 | + staging.releases.linaro.org |
110 | |
111 | === added file 'INSTALL' |
112 | --- INSTALL 1970-01-01 00:00:00 +0000 |
113 | +++ INSTALL 2012-08-17 15:13:22 +0000 |
114 | @@ -0,0 +1,78 @@ |
115 | +Linaro publishing platform installation |
116 | +======================================= |
117 | + |
118 | +Linaro publishing platform currently consists of two separate parts: |
119 | + |
120 | + * upload system |
121 | + * web site for downloads |
122 | + |
123 | + |
124 | +Dependencies |
125 | +------------ |
126 | + |
127 | + * python |
128 | + * apache2 |
129 | + * libapache2-mod-python |
130 | + * libapache2-mod-xsendfile (>=0.10) |
131 | + * python-django (>=1.3.1) |
132 | + * python-django-openid |
133 | + |
134 | +To do development, you need a few more dependencies. Please check the |
135 | +HACKING file. |
136 | + |
137 | + |
138 | +Tests |
139 | +----- |
140 | + |
141 | +Testing infrastructure is based on 'testrepository' and requires at least |
142 | +Python and Apache2: |
143 | + |
144 | +To run tests for upload system and helper scripts: |
145 | + |
146 | + $ testr init |
147 | + $ testr run |
148 | + |
149 | +To run tests for Django application: |
150 | + |
151 | + $ python manage.py test |
152 | + |
153 | +Test plans |
154 | +.......... |
155 | + |
156 | +To run the test plans from testplans/ subdirectory against |
157 | +snapshots.linaro.org and releases.linaro.org, execute the following: |
158 | + |
159 | + $ testr init |
160 | + $ testr run testplans.test_suite |
161 | + |
162 | +These tests require an internet connection. |
163 | + |
164 | + |
165 | +Deployment |
166 | +---------- |
167 | + |
168 | +For current Linaro deployment, please see |
169 | + |
170 | + http://bazaar.launchpad.net/~linaro-infrastructure/linaro-license-protection/configs/view/head:/README |
171 | + |
172 | + |
173 | +Upload system |
174 | +------------- |
175 | + |
176 | +Upload system deals with files in a private location and moves them into |
177 | +a corresponding subdirectory under the public location (being served through |
178 | +the web site). |
179 | + |
180 | +Refer to the Linaro deployment document above to see an example setup. |
181 | + |
182 | +Web site for downloads |
183 | +---------------------- |
184 | + |
185 | +This is a django application, so standard django steps apply: |
186 | + |
187 | + ./manage.py syncdb |
188 | + ./manage.py collectstatic |
189 | + ./manage.py runserver |
190 | + |
191 | +A configuration with mod_wsgi is described in the Linaro deployment README |
192 | +(referred to above). |
193 | |
194 | === modified file 'README' |
195 | --- README 2012-08-13 11:08:01 +0000 |
196 | +++ README 2012-08-17 15:13:22 +0000 |
197 | @@ -1,117 +1,80 @@ |
198 | -Linaro downloads license protection |
199 | -=================================== |
200 | - |
201 | -Linaro builds sometimes contain "binary blobs"—pieces of binary-only code |
202 | +Linaro publishing platform |
203 | +========================== |
204 | + |
205 | +Linaro provides regular builds of Ubuntu, Android, OpenEmbedded, kernels, |
206 | +toolchains for supported ARM boards. They all have slightly differing |
207 | +goals and purposes, and require slightly different publication rules. |
208 | + |
209 | +This code provides a django application allowing restricted and controlled |
210 | +access to any published results. It also contains code which allows for |
211 | +publishing in according to structure that the django application requires. |
212 | + |
213 | +This code is behind snapshots.linaro.org and releases.linaro.org. |
214 | + |
215 | +Features |
216 | +-------- |
217 | + * makes use of the regular directory structure on disk |
218 | + * click through licensing with each file potentially having a different |
219 | + license/theme |
220 | + * openid restrictions (by Launchpad teams) |
221 | + * post-processing of all uploads (a script that manages uploads) |
222 | + * per-IP pass-through (for automatic services like a test framework) |
223 | + |
224 | +Background |
225 | +---------- |
226 | +This code originated as mod_rewrite hacks to provide click-through licensing |
227 | +for tarballs containing "binary blobs"—pieces of binary-only code |
228 | which enable extra features like accelerated graphics or multimedia. |
229 | These pieces are distributed under a separate license, and downloading |
230 | images or collections containing them requires some sort of license |
231 | protection. |
232 | |
233 | -This code provides such license protection on the hosting web server: |
234 | -other parts of infrastructure need to properly integrate with it (see |
235 | -eg. android-build.linaro.org section). At the moment, it's implemented as |
236 | -a click-through license acceptance on the server side with Apache+Django. |
237 | - |
238 | -To ensure and prove this keeps working, we are also using automated tests |
239 | -with this code. |
240 | - |
241 | - |
242 | -Setup |
243 | ------ |
244 | - |
245 | -This tree is the base for snapshots.linaro.org and releases.linaro.org www |
246 | -roots as served by Apache. It uses Django and mod_xsendfile. |
247 | - |
248 | -Currently, if BUILD-INFO.txt is found in a directory it is parsed and |
249 | -information from that file is used to apply appropriate protection to the |
250 | -requested file, otherwise old-style EULA handling is used: if special EULA |
251 | -file is found then it is used for selecting license and theme for requested |
252 | -file, otherwise all directories/files containing either 'origen' or 'snowball' |
253 | -in the URL path are protected with appropriate license (Samsung or ST-E) |
254 | -click-through. |
255 | - |
256 | -Dependencies |
257 | -............ |
258 | - |
259 | -libapache2-mod-xsendfile >= 0.10 |
260 | -libapache2-mod-python |
261 | -python-django >= 1.3.1 |
262 | -python-django-openid-auth |
263 | - |
264 | -Testing: |
265 | - python 2.7, testrepository (>=0.0.6), python-html2text, |
266 | - python-subunit, python-beautifulsoup, python-mock |
267 | - |
268 | -Deployment |
269 | -.......... |
270 | - |
271 | -Please see |
272 | - |
273 | - http://bazaar.launchpad.net/~linaro-infrastructure/linaro-license-protection/configs/view/head:/README |
274 | - |
275 | - |
276 | -Technical details |
277 | ------------------ |
278 | - |
279 | -releases.linaro.org |
280 | -................... |
281 | - |
282 | -Root directory for releases.linaro.org includes downloadable artifacts served |
283 | -by Apache and Django application. |
284 | - |
285 | -It allows a few hard-coded hosts to bypass the click-through protection, |
286 | -by their IPs: |
287 | - |
288 | - * android-build.linaro.org (50.17.250.69) |
289 | - * validation.linaro.org (213.123.120.124) |
290 | - |
291 | -Currently hosted on mombin.canonical.com. |
292 | - |
293 | - |
294 | -snapshots.linaro.org |
295 | -.................... |
296 | - |
297 | -Same basic set-up as releases.linaro.org. |
298 | - |
299 | -Further, to allow android-build.linaro.org to push to snapshots.linaro.org |
300 | -www area directly, we set-up two different users on the system with SSH keys: |
301 | - |
302 | - * linaro-android-build-publish: |
303 | - |
304 | - chrooted to /srv/snapshots.linaro.org/www/android/ and allows sftp |
305 | - access to push files over; home directory |
306 | - |
307 | - * linaro-android-build-publish-trigger: |
308 | - |
309 | - limited to executing only a single command through |
310 | - /etc/ssh/user-authorized-keys/linaro-android-build-publish-trigger |
311 | - |
312 | - command="/home/android-build-linaro-trigger/scripts |
313 | - /trigger-android-build-linaro.sh ${SSH_ORIGINAL_COMMAND#* }" |
314 | - |
315 | - (this passes the arguments received from the remote end as well) |
316 | - |
317 | - This script does a sudo to 'android-build-linaro' and then runs |
318 | - |
319 | - /home/android-build-linaro/scripts/jenkins-post-sftp.sh |
320 | - |
321 | - script which moves files from /android/.tmp/ into appropriate |
322 | - build directory. It expects "build_name/build_number" as command |
323 | - line parameters. |
324 | - |
325 | -android-build.linaro.org |
326 | -........................ |
327 | - |
328 | -Runs Jenkins and uses SFTP plugin to access the above two users. Private |
329 | -keys live in |
330 | - |
331 | - /home/ubuntu/snapshots-sync2/linaro-android-build-publish — |
332 | - linaro-android-build-publish |
333 | - /home/ubuntu/snapshots-sync2/linaro-android-build-publish-trigger — |
334 | - linaro-android-build-publish-trigger |
335 | - |
336 | -To ensure serialization of steps, and allow LAVA submission, these happen as |
337 | -build steps, and not as publishing steps. |
338 | +However, over time, more and more features were added until a point where |
339 | +it was necessary to switch to a better framework for web application |
340 | +development such as apache+mod_python+django+mod_xsendfile. |
341 | + |
342 | +Installation and setup |
343 | +---------------------- |
344 | + |
345 | +See INSTALL file. |
346 | + |
347 | +Publishing new builds |
348 | +--------------------- |
349 | + |
350 | +To publish a new build, one should include a BUILD-INFO.txt file with |
351 | +the build artifacts (see below for the description of the BUILD-INFO.txt |
352 | +syntax). |
353 | + |
354 | +BUILD-INFO.txt file will allow one to specify the access restrictions |
355 | +(such as click-through licensing and OpenID-restrictions) and influence |
356 | +the display (such as license-theme) of a particular build. |
357 | + |
358 | +WARNING: if you want a build type to be protected by OpenID, you need to |
359 | +ensure that the appropriate team is added to the list of django groups |
360 | +in the database. Only django admins can do that. |
361 | + |
362 | +Next step is to ensure that |
363 | + |
364 | + scripts/publish_to_snapshots.py |
365 | + |
366 | +has support for your build type. Builds are originally placed into |
367 | +a single, private location on the target server, and expect a run of |
368 | +the above script for them to be placed in the right area. This script |
369 | +can (and should) do any post-processing and checks for your build before |
370 | +it is placed in the public area for downloading. |
371 | + |
372 | +Your jenkins job (or whatever is doing the build and pushing the artifacts) |
373 | +should use push-over-ssh to push the builds to the server first, and then |
374 | +trigger a run of "scripts/publish_to_snapshots.py" with appropriate parameters |
375 | +to get it placed under the relevant subtree. |
376 | + |
377 | +This ensures that no incomplete files are ever offered for download, and |
378 | +allows postprocessing in a secure and controlled manner. |
379 | + |
380 | +After that, if scripts/publish_to_snapshots.py is configured to push |
381 | +to the right location, your build files should show up on the host |
382 | +running the django application. BUILD-INFO configuration will take effect, |
383 | +so it may be inaccessible to the general public. |
384 | |
385 | |
386 | Build-Info support |
387 | @@ -191,31 +154,3 @@ |
388 | If no BUILD-INFO.txt is found it falls back to per-file/per-directory EULA |
389 | protection. |
390 | |
391 | - |
392 | -Tests |
393 | ------ |
394 | - |
395 | -Testing infrastructure is based on 'testrepository' and requires at least |
396 | -Python and Apache2: |
397 | - |
398 | -To run tests for publisher: |
399 | - |
400 | - $ testr init |
401 | - $ testr run |
402 | - |
403 | -To run tests for Django application: |
404 | - |
405 | - $ python manage.py test |
406 | - |
407 | -Test plans |
408 | -.......... |
409 | - |
410 | -To run the test plans from testplans/ subdirectory against |
411 | -snapshots.linaro.org and releases.linaro.org, execute the following: |
412 | - |
413 | - $ testr init |
414 | - $ testr run testplans.test_suite |
415 | - |
416 | -These tests require an internet connection. |
417 | - |
418 | - |
419 | |
420 | === modified file 'license_protected_downloads/tests/test_pep8.py' |
421 | --- license_protected_downloads/tests/test_pep8.py 2012-07-11 11:56:10 +0000 |
422 | +++ license_protected_downloads/tests/test_pep8.py 2012-08-17 15:13:22 +0000 |
423 | @@ -32,6 +32,7 @@ |
424 | proc = subprocess.Popen(['pep8', |
425 | '--repeat', |
426 | '--ignore=%s' % ','.join(ignore), |
427 | + '--exclude=static', |
428 | '.'], |
429 | stdout=subprocess.PIPE, |
430 | stderr=subprocess.PIPE) |
431 | |
432 | === removed directory 'licenses' |
433 | === removed file 'licenses/Samsung-LinaroCustomer_EULA_draft_v2_E.doc' |
434 | Binary files licenses/Samsung-LinaroCustomer_EULA_draft_v2_E.doc 2011-12-09 12:24:29 +0000 and licenses/Samsung-LinaroCustomer_EULA_draft_v2_E.doc 1970-01-01 00:00:00 +0000 differ |
435 | === removed file 'licenses/linaro.txt' |
436 | --- licenses/linaro.txt 2012-04-24 08:33:00 +0000 |
437 | +++ licenses/linaro.txt 1970-01-01 00:00:00 +0000 |
438 | @@ -1,1 +0,0 @@ |
439 | -Linaro license. |
440 | \ No newline at end of file |
441 | |
442 | === removed file 'licenses/samsung.txt' |
443 | --- licenses/samsung.txt 2012-06-20 14:33:00 +0000 |
444 | +++ licenses/samsung.txt 1970-01-01 00:00:00 +0000 |
445 | @@ -1,268 +0,0 @@ |
446 | -SAMSUNG DEVELOPMENT TOOL KIT END-USER LICENSE AGREEMENT FOR LINARO |
447 | -DEVELOPERS (“Agreement”) |
448 | - |
449 | -<p>IMPORTANT — PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY.</p> |
450 | - |
451 | -<p> |
452 | - THIS IS A LEGALLY BINDING AGREEMENT BETWEEN YOU, an individual or a |
453 | - legal entity, (“LICENSEE”) AND SAMSUNG ELECTRONICS CO., |
454 | - LTD. (“SAMSUNG”). BY CLICKING THE "ACCEPT" BUTTON, OR BY DOWNLOADING OR |
455 | - INSTALLING OR OTHERWISE USING THE SOFTWARE, YOU AGREE TO BE BOUND BY THE |
456 | - TERMS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS OF THIS |
457 | - AGREEMENT OR ARE NOT AUTHORISED TO ACCEPT AND AGREE TO THE TERMS OF THE |
458 | - AGREEMENT ON BEHALF OF YOUR LEGAL ENTITY, DO NOT DOWNLOAD, INSTALL OR |
459 | - OTHERWISE USE THE SOFTWARE. |
460 | -</p> |
461 | - |
462 | - |
463 | -<h2>1. DEFINITIONS.</h2> |
464 | -<p> |
465 | - <strong>1.1 <em>"Samsung Product"</em></strong> means any of integrated |
466 | - circuit product(s), including but not limited to system on chip products, |
467 | - made by or for Samsung with which the Software was designed to be used. |
468 | -</p> |
469 | - |
470 | -<p> |
471 | - <strong>1.2 <em>"Software"</em></strong> shall mean the software in binary form |
472 | - and all other machine readable materials that are included with such |
473 | - software or intended for use with it, including (a) any updates or error |
474 | - corrections and (b) any documentation including user manuals that you |
475 | - obtain from Samsung via on-line transmission through Linaro’s official websites. |
476 | -</p> |
477 | - |
478 | -<p> |
479 | - <strong>1.3 <em>“Use”</em></strong> means in respect of the Software, |
480 | - the use of (including copying the Software to the extent that such |
481 | - copying is incidental to such use, including installation, backup and |
482 | - execution) the Software, or any part thereof. Use shall specifically |
483 | - exclude: (i) the translation, adaptation, arrangement or other |
484 | - alteration of the Software except as allowed by local legislation |
485 | - implementing Article 6 of the EC Directive on the legal protection of |
486 | - computer programs (91/250/EEC) and then only to the extent necessary to |
487 | - achieve interoperability of an independently created program with other |
488 | - programs; and (ii) the adapting or reverse compiling of the Software for |
489 | - the purpose of error correction. |
490 | -</p> |
491 | - |
492 | - |
493 | -<h2>2. LICENSE GRANT; OWNERSHIP</h2> |
494 | - |
495 | -<p> |
496 | - <strong>2.1 License Grants.</strong> Subject to the terms and conditions |
497 | - of this Agreement, Samsung hereby grants to Licensee, a non-exclusive, |
498 | - non-transferable, limited license, to Use, without right to sublicense |
499 | - or distribute, the Software, solely to the extent required in order to |
500 | - develop and/or test Licensee software applications for use solely with |
501 | - Samsung Product, and only if in compliance with all the provisions |
502 | - herein. |
503 | -</p> |
504 | - |
505 | -<p> |
506 | - <strong>2.2 Restriction on Modification.</strong> Licensee shall not |
507 | - modify, alter, adapt, reverse engineer, decompile, disassemble the |
508 | - Software or make any attempts to create non-licensed derivative works from |
509 | - the Software and otherwise use the Software in any manner not specifically |
510 | - authorized by this Agreement. |
511 | -</p> |
512 | - |
513 | -<p> |
514 | - Licensee acknowledges that the Software may contain open source |
515 | - software, subject to applicable open source licenses, provided by |
516 | - Samsung for Licensee’s convenience. It is Licensee’s responsibility to |
517 | - comply with the terms and conditions, including but not limited to any |
518 | - modification rights, of those licenses. Source codes for these portions |
519 | - of the Software may be obtained separately through applicable sources. |
520 | -</p> |
521 | - |
522 | -<p> |
523 | - Except for those portions of the Software clearly specified as open |
524 | - source, Licensee represents and warrants that it will not take any |
525 | - action that would create obligations that would conflict with Licensee's |
526 | - obligations hereunder, including without limitation, using the Software |
527 | - to merge with, link to, make function calls to, or share data structures |
528 | - with software available under an Open Source License Licensee shall |
529 | - defend and indemnify Samsung against all liabilities, losses, damages, |
530 | - costs and expenses relating to or arising out of a breach by Licensee of |
531 | - the foregoing representation and warranty. Open Source Licenses |
532 | - includes, without limitation, a software license that requires as a |
533 | - condition of use, modification, and/or distribution of such software |
534 | - that such software or other software incorporated into, derived from or |
535 | - distributed with such software be (a) disclosed or distributed in source |
536 | - code form; (b) be licensed for the purpose of making derivative works; |
537 | - or (c) be redistributable at no charge. |
538 | -</p> |
539 | - |
540 | -<p> |
541 | - <strong>2.3 Restriction on Distribution.</strong> Licensee shall not |
542 | - distribute, rent, lease, and/or lend the Software and any copies thereof |
543 | - to any third parties (individuals or legal entities). |
544 | -</p> |
545 | - |
546 | -<p> |
547 | - <strong>2.4 Proprietary Notices.</strong> |
548 | - Licensee shall not remove, efface or obscure any copyright or trademark |
549 | - notices from the Software. Licensee shall include reproductions of the |
550 | - Samsung copyright notice with each copy, if any, of the |
551 | - Software. Licensee acknowledges that any symbols, trademarks, trade |
552 | - names, and service marks adopted by Samsung to identify the Software |
553 | - belong to Samsung and that Licensee shall have no rights therein. |
554 | -</p> |
555 | - |
556 | -<p> |
557 | - <strong>2.5 Ownership.</strong> |
558 | - Samsung and its licensors shall retain all right, title and interest, |
559 | - including all intellectual property rights, in and to the |
560 | - Software. Licensee hereby covenants that it will not assert any claim |
561 | - that the Software infringes any intellectual property right owned or |
562 | - controlled by Licensee. |
563 | -</p> |
564 | - |
565 | -<p> |
566 | - <strong>2.6 No Other Rights Granted.</strong> |
567 | - Apart from the license rights expressly set forth in this Agreement, |
568 | - Samsung does not grant and Licensee does not receive any ownership |
569 | - right, title or interest nor any security interest or other interest in |
570 | - any intellectual property rights relating to the Software, nor in any |
571 | - copy of any part of the foregoing. |
572 | -</p> |
573 | - |
574 | - |
575 | -<h2>3. NO WARRANTY OR SUPPORT</h2> |
576 | - |
577 | -<p> |
578 | - <strong>3.1 No Warranty.</strong> |
579 | - THE SOFTWARE IS OFFERED "AS IS." SAMSUNG AND ITS LICENSORS GRANT AND |
580 | - LICENSEE RECEIVES NO WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, BY |
581 | - STATUTE, COMMUNICATION OR CONDUCT WITH LICENSEE, OR OTHERWISE. SAMSUNG |
582 | - SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, |
583 | - FITNESS FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THE |
584 | - SOFTWARE. WITHOUT LIMITATION OF THE ABOVE, SAMSUNG DISCLAIMS ANY |
585 | - WARRANTY THAT THE SOFTWARE IS BUG OR ERROR-FREE OR WILL OPERATE WITHOUT |
586 | - INTERRUPTION, AND GRANTS NO WARRANTY REGARDING ITS USE OR THE RESULTS |
587 | - THEREFROM INCLUDING, WITHOUT LIMITATION, ITS CORRECTNESS, ACCURACY OR |
588 | - RELIABILITY. |
589 | -</p> |
590 | - |
591 | -<p> |
592 | - <strong>3.2 No Support.</strong> |
593 | - Nothing in this Agreement shall obligate Samsung to provide any support |
594 | - for the Software. Samsung may, but shall be under no obligation to, |
595 | - correct any defects in the Software and/or provide updates via Linaro’s |
596 | - website. Licensee shall make reasonable efforts to promptly report to |
597 | - Samsung any defects it finds in the Software, as an aid to creating |
598 | - improved revisions of the Software. |
599 | -</p> |
600 | - |
601 | -<p> |
602 | - <strong>3.3 Dangerous Applications.</strong> |
603 | - The Software is not designed, intended, or certified for use in |
604 | - components of systems intended for the operation of weapons, weapons |
605 | - systems, nuclear installations, means of mass transportation, aviation, |
606 | - life-support computers or equipment (including resuscitation equipment |
607 | - and surgical implants), pollution control, hazardous substances |
608 | - management, or for any other dangerous application in which the failure |
609 | - of the Software could create a situation where personal injury or death |
610 | - may occur. Licensee understands that use of the Software in such |
611 | - applications is fully at the risk of Licensee. |
612 | -</p> |
613 | - |
614 | - |
615 | -<h2>4. TERM AND TERMINATION</h2> |
616 | - |
617 | -<p> |
618 | - <strong>4.1 Term and Termination.</strong> |
619 | - This Agreement is effective until terminated. Samsung may immediately |
620 | - terminate and cancel this Agreement and the licenses granted hereunder |
621 | - upon written notice to Licensee at any time with or without |
622 | - cause. Licensee may terminate this Agreement at any time by (i) |
623 | - completely removing the Software and any copies thereof from its system |
624 | - and (ii) notifying in writing Samsung of Licensee’s intent to terminate |
625 | - this Agreement. |
626 | -</p> |
627 | - |
628 | -<p> |
629 | - <strong>4.2 Effect of Termination.</strong> Upon any termination of this |
630 | - Agreement, the rights and licenses granted to Licensee under this |
631 | - Agreement shall immediately terminate. Upon termination, Licensee shall |
632 | - destroy all copies of the Software in its possession or control and |
633 | - cease all use. |
634 | -</p> |
635 | - |
636 | -<p> |
637 | - <strong>4.3 Survival.</strong> The provisions of Sections 1, 2.2, 2.3, |
638 | - 2.4, 2.5, 2.6, 3, 4, 5, and 6 shall survive the termination of this |
639 | - Agreement. |
640 | -</p> |
641 | - |
642 | -<h2>5. LIMITATION OF LIABILITY</h2> |
643 | - |
644 | -<p> |
645 | - TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT SHALL SAMSUNG OR ANY OF |
646 | - SAMSUNG'S LICENSORS BE LIABLE FOR ANY LOSS, DAMAGE OR INJURY, DIRECT AND |
647 | - INDIRECT, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED |
648 | - AND ON ANY THEORY OF LIABILITY, WHETHER FOR BREACH OF CONTRACT, TORT |
649 | - (INCLUDING NEGLIGENCE) OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, |
650 | - INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS, EVEN IF ADVISED OF THE |
651 | - POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY |
652 | - NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED |
653 | - REMEDY. IN ADDITION TO THE FOREGOINGS, SAMSUNG HAS NO LIABILITY TO THE |
654 | - LICENSEEE IF THE SOFTWARE INFRINGES OR IS ALLGEDED TO INFRINGE THE RIGHT |
655 | - OF ANY THIRD PARTY. |
656 | -</p> |
657 | - |
658 | -<h2>6. MISCELLANEOUS</h2> |
659 | - |
660 | -<p> |
661 | - <strong>6.1 Assignment.</strong> Licensee may not assign this Agreement |
662 | - or any rights or obligation hereunder, directly or indirectly, by |
663 | - operation of law or otherwise, without the prior written consent of |
664 | - Samsung, and any such attempted assignment shall be void. |
665 | -</p> |
666 | - |
667 | -<p> |
668 | - <strong>6.2 Governing Law; Venue.</strong> |
669 | - This Agreement shall be governed by and construed in accordance with the |
670 | - laws of the Republic of Korea, excluding conflict of laws provisions |
671 | - which may direct the application of another jurisdiction’s laws and the |
672 | - United Nations Convention on Contracts for the International Sale of |
673 | - Goods. All disputes, controversies or differences which may arise out of |
674 | - or in relation to or in connection with this Agreement, shall be shall |
675 | - be submit to the jurisdiction of the Suwon Civil Court, Korea. |
676 | -</p> |
677 | - |
678 | -<p> |
679 | - <strong>6.3 Severability.</strong> |
680 | - All terms and provisions of this Agreement shall, if possible, be |
681 | - construed in a manner which makes them valid, but in the event any term |
682 | - or provision of this Agreement is found by a court of competent |
683 | - jurisdiction to be illegal or unenforceable, the validity or |
684 | - enforceability of the remainder of this Agreement shall not be affected |
685 | - if the illegal or unenforceable provision does not materially affect the |
686 | - intent of this Agreement. If the illegal or unenforceable provision |
687 | - materially affects the intent of the parties to this Agreement, this |
688 | - Agreement shall become terminated. |
689 | -</p> |
690 | - |
691 | -<p> |
692 | - <strong>6.4 Equitable Relief.</strong> |
693 | - Licensee hereby acknowledges that its breach of this Agreement would |
694 | - cause irreparable harm and significant injury to Samsung that may be |
695 | - difficult to ascertain and that a remedy at law would be |
696 | - inadequate. Accordingly, Licensee agrees that Samsung shall have the |
697 | - right to seek and obtain immediate injunctive relief to enforce |
698 | - obligations under the Agreement in addition to any other rights and |
699 | - remedies it may have. |
700 | -</p> |
701 | - |
702 | -<p> |
703 | - <strong>6.5 Export Regulations.</strong> |
704 | - Licensee agrees and warrants that it shall comply, at its own expense, |
705 | - with any applicable export and import laws, restrictions, national |
706 | - security controls and regulations. |
707 | -</p> |
708 | - |
709 | -<p> |
710 | - <strong>6.6 Entire Agreement.</strong> |
711 | - This Agreement sets forth the entire Agreement between Samsung and |
712 | - Licensee relating to this subject matter. |
713 | -</p> |
714 | |
715 | === removed file 'middleware.py' |
716 | --- middleware.py 2012-08-06 11:53:16 +0000 |
717 | +++ middleware.py 1970-01-01 00:00:00 +0000 |
718 | @@ -1,19 +0,0 @@ |
719 | -from django.conf import settings |
720 | -from django.utils.cache import patch_vary_headers |
721 | - |
722 | - |
723 | -class MultiHostMiddleware: |
724 | - |
725 | - def process_request(self, request): |
726 | - try: |
727 | - host = request.META["HTTP_HOST"] |
728 | - if host[-3:] == ":80": |
729 | - host = host[:-3] # ignore default port number, if present |
730 | - request.urlconf = settings.HOST_MIDDLEWARE_URLCONF_MAP[host] |
731 | - except KeyError: |
732 | - pass # use default urlconf (settings.ROOT_URLCONF) |
733 | - |
734 | - def process_response(self, request, response): |
735 | - if getattr(request, "urlconf", None): |
736 | - patch_vary_headers(response, ('Host',)) |
737 | - return response |
738 | |
739 | === removed directory 'releases' |
740 | === removed file 'releases_urls.py' |
741 | --- releases_urls.py 2012-08-01 13:46:32 +0000 |
742 | +++ releases_urls.py 1970-01-01 00:00:00 +0000 |
743 | @@ -1,36 +0,0 @@ |
744 | -from django.conf.urls.defaults import patterns, include, url |
745 | - |
746 | -# Uncomment the next two lines to enable the admin: |
747 | -from django.contrib import admin |
748 | -admin.autodiscover() |
749 | - |
750 | - |
751 | -urlpatterns = patterns('', |
752 | - # Uncomment the admin/doc line below to enable admin documentation: |
753 | - url(r'^admin/doc/', include('django.contrib.admindocs.urls')), |
754 | - |
755 | - # Uncomment the next line to enable the admin: |
756 | - url(r'^admin/', include(admin.site.urls)), |
757 | - |
758 | - url(r'^openid/', include('django_openid_auth.urls')), |
759 | - url(r'^logout/$', 'django.contrib.auth.views.logout'), |
760 | - |
761 | - # The license page... |
762 | - url(r'^license$', |
763 | - 'license_protected_downloads.views.show_license', |
764 | - name='show_license'), |
765 | - |
766 | - # Exceptions redirected to root... |
767 | - url(r'^license', |
768 | - 'license_protected_downloads.views.redirect_to_root', |
769 | - name='redirect_to_root'), |
770 | - |
771 | - # Accept the license |
772 | - url(r'^accept-license', |
773 | - 'license_protected_downloads.views.accept_license', |
774 | - name='accept_license'), |
775 | - |
776 | - # Catch-all. We always return a file (or try to) if it exists. |
777 | - # This handler does that. |
778 | - url(r'(?P<path>.*)', 'license_protected_downloads.views.file_server'), |
779 | -) |
780 | |
781 | === renamed directory 'android' => 'sampleroot' |
782 | === removed file 'scripts/jenkins-post-www.sh' |
783 | --- scripts/jenkins-post-www.sh 2012-05-04 17:44:47 +0000 |
784 | +++ scripts/jenkins-post-www.sh 1970-01-01 00:00:00 +0000 |
785 | @@ -1,43 +0,0 @@ |
786 | -#!/bin/bash |
787 | -BASE_PATH=/home/android-build-linaro/android/.tmp |
788 | -TARGET_PATH=/srv/snapshots.linaro.org/www/android/ |
789 | - |
790 | -# Expected argument: username_jobname/buildno |
791 | -build_path="$1" |
792 | - |
793 | -if [[ -n $2 ]]; then |
794 | - BASE_PATH=$2 |
795 | -fi |
796 | - |
797 | -if [[ -n $3 ]]; then |
798 | - TARGET_PATH=$3 |
799 | -fi |
800 | - |
801 | -if [ -z "$build_path" ]; then |
802 | - echo "Missing build path" |
803 | - exit 1; |
804 | -fi |
805 | - |
806 | -# Paranoid security - alarm on 2 dots separated only by 0 or more backslahes |
807 | -if echo "$build_path" | grep -q -E '\.\\*\.'; then |
808 | - echo "No double-dots in build names please" |
809 | - exit 1 |
810 | -fi |
811 | - |
812 | -if [ ! -d $BASE_PATH/$build_path ]; then |
813 | - echo "WARNING: Expected directory $BASE_PATH/$build_path does not exist" |
814 | - exit 0 |
815 | -fi |
816 | - |
817 | -job_dir=$(dirname $build_path) |
818 | -build_number=$(basename $build_path) |
819 | -username=`echo "$job_dir" | cut -d_ -f1` |
820 | -jobname=`echo "$job_dir" | cut -d_ -f2-` |
821 | - |
822 | -echo -n "Moving $BASE_PATH/$build_path to $TARGET_PATH/~$username/$jobname/... " && |
823 | -(mkdir -p "$TARGET_PATH/~$username/$jobname" && \ |
824 | - cp -a $BASE_PATH/"$build_path" "$TARGET_PATH/~$username/$jobname/" && \ |
825 | - rm -rf $BASE_PATH/"$build_path" && \ |
826 | - echo "done") |
827 | - |
828 | -cd "$TARGET_PATH/~$username/$jobname/$build_number" && find * -xtype f > MANIFEST |
829 | |
830 | === removed file 'scripts/test_jenkins-post-www.sh_test_structure.sh' |
831 | --- scripts/test_jenkins-post-www.sh_test_structure.sh 2012-02-02 12:49:39 +0000 |
832 | +++ scripts/test_jenkins-post-www.sh_test_structure.sh 1970-01-01 00:00:00 +0000 |
833 | @@ -1,45 +0,0 @@ |
834 | -#/bin/env bash |
835 | - |
836 | -# Test MANIFEST creation for jenkins-post-www.sh |
837 | - |
838 | -root=`mktemp -d` |
839 | - |
840 | -mkdir -p $root/from/user_build/1/subdir/anotherdir/yetanotherdir |
841 | -touch $root/from/user_build/1/file1 |
842 | -touch $root/from/user_build/1/file2 |
843 | -touch $root/from/user_build/1/file3 |
844 | -touch $root/from/user_build/1/subdir/subfile1 |
845 | -touch $root/from/user_build/1/subdir/subfile2 |
846 | -touch $root/from/user_build/1/subdir/subfile3 |
847 | - |
848 | -mkdir -p $root/from/user_build/2/subdir/anotherdir/yetanotherdir |
849 | -touch $root/from/user_build/2/file1 |
850 | -touch $root/from/user_build/2/file2 |
851 | -touch $root/from/user_build/2/file3 |
852 | -touch $root/from/user_build/2/subdir/subfile1 |
853 | -touch $root/from/user_build/2/subdir/subfile2 |
854 | -touch $root/from/user_build/2/subdir/subfile3 |
855 | - |
856 | -mkdir -p $root/to |
857 | - |
858 | -./jenkins-post-www.sh user_build/1 $root/from $root/to |
859 | - |
860 | -# MANIFEST should list all files, but no directories, in $root/from/user_build/1 |
861 | - |
862 | -cat > $root/expected << EOF |
863 | -file1 |
864 | -file2 |
865 | -file3 |
866 | -subdir/subfile3 |
867 | -subdir/subfile2 |
868 | -subdir/subfile1 |
869 | -EOF |
870 | - |
871 | -diff $root/expected $root/to/~user/build/1/MANIFEST |
872 | -if [[ $? == 0 ]]; then |
873 | - echo "Passed" |
874 | -else |
875 | - echo "Failed" |
876 | -fi |
877 | - |
878 | -rm -r $root |
879 | |
880 | === modified file 'settings.py' |
881 | --- settings.py 2012-08-17 08:37:26 +0000 |
882 | +++ settings.py 2012-08-17 15:13:22 +0000 |
883 | @@ -86,7 +86,6 @@ |
884 | ) |
885 | |
886 | MIDDLEWARE_CLASSES = ( |
887 | - 'middleware.MultiHostMiddleware', |
888 | 'django.middleware.common.CommonMiddleware', |
889 | 'django.contrib.sessions.middleware.SessionMiddleware', |
890 | 'django.middleware.csrf.CsrfViewMiddleware', |
891 | @@ -151,14 +150,9 @@ |
892 | } |
893 | } |
894 | |
895 | -SERVED_PATHS = [os.path.join(PROJECT_ROOT, "android")] |
896 | +SERVED_PATHS = [os.path.join(PROJECT_ROOT, "sampleroot")] |
897 | |
898 | TEMPLATE_CONTEXT_PROCESSORS = ( |
899 | 'django.contrib.messages.context_processors.messages', |
900 | 'django.contrib.auth.context_processors.auth', |
901 | ) |
902 | - |
903 | -HOST_MIDDLEWARE_URLCONF_MAP = { |
904 | - "releases.linaro.org": ROOT_DIR + ".releases_urls", |
905 | - "snapshots.linaro.org": ROOT_DIR + ".snapshots_urls", |
906 | -} |
907 | |
908 | === removed directory 'snapshots' |
909 | === removed file 'snapshots_urls.py' |
910 | --- snapshots_urls.py 2012-08-01 13:46:32 +0000 |
911 | +++ snapshots_urls.py 1970-01-01 00:00:00 +0000 |
912 | @@ -1,36 +0,0 @@ |
913 | -from django.conf.urls.defaults import patterns, include, url |
914 | - |
915 | -# Uncomment the next two lines to enable the admin: |
916 | -from django.contrib import admin |
917 | -admin.autodiscover() |
918 | - |
919 | - |
920 | -urlpatterns = patterns('', |
921 | - # Uncomment the admin/doc line below to enable admin documentation: |
922 | - url(r'^admin/doc/', include('django.contrib.admindocs.urls')), |
923 | - |
924 | - # Uncomment the next line to enable the admin: |
925 | - url(r'^admin/', include(admin.site.urls)), |
926 | - |
927 | - url(r'^openid/', include('django_openid_auth.urls')), |
928 | - url(r'^logout/$', 'django.contrib.auth.views.logout'), |
929 | - |
930 | - # The license page... |
931 | - url(r'^license$', |
932 | - 'license_protected_downloads.views.show_license', |
933 | - name='show_license'), |
934 | - |
935 | - # Exceptions redirected to root... |
936 | - url(r'^license', |
937 | - 'license_protected_downloads.views.redirect_to_root', |
938 | - name='redirect_to_root'), |
939 | - |
940 | - # Accept the license |
941 | - url(r'^accept-license', |
942 | - 'license_protected_downloads.views.accept_license', |
943 | - name='accept_license'), |
944 | - |
945 | - # Catch-all. We always return a file (or try to) if it exists. |
946 | - # This handler does that. |
947 | - url(r'(?P<path>.*)', 'license_protected_downloads.views.file_server'), |
948 | -) |
Looking good.
Approve +1.