depot_tools问题记录 - 执行fetch/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

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

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

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

咦?这个错误虽然不确定是否和当前问题有关系,但是看到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

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

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

# Update git checkouts.
if [ "X$DEPOT_TOOLS_UPDATE" != "X0" ]; thenecho "Updating depot_tools..." 1>&2if [ -e "$base_dir/.git" ]; thencd "$base_dir"update_git_repoUPDATE_RESULT=$?cd - > /dev/nullif [[ $UPDATE_RESULT -ne 0 ]]; thenexit $UPDATE_RESULTfielseecho "Warning: Your depot_tools directory does not appear to be a git repository, and cannot be updated." 1>&2echo "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>&2fi...
fi

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

screenshot2

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

export DEPOT_TOOLS_UPDATE=0

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

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

那一定是那个版本的问题吗?将版本切换为怀疑有问题的版本:

git checkout ae21f6a5ec30b63e4b8405fc5a783eb242ef10c5

再次执行fetch --no-history dart命令,问题重现了!

解决方案

在问题修复之前,可以按以下步骤操作暂时解决这个问题:

  1. 禁用自动更新

~/.bashrc~/.zshrc文件中加上:

export DEPOT_TOOLS_UPDATE=0

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

  1. 指定depot_tools版本

depot_tools项目根目录路径下执行:

git checkout d0b85e47dc0a142bb7f2c3c40f5c4956e6f87227
  1. 继续执行原先的fetch/gclient等命令

最后

如果这篇文章对你有所帮助,请不要吝啬你的点赞👍加星🌟,谢谢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15281.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 FPGA 上通过 2D CNN 进行高效视频理解的 TSM 网络

在这个项目中,将在线和离线 TSM 网络部署到 FPGA,通过 2D CNN 执行视频理解任务。 介绍 在这个项目中,展示了 Temporal-Shift-Module ( https://hanlab.mit.edu/projects/tsm/)在 FPGA 上解决视频理解问题的实用性和性能。 TSM 是一种网络结构…

Docker快速部署Hadoop环境

Docker安装部署Hadoop环境,通过三个容器来模拟三个节点,最后只保留Master节点实现搭建。 安装环境 Ubuntu 22.04.1 LTS 和Docker 23.0.1 安装过程 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base在Docker中创建网…

十三、Docker Compose使用和主要功能

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 一、核心概念二、主要功能二、docker compose常用命令三、docker compose 案例3.1 自己写一个微服务模块3.2 用Dockerfile将上面的模块编排(不使用compose)3.3 使用compose编…

Go语言-数组和切片有什么异同?

slice 的底层数据是数组,slice 是对数组的封装,它描述一个数组的片段。两者都可以通过下标来访问单个元素。 数组是定长的,长度定义好之后,不能再更改。在 Go 中,数组是不常见的,因为其长度是类型的一部分…

【开源软件治理】MITRE : 开源软件

定义: 开源软件(OSS)是一种商业软件,只需同意遵守附带的 OSS 许可证即可获得全部所有权,无需立即进行第三方验证。同意 OSS 许可证允许个人、公司或政府实体根据需要尽可能频繁和广泛地复制、分发和运行 OSS 应用程序&…

现代C++新特性 扩展的聚合类型(C++17 C++20)(PC浏览效果更佳)

文字版PDF文档链接:现代C新特性(文字版)-C文档类资源-CSDN下载 1.聚合类型的新定义 C17标准对聚合类型的定义做出了大幅修改,即从基类公开且非虚继承的类也可能是一个聚合。同时聚合类型还需要满足常规条件。 1.没有用户提供的构造函数。…

Django_模型类详解(七)

目录 一、定义属性 字段类型 选项 二、查询集 两大特性 查询集的缓存 限制查询集 三、条件查询 条件运算符 1) 查询相等 2) 模糊查询 3) 空查询 4) 范围查询 5) 比较查询 6) 日期查询 F对象 Q对象 聚合函数 四、关联查询 通过对象执行关联查询 通过模型类执…

Squid 缓存代理(一)---原理及搭建(传统代理、透明代理)

前言 Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 ( 官 方 网 站 为 http://www.squid-cache.org),可以很好地实现 HTTP 和 FTP,以及 DNS 查询、SSL 等应用的缓存代理。缓存代理作为应用层的代理服务软件…

Python学习笔记-基于socket基础的http服务端程序

通过HTTP协议可以进行通信可以规范化的进行网络间通信。下面技术第一个http服务器小程序。简单的记录第一个试手程序。 1.http通信的基本流程 整个流程对应四层网络架构:应用层、传输层、网络层、链路层。有的部分已经封装,不需要我们再行处理。 2.服务…

SAR ADC version2 ——ADC背景介绍

目录: ADC常用指标分类 静态性能:微分非线性:DNL 积分非线性:INL 仿真测试DNL:(码密度法)(code density&…

1.Git使用技巧-常用命令1

Git使用技巧-常用命令 文章目录 Git使用技巧-常用命令一、git 创建仓库demo 二、本地仓库常用命令提交详解git commitgit commit --amend 三、 推送到远程分支git push 总结参考 一、git 创建仓库 创建远端仓库: git init – bare // 创建远端裸仓库; 远…

哈工大计算网络课程数据链路层详解之:数据链路层服务

哈工大计算网络课程数据链路层详解之:数据链路层服务 在介绍完网络层的实现功能和协议之后,接下来我们继续介绍网络层的下一层:数据链路层。 本节首先对数据链路层的功能和所提供的服务进行概述。 如下图示例网络所示,标红色的部…