Diffstat (limited to 'scripts/builder/frontendBuilder.py') (more/less context) (ignore whitespace changes)
-rw-r--r-- | scripts/builder/frontendBuilder.py | 141 |
1 files changed, 66 insertions, 75 deletions
diff --git a/scripts/builder/frontendBuilder.py b/scripts/builder/frontendBuilder.py index 55054ee..dae837b 100644 --- a/scripts/builder/frontendBuilder.py +++ b/scripts/builder/frontendBuilder.py | |||
@@ -11,13 +11,7 @@ import urllib | |||
11 | 11 | ||
12 | #from mercurial import ui, hg | ||
13 | #from mercurial.node import hex | ||
14 | from dulwich.repo import Repo | ||
15 | |||
16 | import main | 12 | import main |
17 | 13 | ||
14 | class FrontendBuilder(object): | ||
18 | 15 | ||
19 | 16 | def __init__ (self, frontend, settings, repositoryVersion): | |
20 | class FrontendBuilder: | ||
21 | |||
22 | def __init__ (self, frontend, settings): | ||
23 | if '.' in frontend: | 17 | if '.' in frontend: |
@@ -32,2 +26,4 @@ class FrontendBuilder: | |||
32 | self.projectDir = main.projectBaseDir() | 26 | self.projectDir = main.projectBaseDir() |
27 | # self.repository = repository.repositoryWithPath(self.projectDir) | ||
28 | self.repositoryVersion = repositoryVersion | ||
33 | self.processedFiles = {} | 29 | self.processedFiles = {} |
@@ -35,36 +31,2 @@ class FrontendBuilder: | |||
35 | 31 | ||
36 | def mercurialRepositoryVersion (self): | ||
37 | repo = hg.repository(ui.ui(), self.projectDir) | ||
38 | context = repo['tip'] | ||
39 | result = str(context) | ||
40 | |||
41 | return result | ||
42 | |||
43 | |||
44 | def gitRepositoryVersion (self): | ||
45 | repo = Repo(self.projectDir) | ||
46 | #if repo.is_dirty(): | ||
47 | #print "WARNING: build run with dirty repository" | ||
48 | result = repo.refs['HEAD'] | ||
49 | |||
50 | return result | ||
51 | |||
52 | |||
53 | |||
54 | def repositoryVersion (self): | ||
55 | cacheKey = 'repositoryVersion' | ||
56 | if not self.processedFiles.has_key(cacheKey): | ||
57 | #result = self.mercurialRepositoryVersion() | ||
58 | result = self.gitRepositoryVersion() | ||
59 | self.processedFiles[cacheKey] = result | ||
60 | else: | ||
61 | result = self.processedFiles[cacheKey] | ||
62 | |||
63 | return result | ||
64 | |||
65 | |||
66 | #def relativePath (self): | ||
67 | #return self.module | ||
68 | # | ||
69 | |||
70 | def log (self, message): | 32 | def log (self, message): |
@@ -73,4 +35,8 @@ class FrontendBuilder: | |||
73 | 35 | ||
74 | def absolutePathForSourceFile (self, folder, basePath, file): | 36 | def absolutePathForSources (self): |
75 | return folder + '/frontend/' + self.module + '/' + basePath + '/' + file | 37 | return os.path.join(self.projectDir, 'frontend', self.module) |
38 | |||
39 | |||
40 | def absolutePathForSourceFile (self, basePath, file): | ||
41 | return os.path.join(self.absolutePathForSources(), basePath, file) | ||
76 | 42 | ||
@@ -78,3 +44,4 @@ class FrontendBuilder: | |||
78 | def absolutePathForTargetFile (self, folder, basePath, file): | 44 | def absolutePathForTargetFile (self, folder, basePath, file): |
79 | return folder + '/' + self.module + '/' + basePath + '/' + file | 45 | return os.path.join(folder, self.module, basePath, file) |
46 | |||
80 | 47 | ||
@@ -94,3 +61,3 @@ class FrontendBuilder: | |||
94 | for file in self.filterFiles(self.settings[fileType]): | 61 | for file in self.filterFiles(self.settings[fileType]): |
95 | src = self.absolutePathForSourceFile(sourceFolder, fileType, file) | 62 | src = self.absolutePathForSourceFile(fileType, file) |
96 | dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) | 63 | dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) |
@@ -100,3 +67,3 @@ class FrontendBuilder: | |||
100 | 67 | ||
101 | def copyResourcesToTargetFolder (self, targetFolder): | 68 | def copyResourcesToFolder (self, targetFolder): |
102 | self.copyResources(self.projectDir, targetFolder, 'css') | 69 | self.copyResources(self.projectDir, targetFolder, 'css') |
@@ -110,3 +77,3 @@ class FrontendBuilder: | |||
110 | try: | 77 | try: |
111 | fileHandler = codecs.open(self.absolutePathForSourceFile(self.projectDir, basePath, file), 'r', 'utf-8') | 78 | fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8') |
112 | except: | 79 | except: |
@@ -183,4 +150,4 @@ class FrontendBuilder: | |||
183 | 150 | ||
184 | def compressJS_jsmin (self, js): | 151 | def compressJS_jsmin (self, js, description): |
185 | self.log("compressing JS code") | 152 | self.log("compressing " + description + " code") |
186 | original = StringIO.StringIO(js) | 153 | original = StringIO.StringIO(js) |
@@ -198,3 +165,3 @@ class FrontendBuilder: | |||
198 | 165 | ||
199 | def compressJS_closureCompiler (self, js): | 166 | def compressJS_closureCompiler (self, js, description): |
200 | #Googles Closure compiler | 167 | #Googles Closure compiler |
@@ -207,5 +174,5 @@ class FrontendBuilder: | |||
207 | 174 | ||
208 | def compressJS (self, js): | 175 | def compressJS (self, js, description): |
209 | return self.compressJS_jsmin(js) | 176 | return self.compressJS_jsmin(js, description) |
210 | #return self.compressJS_closureCompiler(js) | 177 | #return self.compressJS_closureCompiler(js, description) |
211 | 178 | ||
@@ -214,3 +181,3 @@ class FrontendBuilder: | |||
214 | 181 | ||
215 | def packBookmarklet (self, bookmakeletCode): | 182 | def packBookmarklet (self, bookmakeletCode, version): |
216 | replacers = [ | 183 | replacers = [ |
@@ -229,3 +196,3 @@ class FrontendBuilder: | |||
229 | ] | 196 | ] |
230 | result = self.compressJS(bookmakeletCode) | 197 | result = self.compressJS(bookmakeletCode, version + " bookmarklet") |
231 | 198 | ||
@@ -302,3 +269,3 @@ class FrontendBuilder: | |||
302 | if not self.processedFiles.has_key(cacheKey): | 269 | if not self.processedFiles.has_key(cacheKey): |
303 | result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js'])) + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js'])) + '";' | 270 | result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";' |
304 | self.processedFiles[cacheKey] = result | 271 | self.processedFiles[cacheKey] = result |
@@ -310,3 +277,3 @@ class FrontendBuilder: | |||
310 | 277 | ||
311 | def replaceTemplatePlaceholders (self, assemblyMode, pageTitle, copyright, css, code, version, versionType): | 278 | def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType): |
312 | result = self.template() | 279 | result = self.template() |
@@ -319,3 +286,3 @@ class FrontendBuilder: | |||
319 | result = result.replace('@application.version.type@', versionType,1) | 286 | result = result.replace('@application.version.type@', versionType,1) |
320 | result = result.replace('@js_' + assemblyMode + '@', code, 1) | 287 | result = result.replace('@js_' + jsLoadMode + '@', code, 1) |
321 | 288 | ||
@@ -345,3 +312,3 @@ class FrontendBuilder: | |||
345 | #<link rel="stylesheet" type="text/css" href="./css/reset-min.css" /> | 312 | #<link rel="stylesheet" type="text/css" href="./css/reset-min.css" /> |
346 | return '\n'.join(map(lambda file: '<link rel="stylesheet" type="text/css" href="./' + basePath + '/' + file + '" />', files)) | 313 | return '\n'.join(map(lambda file: '<link rel="stylesheet" type="text/css" href="' + basePath + '/' + file + '" />', files)) |
347 | 314 | ||
@@ -354,3 +321,3 @@ class FrontendBuilder: | |||
354 | #<script type='text/javascript' src='./js/src/bookmarklet.js'></script> | 321 | #<script type='text/javascript' src='./js/src/bookmarklet.js'></script> |
355 | return '\n'.join(map(lambda file: '<script type="text/javascript" src="./' + basePath + '/' + file + '"></script>', files)) | 322 | return '\n'.join(map(lambda file: '<script type="text/javascript" src="' + basePath + '/' + file + '"></script>', files)) |
356 | 323 | ||
@@ -361,6 +328,6 @@ class FrontendBuilder: | |||
361 | 328 | ||
362 | def assembleVersion (self, assemblyMode, pageTitle, copyright, css, js, version, versionType): | 329 | def assembleVersion (self, pageTitle, copyright, css, js, jsLoadMode, version, versionType): |
363 | cacheKey = version + "-" + versionType | 330 | cacheKey = version + "-" + versionType |
364 | if not self.processedFiles.has_key(cacheKey): | 331 | if not self.processedFiles.has_key(cacheKey): |
365 | result = self.replaceTemplatePlaceholders(assemblyMode, pageTitle, copyright, css, js, version, versionType) | 332 | result = self.replaceTemplatePlaceholders(pageTitle, copyright, css, js, jsLoadMode, version, versionType) |
366 | self.processedFiles[cacheKey] = result | 333 | self.processedFiles[cacheKey] = result |
@@ -374,20 +341,44 @@ class FrontendBuilder: | |||
374 | def assemble (self, assemblyMode='INSTALL', versionType='LIVE'): | 341 | def assemble (self, assemblyMode='INSTALL', versionType='LIVE'): |
375 | pageTitle = "Clipperz - " + self.module | 342 | |
376 | if versionType != 'LIVE': | 343 | if versionType == 'LIVE': |
377 | pageTitle += " [" + versionType + " - " + assemblyMode +"]" | 344 | pageTitle = "Clipperz - " + self.module |
378 | 345 | else: | |
346 | pageTitle = "Clipperz - " + self.module + " [" + versionType + " - " + assemblyMode +"]" | ||
347 | |||
379 | if assemblyMode == 'INSTALL': | 348 | if assemblyMode == 'INSTALL': |
380 | css= self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css']))) | 349 | copyright = self.assembleCopyrightHeader() |
381 | js= self.scriptTagForContent(self.bookmarklet() + '\n' + self.compressJS(self.loadFilesContent('js', self.settings['js']))) | 350 | css =self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css']))) |
351 | js =self.scriptTagForContent( | ||
352 | self.bookmarklet() + | ||
353 | '\n' + | ||
354 | self.compressJS(self.loadFilesContent('js', self.settings['js']), "application") | ||
355 | ) | ||
356 | jsLoadMode = 'EMBEDDED' | ||
357 | |||
358 | elif assemblyMode == 'DEBUG': | ||
359 | copyright = self.assembleCopyrightHeader() | ||
360 | css =self.cssTagsForFiles('./css', self.filterFiles(self.settings['css'])) | ||
361 | js =self.scriptTagForContent(self.bookmarklet()) + \ | ||
362 | '\n' + \ | ||
363 | self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js'])) | ||
364 | jsLoadMode = 'LINKED' | ||
365 | |||
366 | elif assemblyMode == 'DEVELOPMENT': | ||
367 | copyright = "" | ||
368 | css =self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css'])) | ||
369 | js =self.scriptTagForContent(self.bookmarklet()) + \ | ||
370 | '\n' + \ | ||
371 | self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js'])) | ||
372 | jsLoadMode = 'LINKED' | ||
373 | |||
382 | else: | 374 | else: |
383 | css= self.cssTagsForFiles('css', self.filterFiles(self.settings['css'])) | 375 | raise NotImplementedError() |
384 | js= self.scriptTagForContent(self.bookmarklet()) + '\n' + self.scriptTagsForFiles('js', self.filterFiles(self.settings['js'])) | 376 | |
385 | |||
386 | return self.assembleVersion( | 377 | return self.assembleVersion( |
387 | assemblyMode= assemblyMode, | ||
388 | pageTitle = pageTitle, | 378 | pageTitle = pageTitle, |
389 | copyright = self.assembleCopyrightHeader(), | 379 | copyright = copyright, |
390 | css = css, | 380 | css = css, |
391 | js = js, | 381 | js = js, |
392 | version = self.repositoryVersion(), | 382 | jsLoadMode = jsLoadMode, |
383 | version = self.repositoryVersion, | ||
393 | versionType = versionType | 384 | versionType = versionType |