当前位置:   article > 正文

depot_tools问题记录 - 执行fetch/gclient命令无响应_gclient没反应

gclient没反应


前言

在研究将Dart dill文件序列化为可读文本时遇到的问题。

开发环境

  • macOS: 13.4

问题描述

之前使用depot_tools中的fetch/gclient命令还是正常的,今天想实测--no-history参数时突然遇到命令无响应的情况。

fetch命令在终端中无响应无任何输出,gclient命令在终端中输出Updating depot_tools...后也无响应。

问题分析

首先想到会不会是网络问题,检查一番发现网络是正常的,代理什么的也是正常的,而且如果是网络问题应该会有网络链接超时之类的报错。

尝试重新获取depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  • 1

获取成功没报错,再次执行fetch/gclient命令,发现有下载东西,对比前后大小差了大概600MB。对比文件主要是增加一些可执行文件,特别是新增的.cipd_bin目录,有400多MB大小,不过应该是正常的。

折腾了一番没什么头绪,不过执行fetch --no-history dart命令时提前终止后输出了一个错误:

failed to install infra/tools/luci/vpython/mac-arm64: context canceled
  • 1

咦?这个错误虽然不确定是否和当前问题有关系,但是看到vpython我想到fetch/gclient命令本质都是python脚本,会不会问题出在python脚本的执行呢?暂时不好做出判断,仔细想了想昨天和今天的操作真没什么区别,等等,depot_tools的版本好像变了,每次执行fetch/gclient命令会自动更新depot_tools

depot_tools没有明确的发行版本,本质是Git项目,每一个提交就是一个版本。找到历史提交记录

screenshot1

看到刚提交不久的记录增加了新的vpython,结合前面的猜测,严重怀疑问题就是这个提交导致的,新的vpython导致python脚本执行不正常,接下来就是验证怀疑。

depot_tools切换到可能有问题版本的上一个版本,在depot_tools项目根目录路径下执行:

git checkout d0b85e47dc0a142bb7f2c3c40f5c4956e6f87227
  • 1

再次执行fetch/gclient命令,结果还是先自动更新到最新版本,看来得先禁止自动更新。

Updating depot_tools...当作关键词搜索可以快速定位自动更新调用的是depot_tools中的update_depot_tools,这个本质是一个shell脚本,所以可以用文本工具打开。关键部分:

# Update git checkouts.
if [ "X$DEPOT_TOOLS_UPDATE" != "X0" ]; then
  echo "Updating depot_tools..." 1>&2
  if [ -e "$base_dir/.git" ]; then
    cd "$base_dir"
    update_git_repo
    UPDATE_RESULT=$?
    cd - > /dev/null
    if [[ $UPDATE_RESULT -ne 0 ]]; then
      exit $UPDATE_RESULT
    fi
  else
    echo "Warning: Your depot_tools directory does not appear to be a git repository, and cannot be updated." 1>&2
    echo "Consider deleting your depot_tools directory and following the instructions at https://www.chromium.org/developers/how-tos/install-depot-tools/ to reinstall it." 1>&2
  fi
  ...
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

从源码可知,当环境变量DEPOT_TOOLS_UPDATE等于0时将不会继续往下执行更新操作,至于X$DEPOT_TOOLS_UPDATE中拼接X的作用是避免当DEPOT_TOOLS_UPDATE环境变量未定义时出现报错。关于禁用自动更新官方文档也有说明:

screenshot2

搞清楚了怎么禁止自动更新,接下来就是设置环境变量。在~/.bashrc~/.zshrc文件中加上:

export DEPOT_TOOLS_UPDATE=0
  • 1

当然,你也可以直接在命令行窗口中输入export DEPOT_TOOLS_UPDATE=0设置临时的环境变量。设置后可以通过printenv命令查看环境变量是否设置成功。

将版本重新切换为d0b85e47dc0a142bb7f2c3c40f5c4956e6f87227,再次执行fetch --no-history dart命令,没有自动更新,一切正常

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/882312
推荐阅读
相关标签