在用 repo status 命令查看 Android 源码的所有 git 仓库改动时,一般执行起来都比较慢,像是单线程执行,但实际上默认会启用2个选项来同步执行。
我们可以使用 repo status 的 -j 选项来指定执行时的多线程数目。查看 repo help status 对 -j 选项的帮助说明如下:
-j JOBS, --jobs=JOBS
number of projects to check simultaneouslyDescription
The -j/--jobs option can be used to run multiple status queries in parallel.
即,可以使用该选项来加快 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 命令启用多线程执行时,打印出来的信息概率会出现错乱,类似于下面的效果:
project test/vts-testcase/vndk/ branch local_branchproject toolchain/binutils/
branch local_branch
可以看到,上面的 project toolchain/binutils/ 本该另起一行打印,但是它跟前面的内容打印在了同一行。这是多线程同时输出导致的错乱。
之前编写 shell 脚本来过滤 repo status 命令的打印结果,想要打印只且打印发生了改动的信息,就遇到了这种输出信息错乱影响解析的情况。
当时还奇怪没有用 -j 选项来指定启用多线程,为什么会有这个问题,查看 repo help status 的帮助信息,也没有说明默认会启用多线程。后来查看了上面的 repo 源码,才确认默认会启用2个线程来同步执行。
为了避免这种问题,建议在 shell 脚本里面用 repo status -j 1
命令明确指定为单线程执行,避免打印的信息错乱而影响解析。但是这样执行会比较慢,根据实际需求来取舍。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。