詳解repo status的輸出結果機率錯亂的緣由和解決方法

在用 repo status 命令查看 Android 源碼的全部 git 倉庫改動時,通常執行起來都比較慢,像是單線程執行,但實際上默認會啓用2個選項來同步執行。python

咱們能夠使用 repo status 的 -j 選項來指定執行時的多線程數目。查看 repo help status 對 -j 選項的幫助說明以下:git

-j JOBS, --jobs=JOBS
number of projects to check simultaneously

Description
The -j/--jobs option can be used to run multiple status queries in parallel.shell

即,能夠使用該選項來加快 repo status 命令的執行速度。例如 repo status -j 4多線程

查看 .repo/repo/subcmds/status.py 的源碼,若是沒有提供 -j 選項,默認啓用2個線程來執行,以下面的 default=2 所示:線程

p.add_option('-j', '--jobs',
             dest='jobs', action='store', type='int', default=2,
             help="number of projects to check simultaneously")

注意:repo status 命令啓用多線程執行時,打印出來的信息機率會出現錯亂,相似於下面的效果:code

project test/vts-testcase/vndk/  branch local_branchproject toolchain/binutils/
branch local_branch

能夠看到,上面的 project toolchain/binutils/ 本該另起一行打印,可是它跟前面的內容打印在了同一行。這是多線程同時輸出致使的錯亂。ip

以前編寫 shell 腳原本過濾 repo status 命令的打印結果,想要打印只且打印發生了改動的信息,就遇到了這種輸出信息錯亂影響解析的狀況cmd

當時還奇怪沒有用 -j 選項來指定啓用多線程,爲何會有這個問題,查看 repo help status 的幫助信息,也沒有說明默認會啓用多線程。後來查看了上面的 repo 源碼,才確認默認會啓用2個線程來同步執行。同步

爲了不這種問題,建議在 shell 腳本里面用 repo status -j 1 命令明確指定爲單線程執行,避免打印的信息錯亂而影響解析。可是這樣執行會比較慢,根據實際需求來取捨。源碼

相關文章
相關標籤/搜索