Merge branch 'BS-18'

This commit is contained in:
rzaitov 2013-11-01 15:19:17 +04:00
commit eda1151342
14 changed files with 109 additions and 62 deletions

View File

@ -3,11 +3,6 @@ from parser.CopyParser.CopyLineParser import CopyLineParser
class CopyCommandBuilder:
def __init__(self, pathProvider):
assert pathProvider is not None
self.__pathProvider = pathProvider
def isCopy(self, line):
assert line is not None
@ -19,5 +14,5 @@ class CopyCommandBuilder:
parser = CopyLineParser()
cpArg = parser.parseLine(line)
command = CopyCommand(self.__pathProvider, cpArg)
command = CopyCommand(cpArg)
return command

View File

@ -3,11 +3,6 @@ from parser.BackupParser.CreateBackupParser import CreateBackupParser
class CreateBackupCommandBuilder:
def __init__(self, pathProvider):
assert pathProvider is not None
self.__pathProvider = pathProvider
def isCreateBackup(self, line):
assert line is not None
@ -20,5 +15,5 @@ class CreateBackupCommandBuilder:
parser = CreateBackupParser()
backupArguments = parser.parseLine(line)
command = CreateBackupCommand(self.__pathProvider, backupArguments)
command = CreateBackupCommand(backupArguments)
return command

View File

@ -3,10 +3,6 @@ from parser.BackupParser.DeleteBackupParser import DeleteBackupParser
class DeleteBackupCommandBuilder:
def __init__(self, pathProvider):
assert pathProvider is not None
self.__pathProvider = pathProvider
def isDeleteBackup(self, line):
assert line is not None
@ -21,5 +17,5 @@ class DeleteBackupCommandBuilder:
parser = DeleteBackupParser()
parser.parseLine(line)
command = DeleteBackupCommand(self.__pathProvider)
command = DeleteBackupCommand()
return command

View File

@ -3,13 +3,11 @@ from parser.InsideParser.InsideSetParser import InsideSetParser
class PatchCsprojCommandBuilder:
def __init__(self, config, pathProvider, valueProvider):
def __init__(self, config, valueProvider):
assert config is not None
assert pathProvider is not None
assert valueProvider is not None
self.__config = config
self.__pathProvider = pathProvider
self.__valueProvider = valueProvider
def getCommandFor(self, line):
@ -18,12 +16,20 @@ class PatchCsprojCommandBuilder:
parser = InsideSetParser(self.__valueProvider, 'csproj')
result = parser.parseLine(line)
relPath = result[0]
csprojPath = result[0]
key = result[1]
value = self.__valueProvider.getValueFor(result[2])
csprojAbsPath = self.__pathProvider.resolveAbsPath(relPath)
slnConfig = self.__config['sln_config']
command = PatchCsprojCommand(csprojAbsPath, key, value, slnConfig)
command = PatchCsprojCommand(csprojPath, key, value, slnConfig)
return command
def isPatchCsproj(self, line):
assert line is not None
parser = InsideSetParser(self.__valueProvider, 'csproj')
isValid = parser.isValidLine(line)
return isValid

View File

@ -3,10 +3,6 @@ from parser.BackupParser.RestoreBackupParser import RestoreBackupParser
class RestoreBackupCommandBuilder:
def __init__(self, pathProvider):
assert pathProvider is not None
self.__pathProvider = pathProvider
def isRestoreBackup(self, line):
assert line is not None
@ -21,5 +17,5 @@ class RestoreBackupCommandBuilder:
parser = RestoreBackupParser()
parser.parseLine(line)
command = RestoreBackupCommand(self.__pathProvider)
command = RestoreBackupCommand()
return command

View File

