【20180715】python--repo:init子命令学习

1.概述

init命令是接触repo所使用的第一个命令,它完成manifest仓库的下载/更新以及.repo路径下各子目录结构的维护(manifest.git/manifests/default.xml),为后续执行sync下载命令完成准备工作。

2.数据结构

init命令即为subcmds路径下init.py中定义的类,它所生成的对象会在main.py中被赋值给cmd,并与cmd的属性 XmlManifest类型的对象manifest 配合完成manifest仓库的下载/更新。因此init类本身没有涉及新的数据结构,有一点差异化的就是会定义重载的_Option方法来更新参数对象opt的数据结构,以便解析init命令独有的参数。

3.主体思路

git_require (检查git版本) -->

_SyncManifest(opt) (根据接收的opt参数下载/更新manifest仓库)-->

_LinkManifest(opt.manifest_name)(完成default.xml 链接到实际xml文件的操作)-->

_ConfigureUser / _ConfigureColor / _ConfigureDepth (配置本地git用户/颜色/下载深度等)-->

针对_SyncManifest(opt) :

判断manifest仓库本地是否已下载(self.manifest.manifestProject.Exists)-->

分支:如果本地没有已经下载的manifest仓库,则首先检查opt参数,如manifest仓的url地址、quiet模式等;参数检查没有异常即进行本地仓库初始化 self.manifest.manifestProject._InitGitDir();最后确认manifest仓的revision指向。

分支:如果本地已有下载过的manifest仓库,则进行revision指向确认。

-->更新manifest仓库remote信息-->

判断是否为reference下载模式或者mirror下载模式-->

依次进行网络部分下载、Buffer处理、本地部分更新等操作 (Sync_NetworkHalf SyncBuffer Sync_LocalHalf)

4.算法

猜你喜欢

转载自blog.csdn.net/kefeiliu/article/details/81050822