Browse Source

【软件版本】
V
【模块名称】
APK自动编译
【问题原因】
完成功能。
【修改描述】

【测试结果】

sat23 3 years ago
parent
commit
e88b4c57fe
1 changed files with 93 additions and 62 deletions
  1. 93 62
      APK自动编译/app-auto-release.py

+ 93 - 62
APK自动编译/app-auto-release.py

@@ -4,6 +4,8 @@ from __future__ import unicode_literals
 import os
 import re  # 正则表达式;
 import sys
+#reload(sys)
+#sys.setdefaultencoding('utf-8')
 import time
 import datetime
 import shutil
@@ -12,7 +14,50 @@ import subprocess
 import xlrd
 import xlwt
 from xlwt import XFStyle, Pattern
-import win_subprocess #此版本对应宽字节,subprocess为acssi;
+import win_subprocess  # 此版本对应宽字节,subprocess为acssi;
+import shutil
+
+
+def copyfile(src_file, dest_file):
+    shutil.copy(src_file, dest_file)
+
+
+def copyfolder(src_foler, dest_folder):
+    src_files = os.listdir(src_foler)
+    for name in src_files:
+        copyfile(src_foler+"\\"+name, dest_folder+"\\"+name)
+
+# 不使用重定向;
+def cmdExecute2(cmd):
+    # 定义文件名称;
+    file_name = str(time.time())
+    # 输出到文件中;
+    cmd = cmd + ' >> ' + file_name
+    print u'执行cmd:', cmd
+    proc = subprocess.Popen(cmd, shell=True)
+    # 等待完成;
+    proc.wait()
+    # 读取文件内容;
+    data = ''
+    with open(file_name, mode="rb") as f:
+        data = f.read()
+
+    os.remove(file_name)
+    print u"cmd结果:", data
+    return data
+
+
+def cmdExecute(cmd):
+    print u'执行cmd:', cmd
+    proc = win_subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    # 等待完成;
+    stdout, stderr = proc.communicate()
+    if proc.returncode == 0:
+        print u'执行成功'
+    # 返回执行结果;
+    # print u"cmdExecute结果:%s" % stdout
+    return stdout
+
 
 class ExcelParser:
     def __init__(self, excelPath):
@@ -94,47 +139,18 @@ class remoteSVN:
 
 
 # 本地SVN操作,必须安装命令行;
+
 class localSVN:
     def __init__(self):
         print 'local svn'
 
-    # 不使用重定向;
-    def __cmdExecute2(self, cmd):
-        # 定义文件名称;
-        file_name = str(time.time())
-        # 输出到文件中;
-        cmd = cmd + ' >> ' + file_name
-        print u'执行cmd:', cmd
-        proc = subprocess.Popen(cmd, shell=True)
-        # 等待完成;
-        proc.wait()
-        # 读取文件内容;
-        data = ''
-        with open(file_name, mode="rb") as f:
-            data = f.read()
-
-        os.remove(file_name)
-        print u"cmd结果:", data
-        return data
-
-    def __cmdExecute(self, cmd):
-        print u'执行cmd:', cmd
-        proc = win_subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
-        # 等待完成;
-        stdout, stderr = proc.communicate()
-        if proc.returncode == 0:
-            print u'执行成功'
-        # 返回执行结果;
-        # print u"__cmdExecute结果:%s" % stdout
-        return stdout
-
     def revisionInfo(self, revision, url):
         cmd = 'svn info -r %s %s' % (revision, url)
-        return self.__cmdExecute(cmd)
+        return cmdExecute(cmd)
 
     def revisionLog(self, revision, url):
         cmd = 'svn log -r %s %s' % (revision, url)
-        return self.__cmdExecute(cmd)
+        return cmdExecute(cmd)
 
     def checkout(self, dir, url, revision=''):
         # dir中文必须是unicode的转gbk;
@@ -142,15 +158,15 @@ class localSVN:
             cmd = 'svn co -r %s %s %s' % (revision, url, dir)
         else:
             cmd = 'svn co %s %s' % (url, dir)
-        return self.__cmdExecute(cmd)
+        return cmdExecute(cmd)
 
     def export(self, dir, url, revision=''):
         # dir中文必须是unicode的转gbk;
         if revision.__len__() > 0:
-            cmd = 'svn export -r %s %s %s' % (revision, url, dir.encode("gbk"))
+            cmd = 'svn export -r %s %s %s' % (revision, url, dir)
         else:
-            cmd = 'svn export %s %s' % (url, dir.encode("gbk"))
-        return self.__cmdExecute(cmd)
+            cmd = 'svn export %s %s' % (url, dir)
+        return cmdExecute(cmd)
 
     def update(self, dir, revision=''):  # revision只有根目录才有效,即有.svn的目录才有效;
         dir = dir.replace('\\', '/')
