CN115576600A - 基于代码变更的差异处理方法、装置、终端及存储介质 - Google Patents
基于代码变更的差异处理方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN115576600A CN115576600A CN202211321159.4A CN202211321159A CN115576600A CN 115576600 A CN115576600 A CN 115576600A CN 202211321159 A CN202211321159 A CN 202211321159A CN 115576600 A CN115576600 A CN 115576600A
- Authority
- CN
- China
- Prior art keywords
- code
- difference
- code line
- line
- determining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/368—Test management for test version control, e.g. updating test cases to a new software version
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种基于代码变更的差异处理方法、装置、终端及存储介质。本方案首先确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,然后,获取各个代码提交记录对应的项目源代码;将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;获取类文件中每一方法对应的起始代码行和结束代码行;根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果,以此,可以提高对代码变更前后的差异方法的查找效率。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种基于代码变更的差异处理方法、装置、终端及存储介质。
背景技术
在软件项目开发测试过程中,通过查询项目代码发生的变更信息,从而对软件项目有针对性的进行测试,可以提升项目测试效率。
相关技术中,通过git diff命令实现查看项目不同版本间的代码差异,以及代码变更的详细信息。对于测试人员,更关注业务功能的变动,而业务功能与项目代码的方法对应,测试人员往往通过人工查看代码,通过查看代码变更,查询变更的方法,有针对性的进行业务测试。但是,通过人工查询代码的方法,需要耗费大量的时间和人工成本,在项目资源紧张的情况下,影响项目完成进度。
发明内容
本申请实施例提供一种基于代码变更的差异处理方法、装置、终端及存储介质,可以提高对代码变更前后的差异方法的查找效率。
本申请实施例提供了一种基于代码变更的差异处理方法,包括:
确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
获取各个代码提交记录对应的项目源代码;
将各项目源代码分别编译成独立运行的JAR包,并将所述JAR包读取至JAR文件条目中;
遍历所述JAR文件条目中的所有文件,确定所述JAR文件条目中的类文件;
获取所述类文件中每一方法对应的起始代码行和结束代码行;
根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
相应的,本申请实施例还提供了一种基于代码变更的差异处理装置,包括:
第一确定单元,用于确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
第一获取单元,用于获取各个代码提交记录对应的项目源代码;
编译单元,用于将各项目源代码分别编译成独立运行的JAR包,并将所述JAR包读取至JAR文件条目中;
第二确定单元,用于遍历所述JAR文件条目中的所有文件,确定所述JAR文件条目中的类文件;
第二获取单元,用于获取所述类文件中每一方法对应的起始代码行和结束代码行;
第三确定单元,用于根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
在一些实施例中,第三确定单元包括:
匹配子单元,用于根据所述差异类型,将所述差异代码行与每一方法对应的起始代码行和结束代码行进行匹配;
第一确定子单元,用于确定与所述差异代码行匹配成功的起始代码行和结束代码行对应的方法,得到所述差异方法。
在一些实施例中,匹配子单元具体用于:
将所述新增代码行与每一方法对应的起始代码行和结束代码行进行匹配。
在一些实施例中,第三确定单元还包括:
第一获取子单元,用于若所述新增代码行与各方法的起始代码行和结束代码行均匹配失败,则获取所述新增代码行所属代码块对应的方法,作为所述差异方法。
在一些实施例中,匹配子单元具体用于:
将所述修改代码行与每一方法对应的起始代码行和结束代码行进行匹配。
在一些实施例中,匹配子单元具体用于:
将所述删除代码行与每一方法对应的起始代码行和结束代码行进行匹配。
在一些实施例中,第一确定单元包括:
第二确定子单元,用于确定每一对比分支对应的指定代码提交记录;
第二获取子单元,用于根据各指定代码提交记录的标识,获取各指定代码提交记录提交的不同版本的目标项目之间的代码差异信息。
相应的,本申请实施例还提供了一种终端,包括存储器,处理器及存储在储存器上并可在处理器上运行的计算机程序,其中,处理器执行本申请实施例任一提供的基于代码变更的差异处理方法。
相应的,本申请实施例还提供了一种存储介质,存储介质存储有多条指令,指令适于处理器进行加载,以执行如上的基于代码变更的差异处理方法。
本申请实施例首先确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,然后,获取各个代码提交记录对应的项目源代码;将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;获取类文件中每一方法对应的起始代码行和结束代码行;根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果,以此,可以提高对代码变更前后的差异方法的查找效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种基于代码变更的差异处理方法的流程示意图。
图2为本申请实施例提供的一种基于代码变更的差异处理装置的结构框图。
图3为本申请实施例提供的终端的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种基于代码变更的差异处理方法、装置、存储介质及终端。具体地,本申请实施例的基于代码变更的差异处理方法可以由终端执行,其中,该终端可以为服务器等设备。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
例如,该终端可以是服务器,该服务器可以确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;获取各个代码提交记录对应的项目源代码;将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;获取类文件中每一方法对应的起始代码行和结束代码行;根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
基于上述问题,本申请实施例提供一种基于代码变更的差异处理方法、装置、终端及存储介质,可以提高对代码变更前后的差异方法的查找效率。
以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本申请实施例提供一种基于代码变更的差异处理方法,该方法可以由终端或服务器执行,本申请实施例以基于代码变更的差异处理方法由服务器执行为例来进行说明。
请参阅图1,图1为本申请实施例提供的一种基于代码变更的差异处理方法的流程示意图。该基于代码变更的差异处理方法的具体流程可以如下:
101、确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息。
其中,目标项目指的是需要进行版本管理的软件项目。目标项目可以有多个版本,不同版本的目标项目的项目代码可以存在差异。
在本申请实施例中,对目标项目的版本进行管理可以使用Git,Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,Git也是一个开放源码的版本控制软件。
具体的,通过Git对目标项目进行管理时,可以创建分支(branch)对目标项目进行版本管理。一个分支可以代表一条独立的开发线,使用分支可以从目标项目的开发主线上分离开来,然后在不影响主线的同时继续工作。
例如,目标项目的版本可以包括第一版本,第二版本以及第三版本等,则可以创建第一分支,负责管理第一版本的目标项目;创建第二分支负责管理第二版本的目标项目;创建第三分支负责管理第三版本的目标项目等,各个分支之间的工作互不影响。
具体的,当对于存储于Git中的项目进行更改后,在Git中提交更改后的项目时,会保存一个提交(commit)对象,commit对象包含一个指向暂存内容快照的指针,作者和相关附属信息。Git中的分支,其实本质上仅仅是个指向commit对象的可变指针。
在本申请实施例中,对比分支指的是用户选择需要进行差异比对的目标项目不同版本对应的分支,比如,用户选择需要进行差异比对的目标项目的版本可以包括:第一版本,第二版本,则对比分支可以包括:第一分支,第二分支。
其中,不同对比分支用于管理目标项目的不同版本。
在一些实施例中,为了快速获取不同对比分支对应的目标项目的差异信息,步骤“确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息”可以包括以下操作:
确定每一对比分支对应的指定代码提交记录;
根据各指定代码提交记录的标识,获取各指定代码提交记录提交的不同版本的目标项目之间的代码差异信息。
在本申请实施例中,代码提交记录指的是对于目标项目进行修改后,将修改后的目标项目进行提交后生成的commit对象。具体的,将修改后的目标项目的代码提交后可以在本地版本库生成一个40位的哈希值,作为代码提交的唯一标识,也即代码提交记录的标识。
例如,对比分支可以包括branchA和branchB,可以通过Git命令或者在Gitlab页面获取branchA的HEAD的代码提交记录,也即commitA,以及通过Git命令或者在Gitlab页面获取branchB的HEAD的代码提交记录,也即commitB。
其中,GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。HEAD是当前分支引用的指针,它总是指向某次commit,默认是上一次的commit。
在一些实施例中,可以在程序代码中通过POM文件引入jgit依赖包,以实现对目标项目的分析。其中,POM是项目对象模型(Project object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。在Maven中,一个Project往往包含一个配置文件;包括了与开发者有关的缺陷跟踪系统,组织与许可,项具的URL项且依赖,以及基他。它包含了所有与这个项目想关的东西。其中,jgit是一个java代码提交Git的插件,可以通过代码连接Git远程仓库,在本地建立版本库,进行拉取、提交、推送等操作。
具体的,根据各指定代码提交记录的标识,获取各指定代码提交记录提交的不同版本的目标项目之间的代码差异信息,可以包括:通过git.diff(setNewTree(newTreelter)setOldTree(oldTreelter))call,可以获取两个代码提交记录(commitA,commitB)之间的差异实体列表信息,该差异实体列表信息可以包括:差异文件文件名,差异类型,差异行信息,差异代码详细信息等。其中,差异类型可以包括:增加ADD/删除DELETE/修改MODIFY等。
其中,git diff命令比较文件的不同,即比较文件在暂存区和工作区的差异。gitdiff命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。
102、获取各个代码提交记录对应的项目源代码。
具体的,从项目源码管理平台,通过gitlcone命令获取各个代码提交记录对应的项目源码。其中,gitlcone命令可以用于拷贝一个Git仓库到本地,让开发者在本地查看项目,或者进行修改等。
例如,对比分支可以包括:branchA和branchB,branchA的提交记录可以为commitA,以及branchB的提交记录可以为commitB。具体的。通过gitlcone命令获取对比分支为branchA,提交记录为commtA的项目源代码,以及通过gitlcone命令获取对比分支为branchB,提交记录为commtB的项目源代码。
103、将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中。
具体的,可以通过mvn clean package命令,将项目源代码编译成可以独立运行的JAR包。
其中,mvn clean package命令为一组命令的集合,执行的命令可以包括:maven-clean-plugin:执行清理删除已有target目录、maven-resources-plugin:执行资源文件的处理、maven-compiler-plugin:编译所有源文件生成class文件至target\classes目录下、maven-surefire-plugin:运行测试用例、maven-jar-plugin:对编译后生成的文件进行打包等。mvn clean package的执行顺序可以如下:
(1)使用清理插件:maven-clean-plugin:执行清理删除已有target目录;
(2)使用资源插件:maven-resources-plugin:执行资源文件的处理;
(3)使用编译插件:maven-compiler-plugin:编译所有源文件生成class文件至target\classes目录下;
(4)使用资源插件:maven-resources-plugin:执行测试资源文件的处理;
(5)使用编译插件:maven-compiler-plugin:编译测试目录下的所有源代码;
(6)使用插件:maven-surefire-plugin:运行测试用例;
(7)使用插件:maven-jar-plugin:对编译后生成的文件进行打包,包名称默认为:artifactId-version,比如本例生成的JAR文件:rtp-front-1.0-SNAPSHOT,包文件保存在target目录下。
其中,JAR文件条目也即jarEntry。JAR文件的打包基于JAVA技术的解决方案的标准方法。它允许开发者将所有相关内容(.class、图片、声音、及所有支持的文件)打包到一个文件中。JAR格式支持压缩、认证、版本号及其他很多特性。jarEntry可以用于从JAR文件中读取文件。
其中,将JAR包读取至JAR文件条目中可以通过在指定jar包路径,将JAR包内容读取到jarEntry中,也即读取JAR包中的各个文件。
104、遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件。
其中,确定JAR文件条目中的类文件可以通过判断文件是否以.class文件后缀结尾,在遍历JAR文件条目中的文件时,若检测到该文件为以.class文件后缀结尾的文件,则判定该文件为类文件;若检测到该文件不是以.class文件后缀结尾的文件,则继续分析JAR文件条目中的下一个文件。
105、获取类文件中每一方法对应的起始代码行和结束代码行。
在确定出JAR文件条目中的类文件后,可以通过ClassParser.parse对该类文件进行分析。也即通过类分析器对类文件进行分析。
在一些实施例中,通过ClassParser.parse对该类文件进行分析可以包括以下操作:
获取类文件下的方法集合;
遍历方法集合,以获取每一方法对应的起始代码行和结束代码行。
首先,通过getClassName获取该类文件的类名路径,然后,通过getMethods获取该类下的所有方法的集合。
具体的,遍历该类的方法集合,通过getLineNumberTable获取到每个方法的开始的代码行和结束的代码行。
其中,getClassName函数可以用于获得指定窗口所属的类的类名;getMethods函数可以用于获取类方法;getLineNumberTable函数可以用于获取代码行。
具体的,通过getLineNumberTable获取到每个方法的开始的代码行和结束的代码行的实现代码可以如下:
string changeType;
string filename;
list<numberentry>numberList;
FileHeader fhleheader;DiffEntry diffentry;
@Data
public static class numberentry{
int beginAnum;
int endAnum;
int beginBnum;//变更起始行
int endBnum;//变更结束行}
106、根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
在一些实施例中,代码差异信息至少可以包括差异类型和差异代码行,为了快速得到不同代码提交记录之间的代码方法差异,步骤“根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法”,可以包括以下操作:
根据差异类型,将差异代码行与每一方法对应的起始代码行和结束代码行进行匹配;
确定与差异代码行匹配成功的起始代码行和结束代码行对应的方法,得到差异方法。
具体的,差异类型指的是不同代码提交记录之间的代码差异的类型,比如,差异类型可以包括:新增类型,也即新增加代码行;修改类型,也即在原代码行进行修改;删除类型,也即删除原代码行。差异代码行指的是不同代码提交记录之间的不同代码。
其中,确定与差异代码行匹配成功的起始代码行和结束代码行对应的方法,也即判断出包括差异代码行的起始代码行和结束代码行对应的方法,得到差异方法,差异方法指的是不同代码提交记录之间的代码内包括的不同方法。
在一些实施例中,差异类型可以为增加类型,也即在原有代码中新增加了代码,则差异代码行为新增代码行,步骤“根据差异类型,将差异代码行与每一方法对应的起始代码行和结束代码行进行匹配”,可以包括以下操作:
将新增代码行与每一方法对应的起始代码行和结束代码行进行匹配。
具体的,根据新增代码行和每一方法对应的起始代码行和结束代码行进行比较,判断新增代码行属于哪一方法的起始代码行和结束代码行之内,从而确定该新增代码行所属的方法,得到差异方法。
在一些实施例中,当差异类型为新增类型时,新增类型对应的新增代码行可以为新增加的方法内的代码行,为了得到准确的差异方法集合,还可以包括以下步骤:
若新增代码行与各方法的起始代码行和结束代码行均匹配失败,则获取新增代码行所属代码块对应的方法,作为差异方法。
具体的,如果新增代码行不属于每一方法的起始代码行和结束代码行之内,确定新增代码行与各方法的起始代码行和结束代码行均匹配失败。进一步的,查询该新增代码行对应的代码块的方法名,获取该方法名对应的方法,该方法为新增加方法,也即差异方法。
在一些实施例中,差异类型可以为修改类型,也即修改了原有代码,则差异代码行为修改代码行,步骤“根据差异类型,将差异代码行与每一方法对应的起始代码行和结束代码行进行匹配”,可以包括以下操作:
将修改代码行与每一方法对应的起始代码行和结束代码行进行匹配。
具体的,根据修改码代码行和每一方法对应的起始代码行和结束代码行进行比较,判断修改代码行属于哪一方法的起始代码行和结束代码行之内,从而确定该修改代码行所属的方法,得到差异方法。
在一些实施例中,差异类型可以为删除类型,也即删除了原有代码,则差异代码行为删除代码行,则步骤“根据差异类型,将差异代码行与每一方法对应的起始代码行和结束代码行进行匹配”,可以包括以下操作:
将删除代码行与每一方法对应的起始代码行和结束代码行进行匹配。
具体的,根据删除代码行和每一方法对应的起始代码行和结束代码行进行比较,判断删除代码属于哪一方法的起始代码行和结束代码行之内,从而确定该删除代码行所属的方法,得到差异方法。
在本申请实施例中,通过将获取到的代码差异信息中的所有差异代码行与JAR包中的class文件中的各个方法对应的起始代码行和结束代码行进行比较,得到所有的差异方法,将所有差异方法组成集合,得到差异方法集合,该差异方法集合包括需要进行对比的不同代码提交记录之间的代码中的差异方法。以此,通过自动化的方式分析代码差异及class文件,查找差异方法集合,节省了大量的人力成本,同时节省查找时间。
在一些实施例中,当获取到差异方法集合后,测试人员可以通过差异方法集合有针对性的对目标项目的业务功能进行测试,从而可以提高目标项目的质量。
本申请实施例公开了一种基于代码变更的差异处理方法,该方法包括:确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;获取各个代码提交记录对应的项目源代码;将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;获取类文件中每一方法对应的起始代码行和结束代码行;根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。通过结合分析class文件,得到方法与代码行的关系后,通过差异代码行能精确查找到差异方法,以此,可以提高对代码变更前后的差异方法的查找效率。
为便于更好的实施本申请实施例提供的基于代码变更的差异处理方法,本申请实施例还提供一种基于上述基于代码变更的差异处理方法的基于代码变更的差异处理装置。其中名词的含义与上述基于代码变更的差异处理方法中相同,具体实现细节可以参考方法实施例中的说明。
请参阅图2,图2为本申请实施例提供的一种基于代码变更的差异处理装置的结构框图,该装置包括:
第一确定单元301,用于确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
第一获取单元302,用于获取各个代码提交记录对应的项目源代码;
编译单元303,用于将各项目源代码分别编译成独立运行的JAR包,并将所述JAR包读取至JAR文件条目中;
第二确定单元304,用于遍历所述JAR文件条目中的所有文件,确定所述JAR文件条目中的类文件;
第二获取单元305,用于获取所述类文件中每一方法对应的起始代码行和结束代码行;
第三确定单元306,用于根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
在一些实施例中,第三确定单元306可以包括:
匹配子单元,用于根据所述差异类型,将所述差异代码行与每一方法对应的起始代码行和结束代码行进行匹配;
第一确定子单元,用于确定与所述差异代码行匹配成功的起始代码行和结束代码行对应的方法,得到所述差异方法。
在一些实施例中,匹配子单元具体可以用于:
将所述新增代码行与每一方法对应的起始代码行和结束代码行进行匹配。
在一些实施例中,第三确定单元306还可以包括:
第一获取子单元,用于若所述新增代码行与各方法的起始代码行和结束代码行均匹配失败,则获取所述新增代码行所属代码块对应的方法,作为所述差异方法。
在一些实施例中,匹配子单元具体可以用于:
将所述修改代码行与每一方法对应的起始代码行和结束代码行进行匹配。
在一些实施例中,匹配子单元具体可以用于:
将所述删除代码行与每一方法对应的起始代码行和结束代码行进行匹配。
在一些实施例中,第一确定单元301可以包括:
第二确定子单元,用于确定每一对比分支对应的指定代码提交记录;
第二获取子单元,用于根据各指定代码提交记录的标识,获取各指定代码提交记录提交的不同版本的目标项目之间的代码差异信息。
本申请实施例公开了一种基于代码变更的差异处理装置,通过第一确定单元301确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;第一获取单元302获取各个代码提交记录对应的项目源代码;编译单元303将各项目源代码分别编译成独立运行的JAR包,并将所述JAR包读取至JAR文件条目中;第二确定单元304,用于遍历所述JAR文件条目中的所有文件,确定所述JAR文件条目中的类文件;第二获取单元305获取所述类文件中每一方法对应的起始代码行和结束代码行;第三确定单元306根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。以此,可以提高对代码变更前后的差异方法的查找效率。
相应的,本申请实施例还提供一种终端,该终端可以为服务器。如图3所示,图3为本申请实施例提供的终端的结构示意图。该终端400包括有一个或者一个以上处理核心的处理器401、有一个或一个以上计算机可读存储介质的存储器402及存储在存储器402上并可在处理器上运行的计算机程序。其中,处理器401与存储器402电性连接。本领域技术人员可以理解,图中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器401是终端400的控制中心,利用各种接口和线路连接整个终端400的各个部分,通过运行或加载存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行终端400的各种功能和处理数据,从而对终端400进行整体监控。
在本申请实施例中,终端400中的处理器401会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能:
确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
获取各个代码提交记录对应的项目源代码;
将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;
遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;
获取类文件中每一方法对应的起始代码行和结束代码行;
根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图3所示,终端400还包括:触控显示屏403、射频电路404、音频电路405、输入单元406以及电源407。其中,处理器401分别与触控显示屏403、射频电路404、音频电路405、输入单元406以及电源407电性连接。本领域技术人员可以理解,图3中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏403可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏403可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的消息或提供给用户的消息以及终端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸消息,并将它转换成触点坐标,再送给处理器401,并能接收处理器401发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器401以确定触摸事件的类型,随后处理器401根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏403而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏403也可以作为输入单元406的一部分实现输入功能。
在本申请实施例中,通过处理器401执行游戏应用程序在触控显示屏403上生成图形用户界面,图形用户界面上的虚拟场景中包含至少一个技能控制区域,技能控制区域中包含至少一个技能控件。该触控显示屏403用于呈现图形用户界面以及接收用户作用于图形用户界面产生的操作指令。
射频电路404可用于收发射频信号,以通过无线通信与网络设备或其他终端建立无线通讯,与网络设备或其他终端之间收发信号。
音频电路405可以用于通过扬声器、传声器提供用户与终端之间的音频接口。音频电路405可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路405接收后转换为音频数据,再将音频数据输出处理器401处理后,经射频电路404以发送给比如另一终端,或者将音频数据输出至存储器402以便进一步处理。音频电路405还可能包括耳塞插孔,以提供外设耳机与终端的通信。
输入单元406可用于接收输入的数字、字符消息或用户特征消息(例如指纹、虹膜、面部消息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源407用于给终端400的各个部件供电。可选的,电源407可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源407还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图3中未示出,终端400还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
由上可知,本实施例提供的终端,可以确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;获取各个代码提交记录对应的项目源代码;将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;获取类文件中每一方法对应的起始代码行和结束代码行;根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种基于代码变更的差异处理方法中的步骤。例如,该计算机程序可以执行如下步骤:
确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
获取各个代码提交记录对应的项目源代码;
将各项目源代码分别编译成独立运行的JAR包,并将JAR包读取至JAR文件条目中;
遍历JAR文件条目中的所有文件,确定JAR文件条目中的类文件;
获取类文件中每一方法对应的起始代码行和结束代码行;
根据代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种基于代码变更的差异处理方法中的步骤,因此,可以实现本申请实施例所提供的任一种基于代码变更的差异处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种基于代码变更的差异处理方法、装置、存储介质及终端进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种基于代码变更的差异处理方法,其特征在于,所述方法包括:
确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
获取各个代码提交记录对应的项目源代码;
将各项目源代码分别编译成独立运行的JAR包,并将所述JAR包读取至JAR文件条目中;
遍历所述JAR文件条目中的所有文件,确定所述JAR文件条目中的类文件;
获取所述类文件中每一方法对应的起始代码行和结束代码行;
根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
2.根据权利要求1所述的方法,其特征在于,所述代码差异信息至少包括差异类型和差异代码行;
所述根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,包括:
根据所述差异类型,将所述差异代码行与每一方法对应的起始代码行和结束代码行进行匹配;
确定与所述差异代码行匹配成功的起始代码行和结束代码行对应的方法,得到所述差异方法。
3.根据权利要求2所述的方法,其特征在于,所述差异类型为增加类型,所述差异代码行为新增代码行;
所述根据所述差异类型,将所述差异代码行与每一方法对应的起始代码行和结束代码行进行匹配,包括:
将所述新增代码行与每一方法对应的起始代码行和结束代码行进行匹配。
4.根据权利要求3所述的方法,其特征在于,还包括:
若所述新增代码行与各方法的起始代码行和结束代码行均匹配失败,则获取所述新增代码行所属代码块对应的方法,作为所述差异方法。
5.根据权利要求2所述的方法,其特征在于,所述差异类型为修改类型,所述差异代码行为修改代码行;
所述根据所述差异类型,将所述差异代码行与每一方法对应的起始代码行和结束代码行进行匹配,包括:
将所述修改代码行与每一方法对应的起始代码行和结束代码行进行匹配。
6.根据权利要求2所述的方法,其特征在于,所述差异类型为删除类型,所述差异代码行为删除代码行;
所述根据所述差异类型,将所述差异代码行与每一方法对应的起始代码行和结束代码行进行匹配,包括:
将所述删除代码行与每一方法对应的起始代码行和结束代码行进行匹配。
7.根据权利要求1所述的方法,其特征在于,所述确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,包括:
确定每一对比分支对应的指定代码提交记录;
根据各指定代码提交记录的标识,获取各指定代码提交记录提交的不同版本的目标项目之间的代码差异信息。
8.一种基于代码变更的差异处理装置,其特征在于,所述装置包括:
第一确定单元,用于确定需要进行差异对比的目标项目的各个对比分支对应的代码提交记录之间的代码差异信息,其中,不同对比分支用于管理目标项目的不同版本;
第一获取单元,用于获取各个代码提交记录对应的项目源代码;
编译单元,用于将各项目源代码分别编译成独立运行的JAR包,并将所述JAR包读取至JAR文件条目中;
第二确定单元,用于遍历所述JAR文件条目中的所有文件,确定所述JAR文件条目中的类文件;
第二获取单元,用于获取所述类文件中每一方法对应的起始代码行和结束代码行;
第三确定单元,用于根据所述代码差异信息、每一方法对应的起始代码行和结束代码行确定各个项目源代码之间的差异方法,得到各个代码提交记录之间的差异比对结果。
9.一种终端,包括存储器,处理器及存储在存储器上并在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至7任一项所述的基于代码变更的差异处理方法。
10.一种存储介质,其特征在于,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至7任一项所述的基于代码变更的差异处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211321159.4A CN115576600A (zh) | 2022-10-26 | 2022-10-26 | 基于代码变更的差异处理方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211321159.4A CN115576600A (zh) | 2022-10-26 | 2022-10-26 | 基于代码变更的差异处理方法、装置、终端及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115576600A true CN115576600A (zh) | 2023-01-06 |
Family
ID=84587050
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211321159.4A Pending CN115576600A (zh) | 2022-10-26 | 2022-10-26 | 基于代码变更的差异处理方法、装置、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115576600A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117390727A (zh) * | 2023-12-11 | 2024-01-12 | 壹仟零壹艺数字科技(合肥)有限公司 | 一种基于Git系统的CAD图纸数据处理方法及系统 |
CN117492822A (zh) * | 2023-12-29 | 2024-02-02 | 杭州新中大科技股份有限公司 | 变更对比方法、装置、电子设备及存储介质 |
-
2022
- 2022-10-26 CN CN202211321159.4A patent/CN115576600A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117390727A (zh) * | 2023-12-11 | 2024-01-12 | 壹仟零壹艺数字科技(合肥)有限公司 | 一种基于Git系统的CAD图纸数据处理方法及系统 |
CN117390727B (zh) * | 2023-12-11 | 2024-02-23 | 壹仟零壹艺数字科技(合肥)有限公司 | 一种基于Git系统的CAD图纸数据处理方法及系统 |
CN117492822A (zh) * | 2023-12-29 | 2024-02-02 | 杭州新中大科技股份有限公司 | 变更对比方法、装置、电子设备及存储介质 |
CN117492822B (zh) * | 2023-12-29 | 2024-03-29 | 杭州新中大科技股份有限公司 | 变更对比方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8468391B2 (en) | Utilizing log event ontology to deliver user role specific solutions for problem determination | |
US10621212B2 (en) | Language tag management on international data storage | |
CN115576600A (zh) | 基于代码变更的差异处理方法、装置、终端及存储介质 | |
CN111752843B (zh) | 用于确定影响面的方法、装置、电子设备及可读存储介质 | |
CN111258614B (zh) | 项目第三方库升级异常检测方法及系统、设备及存储介质 | |
US20160124795A1 (en) | Evaluation method and apparatus | |
CN111158741A (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
CN115033894B (zh) | 一种基于知识图谱的软件组件供应链安全检测方法及装置 | |
CN110515647A (zh) | 一种静态资源管理方法、装置、设备和存储介质 | |
CN112494940B (zh) | 用户界面的制作方法、装置、存储介质及计算机设备 | |
CN111563257A (zh) | 数据检测方法及装置、计算机可读介质及终端设备 | |
US20120204149A1 (en) | Discovery-based migration correctness testing | |
CN103309677B (zh) | 内置资源管理方法、装置及终端 | |
CN105787359B (zh) | 进程守护方法和装置 | |
WO2023151397A1 (zh) | 应用程序部署方法、装置、设备及介质 | |
US20160371169A1 (en) | Use case fingerprinting and capture store | |
CN115687129A (zh) | 一种覆盖率报告生成方法、装置、存储介质和计算机设备 | |
CN115964061A (zh) | 插件更新方法、装置、电子设备和计算机可读存储介质 | |
CN113806327A (zh) | 一种数据库设计方法、装置及相关设备 | |
US20240329939A1 (en) | Systems and methods for discovery and generalized experimentation with different types of software components | |
CN115292194B (zh) | 流程调试的方法、电子设备及计算机可读存储介质 | |
JP2017091027A (ja) | システム開発支援システム | |
CN115562998A (zh) | 基于功能点的软件测试方法、装置和计算机可读存储介质 | |
CN116069333A (zh) | 程序编译方法、装置、电子设备、存储介质和程序产品 | |
CN114090428A (zh) | 信息处理方法、装置、计算机可读存储介质和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |