Skip to content

Execute "git pull" for manifest before sync

路志远请求将fix-sync-error-of-manifest合并到main-jh

What does this MR do and why?

Related issue: https://jihulab.com/gitlab-cn/gitlab/-/issues/3672

What

解决 mono sync 时可能出现的一个问题:Manifest 配置出现问题后,即使在远端修复了 Manifest,本地也无法通过 mono sync 恢复正常。

$ mono sync
fatal: /Users/deer/Work/mono/.repo/manifest.xml: sync-j must be greater than 0, not "0"

mono_sync_bug

此问题在 Google Repo 工具中也可以复现。

Why

mono sync 的作用是更新本地的代码仓库,就像 git pull。它不光更新维护的 AOSP 项目,还会更新 Manifest 项目。在更新所有仓库前,会做 Manifest 配置文件的解析,这个解析过程可能失败,因为 Manifest 配置文件可能不合法(比如语法问题、某些值不合法)。

整个过程就是这样:

  1. 解析 Manifest 配置文件
  2. 更新 Manifest 项目( git pull )
  3. 更新 AOSP 项目( git pull )

当 Manifest 配置文件有问题时,第 1 步失败,导致整个更新失败。要命的是,即使远端把 Manifest 修复了,执行 mono sync 还是会在第 1 步去解析老的 Manifest,失败,导致远端新版本的 Manifest 下载不下来。

How to fix

改起来也很容易,把上述的前两个步骤颠倒顺序:

  1. 更新 Manifest 项目( git pull )
  2. 解析 Manifest 配置文件
  3. 更新 AOSP 项目( git pull )

这样,在远端的 Manifest 更新时,本地总是先获得这个更新,然后再解析它。

mono_sync_fix2

Screenshots or screen recordings

Screenshots are required for UI changes, and strongly recommended for all other merge requests.

How to set up and validate locally

请看上面两个录屏。

路志远 编辑于

合并请求报告

加载中