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.算法