【chromium】cef是如何进行版本控制的?
搜了搜cef相关的文章,内容大多是 如何下载源码,如何编译,还有一些源码剖析,但是很少有人说明对cef进行开发时如何保存修改,使用git进行修改后的版本控制。
cef是怎么做的?
cef源码分为两个部分,一个部分是cef的代码,另一个部分是chromium源码,如果按照cef官网给的指引下载代码,一般cef代码会放在cef目录下,chromium代码会放在chromium目录下,所以说git仓库是不同的。在进行编译的时候需要执行cef_create_projects.bat脚本,这个脚本首先会将整个cef目录拷贝到chromium\src目录下,然后会将cef\patch\patches打到chromium上面,打完patch之后再使用gn生成ninja文件,之后才进行编译。
因此如果要修改cef的源码,需要在外侧的cef目录下修改,而不是在chromium\src\cef目录下修改,否则在生成项目文件的时候一拷贝就把修改给覆盖掉了。修改chromium源码的话就在chromium\src目录下修改就好了。
版本管理
构建完cef之后,chromium的src仓库处于修改后未add未commit的状态(第三方仓库可能也会有),大量的patch带来的修改就这么放在暂存区
但是cef仓库没啥修改,暂存区空空如也
如何不抛弃本地的修改?
假设修改了cef的源码,现在需要让修改后的源码起作用,前文提到,cef源码会被拷贝到chromium\src\cef目录下,然后参与chromium目标的编译,因此修改cef源码需要在cef里面,而且必须要有拷贝这个动作,覆盖掉旧版本的代码,然后编译链接,才能得到修改后的编译目标
cef何时会拷贝?
如上述所说,更新代码是将cef目录拷贝到src目录下覆盖,编译后得到新的目标,那么在什么情况下会拷贝呢?
要想得到修改后的编译目标,必须要让修改的cef源码被拷贝到chromium\src目录下
elif os.path.exists(cef_dir) and not os.path.exists(cef_src_dir):
# Restore the src/cef directory.
copy_directory(cef_dir, cef_src_dir)
如果要拷贝,cef_src_dir目录必须不存在,也就是必须删掉它才行,如果不是手动删掉,而是让自动化脚本去删,则必须要cef_checkout_changed为true,如下述代码所示,一般cef_dir不会等于cef_src_dir
if cef_checkout_changed:
if cef_dir != cef_src_dir and os.path.exists(cef_src_dir):
# Delete the existing src/cef directory. It will be re-copied from the
# download directory later.
delete_directory(cef_src_dir)
满足以下任一条件就会触发删除
- 参数checkout所在commit和目前本地cef仓库所在的HEAD计算出的hash不一致的时候,这两个hash值都是针对cef_dir目录计算的hash分别是HEAD和cef_checkout,换个简单易懂的说法,就是当前cef文件夹所在的branch和在使用
automate-git.py时加上的checkout选项的值所指向的分支是不同的。 - 使用
automate-git.py时没有加no-cef-update选项并且cef文件夹不存在时,一般这种情况出现在第一次获取代码时。 - 使用
automate-git.py时加上了force-clean或者force-update选项,但是注意,加上这两个的任何一个都会导致本地修改被废弃(discard local changes)。 - 使用
automate-git.py时加上了force-cef-update选项,同样也会导致本地修改被废弃。
因此为了满足新修改的代码应用到编译目标中,每个新功能都应该新开一个分支(这也算是个git的开发流程),验证没有问题后先生成patch(因为是对暂存区生成的patch),然后commit提交,合并到主分支上(假设主分支名为3770),然后再从3770分支切出来一个新的分支进行新的功能开发。
是不是很麻烦?
也可以修改下automate-git.py的代码。添加一个强制覆盖的选项。
总结
也就是说,cef并没有管理chromium代码,而是自己做了一套自动化脚本,拉取cef代码的同时,去google那边拉取chromium代码,而针对chromium相关的修改,则是以patch文件的形式,存放在cef的代码仓库,当需要cef进行编译的时候,也是调用cef准备的脚本自动打patch,生成.ninja文件,然后再使用ninja进行编译链接,得到产物。
PS:上述的操作在automate-git.py中均可找到相关代码
【chromium】cef是如何进行版本控制的?的更多相关文章
- Chromium CEF 2623 -- 支持 xp 的最后一个版本源码下载和编译步骤
背景 因为项目需要在客户端中内嵌浏览器,需要支持 xp 操作系统和播放视频,但 CEF 2623 以后的版本已经不支持 xp 操作系统,也不再提供 2623 版本的二进制发布包下载,只好自己手动编译. ...
- Chromely
Chromely Chromely is a lightweight alternative to Electron.NET, Electron for .NET/.NET Core develope ...
- 利用 Chromium Embedded Framework (CEF) 定制提取 Flash 视频的浏览器
功能介绍: 利用 CEF 分析网页源码, 提取 flash 视频的代码. 提取的视频代码 LoadString 和 JS 两种方式重新插入到浏览器. (CEF_3.2171.1979_win32 - ...
- CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium
CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报 分类: CEF(2) 目录(?)[+] ...
- Chromium与CEF的多进程模型及相关參数
CEF基于Chromium,也是多进程模型.关于进程模型.參考这里:https://www.chromium.org/developers/design-documents/process-model ...
- 【chromium】 cef源码下载
至少需要17GB的磁盘空间,不光有CEF源码,还会下载chromium源码.编译master分支的话,如果编译到chromium可能会需要windows sdk,windows sdk的版本可以参考下 ...
- cef chromium 编译
前言 目前客户端引用了cef sharp库来嵌入web页面 cef sharp是对cef (chromium embed framework)的c#封装 cef是对chromium内核的c++封装 什 ...
- Chromium Embedded Framework (CEF)_3.2171.2069_v20170606_x86.tar.xz
CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 [增加了960x90% 和 1280x90%] 这次修改是主要针对 YY web 直播平台 ...
- Chromium Embedded Framework (CEF)_3.2171.1979_v20170602_x86.tar.xz
CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 这次修改是主要针对 YY web 直播平台 对录屏的朋友有很大帮组 CEF_3.2171.1 ...
随机推荐
- html书写行内元素时-tab和换行会在行内元素间引入间距
目录 html文本中的控制字符会被解析为文本节点 书写行内元素时,换行符LF与水平制表符HT会引入莫名的元素间间隔 其他控制字符是否会引入间距的验证 html文本中的控制字符会被解析为文本节点 举例: ...
- 英语chrysopal金绿宝石chrysopal单词
chrysopal金绿宝石,也称金绿玉.化学成分为BeAl2O4.晶体属正交(斜方)晶系的氧化物矿物.它位列名贵宝石,具有四个变种:猫眼,变石,变石猫眼和金绿宝石晶体. 金绿宝石本身就是较稀少的矿物, ...
- mysql的my.cnf
配置参数详解 [client] #客户端设置,即客户端默认的连接参数port = 3307 #默认连接端口socket = /data/mysqldata/3307/mysql.sock #用于本 ...
- 移动4G插卡注网
本文根据插入移动4G单卡到注册4G网络过程的mtklog分析. 插卡动作: 从以上信息无法区分单卡还是双卡,通过ATR参数判断: 注网流程,此过程未开启4G数据连接: [MS->NW] ESM_ ...
- django logger转载
https://www.cnblogs.com/jiangchunsheng/p/8986452.html https://www.cnblogs.com/jeavy/p/10926197.html ...
- 在istio中让prometheus跑起来
使用microk8s安装,默认的prometheus已就位. 可直接弄. 一,映射本地端口(注意,命令行最后的两个端口,前一个为要映射的本地端口,后一个为POD的服务端口,如果本地相同端口被占用,则要 ...
- xcode运行demo报错:Failed to create provisioning profile.cannot be registered to your development team
问题:网上下载运行demo,出现Failed to create provisioning profile.cannot be registered to your development team此 ...
- uboot向kernel的传参机制——bootm与tags
http://blog.csdn.net/skyflying2012/article/details/35787971 最近阅读代码学习了uboot boot kernel的过程以及uboot如何传参 ...
- 关于std::bind的文章收集
C++11 FAQ中文版:std::function 和 std::bind 2011-03-02 16:25 by 陈良乔 常规性地介绍了function和bind的使用,还不会用的同学可以看看 b ...
- 修改JDK安装路径的作用
JDK的默认安装路径是Program Files文件夹,而Program Files的两个英文单词间有空格, 而当JDK的安装路径里包含空格时,在设置CLASSPATH时,可能会引发莫名奇妙的错误, ...