[发明专利]用于快速全网代码溯源检测的代码库设计方法及检测方法在审

专利信息
申请号: 202110278117.6 申请日: 2021-03-10
公开(公告)号: CN112988217A 公开(公告)日: 2021-06-18
发明(设计)人: 周明辉;高恺;何昊 申请(专利权)人: 北京大学
主分类号: G06F8/70 分类号: G06F8/70;G06F8/71
代理公司: 北京万象新悦知识产权代理有限公司 11360 代理人: 黄凤茹
地址: 100871*** 国省代码: 北京;11
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 用于 快速 代码 溯源 检测 设计 方法
【权利要求书】:

1.一种用于快速全网代码溯源检测的代码库设计方法,通过项目发现、数据提取、数据存储、代码信息映射构建和数据更新过程,针对全网使用Git开源项目内的Git对象进行高效存储而得到代码库,并实现代码库的高效更新;

包括:采用按Git对象分类型分块存储的存储模式;构建代码文件到代码文件信息之间的关系映射,对代码文件的全网信息进行快速检索;对构建的超大规模的代码库采用高效更新方式,基于Libgit2函数库提出定制化的git fetch协议,以构建的超大规模的代码库为后端,高效获得远程仓库的新增的Git对象数据;

具体包括如下步骤:

A.利用一台服务器,通过多种项目发现方法获取全网开源软件项目列表,并将项目发现过程的脚本打包进docker镜像中;

B.数据提取:将步骤A获取的开源项目列表中的项目下载到本地并提取其中的Git对象;所述提取在服务器集群上多线程并行完成;

C.Git对象数据存储:按照Git对象类型分类型分块存储,降低数据存储空间,提高并行处理效率;具体包括:

a.不保存开源项目包括的二进制文件;

b.按照Git对象类型对Git对象数据进行分类型存储,即数据库的类型包括commit数据库、tree数据库、blob数据库和tag数据库,使得数据存储空间降至百TB级别,同时还能够快速地检索数据是否保存在代码库中;

c.每类Git对象的数据库包括缓存数据和内容数据,分别保存在缓存数据库和内容数据库中,加快检索速度;将每类数据库包含的缓存数据库和内容数据库分成多份用于并行;缓存数据库用于快速确定某个Git对象是否已经存储在数据库中,并且是数据提取所必需的;如果某个Git对象存在数据库中,即不提取该Git对象;缓存数据库还用于确定是否需要克隆一个仓库;如果一个仓库的head指向的commit对象已经在缓存数据库中,即不需要克隆;

d.缓存数据库为键值数据库;内容数据库采用拼接的方式保存,以方便更新;

缓存数据库中的键为Git对象的SHA1值,缓存数据库中的值为利用Perl的compress库压缩后的该Git对象在内容数据库中的偏移位置和大小;

内容数据库包含连续拼接在一起的Git对象的压缩后的内容;内容数据库采用拼接的方式保存,只需将新的内容拼接到对应的文件末尾;

分别对commit和tree对象另创建一个随机查找键值数据库,其中键是Git对象的SHA1,值是对应Git对象的压缩内容;

e.利用SHA1值将各类型的数据库分割成多份,实现并行化加速;

f.使用以哈希作为索引的数据库TokyoCabinet;

D.以commit为中心,构建代码信息关系的映射;包括:代码文件到包含它的项目、代码文件到包含它的commit、代码文件到它的作者、代码文件到它的文件名、代码文件到它的创建时间的关系映射;利用TokyoCabinet数据库通过分块存储方式保存这些关系映射,以进行快速检索;

E.获取新的Git对象,对代码库进行数据更新;包括两种方法:

a.识别新的Git项目,进行克隆,再提取其中的Git对象;

b.通过获取已收集仓库的远程仓库的分支的最新的commit来识别更新的项目,再通过修改git fetch的步骤,使得在没有本地Git仓库时,以构建的代码库为后端,获取远程仓库的新增的Git对象,并提取出新增的Git对象到代码库中;具体包括以下步骤:

b1)将远程仓库添加到本地仓库中;在Libgit2中用git_remote结构体来表示远程仓库,

在创建该结构体时,将本地仓库.git/refs/heads文件夹内的所有分支引用填充到该结构体内的一个成员变量ref中;

b2)建立本地仓库到远程仓库的连接;

b3)建立连接后,远程仓库进行回复respond,将远程仓库的所有的分支引用即.git/refs/heads文件夹内的内容,发送到本地;

将远程仓库发回的分支引用保存到本地,判断这些分支引用是否保存在本地代码库中,如果存在,说明远程仓库无更新,如果不存在说明远程仓库有更新,进入下一步;

b4)本地仓库接收到远程仓库发回的引用后,逐个检查这些引用指向的对象是否在本地仓库中;如果在本地仓库中,即进行标记,表明不需要请求远程仓库发送更新,再将这些引用插入到成员变量中;

b5)本地仓库对commit排序,将该成员变量包括标记过的引用发回到远程仓库,与远程仓库进行谈判;本地等待远程仓库发回的ACK信号;具体地,每次都发送主分支最新的commit对象,重复执行多次,直到收到远程仓库的ACK信号;

b6)与远程仓库谈判完毕后,远程仓库可计算出要发回到本地的Git对象;远程仓库将这些对象打包成packfile格式的文件,发回本地;

将远程仓库发回的packfile格式的文件保存到本地,依据代码库中的Git对象解析packfile文件;

通过上述对git fetch进行修改后的步骤,使得git fetch以构建的代码库为后端进行更新,不需要每次更新都需要克隆完整的仓库,同时减少网络带宽开销和时间开销。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202110278117.6/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top