diff --git a/scripts/IosSteps.txt b/scripts/IosSteps.txt index 8ef53bc..89d73cc 100644 --- a/scripts/IosSteps.txt +++ b/scripts/IosSteps.txt @@ -1,4 +1,5 @@ sh echo hello from '{@author}' +sh echo version: '{@version}' restore from backup create backup for 'BuildSample' diff --git a/scripts/parser/SettingsParser/SettingsLineParser.py b/scripts/parser/SettingsParser/SettingsLineParser.py index bef23b6..b3713e1 100644 --- a/scripts/parser/SettingsParser/SettingsLineParser.py +++ b/scripts/parser/SettingsParser/SettingsLineParser.py @@ -31,7 +31,7 @@ class SettingsLineParser(LineParser): propPathRegexp = r"^(?P[\w.]+)" valueRegexp = "'(?P.*)'" - regexpSource = propPathRegexp + self.keywordToken('=') + valueRegexp + regexpSource = propPathRegexp + r'\s*=\s*' + valueRegexp regexp = re.compile(regexpSource, re.UNICODE) match = regexp.match(line) diff --git a/scripts/parser/SettingsParser/SettingsMerger.py b/scripts/parser/SettingsParser/SettingsMerger.py index 755e6ff..73af7dc 100644 --- a/scripts/parser/SettingsParser/SettingsMerger.py +++ b/scripts/parser/SettingsParser/SettingsMerger.py @@ -10,7 +10,7 @@ class SettingsMerger: propName = segments[-1] settingsDict = self.getSettingsDictByPath(globalSettings, propPath) - self.overrideGuard(settingsDict, propName, propPath) + #self.overrideGuard(settingsDict, propName, propPath) settingsDict[propName] = value @@ -26,10 +26,10 @@ class SettingsMerger: return settingsDict - def overrideGuard(self, dictionary, key, path): - if key in dictionary: - pathStr = '.'.join(path) - msg = 'settings with name {0} by path {1} already exists with value {3}'.format(key, dictionary[key], pathStr) - raise Exception(msg) + #def overrideGuard(self, dictionary, key, path): + # if key in dictionary: + # pathStr = '.'.join(path) + # msg = 'settings with name {0} by path {1} already exists with value {3}'.format(key, dictionary[key], pathStr) + # raise Exception(msg) diff --git a/scripts/parser/SettingsParser/SettingsParser.py b/scripts/parser/SettingsParser/SettingsParser.py index 37489dc..1e55f43 100644 --- a/scripts/parser/SettingsParser/SettingsParser.py +++ b/scripts/parser/SettingsParser/SettingsParser.py @@ -3,8 +3,11 @@ from parser.SettingsParser.SettingsMerger import SettingsMerger class SettingsParser: - def __init__(self): - self.settings = {} + def __init__(self, settings=None): + self.settings = settings + + if not self.settings: + self.settings = {} def parse(self, content): assert content is not None @@ -21,6 +24,7 @@ class SettingsParser: self.processLine(stripped) def processLine(self, line): + assert line is not None parser = SettingsLineParser() setting = parser.parseLine(line) diff --git a/scripts/taskRunner.py b/scripts/taskRunner.py index a58f578..048ce40 100644 --- a/scripts/taskRunner.py +++ b/scripts/taskRunner.py @@ -1,12 +1,15 @@ +# -*- coding: utf-8 -*- import os +import argparse 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 +from utils.SettingsProvider.CmdArgsOverriderSettingsProvider import CmdArgsOverriderSettingsProvider +from utils.SettingsProvider.FromFileSettingsProvider import FromFileSettingsProvider scriptFilePath = os.path.abspath(__file__) @@ -19,9 +22,11 @@ from Core.StepsRunner import StepsRunner class TaskRunner: - def __init__(self): + def __init__(self, settingsProvider): + assert settingsProvider is not None + + self.settingsProvider = settingsProvider self.configsProvider = BuildConfigProvider() - self.settingsProvider = FromFileSettingsProvider() lineStripper = Stripper() commentRemover = CommentRemover() @@ -56,5 +61,12 @@ class TaskRunner: content = stepsFile.read() return content -runner = TaskRunner() +parser = argparse.ArgumentParser() +overrideArgs = parser.parse_known_args()[1] + +# TODO: перенести в корень комапановки +fromFileSettingsProvider = FromFileSettingsProvider() +settingsProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs) + +runner = TaskRunner(settingsProvider) runner.run() diff --git a/scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py b/scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py new file mode 100644 index 0000000..533c289 --- /dev/null +++ b/scripts/utils/SettingsProvider/CmdArgsOverriderSettingsProvider.py @@ -0,0 +1,33 @@ +import select +from parser.SettingsParser.SettingsParser import SettingsParser + + +class CmdArgsOverriderSettingsProvider: + def __init__(self, settingsProvider, settingLines): + assert settingsProvider is not None + + self.inner = settingsProvider + self.overrideSettings = settingLines + + def fetchSettings(self): + settings = self.inner.fetchSettings() + + if self.overrideSettings: + for s in self.overrideSettings: + line = self.normalizeLine(s) + settingParser = SettingsParser(settings) + settingParser.processLine(line) + + return settings + + + def normalizeLine(self, line): + assert line is not None + assert '=' in line + + index = line.find('=') + path = line[0:index] + value = line[index + 1:] + + normalizedLine = "{0} = '{1}'".format(path, value) + return normalizedLine diff --git a/scripts/utils/FromFileSettingsProvider.py b/scripts/utils/SettingsProvider/FromFileSettingsProvider.py similarity index 100% rename from scripts/utils/FromFileSettingsProvider.py rename to scripts/utils/SettingsProvider/FromFileSettingsProvider.py diff --git a/scripts/utils/SettingsProvider/__init__.py b/scripts/utils/SettingsProvider/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/utils/SettingsProvider/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov'