From 10594d0b9bff7b31d15f7f69b41e31717335e52d Mon Sep 17 00:00:00 2001 From: rzaitov Date: Tue, 5 Nov 2013 13:00:37 +0400 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BF=D0=BE=D0=B4=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D1=83=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B8=D0=B7=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/Core/LineConveyor/MacroResolver.py | 20 ++++++++++++++++ scripts/Core/StepsRunner.py | 7 +++--- scripts/IosSteps.txt | 14 +++++------ .../LineConveyor/test_macroResolver.py | 23 +++++++++++++++++++ scripts/Tests/UnitTests/Macro/test_macro.py | 8 +++---- scripts/commands/ValueProvider.py | 3 +-- scripts/settings.txt | 2 ++ scripts/taskRunner.py | 12 +++++++++- scripts/utils/{Macro.py => MacroProcessor.py} | 9 ++++---- 9 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 scripts/Core/LineConveyor/MacroResolver.py create mode 100644 scripts/Tests/UnitTests/LineConveyor/test_macroResolver.py rename scripts/utils/{Macro.py => MacroProcessor.py} (71%) diff --git a/scripts/Core/LineConveyor/MacroResolver.py b/scripts/Core/LineConveyor/MacroResolver.py new file mode 100644 index 0000000..a57b5fe --- /dev/null +++ b/scripts/Core/LineConveyor/MacroResolver.py @@ -0,0 +1,20 @@ +class MacroResolver: + def __init__(self, macroProcessor, valueProvider): + assert macroProcessor is not None + assert valueProvider is not None + + self.macroProcessor = macroProcessor + self.valueProvider = valueProvider + + def processLine(self, line): + assert line is not None + + symbols = self.macroProcessor.getSymbols(line) + + for sym in symbols: + macro = self.macroProcessor.getMacroByName(sym) + value = self.valueProvider.getValueFor(sym) + + line = line.replace(macro, value) + + return line \ No newline at end of file diff --git a/scripts/Core/StepsRunner.py b/scripts/Core/StepsRunner.py index d106fcc..51e1d01 100644 --- a/scripts/Core/StepsRunner.py +++ b/scripts/Core/StepsRunner.py @@ -8,17 +8,16 @@ from CommandBuilders.PatchInfoplistCommandBuilder import PatchInfoplistCommandBu 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, config, compositeLineProcessor): + def __init__(self, config, compositeLineProcessor, valueProvider): assert config is not None assert compositeLineProcessor is not None + assert valueProvider is not None self.lineConveyor = compositeLineProcessor - - self.valueProvider = ValueProvider(config) + self.valueProvider = valueProvider self.shCommandBuilder = ShCommandBuilder() self.removeProjectBuilder = RemoveProjectCommandBuilder() diff --git a/scripts/IosSteps.txt b/scripts/IosSteps.txt index 870290c..8ef53bc 100644 --- a/scripts/IosSteps.txt +++ b/scripts/IosSteps.txt @@ -1,22 +1,22 @@ +sh echo hello from '{@author}' + 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 CFBundleVersion to '{@version}' 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' +clean 'BuildSample/BuildSample.sln' for '{@sln_config}' +build 'BuildSample/BuildSample.sln' for '{@sln_config}' create dirs 'Output/Appstore/Artifacts' -copy 'BuildSample/BuildSample/Output/BuildSample-1.2.3.ipa' to 'Output/Appstore/Artifacts' +copy 'BuildSample/BuildSample/Output/BuildSample-{@version}.ipa' to 'Output/Appstore/Artifacts' sh cp -a BuildSample/BuildSample/Output/ Output/Appstore/ restore from backup -delete backup - -sh echo hello from Rustam \ No newline at end of file +delete backup \ No newline at end of file diff --git a/scripts/Tests/UnitTests/LineConveyor/test_macroResolver.py b/scripts/Tests/UnitTests/LineConveyor/test_macroResolver.py new file mode 100644 index 0000000..019b5a1 --- /dev/null +++ b/scripts/Tests/UnitTests/LineConveyor/test_macroResolver.py @@ -0,0 +1,23 @@ +import unittest +from Core.LineConveyor.MacroResolver import MacroResolver +from commands.ValueProvider import ValueProvider +from utils.MacroProcessor import MacroProcessor + + +class TestMacroResolver(unittest.TestCase): + def setUp(self): + config = { + 'key1': 'hello world', + 'some_name': 'another name', + 'version': '1.2.3' + } + + macroProcessor = MacroProcessor() + valueProvider = ValueProvider(config) + self.macroResolver = MacroResolver(macroProcessor, valueProvider) + + def test_resolveLine(self): + line = '{@key1} bla {@some_name} version: {@version}' + newLine = self.macroResolver.processLine(line) + + self.assertEqual('hello world bla another name version: 1.2.3', newLine) \ No newline at end of file diff --git a/scripts/Tests/UnitTests/Macro/test_macro.py b/scripts/Tests/UnitTests/Macro/test_macro.py index e77f99d..dc89ac4 100644 --- a/scripts/Tests/UnitTests/Macro/test_macro.py +++ b/scripts/Tests/UnitTests/Macro/test_macro.py @@ -1,10 +1,10 @@ import unittest -from utils.Macro import Macro +from utils.MacroProcessor import MacroProcessor class TestMacro(unittest.TestCase): def setUp(self): - self.macroParser = Macro() + self.macroParser = MacroProcessor() def test_parseMacros(self): line = 'hello {@this} is {@my_macro} and {@macro_with_numbers123}' @@ -19,10 +19,10 @@ class TestMacro(unittest.TestCase): line = '{@macro_name}' name = self.macroParser.getMacroName(line) - self.assertEqual('macro_name', name) + self.assertEqual('@macro_name', name) def test_getMacro(self): - line = 'some_name' + line = '@some_name' macro = self.macroParser.getMacroByName(line) self.assertEqual('{@some_name}', macro) \ No newline at end of file diff --git a/scripts/commands/ValueProvider.py b/scripts/commands/ValueProvider.py index 8423cb9..bd5fea1 100644 --- a/scripts/commands/ValueProvider.py +++ b/scripts/commands/ValueProvider.py @@ -1,7 +1,6 @@ class ValueProvider: - def __init__(self, config): + def setConfig(self, config): assert config is not None - self.__config = config def getValueFor(self, link): diff --git a/scripts/settings.txt b/scripts/settings.txt index ae50dd1..8b5a24c 100644 --- a/scripts/settings.txt +++ b/scripts/settings.txt @@ -12,6 +12,8 @@ ios.steps = 'scripts/IosSteps.txt' ios.appstore.build_ready = 'true' ios.appstore.app_name = 'CoolApp' ios.appstore.sln_config = 'Release|iPhone' +ios.appstore.author = 'Rustam' +ios.appstore.version = '7.7.7' #ios.staging.build_ready = 'true' ios.staging.app_name = 'CoolApp staging' diff --git a/scripts/taskRunner.py b/scripts/taskRunner.py index 57494de..a58f578 100644 --- a/scripts/taskRunner.py +++ b/scripts/taskRunner.py @@ -1,9 +1,12 @@ import os from Core.LineConveyor.CommentRemover import CommentRemover from Core.LineConveyor.LineConveyor import LineConveyor +from Core.LineConveyor.MacroResolver import MacroResolver from Core.LineConveyor.Stripper import Stripper +from commands.ValueProvider import ValueProvider from utils.BuildConfigProvider import BuildConfigProvider from utils.FromFileSettingsProvider import FromFileSettingsProvider +from utils.MacroProcessor import MacroProcessor scriptFilePath = os.path.abspath(__file__) @@ -22,21 +25,28 @@ class TaskRunner: lineStripper = Stripper() commentRemover = CommentRemover() + + macroProcessor = MacroProcessor() + self.valueProvider = ValueProvider() + macroResolver = MacroResolver(macroProcessor, self.valueProvider) + self.lineConveyor = LineConveyor() self.lineConveyor.addProcessor(lineStripper) self.lineConveyor.addProcessor(commentRemover) + self.lineConveyor.addProcessor(macroResolver) def run(self): settings = self.settingsProvider.fetchSettings() buildReadyConfigs = self.configsProvider.getConfigs(settings) for bc in buildReadyConfigs: + self.valueProvider.setConfig(bc) self.runConfig(bc) def runConfig(self, config): content = self.getStepsContent(config) - stepsRunner = StepsRunner(config, self.lineConveyor) + stepsRunner = StepsRunner(config, self.lineConveyor, self.valueProvider) stepsRunner.run(content) def getStepsContent(self, config): diff --git a/scripts/utils/Macro.py b/scripts/utils/MacroProcessor.py similarity index 71% rename from scripts/utils/Macro.py rename to scripts/utils/MacroProcessor.py index 7d62e6d..911647d 100644 --- a/scripts/utils/Macro.py +++ b/scripts/utils/MacroProcessor.py @@ -1,24 +1,25 @@ import re -class Macro: +class MacroProcessor: def __init__(self): pass def getMacroByName(self, macroName): assert macroName is not None + assert macroName.startswith('@') - return '{@' + macroName + '}' + return '{' + macroName + '}' def getMacroName(self, macro): assert macro.startswith('{@') assert macro.endswith('}') - return macro[2:-1] + return macro[1:-1] def getSymbols(self, line): assert line is not None - symRegexp = r"{@(?P[\w]+)}" + symRegexp = r"{(?P@[\w]+)}" regexp = re.compile(symRegexp) result = regexp.findall(line)