1.概述:
repo文件作为repo命令执行的入口,主要完成如下功能:执行环境检验&repo命令参数初步解析&执行环境初始化&repo工程主体main.py调用。
2.数据结构:
不涉及复杂程度较高的数据结构。
关键变量:repodir(.repo); S_repo(.repo/repo); REPO_MAIN(.repo/repo/main.py)
3.主体思路:
__main__ -->
main(sys.argv[1:]) -->
FindRepo(从当前目录逐层向上查找repodir是否存在) -->
args初步解析(判断是否--help/--init/other cmd) -->
分支:本地环境不存在repodir:根据解析得到的cmd进行处理,只有cmd=init时会触发Init(args)来初始化下载repo仓,下载成功后重新FindRepo获得main和dir信息 -->
分支:本地环境存在repodir:使用main和args/extra_args组合启动新进程os.execv
对于Init(args)补充:main中对接收到的args进行首次简单解析,分离命令cmd和参数args',args将传递给Init用来二次解析获取repo_url&repo_branch信息并补充extra_args;然后在Init中进行mkdir(repodir) --> Checkgitversion --> Clone --> Checkout;
对于Clone()补充:mkdir(local) --> subprocess(git init ) --> InitHttp --> setgitconfig --> Setbundle --> Fetch.
4.算法设计:
入口脚本repo文件中没有涉及复杂程度较高的算法,多为一些通用功能的组合。