@ -1 +1,22 @@
restore from backup
create backup for 'BuildSample'
inside 'BuildSample/BuildSample.sln' remove NotCompileApp project
inside 'BuildSample/BuildSample/CoolApp.csproj' set OutputPath to 'Output'
inside 'BuildSample/BuildSample/Info.plist' set CFBundleVersion to '1.2.3'
inside 'BuildSample/BuildSample/Info.plist' set CFBundleDisplayName to 'CoolApp'
copy 'BuildSample/BuildSample/Profiles/8F606DAE-F9C9-4A19-8EFF-34B990D76C28.mobileprovision' to '~/Library/MobileDevice/Provisioning Profiles/BuildScript.mobileprovision'
clean 'BuildSample/BuildSample.sln' for 'Release|iPhone'
build 'BuildSample/BuildSample.sln' for 'Release|iPhone'
create dirs 'Output/Appstore/Artifacts'
copy 'BuildSample/BuildSample/Output/BuildSample-1.2.3.ipa' to 'Output/Appstore/Artifacts'
sh cp -a BuildSample/BuildSample/Output/ Output/Appstore/
restore from backup
delete backup
sh echo hello from Rustam

View File

@ -1,9 +1,35 @@
from CommandBuilders.CleanBuildCommandBuilder import CleanBuildCommandBuilder
from CommandBuilders.CopyCommandBuilder import CopyCommandBuilder
from CommandBuilders.CreateBackupCommandBuilder import CreateBackupCommandBuilder
from CommandBuilders.DeleteBackupCommandBuilder import DeleteBackupCommandBuilder
from CommandBuilders.MakeDirsCommandBuilder import MakeDirsCommandBuilder
from CommandBuilders.PatchCsprojCommandBuilder import PatchCsprojCommandBuilder
from CommandBuilders.PatchInfoplistCommandBuilder import PatchInfoplistCommandBuilder
from CommandBuilders.RemoveProjectCommandBuilder import RemoveProjectCommandBuilder
from CommandBuilders.RestoreBackupCommandBuilder import RestoreBackupCommandBuilder
from CommandBuilders.ShCommandBuilder import ShCommandBuilder
from commands.ValueProvider import ValueProvider
class StepsRunner:
def __init__(self):
def __init__(self, config):
assert config is not None
self.valueProvider = ValueProvider(config)
self.shCommandBuilder = ShCommandBuilder()
self.removeProjectBuilder = RemoveProjectCommandBuilder()
self.createBackupBuilder = CreateBackupCommandBuilder()
self.restoreFromBackupBuilder = RestoreBackupCommandBuilder()
self.deleteBackupBuilder = DeleteBackupCommandBuilder()
self.createDirs = MakeDirsCommandBuilder()
self.patchCsproj = PatchCsprojCommandBuilder(config, self.valueProvider)
self.patchInfoPlist = PatchInfoplistCommandBuilder(self.valueProvider)
self.copyBuilder = CopyCommandBuilder()
buildUtilPath = config['build_tool']
self.cleanBuilder = CleanBuildCommandBuilder(buildUtilPath, 'clean')
self.buildBuilder = CleanBuildCommandBuilder(buildUtilPath, 'build')
def run(self, content):
assert content is not None
@ -23,5 +49,36 @@ class StepsRunner:
if self.shCommandBuilder.isShCommand(line):
cmd = self.shCommandBuilder.getCommandFor(line)
cmd.execute()
elif self.removeProjectBuilder.isRemoveProject(line):
cmd = self.removeProjectBuilder.getCommandFor(line)
cmd.execute()
elif self.cleanBuilder.isCleanBuild(line):
cmd = self.cleanBuilder.getCommandFor(line)
cmd.execute()
elif self.buildBuilder.isCleanBuild(line):
cmd = self.buildBuilder.getCommandFor(line)
cmd.execute()
elif self.createBackupBuilder.isCreateBackup(line):
cmd = self.createBackupBuilder.getCommandFor(line)
cmd.execute()
elif self.createDirs.isMakeDirsCommand(line):
cmd = self.createDirs.getCommandFor(line)
cmd.execute()
elif self.patchCsproj.isPatchCsproj(line):
cmd = self.patchCsproj.getCommandFor(line)
cmd.execute()
elif self.patchInfoPlist.isPatchInfoPlist(line):
cmd = self.patchInfoPlist.getCommandFor(line)
cmd.execute()
elif self.copyBuilder.isCopy(line):
cmd =self.copyBuilder.getCommandFor(line)
cmd.execute()
elif self.restoreFromBackupBuilder.isRestoreBackup(line):
cmd = self.restoreFromBackupBuilder.getCommandFor(line)
cmd.execute()
elif self.deleteBackupBuilder.isDeleteBackup(line):
cmd =self.deleteBackupBuilder.getCommandFor(line)
cmd.execute()
else:
raise Exception('unrecognised step')
msg = "unrecognised step. Line: '{0}'".format(line)
raise Exception(msg)

