【20180317】python--repo学习
配置管理⼯程师本⾝是使⽤git和repo的熟练⼿,偶然在csdn上看到⽼罗关于repo⼯程的解析,深感repo是⼀个学习python语⾔的好实践,因此选择repo⼯程作为python语⾔学习的⼀个解析项⽬~
repo是⾕歌为有效管理安卓代码⽽开发的使⽤python语⾔、基于git命令和manifest-xml⽂件对多个git仓进⾏批量下载、提交等操作的⼯具⼯程。repo本⾝包含可执⾏⼊⼝脚本repo和⼯程脚本git仓,通过以repo开头的repo init、repo sync、repo upload等不同命令实现不同操作。
repo⼯程⾸先通过repo脚本完成操作环境状态检测、repo⼯程脚本git仓下载更新和主体main.py⽂件的调⽤;
在完成repo命令中选项参数解析后,整个repo命令的执⾏过程围绕着xml_manifest类的对象进⾏,通过对manifest xml⽂件进⾏解析得到git仓清单,并按照命令参数对所有git仓遍历执⾏操作,在针对单个git仓进⾏操作时依赖git仓类Project的对象成员函数。
由上可知,repo⼯程中最核⼼的数据架构有git仓类Project和xml⽂件类xml_manifest两个点,围绕这两个点repo通过完善的命令⾏参数处理、⽹络环境处理和循环的git底层命令调⽤来实现各种场景。
关系路线:repo命令参数--> subcmds/同名.py⽂件--> repo命令参数对应类对象执⾏成员函数ute--> 其成员变量manifest即为xml_manifest对象--> xml_manifest对象的成员变量包含manifest仓的类对象--> manifest仓的类对象成员函数进⾏xml⽂件解析处理-->遍历进⾏单个git仓处理--> Project.py定义类对象的成员函数调⽤...
|--- docs :解释manifest⽂件格式,灰常有参考意义。
|--- hooks:repo为每个git仓配置的hooks来源,所有git仓下.git/hooks内容都会软链接到此处。
|--- subcmds:包含__init__ .py和多个以repo命令选项为⽂件名的py⽂件,在运⾏repo命令时subcmds⽂件夹会被import并运⾏
__init__.py,__init__.py会基于同级⽬录下各个py⽂件中定义的类创建对应的repo命令对象并保存在全局变量中,供repo命令适配和调⽤。
python处理xml文件
|--- repo:操作环境中⽤来执⾏repo命令的脚本,需要提前下载到操作环境中。
|--- main.py:repo命令执⾏的主体流程,完成⽹络环境初始化、具体命令对象调⽤执⾏等。
|--- manifest_xml.py:维护manifest xml⽂件对应的数据结构和xml相关操作对应函数,包括xml⽂件的解析、软链接、写⼊等。
|--- project.py:维护git仓对应的数据结构和git仓相关操作命令对应函数,包括普通git仓类型和manifest仓类型两种。
|--- git_command.py:维护repo命令中调⽤git⼯具执⾏git命令的相关操作函数。
|--- command.py:维护repo命令中调⽤到的其他相关命令。
|--- error.py:维护⼯程中⽤到的各类异常。
|--- color.py:维护⼯程中⽤到的各类颜⾊输出。
|--- trace.py:提供repo命令中--trace选项相关配置。
|--- git_config.py:维护repo命令中调⽤到的git参数配置操作函数。
|--- 待补充 。。。
针对repo⼯程中每⼀个⽂件,对其内容按照数据结构&主体思路&算法设计&通⽤功能 四部分进⾏分解和记录;
其中算法设计和通⽤功能两部分统⼀汇总,⽅便查阅。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。