CN114579168B - 代码更新方法、装置、电子设备和计算机可读存储介质 - Google Patents
代码更新方法、装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN114579168B CN114579168B CN202210477825.7A CN202210477825A CN114579168B CN 114579168 B CN114579168 B CN 114579168B CN 202210477825 A CN202210477825 A CN 202210477825A CN 114579168 B CN114579168 B CN 114579168B
- Authority
- CN
- China
- Prior art keywords
- code
- line
- character string
- modified
- product
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 230000015654 memory Effects 0.000 claims description 25
- 238000012986 modification Methods 0.000 claims description 14
- 230000004048 modification Effects 0.000 claims description 14
- 230000011218 segmentation Effects 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 11
- 230000001360 synchronised effect Effects 0.000 abstract description 15
- 230000008569 process Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 7
- 230000018109 developmental process Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明公开了一种代码更新方法、装置、电子设备和计算机可读存储介质,该方法包括:获取目标字符串,目标字符串为至少两个产品的源代码的共用代码,至少两个产品的源代码中的第一行间隔相同,第一行间隔为目标字符串所在的行与待修改的代码的第一行之间的间隔;将目标字符串与第一产品的源代码进行匹配,将第一产品中与目标字符串匹配的字符串所在行作为第一产品的第一目标代码的第一行;第一产品为至少两个产品中的一个产品,第一目标代码至少还包括待修改的代码以及第一行与待修改的代码之间的代码;针对第一产品的第一目标代码,生成补丁文件;将补丁文件分别应用至至少两个产品的第一目标代码。本发明能够提高系列产品的代码同步更新效率。
Description
技术领域
本发明涉及代码化产品开发技术领域,具体涉及一种代码更新方法、装置、电子设备和计算机可读存储介质。
背景技术
在一个服务器系列产品线的开发过程中,目前的代码同步方法繁琐且效率低下。具体来说,服务器系列产品线包括多个产品,该多个产品使用相同的基础代码库(Codebase),它们的代码大同小异,拥有大量的共用代码,相同的目录结构文件名称,只有少量部分代码是各产品独有的。在开发过程中如果对多个产品的共用代码部分进行修改,需要分别针对各个产品使用diff(Linux系统下一个生成差异文件(补丁)的工具)命令生成patch(Linux系统下根据差异文件(补丁)生成最新版本代码的工具)文件,然后将各个patch文件分别应用到对应的产品的源代码中,以对对应的产品进行修改。这种代码同步更新方式繁琐且效率低下。
发明内容
有鉴于此,本发明实施例提供了一种代码更新方法、装置、电子设备和计算机可读存储介质,以解决使用同一基础代码库的系列产品线开发过程中代码同步更新繁琐且效率低下的问题。
根据第一方面,本发明实施例提供了一种代码更新方法方法,所述方法包括:
获取目标字符串,所述目标字符串为至少两个产品的源代码的共用代码,所述至少两个产品的源代码中的第一行间隔相同,所述第一行间隔为所述目标字符串所在的行与待修改的代码的第一行之间的间隔;
将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行;所述第一产品为所述至少两个产品中的一个产品,所述第一目标代码至少还包括所述待修改的代码以及所述第一行与所述待修改的代码之间的代码;
针对所述第一产品的所述第一目标代码,生成补丁文件;
将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码。
结合第一方面,在第一方面第一实施方式中,所述目标字符串包括一个代码结构块内的全部或部分字符,所述部分字符为所述代码结构块内连续的字符。
结合第一方面第一实施方式,在第一方面第二实施方式中,所述获取目标字符串,包括:
获取待修改的代码的第一行之前的N个代码结构块,N为正整数;
判断所述N个代码结构块是否第一代码结构块,所述第一代码结构块是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
将其中一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串。
结合第一方面第一实施方式,在第一方面第三实施方式中,所述获取目标字符串,包括:
S101:获取所述待修改的代码的第一行之前且紧邻的第二代码结构块;
S102:判断所述第二代码结构块是否满足第一条件,所述第一条件包括是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
S103:若是,则将所述第二代码结构块内的全部或部分字符确定为所述目标字符串;
S104否则获取所述第二代码结构块之前且与所述第二代码结构块紧邻的代码结构块作为新的第二代码结构块;
重复步骤S102-S104,直至获取到满足所述第一条件的代码结构块,将满足所述第一条件的代码结构块中的全部或部分字符确定为所述目标字符串。
结合第一方面,在第一方面第四实施方式中,所述将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,包括:
将所述目标字符串与所述至少两个产品中的第二产品的源代码进行匹配;
将所述第二产品中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
结合第一方面,在第一方面第五实施方式中,所述至少两个产品使用相同的基础代码库;
所述获取目标字符串之前,还包括:
使用相同的分段工具或相同的分段标准,分别对所述至少两个产品的源代码进行分段,得到多个代码段;
所述目标字符串是从所述待修改的代码所在的代码段中获取;
所述将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行,包括:
识别出所述第一产品的源代码中所述待修改的代码所在的代码段;
将所述目标字符串与所述第一产品中所述待修改的代码所在的代码段进行匹配;
将所述第一产品中所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行,所述第一目标代码还包括:所述第一产品中所述待修改的代码所在的代码段中,与所述目标字符串匹配的代码所在的行之后的全部代码。
结合第一方面第五实施方式中,在第一方面第六实施方式中,所述将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,包括:
针对每一所述产品的源代码,识别出所述待修改的代码所在的代码段;
将所述目标字符串与所述待修改的代码所在的代码段进行匹配;
将所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
根据第二方面,本发明实施例提供了一种代码更新装置,包括:
获取模块,用于获取目标字符串,所述目标字符串为至少两个产品的源代码的共用代码,所述至少两个产品的源代码中的第一行间隔相同,所述第一行间隔为所述目标字符串所在的行与待修改的代码的第一行之间的间隔;
匹配模块,用于将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行;所述第一产品为所述至少两个产品中的一个产品,所述第一目标代码至少还包括所述待修改的代码以及所述第一行与所述待修改的代码之间的代码;
生成模块,用于针对所述第一产品的所述第一目标代码,生成补丁文件;
补丁文件应用模块,用于将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码。
结合第二方面,在第二方面第一实施方式中,所述目标字符串包括一个代码结构块内的全部或部分字符,所述部分字符为所述代码结构块内连续的字符。
结合第二方面第一实施方式,在第二方面第二实施方式中,所述获取模块,包括:
第一获取单元,用于获取待修改的代码的第一行之前的N个代码结构块,N为正整数;
第一判断单元,用于判断所述N个代码结构块是否第一代码结构块,所述第一代码结构块是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
第一确定单元,用于将其中一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串。
结合第二方面第一实施方式,在第二方面第三实施方式中,所述获取模块包括:
第二获取单元,用于获取所述待修改的代码的第一行之前且紧邻的第二代码结构块;
第二判断单元,用于判断所述第二代码结构块是否满足第一条件,所述第一条件包括是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
第二确定单元,用于在所述第二代码结构块满足第一条件的情况下,将所述第二代码结构块内的全部或部分字符确定为所述目标字符串;
第三获取单元,用于在所述第二代码结构块不满足第一条件的情况下,获取所述第二代码结构块之前且与所述第二代码结构块紧邻的代码结构块作为新的第二代码结构块;
控制单元,用于控制重复运行所述第二判断单元、所述第二确定单元和所述第三获取单元,直至获取到满足所述第一条件的代码结构块,将满足所述第一条件的代码结构块中的全部或部分字符确定为所述目标字符串。
结合第二方面,在第二方面第四实施方式中,所述补丁文件应用模块,包括:
第一匹配单元,用于将所述目标字符串与所述至少两个产品中的第二产品的源代码进行匹配;
第三确定单元,用于将所述第二产品中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
第一修改单元,用于从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
结合第二方面,在第二方面第五实施方式中,所述至少两个产品使用相同的基础代码库;
所述装置,还包括:
分段模块,用于使用相同的分段工具或相同的分段标准,分别对所述至少两个产品的源代码进行分段,得到多个代码段;
所述目标字符串是从所述待修改的代码所在的代码段中获取;
所述匹配模块,包括:
第一识别单元,用于识别出所述第一产品的源代码中所述待修改的代码所在的代码段;
第二匹配单元,用于将所述目标字符串与所述第一产品中所述待修改的代码所在的代码段进行匹配;
第四确定单元,用于将所述第一产品中所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行,所述第一目标代码还包括:所述第一产品中所述待修改的代码所在的代码段中,与所述目标字符串匹配的代码所在的行之后的全部代码。
结合第二方面第五实施方式中,在第二方面第六实施方式中,所述补丁文件应用模块,包括:
第二识别单元,用于针对每一所述产品的源代码,识别出所述待修改的代码所在的代码段;
第三匹配单元,用于将所述目标字符串与所述待修改的代码所在的代码段进行匹配;
第五确定单元,用于将所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
第二修改单元,用于从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
根据第三方面,本发明实施例提供了一种电子设备,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现第一方面或第一方面任一实施方式所述的代码更新方法。
根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序被处理器执行时,实现第一方面或第一方面任一实施方式所述的代码更新方法。
本申请上述各个实施方式提供的技术方案中,在生成补丁文件和应用补丁文件时,并不是从产品整个源代码的第一行开始比对的,而是从指定字符串(即目标字符串)所在行开始比对,且该指定字符串的选取遵循该指定字符串是多个系列产品的共用代码、并且多个系列产品中该指定字符串所在行与待修改的代码的第一行之间的行间距相同,避免了多个产品的源代码的部分代码不一致时导致的比对错行问题。从而,基于一个产品生成的补丁文件可以应用于其他的产品中,与针对各个产品分别生成补丁文件并将生成的补丁文件分别应用至对应的产品中的代码同步更新方式相比,极大地提高了代码同步更新的效率,在此基础上能够进一步实现代码同步更新的半自动化处理。
附图说明
通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
图1示出了本发明实施例提供的一种代码更新方法的流程示意图;
图2示出了本发明实施例提供的另一种代码更新方法的流程示意图;
图3示出了本发明实施例提供的一种获取目标字符串的流程示意图;
图4示出了本发明实施例提供的一种补丁文件应用的流程示意图;
图5示出了本发明实施例提供的又一种代码更新方法的流程示意图;
图6示出了使用notepad++对源代码进行分段时折叠前的代码示意图;
图7示出了使用notepad++对图6所示源代码进行分段时折叠后的代码示意图;
图8示出了使用source insigt对图6所示源代码进行分段后的示意图;
图9示出了两个示例产品间的代码差异的示意图;
图10示出了示例产品p1的源代码修改的示意图;
图11示出了现有技术中针对示例产品p1的源代码修改生成的补丁文件的示意图;
图12示出了使用本发明实施例提供的技术针对示例产品p1的源代码修改生成的补丁文件的示意图;
图13示出了使用图12所示的补丁文件对示例产品p2的代码修改的示意图;
图14示出了本发明实施例提供的一种代码更新装置的结构示意图;
图15示出了本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例不仅可以适用于服务器系列产品线的开发过程中的代码同步更新,还可以适用于其他使用同一基础代码库的系列产品线开发过程中的代码同步更新。
此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
请参阅图1所示的本发明实施例提供的一种代码更新方法的流程示意图,所述方法包括:
S1:获取目标字符串,所述目标字符串为至少两个产品的源代码的共用代码,所述至少两个产品的源代码中的第一行间隔相同,所述第一行间隔为所述目标字符串所在的行与待修改的代码的第一行之间的间隔;
其中,所述目标字符串所在的行与待修改的代码的第一行之间可以没有代码,也可以存在一行或多行代码,所述目标字符串所在的行与待修改的代码的第一行之间的第一目标代码可以相同也可以不同。
S2:将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行;所述第一产品为所述至少两个产品中的一个产品,所述第一目标代码至少还包括所述待修改的代码以及所述第一行与所述待修改的代码之间的代码;
当然,所述第一产品的所述第一目标代码也可以包括所述第一产品中与所述目标字符串匹配的字符串所在行的代码以及之后的全部代码。其中,这里的匹配是指完全相同,与所述目标字符串匹配的字符串也即与所述目标字符串相同的字符串。
S3:针对所述第一产品的所述第一目标代码,生成补丁文件;
具体的,可以使用diff命令生成patch文件(即补丁文件)。
S4:将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,以完成所述至少两个产品的源代码的同步更新。
具体的,在将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码时,针对每一个产品的补丁文件应用过程可以是:将所述目标字符串与该产品的源代码进行匹配,将该产品中与所述目标字符串匹配的字符串所在的行(即该产品的第一目标代码的第一行)作为补丁文件应用时的起始行。
本发明实施例中,在生成补丁文件和应用补丁文件时,并不是从产品整个源代码的第一行开始比对的,而是从指定字符串(即目标字符串)所在行开始比对,且该指定字符串的选取遵循该指定字符串是多个系列产品的共用代码、并且多个系列产品中该指定字符串所在行与待修改的代码的第一行之间的行间距相同,避免了多个产品的源代码的部分代码不一致时导致的比对错行问题。从而,基于一个产品生成的补丁文件可以应用于其他的产品中,与针对各个产品分别生成补丁文件并将生成的补丁文件分别应用至对应的产品中的代码同步更新方式相比,极大地提高了代码同步更新的效率,在此基础上能够进一步实现代码同步更新的半自动化处理。
其中,所述目标字符串可以包括一个代码结构块内的全部或部分字符,所述部分字符为所述代码结构块内连续的字符。
请参阅图2所示的本发明的一个可选实施例的流程示意图,其中,所述获取目标字符串,即步骤S1,包括:
S11:获取待修改的代码的第一行之前的N个代码结构块,N为正整数;
S12:判断所述N个代码结构块是否第一代码结构块,所述第一代码结构块是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
S13:将其中一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串。具体的,如果所述N个代码结构块中存在多个第一代码结构块,那么可以将其中任意一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串,或将离所述待修改的代码最近的一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串,还可以根据需要选用其中一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串,例如为了避免匹配错误,将多个第一代码结构块中的目标代码结构块内的全部或部分字符确定为所述目标字符串,该目标代码结构块在所述至少两个产品的源代码中唯一,或者在所述至少两个产品的源代码中所述目标代码结构块之前的代码中不存在相同的代码结构块。当然,如果N个代码结构块中仅有一个第一代码结构块,那么可以将该第一代码结构块内的全部或部分字符确定为所述目标字符串,不需要进行第一代码结构块的选择。
上述发明实施例中,能够选取合适的目标字符串,合适的目标字符串是指该目标字符串为至少两个产品的源代码的共用代码且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同。进一步的,合适的目标字符串还满足以下条件:在所述至少两个产品的源代码中唯一,或者在所述至少两个产品的源代码中所述目标字符串之前的代码中不存在相同的字符串。从而,可以避免目标字符串的匹配错误。
请参阅图3所示的本发明的另一个可选实施例的流程示意图,其中,所述获取目标字符串,即步骤S1,包括:
S101:获取所述待修改的代码的第一行之前且紧邻的第二代码结构块;
S102:判断所述第二代码结构块是否满足第一条件,所述第一条件包括是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
S103:若是,则将所述第二代码结构块内的全部或部分字符确定为所述目标字符串;
S104:否则获取所述第二代码结构块之前且与所述第二代码结构块紧邻的代码结构块作为新的第二代码结构块;
重复步骤S102-S104,直至获取到满足所述第一条件的代码结构块,将满足所述第一条件的代码结构块中的全部或部分字符确定为所述目标字符串。
也即是说,所述获取目标字符串的过程是:从所述待修改的代码的第一行之前紧邻的代码结构块开始,依次往前遍历,在遍历过程中判断当前遍历到的代码结构块是否满足所述第一条件,在当前遍历到的代码结构块满足所述第一条件时,停止遍历过程,并将当前遍历到的代码结构块中的全部或部分字符确定为所述目标字符串。
上述发明实施例中,能够选取到适合作为目标字符串且距离所述待修改的代码最近的字符串作为目标字符串,所述目标字符串距离所述待修改的代码越近,那么在生成补丁文件时所需要比对的代码行数越少,从而比对时的处理量也越少。
请参阅图4所示的本发明的另一个可选实施例的流程示意图,其中,所述将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,即步骤S4,包括:
S41:将所述目标字符串与所述至少两个产品中的第二产品的源代码进行匹配;
S42:将所述第二产品中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
S43:从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
上述发明实施例中,由于所述目标字符串在各个产品中与待修改的代码之间的行间隔相同,因此,在将基于一个产品生成的补丁文件应用至各个产品中时不存在错行的问题,因此提高了系列产品的代码同步更新效率。
请参阅图5所示的本发明的其他可选实施例的流程示意图,其中,所述至少两个产品使用相同的基础代码库;所述获取目标字符串之前,还包括:
S01:使用相同的分段工具或相同的分段标准,分别对所述至少两个产品的源代码进行分段,得到多个代码段;
所述目标字符串是从所述待修改的代码所在的代码段中获取;
所述将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行,即步骤S2,包括:
S21:识别出所述第一产品的源代码中所述待修改的代码所在的代码段;
S22:将所述目标字符串与所述第一产品中所述待修改的代码所在的代码段进行匹配;
S23:将所述第一产品中所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行,所述第一目标代码还包括:所述第一产品中所述待修改的代码所在的代码段中,与所述目标字符串匹配的代码所在的行之后的全部代码。
具体的,对源代码进行分段时可以采用现有的一些分段技术,可以参考目前常用的源代码工具,比如notepad++和source insigt,Notepad++中对应功能为代码折叠,折叠后,每个块为一个代码段,可以参阅图6和7所示的示例,其中图6为代码折叠前的示意图、图7为代码折叠后的示意图。Source insigt中对应功能为symbol window,左侧,为提取的symbol,可以参阅图8所示的示例。两者表现大体是一样的,将函数,宏定义,全局变量定义等作为代码的一个一级段。
上述发明实施例中,在生成补丁文件时,最小的比较单元是源代码文件内的代码段,不再是整个源代码文件,比较时的计算量小,而且可以避免整个源代码文件中存在多处与所述目标字符串匹配的代码导致匹配错误的问题。
本发明的其他可选具体实施例中,所述将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,包括:
针对每一所述产品的源代码,识别出所述待修改的代码所在的代码段;
将所述目标字符串与所述待修改的代码所在的代码段进行匹配;
将所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
上述发明实施例中,在应用补丁文件的过程中,在匹配目标字符串时也不是与整个源代码文件匹配,而是只与对应的代码段进行匹配,可以降低匹配的计算量。
下面以两个产品为例说明本发明实施例提供的技术方案。
现有两个产品分别是p1和p2,两个产品的代码使用相同的codebase,两者的代码大同小异,拥有大量的共用代码,相同的目录结构文件名称,只有少量部分代码是产品独有的。以下使用示例代码文件进行说明,假定两个产品源代码相同目前下有同名文件source.c。source.c各个产品及阶段重命名如下表1。
如图9所示,产品p1使用源代码文件p1_source_v1.c与产品2使用的源代码p2_source_v1.c,差异在childfunction函数,代码其它部分是相同的。
在开发过程中发现了产品p1的公用函数的一个问题,并进行了修改。代码修改如图10所示。对应的使用diff命令生成的patch文件如图11所示。这个patch文件,无法直接应用到产品2的source.c中,将这个问题修复同步修改到产品2。
经过分析原因,产品p1的source.c的patch无法直接应用产品p2上,是因为两个文件有差异。直接应用会产生错行,无法应用该patch。但如果限制在一定的段落内,则内容是相同的。比如“void publicfuntion()”代码段内。这个可以对该字符串“voidpublicfuntion()”进行匹配,匹配到的行,作为第1行,从该行计算差异。如图12所示,为指定开发字符串后的diff差异。将这个差异应用到产品p2的p2_source_v1.c,从找到字符串开始的第三行进行修改(3c3),就能够生成p2_source_v2.c文件。产品p2的source.c代码修改如图13所示。
对于这个匹配字符串的确认,可以通过查找待修改代码行的上文中产品p1和p2共用且最近的代码结构块。本示例中,待修改代码行上方有三个代码结构块(如表2所示)都是产品p1和p2的共用代码结构块,代码修改离哪个代码结构块最近就选用哪个代码结构块。
本发明实施例中,diff是Linux系统的一个很重要的工具程序,我们通常用diff对同一软件(或程序)的不同版本的文件进行对比查看。diff是以“行”为单位进行比较。diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。patch能将diff文件运用于原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么这个过程相当于 A -B = C ,那么patch的过程就是B+C= A 或A-C =B。因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。
相应地,请参考图14,本发明实施例提供一种代码更新装置,包括:
获取模块1401,用于获取目标字符串,所述目标字符串为至少两个产品的源代码的共用代码,所述至少两个产品的源代码中的第一行间隔相同,所述第一行间隔为所述目标字符串所在的行与待修改的代码的第一行之间的间隔;
匹配模块1402,用于将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行;所述第一产品为所述至少两个产品中的一个产品,所述第一目标代码至少还包括所述待修改的代码以及所述第一行与所述待修改的代码之间的代码;
生成模块1403,用于针对所述第一产品的所述第一目标代码,生成补丁文件;
补丁文件应用模块1404,用于将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码。
本发明实施例中,在生成补丁文件和应用补丁文件时,并不是从产品整个源代码的第一行开始比对的,而是从指定字符串(即目标字符串)所在行开始比对,且该指定字符串的选取遵循该指定字符串是多个系列产品的共用代码、并且多个系列产品中该指定字符串所在行与待修改的代码的第一行之间的行间距相同,避免了多个产品的源代码的部分代码不一致时导致的比对错行问题。从而,基于一个产品生成的补丁文件可以应用于其他的产品中,与针对各个产品分别生成补丁文件并将生成的补丁文件分别应用至对应的产品中的代码同步更新方式相比,极大地提高了代码同步更新的效率,在此基础上能够进一步实现代码同步更新的半自动化处理。
其中一些具体实施方式中,所述目标字符串包括一个代码结构块内的全部或部分字符,所述部分字符为所述代码结构块内连续的字符。
其中一些可选的具体实施方式中,所述获取模块1401,包括:
第一获取单元,用于获取待修改的代码的第一行之前的N个代码结构块,N为正整数;
第一判断单元,用于判断所述N个代码结构块是否第一代码结构块,所述第一代码结构块是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
第一确定单元,用于将其中一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串。
另一些可选的具体实施方式中,所述获取模块1401包括:
第二获取单元,用于获取所述待修改的代码的第一行之前且紧邻的第二代码结构块;
第二判断单元,用于判断所述第二代码结构块是否满足第一条件,所述第一条件包括是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
第二确定单元,用于在所述第二代码结构块满足第一条件的情况下,将所述第二代码结构块内的全部或部分字符确定为所述目标字符串;
第三获取单元,用于在所述第二代码结构块不满足第一条件的情况下,获取所述第二代码结构块之前且与所述第二代码结构块紧邻的代码结构块作为新的第二代码结构块;
控制单元,用于控制重复运行所述第二判断单元、所述第二确定单元和所述第三获取单元,直至获取到满足所述第一条件的代码结构块,将满足所述第一条件的代码结构块中的全部或部分字符确定为所述目标字符串。
其中一些可选的具体实施方式中,所述补丁文件应用模块1404,包括:
第一匹配单元,用于将所述目标字符串与所述至少两个产品中的第二产品的源代码进行匹配;
第三确定单元,用于将所述第二产品中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
第一修改单元,用于从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
另一些可选的具体实施方式中,所述至少两个产品使用相同的基础代码库;
所述装置,还包括:
分段模块,用于使用相同的分段工具或相同的分段标准,分别对所述至少两个产品的源代码进行分段,得到多个代码段;
所述目标字符串是从所述待修改的代码所在的代码段中获取;
所述匹配模块1402,包括:
第一识别单元,用于识别出所述第一产品的源代码中所述待修改的代码所在的代码段;
第二匹配单元,用于将所述目标字符串与所述第一产品中所述待修改的代码所在的代码段进行匹配;
第四确定单元,用于将所述第一产品中所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行,所述第一目标代码还包括:所述第一产品中所述待修改的代码所在的代码段中,与所述目标字符串匹配的代码所在的行之后的全部代码。
另一些可选的具体实施方式中,所述补丁文件应用模块1404,包括:
第二识别单元,用于针对每一所述产品的源代码,识别出所述待修改的代码所在的代码段;
第三匹配单元,用于将所述目标字符串与所述待修改的代码所在的代码段进行匹配;
第五确定单元,用于将所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
第二修改单元,用于从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
本发明实施例是与上述方法实施例对应的产品实施例,故在此不再赘述,详细请参阅上述方法实施例。
本发明实施例还提供了一种电子设备,如图15所示,该电子设备可以包括处理器151和存储器152,其中处理器151和存储器152可以通过总线或者其他方式互相通信连接,图15中以通过总线连接为例。
处理器151可以为中央处理器(Central Processing Unit,CPU)。处理器151还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器152作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的代码更新方法对应的程序指令/模块(例如,图14所示的获取模块1401、匹配模块1402、生成模块1403和补丁文件应用模块1404)。处理器151通过运行存储在存储器152中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的代码更新方法。
存储器152可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器151所创建的数据等。此外,存储器152可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器152可选包括相对于处理器151远程设置的存储器,这些远程存储器可以通过网络连接至处理器151。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器152中,当被所述处理器151执行时,执行如图1-13所示实施例中的代码更新方法。
上述电子设备具体细节可以对应参阅图1至图13所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序被处理器执行时,实现上述的代码更新方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random AccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (10)
1.一种代码更新方法,其特征在于,所述方法包括:
获取目标字符串,所述目标字符串为至少两个产品的源代码的共用代码,所述至少两个产品的源代码中的第一行间隔相同,所述第一行间隔为所述目标字符串所在的行与待修改的代码的第一行之间的间隔;
将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行;所述第一产品为所述至少两个产品中的一个产品,所述第一目标代码至少还包括所述待修改的代码以及所述第一行与所述待修改的代码之间的代码;
针对所述第一产品的所述第一目标代码,生成补丁文件;
将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码。
2.根据权利要求1所述的方法,其特征在于,所述目标字符串包括一个代码结构块内的全部或部分字符,所述部分字符为所述代码结构块内连续的字符。
3.根据权利要求2所述的方法,其特征在于,所述获取目标字符串,包括:
获取待修改的代码的第一行之前的N个代码结构块,N为正整数;
判断所述N个代码结构块是否第一代码结构块,所述第一代码结构块是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
将其中一个所述第一代码结构块内的全部或部分字符确定为所述目标字符串。
4.根据权利要求2所述的方法,其特征在于,所述获取目标字符串,包括:
S101:获取所述待修改的代码的第一行之前且紧邻的第二代码结构块;
S102:判断所述第二代码结构块是否满足第一条件,所述第一条件包括是所述至少两个产品的源代码的共用代码结构块且在所述至少两个产品的源代码中与所述待修改的代码之间的行间隔相同;
S103:若是,则将所述第二代码结构块内的全部或部分字符确定为所述目标字符串;
S104否则获取所述第二代码结构块之前且与所述第二代码结构块紧邻的代码结构块作为新的第二代码结构块;
重复步骤S102-S104,直至获取到满足所述第一条件的代码结构块,将满足所述第一条件的代码结构块中的全部或部分字符确定为所述目标字符串。
5.根据权利要求1所述的方法,其特征在于,所述将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,包括:
将所述目标字符串与所述至少两个产品中的第二产品的源代码进行匹配;
将所述第二产品中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
6.根据权利要求1所述的方法,其特征在于,所述至少两个产品使用相同的基础代码库;
所述获取目标字符串之前,还包括:
使用相同的分段工具或相同的分段标准,分别对所述至少两个产品的源代码进行分段,得到多个代码段;
所述目标字符串是从所述待修改的代码所在的代码段中获取;
所述将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行,包括:
识别出所述第一产品的源代码中所述待修改的代码所在的代码段;
将所述目标字符串与所述第一产品中所述待修改的代码所在的代码段进行匹配;
将所述第一产品中所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行,所述第一目标代码还包括:所述第一产品中所述待修改的代码所在的代码段中,与所述目标字符串匹配的代码所在的行之后的全部代码。
7.根据权利要求6所述的方法,其特征在于,所述将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码,包括:
针对每一所述产品的源代码,识别出所述待修改的代码所在的代码段;
将所述目标字符串与所述待修改的代码所在的代码段进行匹配;
将所述待修改的代码所在的代码段中与所述目标字符串匹配的代码所在的行确定为所述第一目标代码的第一行;
从所述第一目标代码的第一行开始,按照所述补丁文件中指示的待修改行,定位所述待修改的代码所在行并进行修改。
8.一种代码更新装置,其特征在于,包括:
获取模块,用于获取目标字符串,所述目标字符串为至少两个产品的源代码的共用代码,所述至少两个产品的源代码中的第一行间隔相同,所述第一行间隔为所述目标字符串所在的行与待修改的代码的第一行之间的间隔;
匹配模块,用于将所述目标字符串与第一产品的源代码进行匹配,将所述第一产品中与所述目标字符串匹配的字符串所在行作为所述第一产品的第一目标代码的第一行;所述第一产品为所述至少两个产品中的一个产品,所述第一目标代码至少还包括所述待修改的代码以及所述第一行与所述待修改的代码之间的代码;
生成模块,用于针对所述第一产品的所述第一目标代码,生成补丁文件;
补丁文件应用模块,用于将所述补丁文件分别应用至所述至少两个产品的所述第一目标代码。
9.一种电子设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1至7中任一项所述的代码更新方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,所述计算机程序被处理器执行时,实现权利要求1至7中任一项所述的代码更新方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210477825.7A CN114579168B (zh) | 2022-05-05 | 2022-05-05 | 代码更新方法、装置、电子设备和计算机可读存储介质 |
PCT/CN2022/142511 WO2023213093A1 (zh) | 2022-05-05 | 2022-12-27 | 代码更新方法、装置、电子设备和计算机非易失性可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210477825.7A CN114579168B (zh) | 2022-05-05 | 2022-05-05 | 代码更新方法、装置、电子设备和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114579168A CN114579168A (zh) | 2022-06-03 |
CN114579168B true CN114579168B (zh) | 2022-07-26 |
Family
ID=81777874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210477825.7A Active CN114579168B (zh) | 2022-05-05 | 2022-05-05 | 代码更新方法、装置、电子设备和计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114579168B (zh) |
WO (1) | WO2023213093A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579168B (zh) * | 2022-05-05 | 2022-07-26 | 苏州浪潮智能科技有限公司 | 代码更新方法、装置、电子设备和计算机可读存储介质 |
CN117435244B (zh) * | 2023-12-21 | 2024-03-19 | 南京掌控网络科技有限公司 | 一种前端跨工程公共库系统及其构建方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6466999B1 (en) * | 1999-03-31 | 2002-10-15 | Microsoft Corporation | Preprocessing a reference data stream for patch generation and compression |
US20120144380A1 (en) * | 2010-12-07 | 2012-06-07 | Samsung Electronics Co. Ltd. | Method for generating delta file using basic blocks |
CN108572834B (zh) * | 2018-04-16 | 2023-12-12 | 深圳市雅阅科技有限公司 | 一种浏览器的升级方法和装置 |
CN108874438B (zh) * | 2018-06-25 | 2021-09-21 | 南京中感微电子有限公司 | 补丁生成方法、装置、电子设备及计算机存储介质 |
CN111008034B (zh) * | 2019-12-02 | 2023-11-24 | 网易(杭州)网络有限公司 | 一种补丁生成方法及装置 |
CN112711435B (zh) * | 2021-01-20 | 2024-06-04 | 维沃移动通信有限公司 | 版本更新方法、版本更新装置、电子设备和存储介质 |
CN113778398B (zh) * | 2021-09-28 | 2024-05-14 | 北京达佳互联信息技术有限公司 | 代码生成方法、装置、电子设备及存储介质 |
CN114371870A (zh) * | 2021-11-29 | 2022-04-19 | 科大讯飞股份有限公司 | 代码扫描、提交方法及代码扫描服务器、客户端和服务端 |
CN114579168B (zh) * | 2022-05-05 | 2022-07-26 | 苏州浪潮智能科技有限公司 | 代码更新方法、装置、电子设备和计算机可读存储介质 |
-
2022
- 2022-05-05 CN CN202210477825.7A patent/CN114579168B/zh active Active
- 2022-12-27 WO PCT/CN2022/142511 patent/WO2023213093A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
CN114579168A (zh) | 2022-06-03 |
WO2023213093A1 (zh) | 2023-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114579168B (zh) | 代码更新方法、装置、电子设备和计算机可读存储介质 | |
US11741046B2 (en) | Method and apparatus for creating system disk snapshot of virtual machine | |
US20140136893A1 (en) | System file repair method and apparatus | |
CN106897342B (zh) | 一种数据校验方法和设备 | |
CN107479881B (zh) | 差异代码的同步方法、存储介质、电子设备及系统 | |
US8914325B2 (en) | Change tracking for multiphase deduplication | |
CN111596945B (zh) | 嵌入式系统动态多分区固件的差分升级方法 | |
CN111726249B (zh) | 网络设备的配置文件处理方法及装置 | |
CN112214221A (zh) | 一种用于Linux系统构建的方法与设备 | |
CN115237444A (zh) | 基于版本号的并发控制方法、装置、设备及存储介质 | |
CN106874173B (zh) | 页面模板的测试方法和装置 | |
CN110244951B (zh) | 应用发布方法及装置 | |
CN109471901B (zh) | 一种数据同步方法及装置 | |
CN105975567B (zh) | 一种应用程序的内部文件的处理方法及装置 | |
CN108664250B (zh) | 一种代码处理方法及装置 | |
CN111400243B (zh) | 基于流水线服务的研发管理系统以及文件存储方法、装置 | |
CN110019295B (zh) | 数据库检索方法、装置、系统以及存储介质 | |
CN113326063B (zh) | 数据处理方法、电子设备及存储介质 | |
CN112416431B (zh) | 一种基于编码序列表示的源代码片段成对比较方法 | |
CN111698330B (zh) | 存储集群的数据恢复方法、装置及服务器 | |
CN114691610A (zh) | 目录的处理方法和装置、存储介质及处理器 | |
CN114090547A (zh) | 一种数据迁移的方法、装置、计算机设备及存储介质 | |
CN113434472A (zh) | 一种文件生成方法、装置、服务器及存储介质 | |
CN113468144A (zh) | 一种数据库迁移方法及其迁移装置 | |
CN111881082A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |