#!usr/bin/python
#-*-coding:utf-8-*-
#根据git变化,将变化的文件推送到手机上

import os
import sys
print("文件编码格式:"+ sys.getdefaultencoding())

###############配置变量###############
# 手机项目存储目录
prefix="storage/emulated/0/sdcard/project/"
projectName="XXXX"
# 忽略文件,不向手机发送的文件
gnoreFile=[
    "README.md",
    "compile.py",
    "change.txt",
    "tmp.txt",
    "complate.txt",
    "verifycode.txt",
    ]
############系统变量#######
changeFile="change.txt" #记录变化的文件
tmpFile="tmp.txt"#临时文件
##########################

#上传文件到手机
def uploadPhoneFile(change):
    print("sync {} to {}".format(change,prefix+projectName+"/"+change))
    pushCode ="adb push {} {}".format(change, prefix+projectName+"/"+change)
    os.system(pushCode)
#创建文件夹到手机
def mkdirPhoneFile(change):
    print("sync {} to {}".format(change,prefix+projectName+"/"+change))
    pushCode ="adb shell mkdir -p {}".format(prefix+projectName+"/"+change)
    os.system(pushCode)
#删除手机上的文件
def delletePhoneFile(change):
    print("delete {}".format(prefix+projectName+"/"+change))
    delCode ="adb shell rm {}".format(prefix+projectName+"/"+change)
    os.system(delCode)
#删除手机上的文件夹
def delletePhoneFileDir(change):
    print("delete {}".format(prefix+projectName+"/"+change))
    delCode ="adb shell rm -r {}".format(prefix+projectName+"/"+change)
    os.system(delCode)
#清空文件
def clearFile(name):
    open(name, 'w').close()

#获取git变化并写入到文件
def diffGit():
    diffGit = 'git status --short'
    diff = os.popen(diffGit,'r')
    diffStrs = diff.buffer.readlines()
    clearFile(tmpFile)
    ft = open(tmpFile,"a+",encoding='utf8')
    for c in diffStrs:
        change = c.decode(encoding='utf8').replace("\n", "")
        if "../" not in change:
            if len(change) > 0:
                ft.write(change+"\n")
                changes = change.split()
                if len(changes) ==2 :
                    changeStr = changes[1]
                    if changeStr not in gnoreFile:
                        print(change.split()[0]+"---"+change)
                        if changes[0] == "M" or changes[0] == "??":
                            print("新增或修改文件:"+changeStr)
                            if os.path.isdir(changeStr):
                                mkdirPhoneFile(changeStr)
                                for root, dirs, files in os.walk(changeStr):
                                    for f in files:
                                        print(changeStr+f)
                                        ft.write(changes[0]+" "+changeStr+f+"\n")
                                        uploadPhoneFile(changeStr+f)
                            else:    
                                uploadPhoneFile(changeStr)
                        elif changes[0] == "D" :
                            print("删除文件:"+changeStr)
                            delletePhoneFile(changeStr)

    ft.close()
#对比上次同步结果
def writeChangeContent():
    fch = open(changeFile,"r",encoding='utf8')
    ftm = open(tmpFile,"r",encoding='utf8')
    fclines = ftm.readlines()
    for change in fch.readlines():
        if change not in fclines:
            print("-------上次变化,这次没有变化--------{}".format(change))
            changes = change.split()
            changeStr = changes[1]
            if changes[0] == "M":
                uploadPhoneFile(changeStr)
            elif changes[0] == "??":
                delletePhoneFileDir(changeStr)
            elif changes[0] == "D" :  
                uploadPhoneFile(changeStr)
            
    fch.close()
    ftm.close()
#将这次结果放到变化文件
def copyStrToFile():
    file1 = open(tmpFile,"r",encoding='utf8')
    file2 = open(changeFile,"w",encoding='utf8')
    s = file1.read()
    w = file2.write(s)
    file1.close()
    file2.close()


diffGit()
writeChangeContent()
copyStrToFile()
#os.system("adb pull /storage/emulated/0/sdcard/XXX_tmp/")

  

原文地址:http://www.cnblogs.com/lambertwe/p/16917622.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性