From 4939004dca81b86494187214fa86965a09dd4046 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Fri, 15 Nov 2013 19:04:19 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=83=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=BF=D0=B8=D1=81=D0=B8=20apk=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommandBuilders/SignApkBuilder.py | 30 ++++++++++++++ scripts/TouchinBuild/Core/StepsRunner.py | 4 ++ .../CleanBuildCommands/SignApkCommand.py | 28 +++++++++++++ scripts/TouchinBuild/parsers/SignApkParser.py | 40 +++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 scripts/TouchinBuild/CommandBuilders/SignApkBuilder.py create mode 100644 scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py create mode 100644 scripts/TouchinBuild/parsers/SignApkParser.py diff --git a/scripts/TouchinBuild/CommandBuilders/SignApkBuilder.py b/scripts/TouchinBuild/CommandBuilders/SignApkBuilder.py new file mode 100644 index 0000000..74180b8 --- /dev/null +++ b/scripts/TouchinBuild/CommandBuilders/SignApkBuilder.py @@ -0,0 +1,30 @@ +from commands.CleanBuildCommands.SignApkCommand import SignApkCommand +from parsers.SignApkParser import SignApkParser + + +class SignApkCommandBuilder: + def __init__(self, pathToBuildUtil): + assert pathToBuildUtil is not None + + self.pathToBuildUtil = pathToBuildUtil + + def isSignApk(self, line): + assert line is not None + + parser = SignApkParser() + isValid = parser.isValidLine(line) + + return isValid + + def getCommandFor(self, line): + assert line is not None + + parser = SignApkParser() + result = parser.parseLine(line) + + slnPath = result[0] + slnConfig = result[1] + projectName = result[2] + + command = SignApkCommand(self.pathToBuildUtil, slnPath, slnConfig, projectName) + return command \ No newline at end of file diff --git a/scripts/TouchinBuild/Core/StepsRunner.py b/scripts/TouchinBuild/Core/StepsRunner.py index e2a1238..fefce63 100644 --- a/scripts/TouchinBuild/Core/StepsRunner.py +++ b/scripts/TouchinBuild/Core/StepsRunner.py @@ -11,6 +11,7 @@ from CommandBuilders.PatchManifestCommandBuilder import PatchManifestCommandBuil from CommandBuilders.RemoveProjectCommandBuilder import RemoveProjectCommandBuilder from CommandBuilders.RestoreBackupCommandBuilder import RestoreBackupCommandBuilder from CommandBuilders.ShCommandBuilder import ShCommandBuilder +from CommandBuilders.SignApkBuilder import SignApkCommandBuilder from CommandBuilders.TestflightCommandBuilder import TestflightCommandBuilder @@ -42,6 +43,7 @@ class StepsRunner: buildUtilPath = config['build_tool'] self.cleanBuilder = CleanBuildCommandBuilder(buildUtilPath, 'clean') self.buildBuilder = CleanBuildCommandBuilder(buildUtilPath, 'build') + self.signAndroid = SignApkCommandBuilder(buildUtilPath) def run(self, content): assert content is not None @@ -64,6 +66,8 @@ class StepsRunner: cmd = self.cleanBuilder.getCommandFor(line) elif self.buildBuilder.isCleanBuild(line): cmd = self.buildBuilder.getCommandFor(line) + elif self.signAndroid.isSignApk(line): + cmd = self.signAndroid.getCommandFor(line) elif self.createBackupBuilder.isCreateBackup(line): cmd = self.createBackupBuilder.getCommandFor(line) elif self.createDirs.isMakeDirsCommand(line): diff --git a/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py b/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py new file mode 100644 index 0000000..7fc0e4e --- /dev/null +++ b/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py @@ -0,0 +1,28 @@ +from commands.ShellCommandBase import ShellCommandBase + + +class SignApkCommand(ShellCommandBase): + def __init__(self, pathToBuildUtil, slnPath, slnConfig, projectName): + ShellCommandBase.__init__(self) + + assert pathToBuildUtil is not None + assert slnPath is not None + assert slnConfig is not None + assert projectName is not None + + self.pathToBuildUtil = pathToBuildUtil + self.slnPath = slnPath + self.slnConfig = slnConfig + self.projectName = projectName + + self.commandPattern = '%(mdtool) -v build "--configuration:%(config)" "--project:%(project)" /t:SignAndroidPackage "%(slnPath)"' + + def execute(self): + cmdText = self.commandPattern % { + 'mdtool': self.pathToBuildUtil, + 'config': self.slnConfig, + 'project': self.projectName, + 'slnPath': self.slnPath + } + + self.executeShell(cmdText) diff --git a/scripts/TouchinBuild/parsers/SignApkParser.py b/scripts/TouchinBuild/parsers/SignApkParser.py new file mode 100644 index 0000000..4108b9f --- /dev/null +++ b/scripts/TouchinBuild/parsers/SignApkParser.py @@ -0,0 +1,40 @@ +import re +from parsers.LineParser import LineParser +from parsers.RegexpBuilder import RegexpBuilder + + +class SignApkParser(LineParser): + def __init__(self): + LineParser.__init__(self) + + def parseLine(self, line): + assert line is not None + + filePathRegexp = r"'(?P[./ a-zA-Z]+\.sln)'" + slnConfigRegexp = r"'(?P[a-zA-Z|]+)'" + projectRegexp = r"(?P[.a-zA-Z]+)$" + + rb = RegexpBuilder() + rSrc = rb.startsWith('sign') + rb.than('android') + filePathRegexp + rb.keywordToken('for') + slnConfigRegexp +\ + rb.keywordToken('project') + projectRegexp + regexp = re.compile(rSrc, re.UNICODE) + + match = regexp.match(line) + self._guardMatch(match, line, rSrc) + + path = match.group('path') + slnConfig = match.group('config') + project = match.group('project') + + return path, slnConfig, project + + def isValidLine(self, line): + assert line is not None + + rb = RegexpBuilder() + rSrc = rb.startsWith('sign') + rb.than('android') + + regexp = re.compile(rSrc, re.UNICODE) + match = regexp.match(line) + + return match is not None \ No newline at end of file From 4feaa0992d5c36303462df3c3207d9ddd78019a4 Mon Sep 17 00:00:00 2001 From: rzaitov Date: Fri, 15 Nov 2013 19:14:34 +0400 Subject: [PATCH 2/2] =?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=83?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D0=B8=20apk=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/AndroidSteps.txt | 2 +- .../commands/CleanBuildCommands/SignApkCommand.py | 10 ++-------- scripts/TouchinBuild/parsers/SignApkParser.py | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/scripts/AndroidSteps.txt b/scripts/AndroidSteps.txt index 5d3f566..0bbd163 100644 --- a/scripts/AndroidSteps.txt +++ b/scripts/AndroidSteps.txt @@ -4,4 +4,4 @@ inside 'BuildSample/DroidApp/Properties/AndroidManifest.xml' set android:version inside 'BuildSample/DroidApp/Properties/AndroidManifest.xml' set android:versionName to '1.2.3' clean 'BuildSample/BuildSample.sln' for '{@sln_config}' -build 'BuildSample/BuildSample.sln' for '{@sln_config}' +sign android 'BuildSample/BuildSample.sln' for '{@sln_config}' project 'DroidApp' diff --git a/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py b/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py index 7fc0e4e..9914f75 100644 --- a/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py +++ b/scripts/TouchinBuild/commands/CleanBuildCommands/SignApkCommand.py @@ -15,14 +15,8 @@ class SignApkCommand(ShellCommandBase): self.slnConfig = slnConfig self.projectName = projectName - self.commandPattern = '%(mdtool) -v build "--configuration:%(config)" "--project:%(project)" /t:SignAndroidPackage "%(slnPath)"' + self.commandPattern = '{0} -v build "--configuration:{1}" "--project:{2}" /t:SignAndroidPackage "{3}"' def execute(self): - cmdText = self.commandPattern % { - 'mdtool': self.pathToBuildUtil, - 'config': self.slnConfig, - 'project': self.projectName, - 'slnPath': self.slnPath - } - + cmdText = self.commandPattern.format(self.pathToBuildUtil, self.slnConfig, self.projectName, self.slnPath) self.executeShell(cmdText) diff --git a/scripts/TouchinBuild/parsers/SignApkParser.py b/scripts/TouchinBuild/parsers/SignApkParser.py index 4108b9f..5ac4e20 100644 --- a/scripts/TouchinBuild/parsers/SignApkParser.py +++ b/scripts/TouchinBuild/parsers/SignApkParser.py @@ -12,7 +12,7 @@ class SignApkParser(LineParser): filePathRegexp = r"'(?P[./ a-zA-Z]+\.sln)'" slnConfigRegexp = r"'(?P[a-zA-Z|]+)'" - projectRegexp = r"(?P[.a-zA-Z]+)$" + projectRegexp = r"'(?P[.a-zA-Z]+)'$" rb = RegexpBuilder() rSrc = rb.startsWith('sign') + rb.than('android') + filePathRegexp + rb.keywordToken('for') + slnConfigRegexp +\