View File

@ -2,11 +2,9 @@ import shutil
import os
class CopyCommand:
def __init__(self, pathProvider, copyArguments):
assert pathProvider is not None
def __init__(self, copyArguments):
assert copyArguments is not None
self.__pathProvider = pathProvider
self.__copyArguments = copyArguments
def execute(self):
@ -17,9 +15,6 @@ class CopyCommand:
def __expandPath(self, path):
path = os.path.expanduser(path)
if not os.path.isabs(path):
path = self.__pathProvider.resolveAbsPath(path)
return path

View File

@ -1,16 +1,14 @@
import shutil
class CreateBackupCommand:
def __init__(self, pathProvider, createBackupArguments):
assert pathProvider is not None
assert createBackupArguments is not None
def __init__(self, backupArguments):
assert backupArguments is not None
self.__pathProvider = pathProvider
self.__createBackupArguments = createBackupArguments
self.__backupArguments = backupArguments
def execute(self):
src = self.__pathProvider.resolveAbsPath(self.__createBackupArguments.getSourceFolderName())
dst = self.__pathProvider.resolveAbsPath(self.__createBackupArguments.getBackupFolderName())
src = self.__backupArguments.getSourceFolderName()
dst = self.__backupArguments.getBackupFolderName()
shutil.rmtree(dst, ignore_errors=True)
shutil.copytree(src, dst, symlinks=False)

View File

@ -2,14 +2,7 @@ import os
import shutil
class DeleteBackupCommand:
def __init__(self, pathProvider):
assert pathProvider is not None
self.__pathProvider = pathProvider
def execute(self):
baseDir = self.__pathProvider.resolveAbsPath('.')
dirs = [self.__pathProvider.resolveAbsPath(name) for name in os.listdir(baseDir) if os.path.isdir(os.path.join(baseDir, name)) & name.startswith('backup.')]
dirs = [name for name in os.listdir('.') if os.path.isdir(os.path.join('.', name)) & name.startswith('backup.')]
for dir in dirs:
shutil.rmtree(dir)

View File

@ -3,18 +3,11 @@ import shutil
class RestoreBackupCommand:
def __init__(self, pathProvider):
assert pathProvider is not None
self.__pathProvider = pathProvider
def execute(self):
baseDir = self.__pathProvider.resolveAbsPath('.')
dirPairs = [(name, "backup.{0}".format(name)) for name in os.listdir(baseDir) if os.path.isdir(self.__pathProvider.resolveAbsPath(name)) and not name.startswith('backup.')]
dirPairs = [(name, "backup.{0}".format(name)) for name in os.listdir('.') if os.path.isdir(name) and not name.startswith('backup.')]
for pair in dirPairs:
absPair = (self.__pathProvider.resolveAbsPath(pair[0]), self.__pathProvider.resolveAbsPath(pair[1]))
absPair = (pair[0], pair[1])
if not os.path.exists(absPair[1]):
continue

View File

@ -16,4 +16,5 @@ class RestoreBackupParser(LineParser):
assert line is not None
isValid = line.startswith('restore from backup')
return isValid

View File

@ -11,6 +11,7 @@ ios.steps = 'scripts/IosSteps.txt'
# config settings
ios.appstore.build_ready = 'true'
ios.appstore.app_name = 'CoolApp'
ios.appstore.sln_config = 'Release|iPhone'
ios.staging.build_ready = 'true'
#ios.staging.build_ready = 'true'
ios.staging.app_name = 'CoolApp staging'

View File

@ -24,7 +24,7 @@ class TaskRunner:
def runConfig(self, config):
content = self.getStepsContent(config)
stepsRunner = StepsRunner()
stepsRunner = StepsRunner(config)
stepsRunner.run(content)
def getStepsContent(self, config):