1
0
mirror of http://git.whoc.org.uk/git/password-manager.git synced 2025-10-28 18:07:35 +01:00

Interim synchronization with internal repository

This is an intermir commit to share what is going on with the development of the new /delta version.
This commit is contained in:
Giulio Cesare Solaroli
2014-07-28 18:07:48 +02:00
parent 6dd16d9359
commit f8da092f3d
111 changed files with 34049 additions and 28666 deletions

View File

@@ -92,6 +92,7 @@ class BackendBuilder(object):
print message + ": " + md5Digest + " (md5)"
print message + ": " + shaDigest + " (sha1)"
print message + ": " + sha256Digest + " (sha256)"
print "file size: " + "{:,}".format(len(content))
print "====="
@@ -112,14 +113,15 @@ class BackendBuilder(object):
submoduleExtension = '.' + frontend.submodule
main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module))
frontend.copyResourcesToFolder(self.frontEndTempFolder())
if 'debug' in self.versions:
frontend.copyResourcesToFolder(self.frontEndTempFolder())
frontend.copyDebugResourcesToFolder(self.frontEndTempFolder())
index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index_debug' + submoduleExtension + '.html'), index)
if 'install' in self.versions:
# frontend.copyResourcesToFolder(self.frontEndTempFolder())
index = self.configureIndexContent(frontend.assemble())
self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)

View File

@@ -42,6 +42,7 @@ class ChecksumBuilder(BackendBuilder):
index = self.configureIndexContent(frontend.assemble())
self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)
frontend.copyResourcesToFolder(self.frontEndTempFolder())
self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index" + submoduleExtension + ".html checksum")
print ""

View File

@@ -39,6 +39,7 @@ class DevBuilder(BackendBuilder):
submoduleExtension = '.' + frontend.submodule
main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module))
frontend.copyResourcesToFolder(self.frontEndTempFolder())
index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)

73
scripts/builder/frontendBuilder.py Normal file → Executable file
View File

@@ -38,9 +38,15 @@ class FrontendBuilder(object):
def projectResourceTypes (self):
raise NotImplementedError()
def copyStaticResources (self, targetFolder):
# def copyStaticResources (self, targetFolder):
# raise NotImplementedError()
def copyResourcesToFolder (self, targetFolder):
raise NotImplementedError()
def preprocessCSS (self, targetFile):
pass
#---------------------------------------------------------------------------
def log (self, message):
@@ -72,7 +78,7 @@ class FrontendBuilder(object):
result.append(file)
return result
def copyResources (self, sourceFolder, destinationFolder, fileType):
if fileType in self.settings:
@@ -94,17 +100,18 @@ class FrontendBuilder(object):
def copyResourcesToFolder (self, targetFolder):
# self.copyResources(self.projectDir, targetFolder, 'css')
# self.copyResources(self.projectDir, targetFolder, 'js')
# self.copyResources(self.projectDir, targetFolder, 'images')
# def copyResourcesToFolder (self, targetFolder):
# for resoureceType in self.projectResourceTypes():
# self.copyResources(self.projectDir, targetFolder, resoureceType)
# self.copyStaticResources(targetFolder)
def copyDebugResourcesToFolder (self, targetFolder):
for resoureceType in self.projectResourceTypes():
self.copyResources(self.projectDir, targetFolder, resoureceType)
self.copyStaticResources(targetFolder)
def loadFilesContent (self, basePath, files):
result = ""
def loadIndividualFilesContent (self, basePath, files):
result = {}
for file in self.filterFiles(files):
try:
@@ -112,11 +119,39 @@ class FrontendBuilder(object):
except:
print "FILE: " + file
result += fileHandler.read() + '\n'
result[file] = fileHandler.read()
fileHandler.close()
return result
def loadFilesContent (self, basePath, files):
result = ""
# for file in self.filterFiles(files):
# try:
# fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8')
# except:
# print "FILE: " + file
#
# result += fileHandler.read() + '\n'
# fileHandler.close()
# for name, content in self.loadIndividualFilesContent(basePath, files):
for name, content in list(self.loadIndividualFilesContent(basePath, files).items()):
result += content + '\n'
return result
# def packFilesContent (self, filesContent):
# result = ""
#
# for name, content in filesContent:
# result += content + '\n'
#
# return result
def template (self):
processedFile = 'html_template'
@@ -127,6 +162,8 @@ class FrontendBuilder(object):
return self.processedFiles[processedFile]
#==========================================================================
def cssminCompressor (self, css):
# package found here:
# - http://stackoverflow.com/questions/222581/python-script-for-minifying-css/2396777#2396777
@@ -172,13 +209,14 @@ class FrontendBuilder(object):
print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] )
return css
def compressCSS (self, css):
self.log("compressing CSS")
#return self.regexCssCompressor(css)
return self.cssminCompressor(css)
#--------------------------------------------------------------------------
#==========================================================================
@@ -262,6 +300,8 @@ class FrontendBuilder(object):
return result
#==========================================================================
def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType):
result = self.template()
@@ -332,6 +372,9 @@ class FrontendBuilder(object):
else:
pageTitle = "Clipperz - " + self.module + " [" + versionType + " - " + assemblyMode +"]"
for cssFile in self.settings['css']:
self.preprocessCSS(self.absolutePathForSourceFile('css', cssFile))
if assemblyMode == 'INSTALL':
copyright = self.assembleCopyrightHeader()
css = self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css'])))

View File

