1. 程式人生 > >【20180715】python--repo:init子命令學習

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