"mono info" 命令的报错信息中没有正确替换 "repo"
描述
mono info
打印的信息还存在 "repo" 字样:
> mono info
error: command 'info' requires repo to be installed first.
Use "repo init" to install it here.
Related comment: !8 (comment 2679346)
明明执行了 mono selfupdate
,为什么命令还是老版本的日志信息呢?这里的根本原因是 ~/.bin/mono
脚本没有更新到最新版本。
原理/背景
Mono client 有两个概念:
-
Mono launcher
,是 Mono 的起始脚本,存储在客户机器的~/.bin/mono
中。此脚本就是当前仓库的mono
文件 -
Mono 完整代码仓库
保存在客户机器中的项目目录./.repo/repo
中
常用的 mono selfupdate
命令只更新 Mono 完整代码仓库
,不会去更新 Mono launcher
。下面描述的内容是 Mono launcher
的更新逻辑。
在客户机器中,Mono launcher
和 Mono 完整代码仓库
是分开存储的。在每次执行 mono 命令时,Mono launcher
都会将自己的版本与 Mono 完整代码仓库
中的版本做比较,以决定是否要求客户更新自己。(更新方式是使用 cp
命令,从 Mono 完整代码仓库
中复制出 mono
文件,粘贴到 Mono launcher
的位置)
基于上述存储结构,在客户机器中有三个版本信息:
-
Mono launcher
中的mono_launcher_version
-
Mono 完整代码仓库
中的mono_lastest_version
-
Mono 完整代码仓库
中的MIN_MONO_VERSION
对 Mono launcher
版本的检查也就是对 mono_launcher_version
的检查。一共有两个检查:
- 如果
mono_launcher_version
小于MIN_MONO_VERSION
,中断命令,强制更新if mono_launcher_version < MIN_MONO_VERSION: print( """ mono: error: !!! Your version of mono %s is too old. !!! We need at least version %s. !!! A new version of mono (%s) is available. !!! You must upgrade before you can continue: cp %s %s """ % ( mono_launcher_version_str, min_str, mono_lastest_version_str, WrapperPath(), repo_path, ), file=sys.stderr, ) sys.exit(1)
- 如果
mono_launcher_version
小于mono_lastest_version
,打印警告信息,建议更新if mono_lastest_version > mono_launcher_version: print( "\n... A new version of mono (%s) is available." % (mono_lastest_version_str,), file=sys.stderr, )
由 路志远 编辑于