【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 ...
随机推荐
- css层叠规则(层叠样式表)
CSS层叠规则: 1.找出所有相关的规则,这些规则都包含与一个给定元素匹配的选择器. 2.按权重(!important)和来源对应用到给定元素的所有声明进行排序. 3.按特殊性对应用到给定元素的所有声 ...
- 很全的vue插件汇总,赶紧收藏下(转)
Vue是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作 ...
- android studio学习---菜单栏BUILD功能
项目构建: 1.构建项目 2.重构项目 3.签名打包
- 网站怎么上传到服务器流程,从本地到服务器上线过程并通过域名(IP地址)进行访问
制作好的网页想要发布到互联网,该怎么发布呢?我们需要将保存在本地的站点上传站点到服务器,首先我们需要准备一个服务器(可通过服务器公网IP地址访问),也可以购买域名,域名购买可以通过阿里云.腾讯云.百度 ...
- Kubernetes学习之pause容器
根据代码看到,pause容器运行着一个非常简单的进程,它不执行任何功能,一启动就永远把自己阻塞住了, 它的作用就是扮演PID1的角色,并在子进程称为"孤儿进程"的时候,通过调用wa ...
- OEL7.6源码安装MYSQL5.7
首先官网下载安装包https://dev.mysql.com/downloads/mysql/5.7.html#downloads 然后上传解压至/usr/local目录 [root@localhos ...
- terminator
terminator 能够实现linux 终端的分屏显示. 安装 sudo add-apt-repository ppa:gnome-terminator sudoapt-get update sud ...
- Linux的httpd服务介绍和部署
软件介绍 客户端代理软件 IE,firefox,chroome,opera 服务器端软件 httpd,Nginx,Tengine,ISS,Lighthttp 应 ...
- 目标检测论文解读9——R-FCN
背景 基于ResNet 101的Faster RCNN速度很慢,本文通过提出Position-sensitive score maps(位置敏感分值图)来给模型加速. 方法 首先分析一下,为什么基于R ...
- Java byte[] 转C# byte[]
byte(C# 参考) byte 关键字代表一种整型,该类型按下表所示存储值: 类型 范围 大小 .NET Framework 类型 byte 0 到 255 无符号 8 位整数 Byte 参考msd ...