@@ -9,7 +9,10 @@ class BetaBuilder(FrontendBuilder):
def projectResourceTypes (self):
return ['js', 'css', 'images']
def copyStaticResources (self, targetFolder):
# def copyStaticResources (self, targetFolder):
def copyResourcesToFolder (self, targetFolder):
self.copyResources(self.projectDir, targetFolder, 'images')
for file in self.filterFiles(self.settings['staticResources']):
src = self.absolutePathForSourceFile('staticResources', file)
dst = self.absolutePathForTargetFile(targetFolder, '', file)

View File

@@ -1,5 +1,11 @@
from frontendBuilder import FrontendBuilder
from scss import Scss
import os
import shutil
import main
import logging
class DeltaBuilder(FrontendBuilder):
@@ -9,15 +15,49 @@ class DeltaBuilder(FrontendBuilder):
def projectResourceTypes (self):
return ['js', 'css']
def copyStaticResources (self, targetFolder):
# def copyStaticResources (self, targetFolder):
def copyResourcesToFolder (self, targetFolder):
#print "DELTA - copyResourcesToFolder"
resourcesToCopy = [
{'folder': 'properties', 'source': 'manifest.appcache', 'target': 'manifest.appcache'}
]
for resource in resourcesToCopy:
src = self.absolutePathForSourceFile(resource['folder'], resource['source'])
#print "copying resource: " + str(resource['source'])
content = self.loadFilesContent(resource['folder'], [resource['source']])
content = content.replace('@application.version@', self.repositoryVersion)
dst = self.absolutePathForTargetFile(targetFolder, '', resource['target'])
shutil.copy2(src, dst)
file = open(dst, 'w')
file.write(content.encode('utf-8'))
file.close()
def bookmarklet (self):
return ""
return ""
def preprocessCSS (self, targetFile):
logging.basicConfig()
scssVariables = {}
scssCompiler = Scss(
scss_vars = None,
scss_opts = {
'compress': True,
# 'debug_info': True,
},
scss_files = self.loadIndividualFilesContent('scss', self.settings['scss']),
# super_selector = None,
# live_errors = False,
# library = ALL_BUILTINS_LIBRARY,
search_paths = [os.path.join(self.absolutePathForSources(), 'scss')]
)
cssFileContent = scssCompiler.compile()
dst = targetFile
dst = os.path.join(os.path.dirname(dst), "_" + os.path.basename(dst))
main.createFolder(os.path.dirname(dst))
file = open(dst, 'w')
file.write(cssFileContent.encode('utf-8'))
file.close()

View File

@@ -9,10 +9,13 @@ class GammaBuilder(FrontendBuilder):
def projectResourceTypes (self):
return ['js', 'css', 'images']
def copyStaticResources (self, targetFolder):
# def copyStaticResources (self, targetFolder):
def copyResourcesToFolder (self, targetFolder):
self.copyResources(self.projectDir, targetFolder, 'images')
resourcesToCopy = [
# {'folder': 'html', 'source': 'exit_template.html', 'target': 'exit.html'},
{'folder': 'html', 'source': 'exit_template.html', 'target': 'logout.html'},
{'folder': 'html', 'source': 'exit_template.html', 'target': 'exit.html'},
# {'folder': 'html', 'source': 'exit_template.html', 'target': 'logout.html'},
{'folder': 'css', 'source': 'static.css', 'target': 'static.css'}
]

View File

@@ -8,5 +8,6 @@ class Gamma_MobileBuilder(FrontendBuilder):
def projectResourceTypes (self):
return ['js', 'css', 'images']
def copyStaticResources (self, targetFolder):
# def copyStaticResources (self, targetFolder):
def copyResourcesToFolder (self, targetFolder):
pass

View File

@@ -89,6 +89,7 @@ def build (settings, repository):
if repository.areTherePendingChanges():
if 'install' in settings['versions']:
# print "\nWARNING: repository has pending changes\n"
raise Exception("repository has pending changes, can't 'install'")
else:
print "\nWARNING: repository has pending changes\n"
@@ -135,7 +136,7 @@ def usage (message):
#--------------------------------------------------------------------
def allFrontends ():
return ['beta', 'gamma', 'gamma.mobile']
return ['beta', 'gamma', 'delta']
def allBackends ():
return ['php', 'python']

View File

@@ -1,13 +1,14 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
def repositoryWithPath (path):
try:
from mercurial import ui, hg
# pip install hgapi
import hgapi
repo = hg.repository(ui.ui(), path)
repo = hgapi.Repo(path)
result = HgRepository(repo, path)
repo.hg_status()
except:
try:
from git import Repo
@@ -17,6 +18,7 @@ def repositoryWithPath (path):
print "Failed to import git, please install http://gitorious.org/git-python"
print "Use sudo apt-get install python-git for Ubuntu/Debian"
print "Use sudo yum install GitPython for Fedora/RHEL/CentOS"
print "Or manually running the following command: easy_install gitpython"
except:
result = SnapshotRepository('', path)
@@ -47,7 +49,6 @@ class Repository(object):
if self.areTherePendingChanges():
result = '>>> ' + result + ' <<<'
# print "VERSION: " + result
return result
@@ -76,15 +77,14 @@ class GitRepository(Repository):
class HgRepository(Repository):
# http://mercurial.selenic.com/wiki/MercurialApi
## http://mercurial.selenic.com/wiki/MercurialApi
# https://bitbucket.org/haard/hgapi
def revision (self):
return 'hg:' + str(self.repository['tip'])
return 'hg: ' + str(self.repository['tip'].node)
def areTherePendingChanges (self):
# TODO: FIXME: repository.status() does not report 'unknown(?)' files. :(
return not all(map(lambda fileList: len(fileList) == 0, self.repository.status()))
return not all(map(lambda fileList: len(fileList) == 0, self.repository.hg_status()))
#===================================================================