有日子没更新了...Project类的实现略复杂和庞大因此看了好久,先整体总结一下。
1.概述
我们已经清楚repo借助xml的管理来实现批量git仓的操作,而这些操作又是通过封装git基础命令及底层命令来实现的,那么支撑这些git基础命令和底层命令封装实现的就是Project类,repo所有的子命令最终都会或多或少的调用Project类中的方法。
我们首先需要了解Project类的基本属性,然后按服务的不同子命令分别分析对应方法。
2.数据结构
project.py中定义了多个类,其中最重要的有三个:RepoHook、Project和MetaProject。
2.1 class RepoHook
(用于定义和调用xml中配置的repohook仓内hook,注意不是为各个gir仓配置来自repo/hooks目录的hook,此功能参考Project类的_InitHooks方法)
def __init__(self, hook_type,hooks_project, topdir,abort_if_user_denies=False)
def Run(self, user_allows_all_hooks, **kwargs)
def _ExecuteHook(self, **kwargs)
2.2 class Project
def __init__(self,manifest,name,remote,gitdir,worktree,relpath,revisionExpr,revisionId)
构造器方法中可以看到gitdir、worktree、work_git、bare_git、relpath等路径信息相关参数。
def IsRebaseInProgress(self) def IsDirty(self, consider_un