多个库需要提交时自动生成repo提交脚本

1. 概述

在维护android代码时,如果有大量修改,比方合入google释放的patch,将可能会有几十个git库同时提交,挨个来太费事了,可以根据repo status命令生成的结果进行整体提交

repo结果一般如下形式:

project frameworks/base/packages/SettingsLib/   
 -m res/xml-ar/timezones.xml
 -m res/xml-ur-rPK/timezones.xml
project frameworks/base/packages/SystemUI/      
 -m src/com/android/systemui/recents/RecentsActivity.java
project frameworks/base/services/               
 -m core/java/com/android/server/pm/PackageManagerService.java
 -m core/java/com/android/server/wm/DimLayerController.java

我们把repo status的结果放到文件multi_commit_projects.txt中


2. 生成提交命令思路:

我们把每个git库的project名称提取出来,然后拼接成

repo forall frameworks/base/packages/SettingsLib frameworks/base/packages/SystemUI frameworks/base/services  -c git add -A这种形式,就能多个库一起提交了

当然还包括,commit和push的过程


3. 写python脚本:

import os

'''
function definition area
'''
def getProjectList():
    fileproject = open("multi_commit_projects.txt")
    fileproject.seek(0)
    space = ' '
    targetStr = ""
    excludeProject = "vendor/mediatek/proprietary/packages/apps/EngineerMode"
    for line in fileproject:
        if line.startswith("project ") and (not excludeProject in line):
            #print(line)
            firstIndex = -1
            secondIndex = -1
            index = 0
            for char in line:
                if char == space:
                    if secondIndex != -1:
                        break;
                    if firstIndex == -1:
                        firstIndex = index+1
                        #print(firstIndex)
                    else:
                        secondIndex = index-1
                        #print(secondIndex)
                index += 1
            prjname = line[firstIndex:secondIndex]
            #print prjname
            targetStr += ' '
            targetStr += prjname
    targetStr += ' '
    targetStr += excludeProject
    targetStr += ' '
    print(targetStr)
    return targetStr

def getCommand(prefix, projects, postfix):
    #prefix = "repo forall"
    #postfix = "-c git add -A"
    return (prefix+projects+postfix)

def getAllCommand():
    prefix = "repo forall"
    addComand = "-c git add -A"
    commitCommand = "-c git commit -m \'"
    pushCommand = "-c \'git push $REPO_REMOTE HEAD:refs/for/$REPO_RREV\'"
    projects = getProjectList()
    strCommand = ""
    strCommand += "\n\n"
    strCommand += getCommand(prefix, projects, addComand)
    strCommand += "\n\n\n"
    strCommand += getCommand(prefix, projects, commitCommand)
    strCommand += "\n\n\n"
    strCommand += getCommand(prefix, projects, pushCommand)
    strCommand += "\n\n"
    return strCommand

'''
start run form here
'''
writefile = file("commit_command.txt", "w")
writefile.write(getAllCommand())
writefile.flush()
writefile.close()


4. 生成结 果将保存在commit_command.txt中,内容大致如下:

repo forall frameworks/base/packages/SettingsLib frameworks/base/packages/SystemUI frameworks/base/services vendor/mediatek/proprietary/packages/apps/EngineerMode -c git add -A

repo forall frameworks/base/packages/SettingsLib frameworks/base/packages/SystemUI frameworks/base/services vendor/mediatek/proprietary/packages/apps/EngineerMode -c git commit -m '

repo forall frameworks/base/packages/SettingsLib frameworks/base/packages/SystemUI frameworks/base/services vendor/mediatek/proprietary/packages/apps/EngineerMode -c 'git push $REPO_REMOTE HEAD:refs/for/$REPO_RREV'


大功告成!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值