CN115080113A - 项目代码检测方法和装置、可读存储介质、电子设备 - Google Patents
项目代码检测方法和装置、可读存储介质、电子设备 Download PDFInfo
- Publication number
- CN115080113A CN115080113A CN202210590263.7A CN202210590263A CN115080113A CN 115080113 A CN115080113 A CN 115080113A CN 202210590263 A CN202210590263 A CN 202210590263A CN 115080113 A CN115080113 A CN 115080113A
- Authority
- CN
- China
- Prior art keywords
- current branch
- code detection
- module
- information
- file
- 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/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- 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)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开是关于一种项目代码检测方法和装置、可读存储介质、电子设备,涉及计算机技术领域,该方法包括:获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。本公开实现了代码的增量检测,降低了代码检测的时间以及设备资源,提高了代码检测效率。
Description
技术领域
本公开实施例涉及计算机技术领域,具体而言,涉及一种项目代码检测方法和装置、计算机可读存储介质以及电子设备。
背景技术
在项目开发过程中,通过代码检查可以提高代码的质量。在项目开发中,当要对项目中的任务代码进行检测时,相关技术中通过代码检测工具或者通过自定义检查方法进行检查。
但是,通过代码检测工具进行检测时,是全量检测的,即,对项目中的所有模块进行检测,会消耗大量的时间以及设备资源;当通过自定义检查方法进行检查时,需要对代码检查工具的源码进行修改,检查效率较低。
因此,需要提供一种新的项目代码检测方法。
需要说明的是,在上述背景技术部分发明的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种项目代码检测的方法、项目代码检测装置、计算机可读存储介质以及电子设备,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的项目代码检测效率低一级耗费大量资源的问题。
根据本公开的一个方面,提供一种项目代码检测方法,包括:
获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
在本公开的一种示例性实施例中,在获取目标项目的历史构建信息之前,所述项目代码检测方法还包括:
实现自定义插件,在所述自定义插件中注册差异检测任务以及上传任务,并基于所述自定义插件提供全局开关变量;
确定所述差异检测任务以及所述上传任务的执行顺序,以使所述目标项目根据所述执行顺序执行所述差异检测任务以及所述上传任务。
在本公开的一种示例性实施例中,获取所述目标项目的当前分支的当前分支信息包括:
在所述当前分支包括的模块中注册所述自定义插件,并通过所述全局开关变量在所述模块中引入所述自定义插件;
对所述当前分支中包括代码进行提交;
执行所述自定义插件中注册的所述差异检测任务,通过所述目标项目的应用程序编程接口的显示提交点命令,得到所述当前分支的当前提交点;其中,所述当前分支信息中包括所述当前分支的当前提交点。
在本公开的一种示例性实施例中,获取所述目标项目的当前分支的历史构建信息,包括:
获取构建信息缓存文件,在构建信息缓存文件中进行查询;
在确定所述构建信息缓存文件中包括所述当前分支的历史构建信息时,从所述构建信息缓存文件中获取所述历史构建信息;
在确定所述构建信息缓存文件中不包括所述当前分支的历史构建信息时,执行在所述当前分支的第一模块中注册的检测任务,在检测任务执行完成后,将所述当前分支的当前分支信息存储至所述构建信息缓存文件中。
在本公开的一种示例性实施例中,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件,包括:
通过所述差异检测任务,获取所述当前分支信息中包括的所述当前分支的当前提交点以及所述历史构建信息中包括的当前分支的历史提交点;
利用所述当前提交点以及所述历史提交点,通过差异文件获取命令,得到所述当前分支中的修改文件。
在本公开的一种示例性实施例中,获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,包括:
获取所述修改文件的相对路径,基于所述修改文件的相对路径得到所述修改文件的修改模块,并将所述修改模块保存至增量模块列表中;
遍历所述当前分支的模块中注册的代码检测任务,得到每个所述代码检测任务所在的模块名称;
当所述代码检测任务所在的模块名称位于所述增量模块列表中时,获取与所述增量模块列表包括的所述修改模块对应的第一代码检测任务。
在本公开的一种示例性实施例中,将所述代码检测任务的状态修改为开启,包括:
获取在所述增量模块列表的修改模块中注册的第一代码检测任务,将所述第一代码检测任务的状态修改为开启;
将所述目标项目的当前分支中第一代码检测任务外的代码检测任务的状态修改为关闭。
在本公开的一种示例性实施例中,在对所述当前分支的修改模块中包括的代码进行检测之后,所述项目代码检测方法还包括:
通过所述上传任务,将所述当前分支的当前分支信息存储至所述构建信息缓存文件,并将所述构建信息缓存文件同步至服务器。
根据本公开的一个方面,提供一种项目代码检测装置,包括:
修改文件获取模块,用于获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
检测任务状态修改模块,用于获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
代码检测模块,用于通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
根据本公开的一个方面,提供一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一示例性实施例所述的项目代码检测方法。
根据本公开的一个方面,提供一种电子设备,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行上述任一示例性实施例所述的项目代码检测方法。
本公开实施例提供的一种项目代码检测方法,获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测;一方面,在对项目代码进行检测时,首先通过当前分支的当前分支信息以及历史构建信息,得到当前分支中的修改文件,获取修改文件中的修改模块,对该修改模块进行检测,实现了对项目的增量检测,解决了相关技术中,通过代码检查工具检测项目代码时全量检测的问题,节省了时间以及设备资源;另一方面,当获取到当前分支中的修改文件之后,从修改文件中获取进行修改的修改模块,并将与修改模块对应的代码检测任务的状态修改为开启,通过执行代码检测任务实现对修改模块中包括的代码进行检测,不需要对代码检测工具的源码进行修改,提高了项目中代码检测的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出根据本发明示例实施例的一种项目代码检测方法的流程图。
图2示意性示出根据本发明示例实施例的一种项目代码检测系统的框图。
图3示意性示出根据本发明示例实施例的一种在获取目标项目的历史构建信息之前项目代码检测方法的流程图。
图4示意性示出根据本发明示例实施例的一种获取目标项目的当前分支的当前分支信息的方法流程图。
图5示意性示出根据本发明示例实施例的一种获取目标项目的当前分支的历史构建信息的方法流程图。
图6示意性示出根据本发明示例实施例的一种根据当前分支信息以及历史构建信息,得到当前分支中的修改文件的方法流程图。
图7示意性示出根据本发明示例实施例的一种获取修改文件中的修改模块,以及与所述修改模块对应的检测任务的方法流程图。
图8示意性示出根据本公开示例实施例的一种对修改模块进行代码检测的示意图。
图9示意性示出根据本公开示例实施例一种项目代码检测方法的流程图。
图10示意性示出根据本发明示例实施例的一种项目代码检测装置的框图。
图11示意性示出根据本发明示例实施例的用于实现上述项目代码检测方法的电子设备。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本发明的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本发明的各方面变得模糊。
此外,附图仅为本发明的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
代码检查可以对程序进行更加广泛的错误分析,检查程序中潜在的错误,包括可疑的类型组合、未使用的变量、不可达的代码以及不可移植的代码。现有的代码检测工具可以检测项目的源文件是否有潜在的错误,以及在正确性、安全性、易用性、无障碍性和国际化方面是否需要优化改进,在进行代码检测时可以自行配置代码检测工具的检测项目或者定义代码检测工具的规则,也可以手动运行检测或者基于命令行运行命令来检测。
在项目开发过程中,可以采用代码检测工具对项目进行全量检测,也可以进行自动化检测,还可以进行增量检测。当项目开启代码检测工具检测说,默认为全量检测,对于大型项目,随着文件数量的增加,代码检测工具检测的目标个数和任务呈线性增加,代码检测的耗时、所需的设备资源也会增加;当采用自动化检测时,代码检测工具配置麻烦,并且不能按需开启或者禁用对项目中任一模块的检测;当采用增量检测时,需要对代码检测工具的源码进行修改。
基于上述一个或者多个问题,本示例实施方式中首先提供了一种项目代码检测方法,参考图1所示,项目代码检测方法可以包括步骤S110-步骤S130:
步骤S110.获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
步骤S120.获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
步骤S130.通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
上述项目代码检测方法,获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测;一方面,在对项目代码进行检测时,首先通过当前分支的当前分支信息以及历史构建信息,得到当前分支中的修改文件,获取修改文件中的修改模块,对该修改模块进行检测,实现了对项目的增量检测,解决了相关技术中,通过代码检查工具检测项目代码时全量检测的问题,节省了时间以及设备资源;另一方面,当获取到当前分支中的修改文件之后,从修改文件中获取进行修改的修改模块,并将与修改模块对应的代码检测任务的状态修改为开启,通过执行代码检测任务实现对修改模块中包括的代码进行检测,不需要对代码检测工具的源码进行修改,提高了项目中代码检测的效率。
以下,对本公开示例实施例的项目代码检测方法中涉及的各步骤进行详细的解释以及说明。
首先,对本公开示例实施例的应用场景以及发明目的进行解释以及说明。具体的,本公开示例实施例可以用于实现对大型项目的代码检测,主要用于实现对大型项目的代码的增量检测,降低代码检测的时间、设备资源消耗,提高项目代码检测的效率。
在本公开中,在进行项目代码检测时,首先,获取目标项目的当前分支的当前分支信息,以及当前分支的历史构建信息,根据当前分支信息以及历史构建信息,得到当前分支中修改了的修改文件,并通过修改文件的路径得到修改文件中修改了的修改模块,获取与修改模块对应的检测任务,将其检测任务的状态修改为开启,通过状态为开启的检测任务对修改模块中的代码进行检测,节约了代码检测的时间资源以及设备资源,提高了代码检测的效率。
其次,对本公开实例实施例中涉及到的项目代码检测系统进行解释以及说明。参考图2所示,该项目代码检测系统可以包括:自定义插件实现模块210、信息获取模块220、差异获取模块230、增量检测模块240以及数据上传模块250。其中,自定义插件实现模块210,用于实现目标项目的自定义差异检测插件,以使得目标项目在代码编译构建时,可以添加差异检测任务以及上传任务,目标项目的当前分支中的模块可以通过注册该自定义差异检测插件实现对目标项目的差异检测;信息获取模块220,用于通过命令获取目标项目的当前分支的当前分支信息以及当前分支的历史构建信息;差异获取模块230,与自定义插件实现模块210以及信息获取模块220网络连接,用于根据当前分支包括的模块中注册的自定义差异检测插件以及获取到的当前分支信息、历史构建信息得到当前分支中发生修改的修改文件,以及修改文件中包括的发生修改的修改模块;增量检测模块240,与差异获取模块230网络连接,用于获取注册在修改模块中的代码检测任务,并将获取到的代码检测任务的状态修改为开启,通过状态为开启的检测任务完成对修改模块的增量检测;数据上传模块250,与增量检测模块240网络连接,用于当目标项目执行完代码检测任务之后,将目标项目的当前分支的分支信息存储至构建信息缓存文件中,并将该构建信息缓存文件同步至服务器。
以下,将结合图2对步骤S110-步骤S130进行详细的解释以及说明。
在步骤S110中,获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件。
其中,目标项目可以为安卓项目,也可以为其他类型的项目,在本示例实施例中对目标项目的类型不做具体限定;可以通过自动化构建工具来管理目标项目,其中,自动化构建工具可以为Gradle,也可以为其他构建工具,在本示例实施例中对自动化构建工具不做具体限定。可以通过版本控制工具对目标项目的代码进行管理,其中,版本控制工具可以为分布式版本控制工具Git,也可以为其他版本控制工具,在本示例实施例中对此不做具体限定。
在本示例实施例中,参考图3所示,在获取目标项目的历史构建信息之前,所述项目代码检测方法还包括步骤S310以及步骤S320:
步骤S310.实现自定义插件,在所述自定义插件中注册差异检测任务以及上传任务,并基于所述自定义插件提供全局开关变量;
步骤S320.确定所述差异检测任务以及所述上传任务的依赖关系,以使所述目标项目根据所述依赖关系依次执行所述差异检测任务以及所述上传任务。
以下,将对步骤S310以及步骤S320进行进一步的解释以及说明。具体的,当自动化构建工具为Gradle时,可以实现自定义Gradle插件,在该自定义插件中可以注册差异检测任务以及上传任务,通过该差异检测任务,可以获取目标项目的当前分支的修改文件以及修改模块,通过上传任务可以将目标项目的当前分支的分支信息存储至构建信息缓存文件中,并将该构建信息缓存文件同步至服务器。在注册差异检测任务以及上传任务之后,还需要确定该差异检测任务以及上传任务的执行顺序,其中,可以通过lintTask.finalizedBy()方法定义任务的执行顺序,在本示例实施中差异检测任务的执行顺序先于上传任务执行,该自定义插件中还可以提供全局变量开关,该开关为全局的变量,用于控制当前分支的模块中是否引入该自定义差异检测插件。在实现该自定义差异检测插件时,可以根据自定义Gradle插件的规范,实现插件Plugin<ProjectInternal>接口,并且重写apply(ProjectInternal project)方法,在该apply(ProjectInternal project)方法中可以注册差异检测任务。在目标项目的当前分支中,当前分支中的每个模块均可以注册该自定义插件。
在本示例实施例中,参考图4所示,获取所述目标项目的当前分支的当前分支信息可以包括步骤S410-步骤S430:
步骤S410.在所述当前分支包括的模块中注册所述自定义插件,并通过所述全局开关变量在所述模块中引入所述自定义插件;
步骤S420.对所述当前分支中包括代码进行提交;
步骤S430.执行所述自定义插件中注册的所述差异检测任务,通过所述目标项目的应用程序编程接口的显示提交点命令,得到所述当前分支的当前提交点;其中,所述当前分支信息中包括所述当前分支的当前提交点。
以下,将对步骤S410-步骤S430进行进一步的解释以及说明。具体的,目标项目的当前分支中的每个模块可以注册自定义插件,并通过自定义插件中的全局开关变量在当前分支的每个模块中引入自定义插件。在获取当前分支的当前分支信息时,首先,需要对当前分支中包括的代码进行提交,当目标项目通过Git版本控制工具对目标项目的代码进行管理时,提交当前分支中包括的代码之后,执行自定义插件中的差异检测任务,执行该差异检测任务的第一步为获取当前分支的分支信息,在获取当前分支的分支信息时,可以通过Git命令得到当前分支的当前分支信息;其中,当前分支的分支信息中可以包括当前分支的当前提交点以及当前分支的分支名称。具体的,在获取当前分支的分支信息时可以通过目标项目的构建工具的应用程序编程接口,执行Git命令,当要显示当前分支信息中的当前提交点时,可以通过显示提交点命令,即通过git rev-parse HEAD命令,得到当前分支的当前提交点;当要显示当前分支信息中的分支名称时,可以通过显示分支名称命令,即,git rev-parse--abbrev-ref HEAD命令,得到当前分支的分支名称。当目标项目的当前分支的代码提交之后,会有一个唯一的值来标识,该唯一的值为长字符串,在本示例实施例中可以取长字符串的前八位字符作为当前提交点,也可以取长字符串的前六位作为当前提交点,在本示例实施例中对此不做具体限定。
当获取到当前分支的当前分支信息之后,可以获取当前分支的历史构建信息,参考图5所示,获取所述目标项目的当前分支的历史构建信息,可以包括步骤S510-步骤S530:
步骤S510.获取构建信息缓存文件,在构建信息缓存文件中进行查询;
步骤S520.在确定所述构建信息缓存文件中包括所述当前分支的历史构建信息时,从所述构建信息缓存文件中获取所述历史构建信息,并将所述当前分支的当前分支信息存储至所述构建信息缓存文件中;
步骤S530.在确定所述构建信息缓存文件中不包括所述当前分支的历史构建信息时,执行在所述当前分支的第一模块中注册的检测任务,在检测任务执行完成后,将所述当前分支的当前分支信息存储至所述构建信息缓存文件中。
以下,将对步骤S510-步骤S530进行进一步的解释以及说明。具体的,首先,从服务器中下载构建信息缓存文件,根据当前分支的分支名称在构建信息缓存文件中进行查询,确定构建信息缓存文件中是否存在当前分支的历史构建信息,其中,历史构建信息中包括:当前分支的分支名称以及当前分支的历史提交点。当构建信息缓存文件中存在当前分支的历史构建信息时,则直接从该构建信息缓存文件中获取当前分支的历史构建信息,并将当前分支的当前分支信息存储至构建信息缓存文件中。当构建信息缓存文件中不存在当前分支的历史构建信息时,则目标项目的当前分支为进行过代码检测,因此,可以对当前分支中的代码进行全量检测,全量检测完成之后,将当前分支的当前分支信息存储至构建信息缓存文件中。其中构建信息缓存文件中可以存储多个分支构建信息,例如:分支master、分支dev全量执行完代码检测任务之后,分别将两个分支的分支信息存储至构建信息缓存文件中,master=d6a02b7d\n dev=21aa692d,dev分支当前代码检测时的提交点id为21aa692d,master分支当前代码检测时的提交点为d6a02b7d。在本示例实施例中,可以将构建信息缓存文件保存在目标项目的根目录下,并通过自定义插件中的上传任务将该构建信息缓存文件上传至远程服务器,以实现该构建信息缓存文件在团队中进行共享。
在本示例实施例中,当得到当前分支的当前分支信息以及历史构建信息之后,参考图6所示,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件,可以包括步骤S610以及步骤S620:
步骤S610.通过所述差异检测任务,获取所述当前分支信息中包括的所述当前分支的当前提交点以及所述历史构建信息中包括的当前分支的历史提交点;
步骤S620.利用所述当前提交点以及所述历史提交点,通过差异文件获取命令,得到所述当前分支中的修改文件。
以下,将对步骤S610、步骤S620进行进一步的解释以及说明。具体的,当执行差异检测任务,得到当前分支的分支信息以及历史构建信息之后,可以根据当前分支信息以及历史构建信息中包括的当前提交点以及历史提交点,通过差异文件获取命令得到当前分支中的修改文件。差异文件获取命令可以为git diff${commitId1}${commitId2}--name-only,其中,commitId1可以为当前分支的历史提交点,commitId2可以为当前分支的当前提交点。
在本示例实施例中,通过运行自定义插件中的差异检测任务,可以得到当前分支中的修改模块,差异检测任务的具体执行过程为上述记载的获取修改文件过程。通过该自定义插件,实现了对修改文件的快速获取,实现简单。
在步骤S120中,获取所述修改文件中的修改模块,以及与所述修改模块对应的检测任务,将所述检测任务的状态修改为开启。
其中,在启动代码检测时,目标项目的各个模块下都会注册与代码检测相关的任务,其中,与代码检测相关的任务可以为lintDebug,也可以为lintFix,还可以为lintRelease,在本示例实施例中对与代码检测相关的任务不做具体限定。与代码检测相关的任务是支持开启和禁用的,其中,可以通过task.setEnabled()来设置代码检测任务的状态,对于任一代码检测任务当传入参数为true时,表示开启该代码检测任务,当传入参数为false时,表示关闭该代码检测任务。在代码检测任务执行之前,即在gradle配置阶段将,可以将修改模块中的代码检测任务的状态设备为开启。
在本示例实施例中,参考图7所示,获取所述修改文件中的修改模块,以及与所述修改模块对应的检测任务,可以包括步骤S710-步骤S730:
步骤S710.获取所述修改文件的相对路径,基于所述修改文件的相对路径得到所述修改文件的修改模块,并将所述修改模块保存至增量模块列表中;
步骤S720.遍历所述当前分支的模块中注册的代码检测任务,得到每个所述代码检测任务所在的模块名称;
步骤S730.当所述代码检测任务所在的模块名称位于所述增量模块列表中时,获取与所述增量模块列表包括的所述修改模块对应的第一代码检测任务。
以下,将对步骤S710-步骤S730进行进一步的解释以及说明。具体的,当得到当前分支中的修改文件之后,首先,可以根据修改文件的相对路径得到该修改文件中包括的修改模块,当得到修改模块之后,将修改模块保存至增量模块列表中;然后,对目标项目的当前分支的模块中注册的代码检测任务进行遍历,得到每个代码检测任务所在的模块名称,当任一代码检测任务所在的模块名称位于增量模块列表中时,获取在位于增量模块列表包括的模块中注册的第一代码检测任务。
在本示例实施例中,当得到第一代码检测任务之后,将所述检测任务的状态修改为开启,包括:
通过所述目标项目的插件,将在所述修改模块中注册的与代码检测对应的检测任务的状态修改为开启。
具体的,将该第一代码检测任务的状态修改为开启,并且将第一代码检测任务之外的其他代码检测任务的状态修改为关闭,即,通过task.setEnabled(true)将第一代码检测任务的状态设备为开启。
举例而言,参考图8所示,当目标项目的当前分支中包括模块A、模块B、模块C以及模块D,当对当前分支中的模块B以及模块C进行修改,并提交当前分支之后,通过自定义插件中的差异检测任务,得到当前分支中的修改模块为模块B以及模块C,并将模块B、模块C中包括的代码检测任务的状态修改为开启,将模块A、模块D中包括的代码检测任务的状态修改为关闭。
在步骤S130中,通过状态为开启的检测任务对所述当前分支的修改模块中包括的代码进行检测。
在本示例实施例中,当将第一代码检测任务的状态修改为开启之后,代码检测工具通过状态为开启的第一代码检测任务对当前分支中的修改模块进行检测。本示例实施例提高了代码检测的执行速度,同时提高了目标项目编译的速度。
在本示例实施例中,在对所述当前分支的修改模块中包括的代码进行检测之后,所述项目代码检测方法还包括:
通过所述上传任务,将所述当前分支的当前分支信息存储至所述构建信息缓存文件,并将所述构建信息缓存文件同步至服务器。
具体的,在当前分支的修改模块执行完代码检测任务之后,可以将执行代码检测时的当前分支信息存储至构建信息缓存文件中,并将该构建信息缓存文件同步至服务器中。
以下,结合图9对本示例实施例的项目代码检测方法进行进一步的解释以及说明。其中,项目代码检测方法可以包括:
步骤S902.在当前分支的模块中注册代码检测任务;
步骤S904.获取当前分支的分支信息以及当前分支的构建信息缓存文件;
步骤S906.判断构建信息文件缓存文件中是否存在当前分支的历史构建信息;
步骤S908.当构建信息缓存文件中不存在当前分支的历史构建信息时,对当前分支中的模块进行全量代码检测;
步骤S910.将当前分支的当前分支信息存储至构建信息缓存文件中;
步骤S912.当构建信息缓存文件中存在当前分支的历史构建信息时,获取当前分支的历史构建信息;
步骤S914.基于当前分支信息以及历史构建信息,得到当前分支中的修改模块;
步骤S916.将修改模块中包括的与代码检测相关的任务的状态修改为开启;
步骤S918.通过状态为开启的代码检测任务对修改模块中的代码进行检测,在检测完成后,执行步骤S910。
本公开示例实施例提供的项目代码检测方法至少具有以下优点:一方面,实现了自定义插件,并在自定义插件中注册了差异检测任务,通过该差异检测任务,得到目标项目中包括的修改模块,提高了目标项目中修改模块获取的效率;再一方面,当需要对目标项目进行代码检测时,通过获取目标项目的当前分支信息以及历史构建信息,获取目标项目中的修改文件以及修改模块,对目标项目中的修改模块进行代码检测,节省了时间以及设备资源;另一方面,当获取到修改文件之后,通过修改文件的相对路径,得到修改文件中的修改模块,通过对修改模块中的代码检测任务的状态进行修改,完成对修改模块的代码检测,提高了代码检测效率。
本公开示例实施例还提供了一种项目代码检测装置,参考图10所示,可以包括:修改文件获取模块1010、检测任务状态修改模块1020、代码检测模块1030。其中:
修改文件获取模块1010,用于获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
检测任务状态修改模块1020,用于获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
代码检测模块1030,用于通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
上述项目代码检测装置中各模块的具体细节已经在对应的项目代码检测方法中进行了详细的描述,因此此处不再赘述。
在本公开的一种示例性实施例中,在获取目标项目的历史构建信息之前,所述项目代码检测方法还包括:
实现自定义插件,在所述自定义插件中注册差异检测任务以及上传任务,并基于所述自定义插件提供全局开关变量;
确定所述差异检测任务以及所述上传任务的执行顺序,以使所述目标项目根据所述执行顺序执行所述差异检测任务以及所述上传任务。
在本公开的一种示例性实施例中,获取所述目标项目的当前分支的当前分支信息包括:
在所述当前分支包括的模块中注册所述自定义插件,并通过所述全局开关变量在所述模块中引入所述自定义插件;
对所述当前分支中包括代码进行提交;
执行所述自定义插件中注册的所述差异检测任务,通过所述目标项目的应用程序编程接口的显示提交点命令,得到所述当前分支的当前提交点;其中,所述当前分支信息中包括所述当前分支的当前提交点。
在本公开的一种示例性实施例中,获取所述目标项目的当前分支的历史构建信息,包括:
获取构建信息缓存文件,在构建信息缓存文件中进行查询;
在确定所述构建信息缓存文件中包括所述当前分支的历史构建信息时,从所述构建信息缓存文件中获取所述历史构建信息;
在确定所述构建信息缓存文件中不包括所述当前分支的历史构建信息时,执行在所述当前分支的第一模块中注册的检测任务,在检测任务执行完成后,将所述当前分支的当前分支信息存储至所述构建信息缓存文件中。
在本公开的一种示例性实施例中,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件,包括:
通过所述差异检测任务,获取所述当前分支信息中包括的所述当前分支的当前提交点以及所述历史构建信息中包括的当前分支的历史提交点;
利用所述当前提交点以及所述历史提交点,通过差异文件获取命令,得到所述当前分支中的修改文件。
在本公开的一种示例性实施例中,获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,包括:
获取所述修改文件的相对路径,基于所述修改文件的相对路径得到所述修改文件的修改模块,并将所述修改模块保存至增量模块列表中;
遍历所述当前分支的模块中注册的代码检测任务,得到每个所述代码检测任务所在的模块名称;
当所述代码检测任务所在的模块名称位于所述增量模块列表中时,获取与所述增量模块列表包括的所述修改模块对应的第一代码检测任务。
在本公开的一种示例性实施例中,将所述代码检测任务的状态修改为开启,包括:
获取在所述增量模块列表的修改模块中注册的第一代码检测任务,将所述第一代码检测任务的状态修改为开启;
将所述目标项目的当前分支中第一代码检测任务外的代码检测任务的状态修改为关闭。
在本公开的一种示例性实施例中,在对所述当前分支的修改模块中包括的代码进行检测之后,所述项目代码检测方法还包括:
通过所述上传任务,将所述当前分支的当前分支信息存储至所述构建信息缓存文件,并将所述构建信息缓存文件同步至服务器。
根据本公开的一个方面,提供一种项目代码检测装置,包括:
修改文件获取模块,用于获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
检测任务状态修改模块,用于获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
代码检测模块,用于通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
在本发明的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图11来描述根据本发明的这种实施方式的电子设备1100。图11显示的电子设备1100仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图11所示,电子设备1100以通用计算设备的形式表现。电子设备1100的组件可以包括但不限于:上述至少一个处理单元1110、上述至少一个存储单元1120、连接不同系统组件(包括存储单元1120和处理单元1110)的总线1130以及显示单元1140。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1110执行,使得所述处理单元1110执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元1110可以执行如图1中所示的步骤S110:获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;S120:获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;S130:通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
存储单元1120可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)11201和/或高速缓存存储单元11202,还可以进一步包括只读存储单元(ROM)11203。
存储单元1120还可以包括具有一组(至少一个)程序模块11205的程序/实用工具11204,这样的程序模块11205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1130可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1100也可以与一个或多个外部设备1200(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1100交互的设备通信,和/或与使得该电子设备1100能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1150进行。并且,电子设备1100还可以通过网络适配器1160与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1160通过总线1130与电子设备1100的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1100使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本发明实施方式的方法。
在本发明的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
根据本发明的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里发明的发明后,将容易想到本发明的其他实施例。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未发明的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由权利要求指出。
Claims (11)
1.一种项目代码检测方法,其特征在于,包括:
获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
2.根据权利要求1所述的项目代码检测方法,其特征在于,在获取目标项目的历史构建信息之前,所述项目代码检测方法还包括:
实现自定义插件,在所述自定义插件中注册差异检测任务以及上传任务,并基于所述自定义插件提供全局开关变量;
确定所述差异检测任务以及所述上传任务的执行顺序,以使所述目标项目根据所述执行顺序执行所述差异检测任务以及所述上传任务。
3.根据权利要求2所述的项目代码检测方法,其特征在于,获取所述目标项目的当前分支的当前分支信息包括:
在所述当前分支包括的模块中注册所述自定义插件,并通过所述全局开关变量在所述模块中引入所述自定义插件;
对所述当前分支中包括代码进行提交;
执行所述自定义插件中注册的所述差异检测任务,通过所述目标项目的应用程序编程接口的显示提交点命令,得到所述当前分支的当前提交点;其中,所述当前分支信息中包括所述当前分支的当前提交点。
4.根据权利要求3所述的项目代码检测方法,其特征在于,获取所述目标项目的当前分支的历史构建信息,包括:
获取构建信息缓存文件,在构建信息缓存文件中进行查询;
在确定所述构建信息缓存文件中包括所述当前分支的历史构建信息时,从所述构建信息缓存文件中获取所述历史构建信息;
在确定所述构建信息缓存文件中不包括所述当前分支的历史构建信息时,执行在所述当前分支的第一模块中注册的检测任务,在检测任务执行完成后,将所述当前分支的当前分支信息存储至所述构建信息缓存文件中。
5.根据权利要求4所述的项目代码检测方法,其特征在于,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件,包括:
通过所述差异检测任务,获取所述当前分支信息中包括的所述当前分支的当前提交点以及所述历史构建信息中包括的当前分支的历史提交点;
利用所述当前提交点以及所述历史提交点,通过差异文件获取命令,得到所述当前分支中的修改文件。
6.根据权利要求5所述的项目代码检测方法,其特征在于,获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,包括:
获取所述修改文件的相对路径,基于所述修改文件的相对路径得到所述修改文件的修改模块,并将所述修改模块保存至增量模块列表中;
遍历所述当前分支的模块中注册的代码检测任务,得到每个所述代码检测任务所在的模块名称;
当所述代码检测任务所在的模块名称位于所述增量模块列表中时,获取与所述增量模块列表包括的所述修改模块对应的第一代码检测任务。
7.根据权利要求6所述的项目代码检测方法,其特征在于,将所述代码检测任务的状态修改为开启,包括:
获取在所述增量模块列表的修改模块中注册的第一代码检测任务,将所述第一代码检测任务的状态修改为开启;
将所述目标项目的当前分支中第一代码检测任务外的代码检测任务的状态修改为关闭。
8.根据权利要求7所述的项目代码检测方法,其特征在于,在对所述当前分支的修改模块中包括的代码进行检测之后,所述项目代码检测方法还包括:
通过所述上传任务,将所述当前分支的当前分支信息存储至所述构建信息缓存文件,并将所述构建信息缓存文件同步至服务器。
9.一种项目代码检测装置,其特征在于,包括:
修改文件获取模块,用于获取目标项目的当前分支的当前分支信息以及历史构建信息,根据所述当前分支信息以及历史构建信息,得到所述当前分支中的修改文件;
检测任务状态修改模块,用于获取所述修改文件中的修改模块,以及与所述修改模块对应的代码检测任务,将所述代码检测任务的状态修改为开启;
代码检测模块,用于通过状态为开启的代码检测任务对所述当前分支的修改模块中包括的代码进行检测。
10.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-8任一项所述的项目代码检测方法。
11.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-8任一项所述的游戏中的项目代码检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210590263.7A CN115080113A (zh) | 2022-05-26 | 2022-05-26 | 项目代码检测方法和装置、可读存储介质、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210590263.7A CN115080113A (zh) | 2022-05-26 | 2022-05-26 | 项目代码检测方法和装置、可读存储介质、电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115080113A true CN115080113A (zh) | 2022-09-20 |
Family
ID=83249205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210590263.7A Pending CN115080113A (zh) | 2022-05-26 | 2022-05-26 | 项目代码检测方法和装置、可读存储介质、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115080113A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115712457A (zh) * | 2023-01-04 | 2023-02-24 | 赤子城网络技术(北京)有限公司 | 项目打包方法、装置、电子设备及存储介质 |
-
2022
- 2022-05-26 CN CN202210590263.7A patent/CN115080113A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115712457A (zh) * | 2023-01-04 | 2023-02-24 | 赤子城网络技术(北京)有限公司 | 项目打包方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107506300B (zh) | 一种用户界面测试方法、装置、服务器和存储介质 | |
US11675575B2 (en) | Checking source code validity at time of code update | |
US10628291B2 (en) | Programming assistance to identify suboptimal performing code and suggesting alternatives | |
CN110058861B (zh) | 源码处理方法及装置、存储介质、电子设备 | |
CN110764941B (zh) | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 | |
CN109614325B (zh) | 一种确定控件属性的方法及装置、电子设备和存储介质 | |
CN111752572B (zh) | 编译方法、装置、设备及存储介质 | |
CN110659210A (zh) | 一种信息获取方法、装置、电子设备及存储介质 | |
CN111338925A (zh) | 小程序测试方法及装置、系统、电子设备和存储介质 | |
CN112148272A (zh) | 工程组件化开发中配置共享的方法、装置、设备及介质 | |
CN112463256A (zh) | 确定配置文件的方法、系统、电子设备及存储介质 | |
CN110688111A (zh) | 业务流程的配置方法、装置、服务器和存储介质 | |
KR20240047468A (ko) | Ecu 업그레이드 방법 및 디바이스, 및 판독 가능 저장 매체 | |
CN115080113A (zh) | 项目代码检测方法和装置、可读存储介质、电子设备 | |
US11182272B2 (en) | Application state monitoring | |
CN115167822A (zh) | 分支代码合并方法、装置、设备和存储介质 | |
US10242315B2 (en) | Finite state machine forming | |
CN113821486B (zh) | pod库之间依赖关系的确定方法及其装置、电子设备 | |
CN115269285A (zh) | 测试方法及装置、设备、计算机可读存储介质 | |
CN112506871B (zh) | 自动化任务管理及日志管理方法、系统、电子设备和介质 | |
CN114741294A (zh) | 一种页面的调试方法、装置、设备及存储介质 | |
US11709936B2 (en) | Automatic integrity vulnerability detection in an integrated development environment | |
US9477448B2 (en) | Screen-oriented computing program refactoring | |
CN113190462A (zh) | 一种动态化的数据调试方法和装置及设备 | |
AU2017227739A1 (en) | Automated testing method for application program user interface, electronic device, system, and storage medium |
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 |