天天看點

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