转自:http://blog.gclxry.com/use-depot_tools-to-manage-chromium-source/

由于Chromium项目的代码量巨大,又依赖了很多第三方代码库,所以如何有效的管理这些代码是个难题。Chromium官方提供了一个depot_tools来管理Chromium源代码的工具,官方开发工作流也是基于depot_tools。最初接触depot_tools觉得它很难用,最近研究了depot_tools的代码,发现掌握了它能够让我们事半功倍。

配置depot_tools

因为我是在Windows上开发Chromium,所以只介绍Windows上配置depot_tools的流程。

根据https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up的介绍,从这里https://src.chromium.org/svn/trunk/tools/depot_tools.zip 下载depot_tools的压缩包。然后把这个压缩包解压到本地的一个路径,如:F:depot_tools。

接下来就是把depot_tools所在的目录F:depot_tools加入到系统的PATH环境变量中。在 控制面板->系统->高级系统设置,弹出如下界面:

然后点击“环境变量”按钮,弹出如下对话框:

在这里面添加PATH变量,值为depot_tools的路径。
然后在任意路径里打开CMD,然后运行gclient命令,如果可以正常运行,则代表depot_tools配置成功了,如下图:

获取Chromium代码

根据Chromium的文档http://dev.chromium.org/developers/how-tos/get-the-code 介绍,使用depot_tools获取代码非常简单。

运行fetch –nohooks chromium命令来获取Chromium以及它依赖的第三方库代码。然后再运行gclient runhooks命令来配置一些开发环境和生成可以编译的工程。

以后就可以使用git rebase-update命令来同步最新的Chromium代码,然后再使用gclient sync同步第三库代码。

fetch命令

在”获取Chromium代码”章节里,fetch命令是用来获取Chromium代码,运行fetch命令:

我们可以看到在当前目录生成了一个.gclient的文件,内容如下:

1
2
3
4
5
6
7
8
9
10

solutions = [
  {
    "managed": False,
    "name": "src",
    "url": "https://chromium.googlesource.com/chromium/src.git",
    "custom_deps": {},
    "deps_file": ".DEPS.git",
    "safesync_url": "",
  },
]

fetch命令其实调用的是depot_toolsfetch.py脚本,脚本的用法如下:

1
fetch <config> [--nohooks] [--no-history]

config的值是一个配置名,其实也是调用depot_toolsfetch_configs目录下的py脚本文件。不同的配置名获取不同的项目代码。我们是获取Chromium代码,所以用的是fetch chromium,即运行的是depot_toolsfetch_configschromium.py脚本里面的逻辑。chromium.py就是生成.gclient文件里的内容。

另外fetch命令还有2个可选的参数:

  • –nohooks。这个参数表示获取代码完成之后不执行runhooks动作。也就仅仅获取代码。
  • –no-history。这个参数表示对代码仓库执行git shallow clones,就不会获得原仓库的全部历史提交,这样可以减少拷贝代码仓库的大小。按照Chromium文档的介绍,不加上这个参数大概会获取22GB大小的数据,而加上这个参数只会获取6.5GB大小的数据。之后可以对这个仓库再执行–unshallow操作 就会获得完整的历史记录。

可以看到fetch命令最后调用的是gclient sync来获取代码的。接下来介绍gclient脚本。

gclient命令

gclient命令其实对应着gclient.py脚本,它是用来管理多个模块源代码仓库的工具。它封装一些常用的git命令,对所有的模块生效。可以看到gclient的功能众多,如下总结一下:

  • config。创建一个.gclient配置文件。
  • diff。类似git的diff命令,用来比较所有模块提交代码的差异。
  • fetch。获取所有模块上游的提交。
  • help。显示命令的帮助。
  • revert。revert一个提交。
  • runhooks。根据DEPS文件的描述执行hook任务。
  • stauts。类似git status命令,用来显示所有模块代码的状态。
  • sync。用来同步所有模块的代码。

sync和runhooks命令比较重要,以下分别介绍一下。

sync

sync就是用来同步所有模块的代码。当我们把Chromium仓库的代码切换到某个版本,则必须也要运行gclient sync来同步对应依赖的其他仓库代码,否则就有可能代码编译失败。

运行gclient sync的时候,会读取DEPS文件中描述的依赖的其他库的url和版本,然后把这些仓库切换到正确的版本。

下面介绍一些sync的参数:

  • -n,–nohooks。检出代码之后不运行hooks里面的动作。
  • -r,–revision。强制切换到某个代码的某个版本,后面可以使tag名如gclient sync -r 48.0.2564.74。或者提交id,如gclient sync -r f194a61f5ecd56f744273318100300045586d3dc。
  • –with_branch_heads。Git在Clone代码仓库时也获取到每个分支的head。
  • –with_tags。Git在Clone代码仓库时也获取tags。
  • -R,–reset。重置本地的修改。
  • -M,–merge。合并上游的修改。
  • -A,–auto_rebase。等同于git pull –rebase。
  • –upstream。让本地仓库状态匹配上游分支。
  • –no-history。为了减小仓库大小,不检出提交历史。
  • –shallow。对换成目录进行浅拷贝。

