From 6e1ec01a13f629b331d4e3b6a7d1f6fddfa93fe0 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:16:56 +0400 Subject: [PATCH 1/8] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/commands/CopyCommand.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/commands/CopyCommand.py b/scripts/commands/CopyCommand.py index 30d01be..daf4127 100644 --- a/scripts/commands/CopyCommand.py +++ b/scripts/commands/CopyCommand.py @@ -7,7 +7,7 @@ class CopyCommand: assert copyArguments is not None self.__pathProvider = pathProvider - self.__copyArguments = copyArguments + self.__copyArguments = copyArguments def execute(self): source = self.__expandPath(self.__copyArguments.source) From 5f3edd5f000f432eb8d00a344273f9c7a330b57b Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:17:36 +0400 Subject: [PATCH 2/8] =?UTF-8?q?=D0=A0=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=B0=D1=80=D1=81=D0=B5=D1=80=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CleanBuildParser/CleanBuildParser.py | 31 +++++++++++++++++++ scripts/parser/CleanBuildParser/__init__.py | 1 + 2 files changed, 32 insertions(+) create mode 100644 scripts/parser/CleanBuildParser/CleanBuildParser.py create mode 100644 scripts/parser/CleanBuildParser/__init__.py diff --git a/scripts/parser/CleanBuildParser/CleanBuildParser.py b/scripts/parser/CleanBuildParser/CleanBuildParser.py new file mode 100644 index 0000000..78c08bb --- /dev/null +++ b/scripts/parser/CleanBuildParser/CleanBuildParser.py @@ -0,0 +1,31 @@ +from parser.LineParser import LineParser +import re + +class CleanBuildParser(LineParser): + def __init__(self, commandToken): + assert commandToken is not None + + self.__commandToken = commandToken + + def parseLine(self, line): + assert line is not None + + filePathRegexp = r"'(?P[./ a-zA-Z]+\.sln)'" + slnConfigRegexp = r"'(?P[a-zA-Z|]+)'$" + + regexpSource = self.startsWithKeywordToken(self.__commandToken) + filePathRegexp + self.keywordToken('for') + slnConfigRegexp + regexp = re.compile(regexpSource, re.UNICODE) + + match = regexp.match(line) + self._guardMatch(match, line, regexpSource) + + path = match.group('path') + slnConfig = match.group('config') + + return (path, slnConfig) + + def isValidLine(self, line): + assert line is not None + + isValid = line.startswith(self.__commandToken) + return isValid diff --git a/scripts/parser/CleanBuildParser/__init__.py b/scripts/parser/CleanBuildParser/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/parser/CleanBuildParser/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' From 733d356de15cdfb6ce48863bd2beefd7f7919e32 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:18:24 +0400 Subject: [PATCH 3/8] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20=D1=8E=D0=BD=D0=B8=D1=82=D1=82=D0=B5=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BA=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=D1=83=20=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20=D0=B8=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B5?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnitTests/CleanBuildParser/__init__.py | 1 + .../CleanBuildParser/test_cleanBuildParser.py | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 scripts/UnitTests/CleanBuildParser/__init__.py create mode 100644 scripts/UnitTests/CleanBuildParser/test_cleanBuildParser.py diff --git a/scripts/UnitTests/CleanBuildParser/__init__.py b/scripts/UnitTests/CleanBuildParser/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/UnitTests/CleanBuildParser/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/UnitTests/CleanBuildParser/test_cleanBuildParser.py b/scripts/UnitTests/CleanBuildParser/test_cleanBuildParser.py new file mode 100644 index 0000000..cf0f49d --- /dev/null +++ b/scripts/UnitTests/CleanBuildParser/test_cleanBuildParser.py @@ -0,0 +1,26 @@ +import unittest +from parser.CleanBuildParser.CleanBuildParser import CleanBuildParser + + +class TestCleanBuildParser(unittest.TestCase): + def setUp(self): + self.parser = CleanBuildParser('CMD_TOKEN') + + def test_isValid(self): + line = "CMD_TOKEN bla bla" + isValid = self.parser.isValidLine(line) + + self.assertEqual(True, isValid) + + def test_isNotValid(self): + line = 'bla bla CMD_TOKEN' + isValid = self.parser.isValidLine(line) + + self.assertEqual(False, isValid) + + def test_parse(self): + line = "CMD_TOKEN '../Base dir/Solution.sln' for 'Release|iPhone'" + result = self.parser.parseLine(line) + + self.assertEqual('../Base dir/Solution.sln', result[0]) + self.assertEqual('Release|iPhone', result[1]) \ No newline at end of file From 5524183b38676bbc29efe77ff06359182feb3dab Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:19:01 +0400 Subject: [PATCH 4/8] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= =?UTF-8?q?=20=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CleanBuildCommands/BuildCommand.py | 8 ++++++++ .../CleanBuildCommandBase.py | 18 ++++++++++++++++++ .../CleanBuildCommands/CleanCommand.py | 7 +++++++ .../commands/CleanBuildCommands/__init__.py | 1 + 4 files changed, 34 insertions(+) create mode 100644 scripts/commands/CleanBuildCommands/BuildCommand.py create mode 100644 scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py create mode 100644 scripts/commands/CleanBuildCommands/CleanCommand.py create mode 100644 scripts/commands/CleanBuildCommands/__init__.py diff --git a/scripts/commands/CleanBuildCommands/BuildCommand.py b/scripts/commands/CleanBuildCommands/BuildCommand.py new file mode 100644 index 0000000..3704f2f --- /dev/null +++ b/scripts/commands/CleanBuildCommands/BuildCommand.py @@ -0,0 +1,8 @@ +from commands.CleanBuildCommands.CleanBuildCommandBase import CleanBuildCommandBase + + +class BuildCommand(CleanBuildCommandBase): + def __init__(self, pathToBuildUtil, slnPath, slnConfig): + commandPattern = '{0} -v build "--configuration:{1}" "--target:Build" {2}' + CleanBuildCommandBase.__init__(self, commandPattern, pathToBuildUtil, slnPath, slnConfig) + diff --git a/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py b/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py new file mode 100644 index 0000000..097caa6 --- /dev/null +++ b/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py @@ -0,0 +1,18 @@ +from subprocess import call + + +class CleanBuildCommandBase: + def __init__(self, commandPattern, pathToBuildUtil, slnPath, slnConfig): + assert commandPattern is not None + assert pathToBuildUtil is not None + assert slnPath is not None + assert slnConfig is not None + + self.__commandPattern = commandPattern + self.__pathToBuildUtil = pathToBuildUtil + self.__slnPath = slnPath + self.__slnConfig = slnConfig + + def execute(self): + cleanCmdText = self.__commandPattern.format(self.__pathToBuildUtil, self.__slnConfig, self.__slnPath) + returnCode = call(cleanCmdText, shell=True) diff --git a/scripts/commands/CleanBuildCommands/CleanCommand.py b/scripts/commands/CleanBuildCommands/CleanCommand.py new file mode 100644 index 0000000..209afbb --- /dev/null +++ b/scripts/commands/CleanBuildCommands/CleanCommand.py @@ -0,0 +1,7 @@ +from commands.CleanBuildCommands.CleanBuildCommandBase import CleanBuildCommandBase + + +class CleanCommand(CleanBuildCommandBase): + def __init__(self, pathToBuildUtil, slnPath, slnConfig): + commandPattern = '{0} -v build "--configuration:{1}" "--target:Clean" {2}' + CleanBuildCommandBase.__init__(self, commandPattern, pathToBuildUtil, slnPath, slnConfig) diff --git a/scripts/commands/CleanBuildCommands/__init__.py b/scripts/commands/CleanBuildCommands/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/commands/CleanBuildCommands/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' From 8c4690188ff8ac90bf454db184184786f34b2950 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:19:25 +0400 Subject: [PATCH 5/8] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D1=82=D1=80=D0=BE=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20=D0=B8=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CleanBuildCommandBuilder.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 scripts/CommandBuilders/CleanBuildCommandBuilder.py diff --git a/scripts/CommandBuilders/CleanBuildCommandBuilder.py b/scripts/CommandBuilders/CleanBuildCommandBuilder.py new file mode 100644 index 0000000..e7cbd80 --- /dev/null +++ b/scripts/CommandBuilders/CleanBuildCommandBuilder.py @@ -0,0 +1,44 @@ +from commands.CleanBuildCommands.BuildCommand import BuildCommand +from commands.CleanBuildCommands.CleanCommand import CleanCommand +from parser.CleanBuildParser.CleanBuildParser import CleanBuildParser + + +class CleanBuildCommandBuilder: + def __init__(self, pathToBuildUtil, commandToken): + assert pathToBuildUtil is not None + assert commandToken is not None + + self.__pathToBuildUtil = pathToBuildUtil + self.__commandToken = commandToken + + def isCleanBuild(self, line): + assert line is not None + + parser = CleanBuildParser(self.__commandToken) + isValid = parser.isValidLine(line) + + return isValid + + def getCommandFor(self, line): + assert line is not None + + parser = CleanBuildParser(self.__commandToken) + result = parser.parseLine(line) + + slnPath = result[0] + slnConf = result[1] + + command = self.__getCommandByToken(slnPath, slnConf) + return command + + def __getCommandByToken(self, slnPath, slnConfig): + command = None + + if self.__commandToken == 'clean': + command = CleanCommand(self.__pathToBuildUtil, slnPath, slnConfig) + elif self.__commandToken == 'build': + command = BuildCommand(self.__pathToBuildUtil, slnConfig, slnConfig) + else: + raise Exception('unrecognised command token {0}'.format(self.__commandToken)) + + return command \ No newline at end of file From ed99678257db99fdc85a002e00ca8b4bc6125875 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:29:11 +0400 Subject: [PATCH 6/8] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D1=83=D1=87=D0=BD=D0=BE=D0=B9=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BE=D1=87=D0=B8=D1=81=D0=BA=D0=B8=20=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F.=20=D0=A1=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ManualTests/clean_test.py | 9 +++++++++ scripts/run_manual_tests.py | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 scripts/ManualTests/clean_test.py diff --git a/scripts/ManualTests/clean_test.py b/scripts/ManualTests/clean_test.py new file mode 100644 index 0000000..3af255a --- /dev/null +++ b/scripts/ManualTests/clean_test.py @@ -0,0 +1,9 @@ +from CommandBuilders.CleanBuildCommandBuilder import CleanBuildCommandBuilder + +buildUtilPath = '/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool' +line = "clean 'BuildSample/BuildSample.sln' for 'Release|iPhone'" + +builder = CleanBuildCommandBuilder(buildUtilPath, 'clean') + +command = builder.getCommandFor(line) +command.execute() \ No newline at end of file diff --git a/scripts/run_manual_tests.py b/scripts/run_manual_tests.py index 077bfeb..33326b7 100644 --- a/scripts/run_manual_tests.py +++ b/scripts/run_manual_tests.py @@ -16,5 +16,6 @@ os.chdir(baseDir) #import ManualTests.run_sh_command #import ManualTests.make_dirs #import ManualTests.remove_project +#import ManualTests.infoplist_test -import ManualTests.infoplist_test \ No newline at end of file +import ManualTests.clean_test \ No newline at end of file From 612a4652705a95582f5ad1f42c2d24b25af85f00 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:43:09 +0400 Subject: [PATCH 7/8] =?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=D1=80=D1=83=D1=87=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ManualTests/build_test.py | 9 +++++++++ .../commands/CleanBuildCommands/CleanBuildCommandBase.py | 4 ++-- scripts/run_manual_tests.py | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 scripts/ManualTests/build_test.py diff --git a/scripts/ManualTests/build_test.py b/scripts/ManualTests/build_test.py new file mode 100644 index 0000000..21f3e29 --- /dev/null +++ b/scripts/ManualTests/build_test.py @@ -0,0 +1,9 @@ +from CommandBuilders.CleanBuildCommandBuilder import CleanBuildCommandBuilder + +buildUtilPath = '/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool' +line = "build 'BuildSample/BuildSample.sln' for 'Release|iPhone'" + +builder = CleanBuildCommandBuilder(buildUtilPath, 'build') + +command = builder.getCommandFor(line) +command.execute() diff --git a/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py b/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py index 097caa6..60fc025 100644 --- a/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py +++ b/scripts/commands/CleanBuildCommands/CleanBuildCommandBase.py @@ -14,5 +14,5 @@ class CleanBuildCommandBase: self.__slnConfig = slnConfig def execute(self): - cleanCmdText = self.__commandPattern.format(self.__pathToBuildUtil, self.__slnConfig, self.__slnPath) - returnCode = call(cleanCmdText, shell=True) + cmdText = self.__commandPattern.format(self.__pathToBuildUtil, self.__slnConfig, self.__slnPath) + returnCode = call(cmdText, shell=True) diff --git a/scripts/run_manual_tests.py b/scripts/run_manual_tests.py index 33326b7..58ccd16 100644 --- a/scripts/run_manual_tests.py +++ b/scripts/run_manual_tests.py @@ -17,5 +17,6 @@ os.chdir(baseDir) #import ManualTests.make_dirs #import ManualTests.remove_project #import ManualTests.infoplist_test +#import ManualTests.clean_test -import ManualTests.clean_test \ No newline at end of file +import ManualTests.build_test \ No newline at end of file From 88703cf9295880e44cb49ff3de21ea7a0de91066 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Thu, 31 Oct 2013 14:43:41 +0400 Subject: [PATCH 8/8] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/CommandBuilders/CleanBuildCommandBuilder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/CommandBuilders/CleanBuildCommandBuilder.py b/scripts/CommandBuilders/CleanBuildCommandBuilder.py index e7cbd80..ab47d24 100644 --- a/scripts/CommandBuilders/CleanBuildCommandBuilder.py +++ b/scripts/CommandBuilders/CleanBuildCommandBuilder.py @@ -37,7 +37,7 @@ class CleanBuildCommandBuilder: if self.__commandToken == 'clean': command = CleanCommand(self.__pathToBuildUtil, slnPath, slnConfig) elif self.__commandToken == 'build': - command = BuildCommand(self.__pathToBuildUtil, slnConfig, slnConfig) + command = BuildCommand(self.__pathToBuildUtil, slnPath, slnConfig) else: raise Exception('unrecognised command token {0}'.format(self.__commandToken))