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

一种基于摘要差异树的部署包处理方法、系统及存储介质与流程

2022-06-11 06:42:47 来源:中国专利 TAG:


1.本技术涉及部署包的技术领域,尤其是涉及一种基于摘要差异树的部署包处理方法、系统及存储介质。


背景技术:

2.项目发布分为全量发布与增量发布,全量发布是将部署包全部替换服务器的部署包,增量发布是将部署包中有改动的部分进行替换。
3.目前增量发布有两种方式,一种是知道哪些文件被修改,手动提取出来进行发布,这种方式只能适用于小规模,且知道哪些文件被修改的情况下才适用。第二种是通过文件比较工具进行比较,得出哪些文件被修改,从而提取出来进行发布,这种方式需要比对新旧文件夹的差异进行提取文件,由于要同时递归读取新旧文件夹的内容进行比较,效率十分低下,且要存储旧的部署包,浪费存储空间,而且不支持删除服务器上旧部署包应删除的文件。


技术实现要素:

4.针对上述传统的增量发布方式需要比对新旧文件夹的差异进行提取文件,由于要同时递归读取新旧文件夹的内容进行比较,效率十分低下,且要存储旧的部署包,浪费存储空间的问题,本技术提出了一种基于摘要差异树的部署包处理方法。
5.第一方面,本技术提出了一种一种基于摘要差异树的部署包处理方法,包括以下步骤:
6.s1:递归读取两次发布的部署包的文件夹的内容,分别构建以对应所述部署包文件夹目录为结构的摘要树并保存;
7.s2:比较两个所述摘要树的内容,构建摘要差异树,其中,将两个所述摘要树中文件夹名不相同的文件夹节点及其子节点的树结构复制到所述摘要差异树中,以及将两个所述摘要树中文件名不相同的文件节点的树结构复制到所述摘要差异树中;
8.s3:利用所述摘要差异树对部署包进行增量发布或者对部署包进行文件删除。
9.通过采用上述技术方案,先递归读取两次发布的部署包的文件夹的内容,分别构建以对应所述部署包文件夹目录为结构的摘要树并保存,然后将两个所述摘要树中文件夹名不相同的文件夹节点及其子节点的树结构以及将两个所述摘要树中文件名不相同的文件节点的树结构复制到所述摘要差异树中,通过生成摘要树,保存摘要树文件即可进行旧版本的文件差异信息存储,无需保留旧部署包的文件夹内容,也可以进行增量发布,通过摘要差异树算法规避了逐一比对文件夹和文件内容,只需比对摘要树,生成摘要差异树,即可提取出差异文件,提高新旧文件夹的比对效率,且本技术还具有支持删除服务器上旧部署包应删除的文件的效果。
10.优选的,在所述步骤s1中,所述构建以对应所述部署包文件夹目录为结构的摘要树并保存具体包括:构建一个空摘要树;递归读取部署包的文件夹内容;如果是文件夹,则
将该文件夹名记录到空摘要树中,并设置空的子树容器,继续递归遍历该文件夹里的内容;如果是文件类型,则生成相应的摘要并存入该节点中,从而生成摘要树;将摘要树进行保存。通过采用上述技术方案,先构建一个空摘要树,然后递归读取部署包的文件夹内容将文件和文件类型存入该节点中,从而简单方便的生成摘要树。
11.优选的,所述步骤s2具体包括以下步骤:递归读取其中一个摘要树的内容;当递归节点对比到文件夹类型时,判断另外一个摘要树的相同位置是否有和该文件夹名同名的文件夹节点,若有,则递归遍历该文件夹节点的子节点的内容,若没有,则将新摘要树的该节点及其子节点的树结构复制到所述摘要差异树中;当递归节点对比到文件类型时,判断另外一个摘要树的相同位置是否有和该文件名同名的文件,如果有同名文件,则判断该节点的摘要是否相同,如果摘要相同则继续递归,如果摘要不相同,则将该节点的树结构复制到摘要差异树中,如果没有同名文件,则将该节点的树结构完整的复制到所述摘要差异树中。该方法可有效的生成摘要差异树。
12.优选的,所述部署包包括旧部署包以及新部署包,所述摘要树包括旧摘要树和新摘要树,所述摘要差异树包括第一摘要差异树和第二摘要差异树,所述第一摘要差异树基于新摘要树与旧摘要树比较获得,所述第二摘要差异树基于旧摘要树与新摘要树比较获得。
13.优选的,在所述步骤s3中,所述利用摘要差异树对部署包进行增量发布具体包括:新建一个部署包容器;递归读取所述第一摘要差异树,如果递归到的树的节点为文件夹,则在所述部署包容器对应目录结构路径上新建一个同名文件夹,如果递归到的树节点为文件,则将所述新部署包对应目录结构路径的文件复制到所述部署包容器对应目录结构路径中,形成增量部署包;将增量部署包进行增量发布。通过摘要差异树算法规避了逐一比对文件夹和文件内容,只需比对摘要树,生成摘要差异树,即可提取出差异文件,提高新旧文件夹的比对效率。
14.优选的,在所述步骤s3中,所述利用摘要差异树对部署包进行文件删除具体包括:递归遍历第二摘要差异树并构建删除脚本,将所述删除脚本上传服务器,从而删除服务器上旧部署包应删除的文件。
15.优选的,利用fs.writefile将摘要树以json的形式进行保存,利用fs.readdir递归读取部署包的文件夹内容,并利用fs.stat判断目标项是否文件夹。
16.优选的,所述如果是文件类型,则生成相应的摘要并存入该节点中具体包括:如果是文件类型,则利用node.js的fs模块读取文件流,并利用node.js的crypto模块对文件生成md5摘要,然后将md5摘要存入该节点中。
17.第二方面,本技术还提出了一种基于摘要差异树的部署包处理系统,包括:
18.摘要树生成模块,被配置为递归读取部署包的文件夹的内容,并构建以对应所述部署包文件夹目录为结构的摘要树并保存;
19.摘要树比较模块,被配置为比较两个所述摘要树的内容,并构建摘要差异树;
20.部署包处理模块,被配置为利用摘要差异树对部署包进行增量发布或者对部署包进行文件删除。
21.第三方面,本技术还提出了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的方法。
22.与现有技术相比,本技术的有益成果在于:
23.(1)通过构建一个空摘要树,递归读取部署包的文件夹内容,如果是文件夹,则将该文件夹名记录到空摘要树中,并设置空的子树容器,继续递归遍历该文件夹里的内容;如果是文件类型,则生成相应的摘要并存入该节点中,从而生成摘要树,将摘要树进行保存,从而生成摘要树。
24.(2)通过生成摘要树,保存摘要树文件即可进行旧版本的文件差异信息存储,无需保留旧部署包的文件夹内容,也可以进行增量发布,通过摘要差异树算法规避了逐一比对文件夹和文件内容,只需比对摘要树,生成摘要差异树,即可提取出差异文件,提高新旧文件夹的比对效率,且本技术还具有支持删除服务器上旧部署包应删除的文件的效果。
附图说明
25.包括附图以提供对实施例的进一步理解并且附图被并入本说明书中并且构成本说明书的一部分。附图图示了实施例并且与描述一起用于解释本技术的原理。将容易认识到其它实施例和实施例的很多预期优点,因为通过引用以下详细描述,它们变得被更好地理解。附图的元件不一定是相互按照比例的。同样的附图标记指代对应的类似部件。
26.图1是本技术一个实施例中的基于摘要差异树的部署包处理方法的步骤s1的具体流程示意图。
27.图2是本技术一个实施例中的摘要树的构建流程示意图。
28.图3是本技术一个实施例中对新部署包进行增量发布的的流程示意图。
29.图4是本技术一个实施例中基于摘要差异树的部署包处理系统的模块结构示意图。
30.图5是适于用来实现本技术实施例的电子设备的计算机系统的结构示意图。
具体实施方式
31.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
32.下面将结合附图对本技术作详细的介绍。
33.图1示出了可以应用本技术实施例的基于摘要差异树的部署包处理方法的流程图,该方法具体包括以下步骤:
34.s1:递归读取两次发布的部署包的文件夹的内容,分别构建以对应所述部署包文件夹目录为结构的摘要树并保存;
35.其中,部署包包括旧部署包以及新部署包,所述摘要树包括旧摘要树和新摘要树。
36.在一个具体的实施例中,参照图2,摘要树的建立步骤如下:
37.步骤201:构建一个空摘要树;
38.步骤202:递归读取部署包的文件夹内容;如果是文件夹,则将该文件夹名记录到空摘要树中,并设置空的子树容器,继续递归遍历该文件夹里的内容;如果是文件类型,则生成相应的摘要并存入该节点中,从而生成摘要树;
39.步骤203:将摘要树进行保存。
40.在具体的实施例中,摘要树digest-tree的节点的数据结构如下:
[0041][0042]
其中,filename是文件(夹)名,digest是摘要,isdir记录是否文件夹,children是摘要树的子树。
[0043]
初始化时构建一个空的摘要树digest-tree。
[0044][0045]
本技术采用的算法依托于node.js,但不限于node.js语言进行实现。
[0046]
在具体的实施例中,以递归方式通fs.readdir读取文件夹内容,并通过fs.stat判断目标项是否文件夹。
[0047]
如果是文件夹,则将文件夹名记录到digest-tree该节点的filename中,isdir为true,并设置空的子树容器children:[]。继续通过该方法递归遍历该文件夹里的内容。
[0048]
如果是文件类型,则依次通过fs模块读取文件流,crypto模块生成md5摘要。将md5摘要存入digest-tree该节点的digest,并依次填入filename:文件名,isdir:false。
[0049]
生成digest-tree的关键代码如下:
[0050][0051]
经过层层递归,最终生成一棵完整的摘要树digest-tree。
[0052]
然后利用fs.writefile将digest-tree保存为json文件。
[0053]
其中,md5是一种算法,可以将一个字符串,或文件,或压缩包,执行md5后,能够生成一个固定长度为128bit的串。这个串,基本上是唯一的。如果有人修改过源文件,就会生成新的md5串。
[0054]
s2:比较两个所述摘要树的内容,构建摘要差异树,其中,将两个所述摘要树中文件夹名不相同的文件夹节点及其子节点的树结构复制到所述摘要差异树中,以及将两个所述摘要树中文件名不相同的文件节点的树结构复制到所述摘要差异树中;
[0055]
在一个具体的实施例中,步骤s2具体包括:
[0056]
递归读取其中一个摘要树的内容;
[0057]
当递归节点对比到文件夹类型时,判断另外一个摘要树的相同位置是否有和该文件夹名同名的文件夹节点,若有,则递归遍历该文件夹节点的子节点的内容,若没有,则将新摘要树的该节点及其子节点的树结构复制到所述摘要差异树中;
[0058]
当递归节点对比到文件类型时,判断另外一个摘要树的相同位置是否有和该文件名同名的文件,如果有同名文件,则判断该节点的摘要是否相同,如果摘要相同则继续递归,如果摘要不相同,则将该节点的树结构复制到摘要差异树中,如果没有同名文件,则将该节点的树结构完整的复制到所述摘要差异树中。
[0059]
在具体的实施例中,通过fs.readfile读取出两个摘要树文件的内容,通过json.parse将内容解析为对象类型。
[0060]
其中,摘要差异树包括第一摘要差异树和第二摘要差异树,所述第一摘要差异树基于新摘要树与旧摘要树比较获得,第一摘要差异树记录了新部署包的新增和修改的差异信息,所述第二摘要差异树基于旧摘要树与新摘要树比较获得,第二摘要差异树记录了旧部署包有,而新部署包没有的应删除的文件信息。
[0061]
s3:利用所述摘要差异树对部署包进行增量发布或者对部署包进行文件删除。
[0062]
在一个具体的实施例中,参照图3,步骤s3中利用摘要差异树对部署包进行增量发布具体包括:
[0063]
步骤301:新建一个部署包容器;
[0064]
步骤302:递归读取所述第一摘要差异树,如果递归到的树的节点为文件夹,则在所述部署包容器对应目录结构路径上新建一个同名文件夹,如果递归到的树节点为文件,则将所述新部署包对应目录结构路径的文件复制到所述部署包容器对应目录结构路径中,形成增量部署包;
[0065]
其中,对应目录结构路径=digest-diff-tree的[根节点的filename]
……
[父节点的filename][文件的filename]。
[0066]
步骤303:将增量部署包进行增量发布。
[0067]
在一个具体的实施例中,步骤s3中利用摘要差异树对部署包进行文件删除具体包括:递归遍历第二摘要差异树并构建删除脚本,将所述删除脚本上传服务器,从而删除服务器上旧部署包应删除的文件。
[0068]
通过递归遍历第二摘要差异树,构建服务器删除脚本(记作del.sh)。
[0069]
每一条删除脚本命令如下:
[0070]
rm digest-diff-tree的[根节点的filename]/
……
[父节点的filename]/[文件的filename]。
[0071]
上传del.sh,执行./del.sh命令,实现删除操作。
[0072]
进一步参考图4,作为对上述所述方法的实现,本技术提供了一种基于摘要差异树的部署包处理系统的一个实施例,该系统实施例与图1所示的方法实施例相对应,该系统具体可以应用于各种电子设备中。
[0073]
参考图4,基于摘要差异树的部署包处理系统包括:
[0074]
摘要树生成模块401,被配置为递归读取部署包的文件夹的内容,并构建以对应所述部署包文件夹目录为结构的摘要树并保存;
[0075]
摘要树比较模块402,被配置为比较两个所述摘要树的内容,并构建摘要差异树;
[0076]
部署包处理模块403,被配置为利用摘要差异树对部署包进行增量发布或者对部署包进行文件删除。
[0077]
下面参考图5,其示出了适于用来实现本技术实施例的电子设备的计算机系统500的结构示意图。图5示出的电子设备仅仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
[0078]
如图5所示,计算机系统500包括中央处理单元(cpu)501,其可以根据存储在只读存储器(rom)502中的程序或者从存储部分508加载到随机访问存储器(ram)503中的程序而执行各种适当的动作和处理。在ram 503中,还存储有系统500操作所需的各种程序和数据。cpu 501、rom 502以及ram 503通过总线504彼此相连。输入/输出(i/o)接口505也连接至总线504。
[0079]
以下部件连接至i/o接口505:包括键盘、鼠标等的输入部分506;包括诸如液晶显示器(lcd)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至i/o接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
[0080]
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(cpu)501执行时,执行本技术的方法中限定的上述功能。
[0081]
作为另一方面,本技术还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行时实现如图1中所示的方法。
[0082]
需要说明的是,本技术所述的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本技术中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
[0083]
可以以一种或多种程序设计语言或其组合来编写用于执行本技术的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c ,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0084]
附图中的流程图和框图,图示了按照本技术各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注
意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0085]
以上描述了本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。
[0086]
在本技术的描述中,需要理解的是,术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本技术和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本技术的限制。措词

包括’并不排除在权利要求未列出的元件或步骤的存在。元件前面的措词

一’或

一个’并不排除多个这样的元件的存在。在相互不同从属权利要求中记载某些措施的简单事实不表明这些措施的组合不能被用于改进。在权利要求中的任何参考符号不应当被解释为限制范围。
再多了解一些

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

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

相关文献