runhooks

runhooks是在同步完代码之后执行的。根据DEPS的文件的描述,执行一些获取代码之后的工作,其中包括生成平台可编译的工程。至于执行了哪些任务,可以参考DEPS文件里面的hooks内容。

runhooks的最后调用src/build/gyp_chromium.py脚本来生成可编译的代码工程。所以如果改变了gyp文件,可以仅运行src/build/gyp_chromium.py脚本来重新生成工程。

管理Chromium源代码的利器——depot_tools相关推荐

  1. Chromium:安装depot_tools及获取Chromium源代码

    1.下载depot_tools 加上不使用cygwin的情况. 从https://src.chromium.org/svn/trunk/tools/depot_tools.zip下载,解压到不要包含空 ...

  2. Linux学习之CentOS(二十三)--Linux软件管理之源代码以及RPM软件包管理

    在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 ...

  3. [ios2]iOS 使用subversion管理iOS源代码 【转】

    使用subversion管理iOS源代码 1.安装和配置subversion服务器 在windows 服务器上安装VisualSVN-Server,下载地址http://www.visualsvn.c ...

  4. 如何使用subversion管理iOS源代码

    使用subversion管理iOS源代码 1.安装和配置subversion服务器 在windows 服务器上安装VisualSVN-Server,下载地址http://www.visualsvn.c ...

  5. ios Mac下的SVN工具:Cornerstone与Versions和使用subversion管理iOS源代码

    原文地址为: ios Mac下的SVN工具:Cornerstone与Versions和使用subversion管理iOS源代码 ios管理代码的方式除了上次介绍的利用ios 自带的git库,还有使用S ...

  6. Searchcode: 源代码搜索利器

    [Searchcode: 源代码搜索利器!!!]来自悉尼的代码搜索引擎汇聚了 Github, Bitbucket, Sourceforge...等多家开源站点超20万个项目.180亿行源代码,能以特殊 ...

  7. java计算机毕业设计南京市某物流公司管理信息系统源代码+数据库+系统+lw文档

    java计算机毕业设计南京市某物流公司管理信息系统源代码+数据库+系统+lw文档 java计算机毕业设计南京市某物流公司管理信息系统源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 ...

  8. java计算机毕业设计流浪动物的救助管理平台源代码+数据库+系统+lw文档

    java计算机毕业设计流浪动物的救助管理平台源代码+数据库+系统+lw文档 java计算机毕业设计流浪动物的救助管理平台源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  9. 使用subversion管理iOS源代码

    使用subversion管理iOS源代码 1.安装和配置subversion服务器 在windows 服务器上安装VisualSVN-Server,下载地址http://www.visualsvn.c ...

最新文章

  1. element走马灯自动_Element Carousel 走马灯的具体实现
  2. lua与C++粘合层框架
  3. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法
  4. c++代码好玩_一行Python代码能干嘛?快来看看吧!有表白利器哦
  5. 佳博ip修改工具_如何修改设备IP,换IP来组建网络
  6. [IE兼容性] Table 之边框
  7. 根据第xx天推算日期
  8. 【预测模型】基于matlab GUI AR模型线性预测【含Matlab源码 942期】
  9. linux 更改sh文件权限不够,linux权限不够,sh不能用
  10. 【技术公开课】iOS App研发的最后冲刺:内测与部署
  11. Power BI中使用图片作为切片器
  12. fluent周期边界_在Fluent中采用TUI设置周期性边界的方法
  13. 3D体验平台品牌应用——ENOVIA
  14. 2021年中国夜间经济行业发展规模及发展趋势分析[图]
  15. 【图像处理基础】RGB的解析
  16. 什么是安卓马甲APP?寻求高手安卓马甲包封装APP上架
  17. 下载的时候提示:“写入到文件时产生错误(请用磁盘检查工具检查修复)”的解决办法
  18. 前端开发的发展方向都有哪些?职业方向定位?
  19. Unity如何限制3D物体的旋转角度
  20. 我人生的两大梦想是: 睡觉睡到自然醒 数钱数到手抽筋

热门文章

  1. 《程序员升职记》8.零保护行动
  2. 智慧景区:EasyCVR视频+智能分析,助力景区智慧化服务监管
  3. 把一个人的特点写具体作文_把一个人的特点写具体的作文
  4. 手机python软件怎么下载词云_从零开始教你用 Python 做词云
  5. stm32cubeide调试查看函数值_STM32CubeIDE使用ITM调试
  6. element 走马灯实现图片轮播
  7. OF1.7中的p_rgh【翻译】
  8. 从失败中崛起!52岁斯皮尔曼,曾携华人科学家2次斩获哥德尔奖
  9. (六) kityminder 协同编辑执行用例时,如果做到不相互干扰
  10. 灰度图像--图像分割 阈值处理之谷底阈值、峰顶平均