Merge lp:~danilo/linaro-license-protection/cleanup-and-readme into lp:~linaro-automation/linaro-license-protection/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
Reviewer Review Type Date Requested Status
Stevan Radaković Approve
Review via email: mp+120184@code.launchpad.net

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://bazaar.launchpad.net/~linaro-infrastructure/linaro-license-protection/configs/view/head:/README).

To post a comment you must log in.
Revision history for this message
Stevan Radaković (stevanr) wrote :

Looking good.
Approve +1.

review: Approve

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'
434Binary 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-)

Subscribers

People subscribed via source and target branches