一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码提交控制方法、装置及计算机设备与流程

2021-10-29 20:18:00 来源:中国专利 TAG:代码 装置 提交 控制 计算机


1.本技术属于软件代码管理技术领域,尤其涉及一种代码提交控制方法、装置及计算机设备。


背景技术:

2.目前,通常采用多人协作的方式进行软件开发,每个人都可以将本地编写好的代码提交至代码仓库系统,在提交代码时,一般会采用svn、git等代码管理软件进行代码提交管控,以方便对代码提交进行回溯和查阅分析。
3.svn、git等代码管理软件,是一个开放源代码的版本控制系统,采用分支管理模式进行代码的高效管理,其提供客户端拉取代码、服务端保存代码的功能,能够实现在多人共同开发项目的环境中进行资源共享以及代码的集中式管理。然而基于上述管理软件的传统代码管理方式,无法解决应用层面的分支合入(向请求的分支提交/合入代码)检测与控制需求,在研发过程中无法对开发者向请求的分支提交代码的操作事件进行合理性检测及控制,从而可能会导致向不应该提交的分支提交了代码的现象发生。


技术实现要素:

4.有鉴于此,本技术公开了一种代码提交控制方法、装置及计算机设备,通过建立单据跟进机制,实现对向请求的分支提交代码的事件进行合理性检测及控制,以保证向正确的分支进行代码提交。
5.为实现上述目的,一方面,本技术提供了一种代码提交控制方法,该方法包括:
6.获得向目标分支提交代码时的代码提交事件触发的代码提交请求;所述代码提交请求能用于指示所述代码提交事件的提交信息,所述提交信息至少包括待提交代码的代码信息以及单据标识;
7.根据所述单据标识跟踪所述代码提交事件关联的目标单据;其中,预先为项目制定了至少一个单据,并为各个单据规定了相对应的允许提交代码的合法分支,不同单据分别与项目的不同规划相对应,每个规划需通过至少一次代码提交事件完成,代码提交事件关联的单据为代码提交事件所对应的规划关联的单据;
8.在根据所述目标单据关联的合法分支确定允许向所述目标分支提交所述待提交代码的条件下,向所述目标分支提交所述待提交代码;
9.在根据所述目标单据关联的合法分支确定不允许向所述目标分支提交所述待提交代码的条件下,阻断所述待提交代码向所述目标分支的提交。
10.另一方面,本技术还提供了一种代码提交控制装置,该装置包括:
11.请求获取单元,用于获得向目标分支提交代码时的代码提交事件触发的代码提交请求;所述代码提交请求能用于指示所述代码提交事件的提交信息,所述提交信息至少包括待提交代码的代码信息以及单据标识;
12.单据跟踪单元,用于根据所述单据标识跟踪所述代码提交事件关联的目标单据;
其中,预先为项目制定了至少一个单据,并为各个单据规定了相对应的允许提交代码的合法分支,不同单据分别与项目的不同规划相对应,每个规划需通过至少一次代码提交事件完成,代码提交事件关联的单据为代码提交事件所对应的规划关联的单据;
13.代码提交单元,用于在根据所述目标单据关联的合法分支确定允许向所述目标分支提交所述待提交代码的条件下,向所述目标分支提交所述待提交代码;
14.提交阻断单元,用于在根据所述目标单据关联的合法分支确定不允许向所述目标分支提交所述待提交代码的条件下,阻断所述向所述目标分支的提交。
15.再一方面,本技术还提供了一种计算机设备,该计算机设备包括:
16.存储器,用于存储计算机可执行指令;
17.处理器,用于执行所述计算机可执行指令,所述计算机可执行指令在被调用时至少能用于执行如上任一项所述的代码提交控制方法。
18.根据以上方案可知,本技术提供的代码提交控制方法、装置及计算机设备,预先为项目制定了至少一个单据,并为各个单据规定了相对应的允许提交代码的合法分支,其中,不同单据分别与项目的不同规划相对应,每个规划需通过至少一次代码提交事件来完成。这样,当获得代码提交事件触发的代码提交请求时,根据请求中提供的单据标识对该代码提交事件关联的目标单据进行跟踪,并根据跟踪所得的目标单据对应的合法分支,对向请求的分支提交代码的事件进行合理性检测及控制,从而满足了应用层面的分支合入检测与控制需求,保证了向正确的分支进行代码提交,可有效避免向不应该提交的分支提交代码。。
附图说明
19.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
20.图1是本技术可选实施例中代码提交控制方法的应用场景示意图;
21.图2是本技术可选实施例中代码提交控制方法所适用的计算机设备的结构示意图;
22.图3是本技术可选实施例中代码提交控制方法的流程示意图;
23.图4是本技术可选实施例中提交信息的数据结构示例图;
24.图5是本技术可选实施例中基于pre-commit进行前置检查处理的一种流程示意图;
25.图6是本技术可选实施例中一个迭代实例的图示;
26.图7是本技术可选实施例中基于pre-commit进行前置检查处理的另一种流程示意图;
27.图8是本技术可选实施例中基于pre-commit进行前置检查处理的又一种流程示意图;
28.图9是本技术可选实施例中基于post-commit进行后置检查处理的一种流程示意图;
29.图10是本技术可选实施例中基于post-commit进行后置检查处理的另一种流程示意图;
30.图11是本技术可选实施例中在服务器部署代码提交钩子系统以及单据跟踪系统以实现基于单据跟踪的代码提交控制的示意图;
31.图12是本技术可选实施例中json格式的提交管理界面示例图;
32.图13是本技术可选实施例中提交注释信息的一种格式示例;
33.图14是本技术可选实施例中一应用实例包括的基于pre-commit的前置检查流程图;
34.图15是本技术可选实施例中在合入的分支不属于所属迭代中的允许分支情形下向提交人提供的反馈信息界面;
35.图16是本技术可选实施例中在提交代码关联的单据为已完成状态的情形下向提交人提供的反馈信息界面;
36.图17是本技术可选实施例中一应用实例包括的基于post-commit的后置检查流程图;
37.图18是本技术可选实施例中在pre-commit产生代码提交拦截的次数的统计结果图;
38.图19是本技术可选实施例中在post-commit中产生的分支合入提醒的次数的统计结果图;
39.图20是本技术可选实施例中代码提交控制装置的一种结构示意图;
40.图21是本技术可选实施例中代码提交控制装置的另一种结构示意图。
具体实施方式
41.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
42.本技术的发明人发现,传统的代码管理方式,无法解决应用层面的分支合入判定需求,在研发过程中无法对开发者向不应该提交的分支提交代码的操作事件进行有效管控,从而可能会导致向不应该提交的分支提交了代码的现象发生,其中,主要有如下几种可能遇到的场景:
43.1)无人知晓的提交
44.如,策划临时增加一个需求,此时研发人员快速将需求的解决代码提交到发布分支中,项目经理和测试人员等任何其他同事都不知晓,最后发布到外网导致事故。
45.2)不被规划的提交
46.如,某研发人员在主干合入一个新特性,该特性需在下个月发布,但是该研发人员以为这个特性要在即将本月发布的版本里推出,所以在本月的发布分支里也合入该特性的代码,最后导致本月发布的内容里出现了下个月规划的内容。
47.3)特殊控制的提交
48.如,在外网发布分支使用一个临时的方案解决了外网的问题,但是该临时方案的
代码内容并不需要合入主干,主干有正式的解决方案。然而研发人员习惯性的把该内容合入到主干,最后在主干又忘记了使用正式的方案,导致外网始终是临时方案,在特殊场景下临时方案不起作用,又出现了问题。
49.针对以上问题,本技术公开了一种代码提交控制方法、装置及计算机设备,以提供上述问题的解决方案。
50.作为本技术实施例的一个方面,首先提供了一种代码提交控制方法,用于通过建立单据跟进机制、对代码提交事件进行单据跟踪来判定代码是否可以合入所请求的分支,以此满足应用层面的分支合入判定需求,达到避免向不应该提交的分支提交代码的目的。
51.可选的,上述的代码提交控制方法,可以应用在能够进行资源共享及代码集中管理的多人共同协作式的项目开发、管理场景中,进一步地,可以应用于该场景中的能够提供代码管理、代码版本控制功能的计算机设备中,该计算机设备可以是但不限于通用/专用计算或配置环境中的便携式计算机(如笔记本)、台式计算机或大中型计算机、后台服务器或云平台服务器等计算机设备,具体地,如部署在企业本地局域网或者云平台环境的能用于提供代码管理、代码版本控制功能并维护有代码仓库系统的服务器等,执行本技术方法的执行主体可以是多样化的,本技术实施例对此不作限定。
52.以下首先对本技术方法的应用场景作简单介绍。
53.如图1所示,提供了该应用场景的架构示意图,包括多个对应于不同开发人员的前端终端设备(如笔记本、台式机、一体机等)以及用于提供代码管理、代码版本控制功能并维护代码仓库系统的服务器(或服务器集群)。开发人员在其终端设备进行项目中所负责部分的代码的编写,并在完成后将本地编写好的代码提交至服务器的代码仓库系统,服务器中维护有代码提交钩子系统及单据跟踪系统(或者也可称为单据管理系统),当然还可以维护有代码仓库系统,服务器中的代码仓库系统根据前端代码提交事件触发hook(钩子)处理,通过hook并结合单据跟进机制提供应用层面的分支合入判定功能,以判定代码提交时所请求合入的分支是否为允许的合法分支,若允许则表明代码提交事件可以正式生效,相应可完成代码提交,若不允许则本次提交被判定为不能正式生效,从而阻挡本次提交。需要说明的是,实际实施中,用于维护代码提交钩子系统及单据跟踪系统的服务器与用于维护代码仓库系统的服务器可以是同一服务器,也可以是不同服务器,在此不做限制。
54.参阅图2,其示出了本技术方法所适用的计算机设备(如上述应用场景中的服务器)的一种组成结构示意图,该计算机设备也即本技术作为另一方面所公开的计算机设备。如图2所示,该计算机设备可以包括:处理器201和存储器202。当然,还可以包括通信接口203、输入单元204、显示器205和通信总线206。
55.其中,处理器201、存储器202、通信接口203、输入单元204及显示器205,均通过通信总线206完成相互间的通信。
56.在本技术实施例中,该处理器201,可以为中央处理器(central processing unit,cpu),特定应用集成电路(application-specific integrated circuit,asic),数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件等。
57.该处理器201可以调用存储器202中存储的程序。
58.存储器202中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序
代码包括计算机操作指令/计算机可执行指令,在本技术实施例中,该存储器202中至少存储有用于实现以下功能的程序:
59.获得向目标分支提交代码时的代码提交事件触发的代码提交请求;所述代码提交请求能用于指示所述代码提交事件的提交信息,所述提交信息至少包括待提交代码的代码信息以及单据标识;
60.根据所述单据标识跟踪所述代码提交事件关联的目标单据;其中,预先为项目制定了至少一个单据,并为各个单据规定了相对应的允许提交代码的合法分支,不同单据分别与项目的不同规划相对应,每个规划需通过至少一次代码提交事件完成,代码提交事件关联的单据为代码提交事件所对应的规划关联的单据;
61.根据所述目标单据关联的合法分支,判定是否允许向所述目标分支提交所述代码提交事件的待提交代码;
62.若是,则向所述目标分支提交所述代码提交事件的待提交代码;
63.若否,则阻断所述代码提交事件的待提交代码向所述目标分支的提交。
64.在一种可能的实现方式中,该存储器202可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、以及至少一个功能(比如声音播放功能、图像播放功能等)所需的应用程序等;存储数据区可存储根据计算机的使用过程中所创建的数据,比如,用户数据、用户访问数据以及音频数据等等。
65.此外,存储器202可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
66.通信接口203可以为通信模块的接口,如gsm模块的接口。
67.输入单元204可以为触摸感应单元、键盘等等。显示器305可以包括显示面板,如触摸显示面板等。
68.当然,图2所示的终端设备结构并不构成对本技术实施例中终端设备的限定,在实际应用中该终端设备可以包括比图2所示的更多或更少的部件,或者组合某些部件。
69.另外,为了引用和清楚起见,这里同时对本技术下文所涉及的一些技术名词、简写或缩写总结解释如下:
70.code commit:代码提交;
71.essential comment:必要提交注释;
72.ticket:单据;
73.ticket id:单据id;
74.commit management:代码提交管理;
75.story/bug trace system:单据跟踪系统;
76.ticket manager:单据管理;
77.commit hook:提交钩子,在代码提交时可以被触发的功能;
78.pre-commit:提交代码时,提交正式生效前触发的commit hook;
79.post-commit:提交代码时,提交正式生效后触发的commit hook。
80.以下将基于本技术实施例涉及的上述共性方面,对本技术实施例进一步详细说明。如图3所示,为本技术一可选实施例提供的代码提交控制方法的流程示意图,该方法包括:
81.步骤s301、获得向目标分支提交代码时的代码提交事件触发的代码提交请求。
82.当开发人员在其终端设备上完成代码编写后,执行代码提交事件,将本地编写好的代码提交至服务器的代码仓库系统,代码提交事件的发生相应会在终端设备上向代码仓库系统触发代码提交请求。该请求能用于指示本次代码提交事件的提交信息,实施中,该请求中可通过携带待提交代码的代码文件名称、编号或存储路径等信息中的至少一种,来提供必要的提交信息指示功能。代码提交事件对应的提交信息可以包括但不限于待提交代码的代码信息和单据标识。
83.具体地,为了支持提供应用层面的分支合入判定功能,以判定代码提交事件所请求合入代码的分支是否为允许的合法分支、相应避免向不应该提交的分支提交代码,本技术实施例建立了单据跟进机制。在该机制下,根据项目的实际情况为项目制定一个个的需求与任务规划以及bug规划(当然还可以有其他类型的规划,在此不做限制),每个规划需通过至少一次代码提交事件来完成,并为每个规划制定了相对应的单据,以及根据项目实际情况为各个单据(也即相当于规划)规定了相对应的允许提交代码的合法分支,并将规划(如需求与任务规划以及bug规划)、单据以及与所规定的允许合入代码的分支的关联关系信息维护在单据跟踪系统中。
84.实际实施中,为了便于实现过程的简洁化,可以将一个单据理解为一个规划,更具体地说,是将一个单据作为一个规划的具象化实施形式。
85.基于上述的单据跟进机制,在提交者(如开发人员)执行代码提交事件进行代码提交时,除了需提供待提交代码的代码信息,还强制提交者提供如ticket id等单据标识,并将其携带在代码提交事件对应的提交信息中,以用作后续进行单据跟踪的依据。
86.其中,可由提交者根据此次代码提交事件实际对应的规划(即为了完成特定的规划而执行相应的代码编写及提交工作),手动输入相对应的ticket id,或者,还可以由系统根据当前的代码提交事件对应的特定规划而自动为其从单据跟踪系统进行ticket id同步,本实施例对提交信息中的ticket id等单据标识的获取方式不予限定,只要在提交代码时能够同时提供正确的ticket id,就均在本技术方案的保护范围之内。
87.在进行代码提交时,除了需提交待提交代码的代码信息,通常还需要一并提交待提交代码的一些必要注释信息,比如注释提交人是谁、提交了什么文件、提交到什么分支的什么目录等,本技术实施例中,可选地,如图4所示,具体将ticket id携带在待提交代码的提交注释信息中,并作为提交注释信息的一部分与待提交代码一同参与提交。
88.步骤s302、根据所述单据标识追踪所述代码提交事件关联的目标单据。
89.在获得代码提交事件触发的代码提交请求之后,在应用层面执行分支合入判定,确定请求合入代码的目标分支是否为允许的合法分支。
90.本实施例采用hook机制提供提交代码时的分支合入判定功能,其中,hook包括pre-commit(前置钩子)和post-commit(后置钩子),本实施例中,代码仓库系统获得代码提交请求后触发pre-commit,并利用pre-commit完成基于单据跟踪的分支合入判定过程,如图5所示,该触发pre-commit并利用pre-commit完成基于单据跟踪的分支合入判定过程可以通过以下的处理实现:
91.步骤s501、触发前置钩子;
92.即,基于发生的代码提交事件,于代码提交钩子系统中触发pre-commit。
93.步骤s502、利用前置钩子对提交信息进行数据解析,得到单据标识。
94.可从待提交代码的提交注释信息中解析出此次代码提交事件对应的ticket id等单据标识。
95.步骤s503、根据所述单据标识确定所述代码提交事件关联的目标单据,并读取所述目标单据的迭代属性,以获得所述目标单据所属的目标迭代;
96.其中,预先在不同迭代中记录了所规定的允许提交代码的合法分支。
97.步骤s504、读取所述目标迭代记录的合法分支作为所述目标单据关联的合法分支。
98.可选地,本实施例中,单据的管理体系,按照迭代来规划,每个迭代里有需求与任务规划以及bug规划,也即,相当于每个迭代对应有需求与任务规划类型的单据以及bug规划类型的单据,并预先根据项目规划(需求与任务规划、bug规划等)的实际情况,在不同迭代中记录所规定的允许提交代码的合法分支。
99.参阅图6,示例性提供了迭代的一个实例,其中,一个迭代可以但不限于包括如下的几项信息:
100.1)迭代名称
101.如图6中的“[国服]0822发布迭代”。
[0102]
当然,还可以是迭代编号等能唯一标识一个迭代的信息。
[0103]
2)允许提交代码的合法分支
[0104]
所述合法分支可以是主干,如图6中的“trunk”,或者也可以是非主干的相应分支,如图6中的发布分支“ssk_ob_v13_31_publish_for_20190822”等。
[0105]
3)单据标识
[0106]
如图6中,在迭代“[国服]0822发布迭代”中,提供了74个“需求与任务”类型的单据的ticket id以及134个bug类型的单据的ticket id(图6中未一一列出这些ticket id),相应表明这74个“需求与任务”类型的单据以及134个bug类型的单据所对应的合法分支至少包括该迭代中记录的以上两个分支:
[0107]
主干“trunk”;
[0108]
发布分支“ssk_ob_v13_31_publish_for_20190822”。
[0109]
实际实施中,可在单据跟踪系统中为每个单据维护迭代属性,并在单据的迭代属性中记录其对应的至少一个迭代。这样,当通过对代码提交事件的提交信息进行数据解析获取其中携带的单据标识如ticket id后,可基于单据标识确定代码提交事件关联的目标单据,并读取目标单据的迭代属性,从中获得目标单据所属的至少一个目标迭代,进而跟踪到至少一个目标迭代中记录的各个分支作为该目标单据关联的合法分支,也即是指本次代码提交事件中可以进行代码合入的分支。
[0110]
步骤s505、利用所述前置钩子,根据所述目标迭代记录的合法分支判定是否允许向所述目标分支提交所述代码提交事件的待提交代码。
[0111]
其中,在追踪到目标单据所属的至少一个目标迭代中记录的各个分支后,可利用前置钩子(pre-commit),根据目标迭代中记录的分支,判定是否允许向请求的目标分支提交代码。
[0112]
步骤s303、在根据所述目标单据关联的合法分支确定允许向所述目标分支提交所
述待提交代码的条件下,向所述目标分支提交代码提交事件的待提交代码。
[0113]
其中,若代码提交事件所请求合入代码的目标分支是追踪到的合法分支或合法分支中的之一,则可向目标分支提交本次代码提交事件的待提交代码,使本次提交正式生效。
[0114]
步骤s304、在根据所述目标单据关联的合法分支确定不允许向所述目标分支提交所述待提交代码的条件下,阻断所述代码提交事件的待提交代码向所述目标分支的提交。
[0115]
否则,若代码提交事件所请求合入代码的目标分支不是追踪到的合法分支或合法分支中的之一,则本次提交被判定为不能正式生效,相应阻断本次提交,同时,可选地,还可以给提交者一些信息提示,以至少提示提交者合入分支错误。
[0116]
本实施例中,当获得代码提交事件触发的代码提交请求时,根据提供的单据标识对该代码提交事件关联的目标单据进行跟踪,并根据跟踪所得的目标单据对应的合法分支,判定是否允许向此次提交事件请求合入的目标分支进行代码提交,若允许则完成提交,若不允许则阻断提交。通过建立单据跟进机制、对代码提交事件进行单据跟踪,满足了应用层面的分支合入检测与控制需求,保证了向正确的分支进行代码提交,可有效避免向不应该提交的分支提交代码。
[0117]
实际实施中,除了基于前置钩子执行分支合入判定,还可以执行一些其他判定,如判定提交人是否有权利提交,判定单据是否是尚未完成的状态等,仅有在提交人有权利提交、单据处于尚未完成的状态时,才可以让提交成功生效。
[0118]
由此,在本技术的一可选实施例中,如图7所示,上述的代码提交控制方法,在根据单据标识确定出代码提交事件关联的目标单据之后,还可以包括以下处理:
[0119]
步骤s701、读取所述待提交代码的提交目录、所述目标单据的提交人属性和状态属性中的至少一种;
[0120]
待提交代码的提交目录,根据实际情况,可能为所请求的目标分支对应的目录或者也可能为该目标分支下的相应目录。
[0121]
单据的提交人属性中规定了具有提交权限的提交人;状态属性中记录了单据的当前状态,包括未完成状态(相应指示单据对应的规划未完成)或已完成状态(相应指示单据对应的规划已完成)。
[0122]
步骤s702、对所述代码提交事件执行全局规则检查;
[0123]
全局规则检查即指global rules检查,可以包括但不限于如下的至少一种:
[0124]
确定代码提交事件的提交目录是否为禁止提交的目录;
[0125]
确定代码提交事件的提交人是否为目标单据的提交人属性指定的提交人;
[0126]
基于目标单据的状态属性确定此次代码提交事件对应的目标单据是否为未完成状态。
[0127]
步骤s703、若所述代码提交事件未通过所述全局规则检查,则阻断所述代码提交事件的待提交代码向所述目标分支的提交;
[0128]
代码提交事件未通过全局规则检查,是指代码提交事件的提交目录为禁止提交的目录、代码提交事件的提交人不是目标单据的提交人属性指定的提交人和/或目标单据的状态属性表明目标单据为已完成状态。
[0129]
在代码提交事件未通过全局规则检查的情形下,本次提交被判定为不能正式生效,相应可以阻断本次提交,并给提交者一些信息提示。
[0130]
步骤s704、若所述代码提交事件通过所述全局规则检查,则触发对所述代码提交事件的项目规则检查,并在所述项目规则检查中实现对所述目标分支的合理性判定。
[0131]
项目规则检查即指project rules检查。
[0132]
在项目规则检查中提供基于单据跟踪的分支合入判定功能,避免将代码合入不应该提交代码的分支,关于基于单据跟踪的分支合入判定过程,可参阅上文实施例的相关介绍,为了避免赘述,这里不再提供详细说明。
[0133]
本实施例通过对代码提交事件的提交信息执行全局规则检查、项目规则检查,并建立单据跟进机制、对代码提交事件进行基于单据跟踪的分支合入判定,满足了应用层面的分支合入判定需求,避免了向不应该提交的分支提交代码,同时还可以保证在提交人具有权限、单据处于未完成状态的情形下使提交生效。
[0134]
另外,在本技术其他可选实施例中,参阅图8,上述的代码提交控制方法,还可以包括以下处理:
[0135]
步骤s801、若所述代码提交事件满足以下条件的至少之一,则跳过所述全局规则检查和所述项目规则检查中至少一种,并向所述目标分支提交所述待提交代码:
[0136]
所述代码提交事件的提交人为前置钩子中规定的白名单用户;
[0137]
所述代码提交事件的提交目录为前置钩子中规定的白名单目录。
[0138]
本实施例预先在前置钩子中规定了至少一个白名单用户和/或至少一个白名单目录,以针对特殊提交人(如高权限人员、负责完成特殊规划的代码编写与提交工作的人员等)或特殊目录(如工具暂存目录等),灵活地为其预留直接提交通道,使得当提交人为前置钩子中规定的白名单用户和/或提交目录为前置钩子中规定的白名单目录时,跳过上述的全局规则检查和/或项目规则检查,直接向目标分支(具体可以是目标分支对应的目录或目标分支下的相应目录)进行信息提交。
[0139]
基于hook机制,除了利用触发的前置钩子对代码提交事件进行基于单据跟踪的分支合入判定,在本技术其他可选实施例中,还可以在完成代码提交之后,触发后置钩子(post-commit),并利用后置钩子执行代码提交后的一些必要处理,由此,如图9所示,本技术公开的代码提交控制方法,还可以包括:
[0140]
步骤s901、触发后置钩子;
[0141]
步骤s902、利用所述后置钩子执行以下处理中的至少之一:生成并记录此次代码提交事件的提交记录信息;在所述目标单据关联的合法分支的数量为多个的情况下,进行分支合并提醒。
[0142]
其中,所述分支合并提醒用于提醒提交者将所述待提交代码合入所述目标单据关联的多个合法分支中所述目标分支除外的其他分支中。
[0143]
具体地,在完成代码提交后,触发后置钩子(post-commit),根据本次提交的相关信息进行一系列的信息处理,生成和更新提交记录,所生成的提交记录可以包括但不限于代码提交事件对应的提交人、所提交的文件、提交到什么目录等提交信息。提交记录可以由后置钩子单独使用,或者也可以与前置钩子(pre-commit)协同使用,以起到管控提交的作用。
[0144]
另外,可选地,若目标单据(代码提交事件对应的单据)关联的合法分支的数量为多个,还可以利用后置钩子进行分支合入提醒,该分支合入提醒用于提醒提交者将待提交
代码合入目标单据关联的多个合法分支中所请求目标分支除外的其他分支中。
[0145]
提交者可根据提醒,决定是否向其他合法分支或其中的一部分合入代码,比如,若提交至目标分支的代码为一个临时解决方案,未经测试不够完善,则可不向其他合法分支合入该代码,若提交的代码为通过测试的最终方案,则可将该代码合入其他合法分支或合入其他合法分支中的某些分支。
[0146]
本实施例通过在完成代码提交后触发后置钩子,利用后置钩子对代码提交进行记录处理,可方便对代码提交进行回溯和查阅分析,另外,基于单据跟踪对提交者进行分支合入提醒,可便于提交者快速地向其他所允许的分支进行代码提交决策及代码提交,有效提升了代码管控质量及效率。
[0147]
另外,在完成代码提交并利用触发的后置钩子执行代码提交后的一些必要处理时,参阅图10,所执行的处理还可以包括:
[0148]
步骤s1001、检测所述单据标识是否合法;
[0149]“合法”即当前的代码提交事件请求提交的目标分支属于ticket id所从属的迭代中规定的分支。“不合法”即代码提交事件请求提交的目标分支不属于ticket id所从属的迭代中规定的分支或目标分支的ticket id实际上不存在(比如,白名单用户或白名单目录的代码提交中,所需合入的分支的ticket id实际上可能不存在等)。
[0150]
步骤s1002、若合法,则确定是否需忽略本次的代码提交事件;
[0151]
其中,需忽略本次的代码提交事件的情况包括如下的至少一种:ticket id所从属的迭代中记录的分支数少于1;代码提交事件的提交人为后置钩子中规定的白名单用户,代码提交事件的提交目录为后置钩子中规定的白名单目录。
[0152]
前置钩子与后置钩子中各自规定的白名单用户可以相同或不同,相类似地,前置钩子与后置钩子中各自规定的白名单目录可以相同或不同。
[0153]
步骤s1003、若不需忽略本次的代码提交事件,则触发所述生成并记录此次代码提交事件的提交记录信息的步骤和在所述目标单据关联的合法分支的数量为多个的情况下进行分支合入提醒的步骤中的至少一个步骤。
[0154]
步骤s1004、若单据标识不合法或者需忽略本次的代码提交事件,则结束。
[0155]
具体地,若单据标识不合法或者需忽略本次的代码提交事件,则不再执行提交记录的生成、更新处理以及分支合入提醒处理,直接结束即可。
[0156]
本实施例通过在后置钩子中规定至少一个白名单用户和/或至少至少一个白名单目录,使得针对特殊提交人(如高权限人员、负责完成特殊规划的代码编写与提交的人员等)或特殊目录(如工具暂存目录等),可以灵活地为其预留不进行任何后置处理的通道,在该通道中,不再进行提交记录处理及分支合入提醒处理,而是直接结束提交事件的处理流程即可。
[0157]
为了便于对本技术的代码提交控制方法进行理解,以下进一步结合本技术实施例的一个应用实例对本技术方法进行介绍。
[0158]
参阅图11,在该实例中,于服务器中构建了代码提交钩子系统以及单据跟踪系统,基于代码提交钩子系统以及单据跟踪系统为代码仓库系统的代码提交提供应用层面的分支合入判定功能。
[0159]
其中,单据跟踪系统(story/bug trace system、ticket manager),可以设定任何
符合需求的属性字段,比如为ticket设置迭代属性,该属性设定ticket从属于某一个迭代,并且设定ticket只允许合入到被规划的迭代记录的分支中。另外,也可以设定ticket的其他属性,比如设置ticket的提交人属性,以根据提交人属性判定提交人是否有权利执行提交,设置ticket的状态属性,比如ticket是否是尚未完成的状态等,根据ticket的状态属性,当仅有ticket是尚未完成的状态时才可以让提交成功生效。
[0160]
ticket的管理体系,按照迭代来规划,每个迭代里有需求与任务规划以及bug规划类型的ticket id,管理员可以通过修改迭代相关信息的方式来规定哪些分支可以提交。迭代的格式具体可参阅图6所示。
[0161]
提交管理(commit management)做出任何逻辑判断都需要依据项目配置(如设定的以上信息),可选地,可以使用json的格式来表达,如图12所示的json格式的管理界面。代码提交时,代码仓库系统设置强制添加ticket id,以及提交注释。代码仓库系统可以通过hook机制来获取tikect id,根据这个id去单据跟踪系统里查询是否可以提交。然后把结果返回给代码提交者。参阅图13,示出了代码提交中注释信息的一种格式,其中的“bug=********”或“story=********”等字段表示bug类型单据或需求与任务类型单据的ticket id为“********”,如图中的bug=59806628,即表示bug类型单据的ticket id为“59806628”。
[0162]
在该实例中,基于代码提交钩子系统以及单据跟踪系统,实现代码提交控制的流程包括两部分:
[0163]
基于pre-commit的前置检查;
[0164]
基于post-commit的后置检查。
[0165]
具体说明如下:
[0166]
其中,参阅图14的流程示意图,该基于pre-commit的前置检查的流程包括:
[0167]
1)接收pre-commit请求;
[0168]
其中,在提交代码时触发pre-commit请求,启动pre-commit处理。
[0169]
2)数据解析;
[0170]
对代码提交的提交信息进行数据解析,从中获得ticket id。
[0171]
3)读取配置;
[0172]
基于ticket id在单据跟踪系统中进行单据跟踪,并读取相应配置信息,如读取单据的迭代属性、提交人属性、状态属性、单据所属迭代中记录的允许合入代码的分支等。
[0173]
4)判定是否通过global rules检查;
[0174]
比如检查提交人是否是提交人属性中规定的提交人、检查提交目录是否为禁止提交的目录,和/或检查单据状态是否为未完成状态等。
[0175]
若提交人为规定的提交人、提交目录不是禁止提交的目录或者单据状态为未完成状态,则通过global rules检查,如图中global rules检查的next分支;否则未通过,如图中global rules检查的block分支。
[0176]
另外,还可以检查提交人是否为白名单用户,提交目录是否在过滤目录(也即白名单目录)中,若提交人是否为白名单用户,或提交目录在过滤目录中,则跳过global rules检查,如图中global rules检查的pass分支。
[0177]
5)判定是否通过project rules检查;
[0178]
在通过global rules检查后,需继续进行project rules检查。其中,包括根据单据所属迭代中记录的分支,对代码提交进行分支合入判定,以检查请求合入代码的分支是否是允许提交的分支。对于白名单用户或过滤目录可直接跳过该检查。
[0179]
其中,对于未通过检查(global rules和/或project rules检查)的情形,以及通过或者直接跳过检查的情形,可返回不同的状态码以示区分,如图14中,未通过检查时返回状态码500,通过或直接跳过检查则返回状态码200。
[0180]
6)给出http response;
[0181]
pre-commit将返回码以http response的形式给代码仓库系统,代码仓库系统可以相应向提交人的设备终端进行信息反馈,如提醒提交人合入了错误分支、提醒提交人不具有提交权限或者单据状态为已完成状态导致无法提交生效等等,另外,pre-commit还可以触发自己的一子线程进行相关信息记录(如记录哪个提交人的代码提交被阻拦、阻拦原因是什么等)与备份。
[0182]
参阅图15与图16,图15示出了合入的分支不属于所属迭代中的允许分支情形下向提交人提供的反馈信息界面,图16示出了提交代码关联的单据为已完成状态的情形下向提交人提供的反馈信息界面。
[0183]
参阅图17的流程示意图,基于post-commit的后置检查的流程包括:
[0184]
1)接收post-commit请求;
[0185]
代码提交完成后触发post-commit请求,启动post-commit处理。
[0186]
2)检查ticket id是否合法;
[0187]
合法即当前提交的分支属于ticket id所从属的迭代中规定的分支。不合法即ticket id实际上不存在(即不是单据跟踪系统中存在的ticket id),如对于提交人为白名单用户或提交目录为过滤目录的情形,其ticket id可能是不存在的。
[0188]
若通过检查,ticket id合法则进入下一步骤的处理,若不合法则结束。
[0189]
3)是否忽略本次提交;
[0190]
需要忽略的情况可以包括但不限于:ticket id所从属的迭代中记录的分支数少于1;提交的目录是需要过滤的目录(即白名单目录);提交者是白名单用户。
[0191]
若需忽略则结束,不需忽略则进入下一步骤。
[0192]
4)生成与更新记录
[0193]
此步骤负责在完成检查后生成提交记录并在记录系统(如日志系统或用于进行记录存储的数据库)中进行更新,“记录”是存储在程序侧(钩子系统侧)的数据。“更新记录”即对每次需要检查的提交进行数据处理,生成记录数据并向记录系统添加对应的记录数据,另外,还可以检查之前已经存储的记录数据是否需要清理。记录是发送消息提醒、新建bug单等功能的依据。
[0194]
5)生成并发送分支合入提醒消息;
[0195]
提醒提交人还可以将代码合入到其他哪些允许的分支。
[0196]
发明人统计了每次迭代中,由于提交分支错误而在pre-commit产生代码提交拦截的次数,如图18所示。另外,还统计了post-commit中提醒合入其他所允许分支的提醒次数,如图19所示。从图18和图19的数据可以看出,错误提交次数和提醒次数还是比较多的,从而应用本技术方法可起到较好的错误提交拦截和分支合入提醒效果。
[0197]
另一方面,本技术还提供了一种代码提交控制装置。
[0198]
参阅图20,其示出了本技术代码提交控制装置的一种结构示意图,该装置具体可应用于服务器或pc端终端设备等计算机设备中,其中,本技术装置所适用的该计算机设备的组成结构可以参阅前文的相关介绍,这里不再赘述。
[0199]
如图20所示,本技术实施例的代码提交控制装置可以包括:
[0200]
请求获取单元2001,用于获得向目标分支提交代码时的代码提交事件触发的代码提交请求;所述代码提交请求能用于指示所述代码提交事件的提交信息,所述提交信息至少包括待提交代码的代码信息以及单据标识;
[0201]
单据跟踪单元2002,用于根据所述单据标识跟踪所述代码提交事件关联的目标单据;其中,预先为项目制定了至少一个单据,并为各个单据规定了相对应的允许提交代码的合法分支,不同单据分别与项目的不同规划相对应,每个规划需通过至少一次代码提交事件完成,代码提交事件关联的单据为代码提交事件所对应的规划关联的单据;
[0202]
代码提交单元2003,用于在根据所述目标单据关联的合法分支确定允许向所述目标分支提交所述待提交代码的条件下,向所述目标分支提交所述代码提交事件的待提交代码;
[0203]
提交阻断单元2004,用于在根据所述目标单据关联的合法分支确定不允许向所述目标分支提交所述待提交代码的条件下,阻断所述代码提交事件的待提交代码向所述目标分支的提交。
[0204]
在本技术实施例的一可选的实施方式中,所述提交信息包括待提交代码的代码信息以及提交注释信息,所述单据标识携带在所述提交注释信息中;
[0205]
所述单据跟踪单元2002,具体用于:
[0206]
触发前置钩子;
[0207]
利用所述前置钩子对所述提交信息进行数据解析,得到单据标识;
[0208]
根据所述单据标识确定所述代码提交事件关联的目标单据,并读取所述目标单据的迭代属性,以获得所述目标单据所属的目标迭代;其中,预先在不同迭代中记录了所规定的允许提交代码的合法分支;
[0209]
读取所述目标迭代记录的合法分支作为所述目标单据关联的合法分支。
[0210]
在本技术实施例的一可选的实施方式中,所述单据跟踪单元2002在根据所述单据标识确定所述代码提交事件关联的目标单据之后,还用于:
[0211]
读取所述待提交代码的提交目录、所述目标单据的提交人属性和状态属性中的至少一种;待提交代码的提交目录为所述目标分支所对应目录或所述目标分支下的相应目录;对所述代码提交事件执行全局规则检查;所述全局规则检查包括如下的至少一种:确定所述代码提交事件的提交目录是否为禁止提交的目录,确定所述代码提交事件的提交人是否为所述目标单据的提交人属性指定的提交人,基于所述目标单据的状态属性确定所述目标单据是否为未完成状态;若所述代码提交事件未通过所述全局规则检查,则阻断所述代码提交事件的待提交代码向所述目标分支的提交;若所述代码提交事件通过所述全局规则检查,则触发对所述代码提交事件的项目规则检查,并在所述项目规则检查中执行是否允许向目标分支提交所述待提交代码的分支合入判定。
[0212]
在本技术实施例的一可选的实施方式中,所述单据跟踪单元2002还用于:
[0213]
若所述代码提交事件满足以下条件的至少之一,则跳过所述全局规则检查和所述项目规则检查中至少一种,并向所述目标分支提交所述待提交代码:
[0214]
所述代码提交事件的提交人为前置钩子中规定的白名单用户;
[0215]
所述代码提交事件的提交目录为前置钩子中规定的白名单目录。
[0216]
在本技术实施例的一可选的实施方式中,如图21所示,本技术实施例的浏览器测试装置可以包括后置处理单元2005,用于:
[0217]
在完成向目标分支提交所述待提交代码之后,触发后置钩子;
[0218]
利用所述后置钩子执行以下处理中的至少之一:生成并记录此次代码提交事件的提交记录信息;在所述目标单据关联的合法分支的数量为多个的情况下,进行分支合入提醒;
[0219]
其中,所述分支合入提醒用于提醒提交者将所述待提交代码合入所述目标单据关联的多个合法分支中除所述目标分支之外的其他分支中。
[0220]
在本技术实施例的一可选的实施方式中,所述后置处理单元2005在触发后置钩子后,还可以用于:
[0221]
检测所述单据标识是否合法;
[0222]
若合法,则确定是否需忽略本次的代码提交事件;其中,需忽略本次的代码提交事件的情况包括如下的至少一种:所述代码提交事件的提交人为后置钩子中规定的白名单用户,所述代码提交事件的提交目录为后置钩子中规定的白名单目录;
[0223]
若不需忽略本次的代码提交事件,则触发所述生成并记录此次代码提交事件的提交记录信息的步骤和在所述目标单据关联的合法分支的数量为多个的情况下进行分支合入提醒的步骤中的至少一个步骤;
[0224]
若所述单据标识不合法或者需忽略本次的代码提交事件,则结束。
[0225]
再一方面,本技术还提供了一种存储介质,该存储介质中存储有计算机程序,所述计算机程序被处理器加载并执行时,实现如上任意一个实施例中所描述的代码提交控制方法。
[0226]
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0227]
为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本技术时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0228]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例或者实施例的某些部分所述的方法。
[0229]
最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备
不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0230]
以上所述仅是本技术的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