@@ -159,7 +175,7 @@ class localSVN:
             cmd = 'svn up %s -r %s' % (dir, revision)
         else:
             cmd = 'svn up %s' % (dir)
-        return self.__cmdExecute(cmd)
+        return cmdExecute(cmd)
 
     def revert(self, dir, revision=''):
         # dir中文必须是unicode的转gbk;
@@ -167,21 +183,38 @@ class localSVN:
             cmd = 'svn revert -r %s %s' % (revision, dir)
         else:
             cmd = 'svn revert %s' % (dir)
-        return self.__cmdExecute(cmd.encode("gbk"))
+        return cmdExecute(cmd)
 
     def add(self, file):
         # file中文必须是unicode的转gbk;
-        cmd = 'svn add %s' % (file.encode("gbk"))
-        return self.__cmdExecute(cmd)
+        cmd = 'svn add %s' % (file)
+        return cmdExecute(cmd)
 
     def commit(self, file, desc):
         # file/desc中文必须是unicode的转gbk;
-        cmd = "svn commit -m %s %s" % (desc.encode("gbk"), file.encode("gbk"))
-        return self.__cmdExecute(cmd)
+        cmd = "svn commit -m %s %s" % (desc, file)
+        return cmdExecute(cmd)
+    
+    def status(self, file):
+        cmd = "svn status %s"%(file)
+        msg = cmdExecute(cmd)
+        if msg.startswith("?"):     # 不在控制;
+            return 0
+        elif msg.startwith("A"):    # 预加入;
+            return 1
+        elif msg.startwith("M"):    # 已修改;
+            return 2
+        elif msg.startwith("C"):    # 冲突;
+            return 3
+        elif msg.startwith("K"):    # 被锁定;
+            return 4
 
 
 if __name__ == "__main__":
     print "start main"
+    if 1:
+        lsvn = localSVN()
+        lsvn.status(u"F:\\Moka-Code\\SAT_Core\\22")
     if 1:
         'checkout或更新代码'
         lsvn = localSVN()
@@ -209,27 +242,25 @@ if __name__ == "__main__":
         for item in excel.xlsData:
             if item['sqa_result'] == u"释放":
                 '获取apk名称'
-                apk_name = item['url'][debug_url.__len__() + 1:-1]
+                apk_name = item['url'][debug_url.__len__() + 1:]
                 '更新到释放的版本'
-                # lsvn.revert(debug_dir+"\\"+apk_name, item['apk_revision'])
                 lsvn.update(debug_dir + "\\" + apk_name, item['apk_revision'])
+                '复制到release目录'
+                copyfolder(debug_dir + "\\" + apk_name, release_dir + "\\" + apk_name)
+                '获取日志'
+                log = lsvn.revisionLog(item['apk_revision'], item['url']).decode('gbk')
+                listInfo = log.split("\r\n")
+                message = listInfo[3]
+                '获取状态'
+                ret = lsvn.status(release_dir + "\\" + apk_name)
+                if ret == 0:
+                    '添加并提交'
+                    lsvn.add(release_dir + "\\" + apk_name)
+                    lsvn.commit(release_dir + "\\" + apk_name, message)
+                elif ret == 1 or ret == 2:
+                    lsvn.commit(release_dir + "\\" + apk_name, message)
+                else:
+                    print "不受控,无法提交"
             # endif
         # endfor
 
-        # endfor
-    if 0:
-        rsvn = remoteSVN("10.201.44.65", "app", "app2021")
-        # bolean, data = getRevisionLog('10168', 'https://odm-design-center-hz.tclking.com/svn/scbc_apps/trunk/app/apk/01debug/general/TVMeetingMode')
-        # bolean,data = update('/home/data/ApkAutoCompile/cacheAPK/general$', '10168')
-        bolean, data = rsvn.update('/home/data/ApkAutoCompile/cacheAPK/general$')
-        print data
-    if 0:
-        lsvn = localSVN()
-        # data = lsvn.checkout(u'F:\\Moka-Code\\APK自动编译相关\\general','https://odm-design-center-hz.tclking.com/svn/scbc_apps/trunk/app/apk/01debug/general','10168')
-        # data = lsvn.export(u'F:\\Moka-Code\\APK自动编译相关\\general','https://odm-design-center-hz.tclking.com/svn/scbc_apps/trunk/app/apk/01debug/general')
-        # time.sleep(10)
-        # data = lsvn.update(u'F:\\Moka-Code\\APK自动编译相关\\general', '10168')
-        # data = lsvn.update(u'F:\\Moka-Code\\APK自动编译相关\\general', '')
-        data = lsvn.add(u'F:\\Moka-Code\\APK自动编译相关\\general\\1.txt')
-        data = lsvn.commit(u'F:\\Moka-Code\\APK自动编译相关\\general\\1.txt', u'测试')
-        print data