代码库拆分的方法及装置的制造方法
【专利摘要】本发明公开了一种代码库拆分的方法及装置,涉及互联网技术领域,为解决代码库拆分效率低下的问题而发明。本发明的方法包括:读取预设的拆分配置文件,所述拆分配置文件用于对原代码库进行拆分;根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件;根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分,获得多个目标代码库;将所述目标代码库推送给所述拆分配置文件指定的服务器。本发明主要应用于对release代码库拆分的过程中。
【专利说明】
代码库拆分的方法及装置
技术领域
[0001] 本发明涉及互联网技术领域,尤其涉及一种代码库拆分的方法及装置。
【背景技术】
[0002] 代码库提供了一种将代码封装在单个文件中、允许继承和修改这些文件的方法。 开发者将各自的代码以文件的形式保存在代码库中,相互之间进行调用,实现代码共享。
[0003] 随着项目的不断发展,代码库也会越来越大,过于庞大的代码库不仅会增加服务 器的负荷压力,而且还会增加代码导出的耗时。因此拆分代码库便成为项目进展到一定阶 段时必须考虑的问题。通常,可以将一个服务器上的代码库拆分为几个子代码库并分别部 署到不同的服务器上,以此减轻单个服务器的负荷压力。同时,单个服务器上代码量的降低 还可以提高查找目标代码的速度,由此缩短代码导出的耗时。
[0004] 现有拆分代码库的过程是由操作人员基于导出管理工具手动操作完成的。操作人 员需要在导出管理工具的操作界面中手动创建新的代码库,然后从原代码库的文件目录中 复制不同分支的代码文件,最后以生成提交信息的形式将不同分支的代码文件导入到不同 的新代码库中。可以看出,现有方式主要依靠人工操作拆分代码库,效率较为低下。
【发明内容】
[0005] 本发明提供一种代码库拆分的方法及装置,能够解决代码库拆分效率低下的问 题。
[0006] 为解决上述问题,一方面,本发明提供了一种代码库拆分的方法,该方法包括:
[0007] 读取预设的拆分配置文件,拆分配置文件用于对原代码库进行拆分;
[0008] 根据拆分配置文件中的原代码库信息获取原代码库的代码文件;
[0009] 根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行拆分,获得多个 目标代码库;
[0010]将目标代码库推送给拆分配置文件指定的服务器。
[0011] 另一方面,本发明还提供了一种代码库拆分的装置,该装置包括:
[0012] 读取单元,用于读取预设的拆分配置文件,拆分配置文件用于对原代码库进行拆 分;
[0013] 获取单元,用于根据拆分配置文件中的原代码库信息获取原代码库的代码文件;
[0014] 拆分单元,用于根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行 拆分,获得多个目标代码库;
[0015] 推送单元,用于将目标代码库推送给拆分配置文件指定的服务器。
[0016] 本发明提供的代码库拆分的方法及装置,能够根据拆分配置文件中的原代码库信 息获取作为拆分对象的代码文件,通过拆分配置信息将代码文件拆分为不同的目标代码 库,并将目标代码库推送到相应的服务器中。与现有技术相比,代码文件的查找、拆分、推送 等过程全部通过对拆分配置文件的执行自动实现,无需人工操作参与,因此本发明能够提 高代码库的拆分效率。
【附图说明】
[0017] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根 据这些附图获得其他的附图。
[0018] 图1为本发明实施例提供的一种代码库拆分的方法流程图;
[0019] 图2为本发明实施例提供的另一种代码库拆分的方法流程图;
[0020] 图3为本发明实施例提供的一种代码库拆分的装置的组成框图;
[0021] 图4为本发明实施例提供的另一种代码库拆分的装置的组成框图。
【具体实施方式】
[0022]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0023]为解决手动拆分代码库效率低下的问题,本发明一个实施例提供了一种代码库拆 分的方法,如图1所示,该方法包括:
[0024] 101、读取预设的拆分配置文件。
[0025] 原代码库中的代码包括前端开发、系统开发、网站开发等各种过程涉及的代码内 容。以前端开发为例,原代码库中包括的代码不限于是组件代码、控件代码及窗体代码。本 实施例不对原代码库中的代码类型进行限制。
[0026] 通常原代码库中的代码是以动态链接库(Dynamic Link Library,简称DLL)文件 的形式存储的,根据代码类型、代码功能、代码使用权限、代码所属部门等不同维度的划分, 这些代码文件之间的从属关系能够形成一个文件目录结构,这个文件目录结构即为本实施 例中的拆分对象。
[0027] 本实施例的目的在于通过拆分配置文件将原代码库拆分为多个新的代码库。该拆 分配置文件为根据预设拆分需求编写的配置文件,其中包括用于指定原代码库的原代码库 信息、决定如何拆分代码文件以获得哪几个目标代码库的拆分配置信息、以及将目标代码 库推送给哪个服务器的指定信息。拆分配置文件编写完成后配置到原代码库所在的服务器 中,当操作人员触发代码库拆分指令时,该服务器读取并解析拆分配置文件,按照拆分配置 文件中的参数对原代码库进行拆分。实际应用中,当拆分需求发生变化时,可以对拆分配置 文件进行修改,然后重启服务器使新的拆分配置文件生效。本实施例中,拆分配置文件的格 式包括但不限于是可扩展标记语言(Extensible Markup Language,简称XML)格式及脚本 格式。
[0028] 102、根据拆分配置文件中的原代码库信息获取原代码库的代码文件。
[0029] 通常一台服务器中可以仅部署一个代码库,也可以部署多个代码库;而在虚拟机 环境中,由于服务器中的每一个虚拟机都可以部署一个或多个代码库,因此单台服务器上 的代码库数量有可能会更多。为实现对作为拆分对象的原代码库的准确查找,本实施例在 拆分配置文件中设置了原代码库信息,服务器通过原代码库信息可以定位查找到原代码 库。拆分配置文件中可以记录一个原代码库的原代码库信息,也可以记录多个原代码库的 原代码库信息。当实现方式为后者时,服务器可以一次对部署在自身的多个原代码库分别 进行拆分。实际应用中,一切能够对原代码库进行唯一标识的信息均可以用作原代码库信 息,本实施例不对原代码库信息的具体形式进行限制。
[0030] 在根据原代码库信息查找到原代码库后,服务器获取原代码库中的代码文件,即 上述文件目录结构中的内容。服务器可以根据实际需求获取全部文件目录结构中的文件内 容,或者获取部分目录分支下的文件。本实施例后续以服务器获取全部文件目录结构中的 文件内容为例进行说明。
[0031] 103、根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行拆分,获得 多个目标代码库。
[0032] 拆分配置信息中定义了将原代码库拆分成哪几个目标代码库,以及将原代码库中 哪些代码文件拆分到哪个目标代码库中的相关信息。服务器根据拆分配置信息将原代码库 的代码文件拆分为多个代码文件集合,即获得多个目标代码库。
[0033] 104、将目标代码库推送给拆分配置文件指定的服务器。
[0034] 拆分配置文件中记录有指定服务器的服务器地址,以及指定服务器与目标代码库 的对应关系,服务器根据拆分配置文件中的指定信息,将各个目标代码库推送到指定的服 务器中。
[0035] 实际应用中,可以根据服务器的负载需求将所有目标代码库推送到原代码库所在 的服务器中,也可以将所有目标代码库推送到一个新的服务器中,还可以将不同的目标代 码库推送到不同的服务器中,本实施例不对目标代码库与服务器之间的对应关系进行限 制。
[0036] 本实施例提供的代码库拆分的方法,能够根据拆分配置文件中的原代码库信息获 取作为拆分对象的代码文件,通过拆分配置信息将代码文件拆分为不同的目标代码库,并 将目标代码库推送到相应的服务器中。与现有技术相比,代码文件的查找、拆分、推送等过 程全部通过对拆分配置文件的执行自动实现,无需人工操作参与,因此本实施例能够提高 代码库的拆分效率。
[0037] 此外,由于拆分配置文件的扩展性较强,操作人员能够方便的设定其中的各项信 息,因此本实施例提供的代码库拆分的方法还可以灵活的调整代码库的拆分需求。
[0038] 第三,本实施例提供的代码库拆分的方法是由服务器通过执行拆分配置文件完成 的,拆分过程全部由计算机自动执行,与人工手动拆分代码库相比,能够有效规避因错分、 漏分等原因产生的拆分风险。
[0039] 进一步的,作为对图1所示方法的细化,本发明实施例还提供了一种代码库拆分的 方法,如图2所示,该方法包括:
[0040] 201、读取预设的拆分配置文件。
[0041] 本实施例中,拆分配置文件被配置在服务器中的某个预设存储路径下,在需要拆 分代码库时,启动代码库拆分进程,按照该存储路径读取拆分配置文件,对其进行解析和执 行。
[0042] 在本实施例的一种实现方式中,为保证能够按照最新的拆分需求进行代码库拆 分,服务器在读取拆分配置文件时,还可以对拆分配置文件的版本进行验证,选取最新版本 的拆分配置文件予以执行。具体的,当存储路径下保保存有不同版本的拆分配置文件时,月艮 务器可以选取版本号最新的拆分配置文件。当存储路径下仅保存最新版本的拆分配置文件 时,即服务器是以文件替换的形式进行拆分配置文件的更新时,服务器直接读取保存的拆 分配置文件即可。
[0043] 进一步的,考虑到不同代码库的拆分需求有所差异,或者即使针对一个代码库也 有可能存在不同的拆分需求,在本实施例的另一种实现方式中,服务器可以保存有对应不 同代码库的多个拆分配置文件,或者对应一个代码库的不同拆分需求的多个拆分配置文 件。在读取拆分配置文件时,代码库拆分进程通过人机交互界面获取外部输入的拆分需求 或配置文件名称,然后根据拆分需求或配置文件名称选取本次拆分过程所需的拆分配置文 件。
[0044] 202、根据原代码库名称、原代码库标识及原代码库地址中的一项或至少两项的组 合,查找原代码库。
[0045] 服务器从拆分配置文件中解析出用于"锁定"原代码库的原代码库信息,并根据该 原代码库信息查找原代码库。
[0046] 在本实施例的一种实现方式中,原代码库信息可以包含下述至少一种信息:原代 码库名称、原代码库标识及原代码库地址。其中原代码库名称是在建立原代码库时人工或 计算机分配的名称,在代码库管理过程中,应当保证不同代码库的名称唯一无重复;原代码 库标识具体可以是预先为代码库分配的身份标识(IDentity,简称ID),或通过哈希算法 (HASH)分配的哈希值,或者通过伪随机数生成函数分配的伪随机数,其中,哈希值和伪随机 数的生成机制能够保证其唯一不重复,ID的分配则需要通过一定机制保证其唯一性;原代 码库地址主要是指原代码库在服务器中的逻辑地址,例如可是存储路径(需要保证不同的 原代码库的存储路径没有重复),当原代码库与其所部署的服务器之间存在一一映射的关 系时,也可以使用服务器的物理/逻辑地址作为原代码库的地址使用。
[0047] 对于原代码库名称、原代码库标识及原代码库地址,其中任意一者均能够单独作 为原代码库信息使用,实际应用中为避免小概率的重复事件,也可以使用其中任意两者或 三者的组合作为原代码库信息使用。
[0048] 服务器中配置有原代码库信息与原代码库存储路径的映射关系表,在获得原代码 库信息后,服务器查表确定原代码库的存储路径,通过该存储路径获取到原代码库。当原代 码库位于其他服务器中时,该映射关系表的存储路径部分至少还应当写有原代码库所在服 务器的地址信息,以便本服务器能够与其进行通信,获取原代码库。在分布式系统中,应当 定期同步各服务器中的上述映射关系表。
[0049] 203、读取原代码库中的代码文件。
[0050] 在获取到原代码库后,服务器按照其数据存储结构读取其中的代码文件。所谓数 据存储结构即为前述所指的文件目录结构。服务器可以从文件目录结构的顶层文件夹起始 向下进行数据遍历,获取各级节点上的代码文件,以及代码文件之间的上下级从属关系。
[0051] 204、在原代码库中查找与上游代码模块名称对应的文件目录分支。
[0052] 在获取到原代码库的代码文件后,服务器执行本步骤,从拆分配置文件中解析出 拆分配置信息。该拆分配置信息包括多个上游代码模块名称,每一个上游代码模块名称对 应原代码库中的一个文件目录分支。通过设置上游代码模块名称的方式表达对原代码库的 文件目录结构的拆分需求,即需要将文件目录结构拆分成哪几个分支(以便后续分别导入 到不同的目标代码库中)。
[0053]在本实施例的一种实现方式中,可以通过将文件目录分支名称设为上游代码模块 名称的方式,建立上游代码模块名称与文件目录分支的对应关系。示例性的,假设在原代码 库的文件目录结构中,顶层文件夹"TOP"的下一级包含三个子文件夹"A"、"B"和"C",其中, 子文件夹"A"的下一级又包含"Γ和"2"两个二级子文件夹,子文件夹"B"的下一级又包含 "3"、"4"、"5"和"6"四个二级子文件夹,子文件夹"C"的下一级又包含"7" 一个二级子文件 夹。如果需要将代码库按照子文件夹"A"、"B"和"(Τ'三个文件目录分支拆分为三个目标代码 库,那么可以在拆分配置文件的拆分配置信息中,设置三个上游代码模块名称(表示将原代 码库拆分为三个文件目录分支),并且将这三个上游代码模块名称分别设置为"A"、"Β"和 "C"。由此,服务器在执行拆分配置文件时,就可以根据不同的上游代码模块名称查找到对 应的文件目录分支了。
[0054] 205、将文件目录分支下的代码文件拆分到与上游代码模块名称对应的拆分模块 名称下,获得对应拆分模块名称的目标代码库。
[0055] 除上游代码模块名称以外,拆分配置信息中还包括与上游代码模块名称对应的拆 分模块名称。拆分模块名称的数量与目标代码库的数量相同,通过设置拆分模块名称的数 量,可以定义目标代码库的数量。
[0056] 拆分模块名称除了需要与目标代码库对应以外,还需要与上游代码模块名称对 应,以便建立不同文件目录分支与不同目标代码库之间的对应关系。需要注意的是,拆分模 块名称与目标代码库之间是一一对应的关系,上游代码模块名称与文件目录分支之间也是 一一对应的关系,但是拆分模块名称与上游代码模块名称并不一定是一一对应的关系。这 是由于,实际应用中可以将不同文件目录分支的代码文件导入到一个目标代码库中,也可 以将一个文件目录分支的代码文件分别导入到不同的目标代码库中。本实施例中,拆分模 块名称与上游代码模块名称两者在数量上可以相等也可以不相等,本实施例对此不作严格 限制。
[0057] 为便于理解,本实施例通过下述符号化关系对上述表述进行简化:
[0058] Η=原代码库中的文件目录分支数量;
[0059] 1 =上游代码模块名称数量;
[0060] J =拆分模块名称数量;
[0061 ] K =目标代码库数量。
[0062]上述四者之间关系如下:
[0063] K
[0064] 其中,符号表示一一对应关系,符号"―"表示数量不定的一对多、多对一或 多对多的对应关系。
[0065] 在拆分配置文件中,通过对上游代码模块的名称和数量的设置,可以确定需要拆 分出哪些文件目录分支的代码文件;通过对拆分模块的名称和数量的设置,可以确定将原 代码库拆分为哪些目标代码库;而对上游代码模块名称和拆分模块名称之间的对应关系的 设置,则可以确定将哪些文件目录分支的代码文件拆分到哪些目标代码库中。
[0066] 206、将目标代码库推送给与拆分模块名称对应的服务器地址。
[0067] 拆分配置文件中记录有部署目标代码库的服务器地址的指定信息,该指定信息不 仅记录了部署目标代码库的服务器地址,还记录了服务器地址与拆分模块名称的对应关 系。服务器将目标代码库推送给与拆分模块名称对应的服务器地址,该拆分模块名称为对 应目标代码库的拆分模块名称。
[0068] 本实施例中,可以将不同的目标代码库推送给不同的服务器,也可以将部分或全 部目标代码库推送给同一个服务器。
[0069] 在执行步骤206之后,就完成了对原代码库的拆分以及对新代码库的部署。
[0070] 进一步的,在本实施例的一种改进方案中,当因各种原因导致上游代码模块名称 与原代码库中的文件目录分支不对应时,可以将原代码库中的代码文件整体推送给预设的 服务器。实际应用中,开发人员可能会依据旧版本的文件目录结构编写上游代码模块名称, 而在拆分原代码库时,原代码库当前的文件目录结构为更新后的目录结构,由此导致拆分 配置文件中的上游代码模块名称与原代码库中的文件目录分支不相对应。或者,开发人员 在编写上游代码模块名称时所依据的文件目录结构是最新版本的,但是在拆分原代码库 时,原代码库的文件目录结构发生了改变,这种情形也会导致上述问题的产生。由于上游代 码模块名称与文件目录分支不相对应,因此无法按照既定的拆分需求获得目标代码库。此 时,可以将原代码库中的所有代码文件全部推送给预设的服务器,即将整个文件目录结构 中的所有代码文件全部推送给预设的服务器,以便在修改拆分需求之后,或者在原代码库 的文件目录结构改变之后,再做代码库的拆分。
[0071] 本实施例所述的上游代码模块名称与原代码库中文件目录分支不对应,包括上游 代码模块名称的数量与文件目录分支的数量不一致,也包括上游代码模块名称与文件目录 分支的文件夹名称不一致的情况。
[0072] 此外,实际应用中的预设服务器可以是拆分配置文件中指定的服务器,也可以是 与指定服务器无关的其他服务器,本实施例对此不作限制。
[0073] 进一步的,在本实施例的一个优选方案中,服务器除了将代码文件拆分到目标代 码库中之外,还可以进一步将原代码库中的代码历史信息一道同步给目标代码库。所谓代 码历史信息是指,用于记录代码修改或代码版本更新的历史信息,代码历史信息是对代码 进行后续修改、调用或升级必不可少的参考依据。现有技术中在对代码库进行拆分时,不会 将原代码库中的代码历史信息同步给新的代码库,由此导致新代码库中的代码再被修改、 调用或升级时,无法继承其早先在原代码库中的变动历史,因而对开发人员后续的使用造 成困难。本实施例中,服务器会将代码历史信息同步给目标代码库,能够实现代码文件与代 码历史信息的完整"过渡",消除代码变动历史在代码库拆分过程中的"断层",方便开发人 员基于代码在原代码库中的历史信息,在目标代码库中对代码进行修改、调用或升级。
[0074] 实际应用中,上述图1及图2所示方法适用于对release代码库或迭代代码库进行 拆分,但并不限定于此。
[0075] 为更好的对图2所示的方法进行理解,下面举例对本发明中的代码库拆分过程进 行说明。应当明确这种说明仅是示例性的,其中涉及的参数数值及参数数量等具体内容不 作为对实际应用的限制。
[0076] 在该示例中,预设的拆分配置文件包括下述内容:
[0077] a#GitModuleNmae ;GitHashValue ;GitRUL
[0078] remote-git;adsp;d36b1917fll885fd8e84531339Ibc61bc787bbaa;https://chip master2.qti.qualcomm.com/home2/git/msm-la-1-0_hex6_oem
[0079] remote-git;amss;ecd9bl95b5fldd508bl886bec23db2759c0alea4;https://chip master2.qti.qualcomm.com/home2/git/msm-la-1-0_amss_oem_milestone-standard-m
[0080] remote_git;binary;;https ://chipmaster2.qti. qua1comm.com/home2/git/ msm-la-1-0-test-device-milestone-m.git
[0081 ] remote_git ; cnss ; ; https: //chipmaster2. qti . qualcomm. com/home2/git/msm-la-1-O-amss_oem-cnss-wapi.git
[0082] #GitModulelist
[0083] MODULE-LIST-DEFAULT: "adsp-proc btfm-proc boot-images cnss-proc common cpe_proc modem-proc LINUX/android/vendor/qcom/proprietary rpm_proc slpi-proc trustzone_images venus-proc wgig-proc〃
[0084] #TargetServer
[0085] Down 1 oad-DIR=MSS
[0086] DownloadCMD = 〃repo init-u server://letv_url1-m letv/amss.xml-b master -repo-url = server: //letv-url2〃',
[0087] 其中,"GitModuleNmae;GitHashValue;GitRUL"定义了原代码库的名称、哈希值和 代码库地址,用于查找拆分对象的原代码库。
[0088] "rem〇te_git"是一个标记位,用于指示需要对原代码库进行拆分。
[0089] "adsp"、"amss"、"binary"、"cnss"为上游代码模块名称,与原代码库中的不同文 件目录分支相对应。
[0090] "GitModulelist" 中的 "adsp_proc"、"btfm-proc"、"boot_images"、"cnss_proc" 等为拆分模块名称,用于定义需要拆分出的目标代码库。上游代码模块名称与拆分模块名 称之间的对应关系通过两者的名称进行定义,例如上游代码模块名称"adsp"与拆分模块名 称"adsp_proc"。而对于诸如拆分模块名称"btfm_proc"其中的"btfm"对应上述某个文件目 录分支中的下级目录分支,即上述某个文件目录分支中的某个下级文件夹的名称,因此不 存在与其名称一致的上游代码模块名称。
[0091] "TargetServer"为部署目标代码库的目标服务器,其中记录了目标服务器的服务 器地址,在上述示例中将拆分模块名称"AMSS"对应的目标代码库推送到"DownloadCMD"下 的服务器地址。
[0092] 进一步的,作为对上述图1及图2所示方法的实现,本发明实施例还提供了一种代 码库拆分的装置。该装置可以位于原代码库所在的服务器上,也可以独立于原代码库所在 的服务器,但是与原代码库之间建立有数据交互关系,用以实现上述图1及图2所示的方法。 如图3所示,该装置包括:读取单元31、获取单元32、拆分单元33以及推送单元3L其中,
[0093] 读取单元31,用于读取预设的拆分配置文件,拆分配置文件用于对原代码库进行 拆分。
[0094] 原代码库中的代码包括前端开发、系统开发、网站开发等所有过程所涉及的代码 内容。以前端开发为例,原代码库中包括的代码不限于是组件代码、控件代码及窗体代码。 本实施例不对原代码库中的代码类型进行限制。
[0095] 本实施例的目的在于通过拆分配置文件将原代码库拆分为多个新的代码库。该拆 分配置文件为根据预设拆分需求编写的配置文件,其中包括用于指定原代码库的原代码库 信息、决定如何拆分代码文件以获得哪几个目标代码库的拆分配置信息、以及将目标代码 库推送给哪个服务器的指定信息。拆分配置文件编写完成后配置到原代码库所在的服务器 中,当操作人员触发代码库拆分指令时,读取并解析拆分配置文件,按照拆分配置文件中的 参数对原代码库进行拆分。实际应用中,当拆分需求发生变化时,可以对拆分配置文件进行 修改,然后重启服务器使新的拆分配置文件生效。本实施例中,拆分配置文件的格式包括但 不限于是XML格式及脚本格式。
[0096] 获取单元32,用于根据拆分配置文件中的原代码库信息获取原代码库的代码文 件。
[0097] 通常一台服务器中可以仅部署一个代码库,也可以部署多个代码库;而在虚拟机 环境中,由于服务器中的每一个虚拟机都可以部署一个或多个代码库,因此单台服务器上 的代码库数量有可能会更多。为实现对作为拆分对象的原代码库的准确查找,本实施例在 拆分配置文件中设置了原代码库信息,通过原代码库信息可以定位查找到原代码库。拆分 配置文件中可以记录一个原代码库的原代码库信息,也可以记录多个原代码库的原代码库 信息。当实现方式为后者时,可以一次对部署在自身的多个原代码库分别进行拆分。实际应 用中,一切能够对原代码库进行唯一标识的信息均可以用作原代码库信息,本实施例不对 原代码库信息的具体形式进行限制。
[0098] 在根据原代码库信息查找到原代码库后,获取原代码库中的代码文件,即上述文 件目录结构中的内容。可以根据实际需求获取全部文件目录结构中的文件内容,或者获取 部分目录分支下的文件。本实施例后续以获取全部文件目录结构中的文件内容为例进行说 明。
[0099] 拆分单元33,用于根据拆分配置文件中的拆分配置信息对原代码库的代码文件进 行拆分,获得多个目标代码库。
[0100] 拆分配置信息中定义了将原代码库拆分成哪几个目标代码库,以及将原代码库中 哪些代码文件拆分到哪个目标代码库中的相关信息。根据拆分配置信息将原代码库的代码 文件拆分为多个代码文件集合,即获得多个目标代码库。
[0101] 推送单元34,用于将目标代码库推送给拆分配置文件指定的服务器。
[0102] 拆分配置文件中记录有指定服务器的服务器地址,以及指定服务器与目标代码库 的对应关系,根据拆分配置文件中的指定信息,将各个目标代码库推送到指定的服务器中。
[0103] 实际应用中,可以根据服务器的负载需求将所有目标代码库推送到原代码库所在 的服务器中,也可以将所有目标代码库推送到一个新的服务器中,还可以将不同的目标代 码库推送到不同的服务器中,本实施例不对目标代码库与服务器之间的对应关系进行限 制。
[0104] 进一步的,原代码库信息包含下述至少一种信息。
[0105] 原代码库名称、原代码库标识及原代码库地址。
[0106] 如图4所示,获取单元32,包括:
[0107] 原代码库查找模块321,用于根据原代码库名称、原代码库标识及原代码库地址中 的一项或至少两项的组合,查找原代码库。
[0108] 读取模块322,用于读取原代码库中的代码文件。
[0109] 在本实施例的一种实现方式中,原代码库信息可以包含下述至少一种信息:原代 码库名称、原代码库标识及原代码库地址。其中原代码库名称是在建立原代码库时人工或 计算机分配的名称,在代码库管理过程中,应当保证不同代码库的名称唯一无重复;原代码 库标识具体可以是预先为代码库分配的ID,或通过哈希算法分配的哈希值,或者通过伪随 机数生成函数分配的伪随机数,其中,哈希值和伪随机数的生成机制能够保证其唯一不重 复,ID的分配则需要通过一定机制保证其唯一性;原代码库地址主要是指原代码库在服务 器中的逻辑地址,例如可是存储路径(需要保证不同的原代码库的存储路径没有重复),当 原代码库与其所部署的服务器之间存在一一映射的关系时,也可以使用服务器的物理/逻 辑地址作为原代码库的地址使用。
[0110] 对于原代码库名称、原代码库标识及原代码库地址,其中任意一者均能够单独作 为原代码库信息使用,实际应用中为避免小概率的重复事件,也可以使用其中任意两者或 三者的组合作为原代码库信息使用。
[0111] 服务器中配置有原代码库信息与原代码库存储路径的映射关系表,在获得原代码 库信息后,查表确定原代码库的存储路径,通过该存储路径获取到原代码库。当原代码库位 于其他服务器中时,该映射关系表的存储路径部分至少还应当写有原代码库所在服务器的 地址信息,以便本服务器能够与其进行通信,获取原代码库。在分布式系统中,应当定期同 步各服务器中的上述映射关系表。
[0112] 在获取到原代码库后,按照其数据存储结构读取其中的代码文件。所谓数据存储 结构即为前述所指的文件目录结构。可以从文件目录结构的顶层文件夹起始向下进行数据 遍历,获取各级节点上的代码文件,以及代码文件之间的上下级从属关系。
[0113] 进一步的,拆分配置信息包括与原代码库中文件目录分支相对应的上游代码模块 名称,以及与上游代码模块名称对应的拆分模块名称。
[0114] 如图4所示,拆分单元33,包括:
[0115] 文件目录分支查找模块331,用于在原代码库中查找与上游代码模块名称对应的 文件目录分支。
[0116]拆分模块332,用于将文件目录分支下的代码文件拆分到与上游代码模块名称对 应的拆分模块名称下,获得对应拆分模块名称的目标代码库。
[0117] 在获取到原代码库的代码文件后,从拆分配置文件中解析出拆分配置信息。该拆 分配置信息包括多个上游代码模块名称,每一个上游代码模块名称对应原代码库中的一个 文件目录分支。通过设置上游代码模块名称的方式表达对原代码库的文件目录结构的拆分 需求,即需要将文件目录结构拆分成哪几个分支(以便后续分别导入到不同的目标代码库 中)。
[0118] 在本实施例的一种实现方式中,可以通过将文件目录分支名称设为上游代码模块 名称的方式,建立上游代码模块名称与文件目录分支的对应关系。
[0119] 除上游代码模块名称以外,拆分配置信息中还包括与上游代码模块名称对应的拆 分模块名称。拆分模块名称的数量与目标代码库的数量相同,通过设置拆分模块名称的数 量,可以定义目标代码库的数量。
[0120]拆分模块名称除了需要与目标代码库对应以外,还需要与上游代码模块名称对 应,以便建立不同文件目录分支与不同目标代码库之间的对应关系。需要注意的是,拆分模 块名称与目标代码库之间是一一对应的关系,上游代码模块名称与文件目录分支之间也是 一一对应的关系,但是拆分模块名称与上游代码模块名称并不一定是一一对应的关系。这 是由于,实际应用中可以将不同文件目录分支的代码文件导入到一个目标代码库中,也可 以将一个文件目录分支的代码文件分别导入到不同的目标代码库中。本实施例中,拆分模 块名称与上游代码模块名称两者在数量上可以相等也可以不相等,本实施例对此不作严格 限制。
[0121 ]进一步的,推送单元34,用于将目标代码库推送给与拆分模块名称对应的服务器 地址。
[0122] 拆分配置文件中记录有部署目标代码库的服务器地址的指定信息,该指定信息不 仅记录了部署目标代码库的服务器地址,还记录了服务器地址与拆分模块名称的对应关 系。将目标代码库推送给与拆分模块名称对应的服务器地址,该拆分模块名称为对应目标 代码库的拆分模块名称。
[0123] 本实施例中,可以将不同的目标代码库推送给不同的服务器,也可以将部分或全 部目标代码库推送给同一个服务器。
[0124] 进一步的,推送单元34,用于若上游代码模块名称与原代码库中文件目录分支不 对应,则将原代码库中的代码文件整体推送给预设的服务器。
[0125] 当因各种原因导致上游代码模块名称与原代码库中的文件目录分支不对应时,可 以将原代码库中的代码文件整体推送给预设的服务器。实际应用中,开发人员可能会依据 旧版本的文件目录结构编写上游代码模块名称,而在拆分原代码库时,原代码库当前的文 件目录结构为更新后的目录结构,由此导致拆分配置文件中的上游代码模块名称与原代码 库中的文件目录分支不相对应。或者,开发人员在编写上游代码模块名称时所依据的文件 目录结构是最新版本的,但是在拆分原代码库时,原代码库的文件目录结构发生了改变,这 种情形也会导致上述问题的产生。由于上游代码模块名称与文件目录分支不相对应,因此 无法按照既定的拆分需求获得目标代码库。此时,可以将原代码库中的所有代码文件全部 推送给预设的服务器,即将整个文件目录结构中的所有代码文件全部推送给预设的服务 器,以便在修改拆分需求之后,或者在原代码库的文件目录结构改变之后,再做代码库的拆 分。
[0126] 进一步的,如图4所示,该装置进一步包括:
[0127] 同步单元35,用于将原代码库的代码历史信息同步到目标代码库中。
[0128] 除了将代码文件拆分到目标代码库中之外,还可以进一步将原代码库中的代码历 史信息一道同步给目标代码库。所谓代码历史信息是指,用于记录代码修改或代码版本更 新的历史信息,代码历史信息是对代码进行后续修改、调用或升级必不可少的参考依据。现 有技术中在对代码库进行拆分时,不会将原代码库中的代码历史信息同步给新的代码库, 由此导致新代码库中的代码再被修改、调用或升级时,无法继承其早先在原代码库中的变 动历史,因而对开发人员后续的使用造成困难。本实施例中,会将代码历史信息同步给目标 代码库,能够实现代码文件与代码历史信息的完整"过渡",消除代码变动历史在代码库拆 分过程中的"断层",方便开发人员基于代码在原代码库中的历史信息,在目标代码库中对 代码进行修改、调用或升级。
[0129]本实施例提供的代码库拆分的装置,能够根据拆分配置文件中的原代码库信息获 取作为拆分对象的代码文件,通过拆分配置信息将代码文件拆分为不同的目标代码库,并 将目标代码库推送到相应的服务器中。与现有技术相比,代码文件的查找、拆分、推送等过 程全部通过对拆分配置文件的执行自动实现,无需人工操作参与,因此本实施例能够提高 代码库的拆分效率。
[0130]此外,由于拆分配置文件的扩展性较强,操作人员能够方便的设定其中的各项信 息,因此本实施例提供的代码库拆分的装置还可以灵活的调整代码库的拆分需求。
[0131] 第三,本实施例是通过代码库拆分的装置执行拆分配置文件自动完成的,拆分过 程全部由计算机自动执行,与人工手动拆分代码库相比,能够有效规避因错分、漏分等原因 产生的拆分风险。
[0132] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可 以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单 元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其 中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性 的劳动的情况下,即可以理解并实施。
[0133] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可 借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上 述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该 计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指 令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施 例或者实施例的某些部分所述的方法。
[0134] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管 参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可 以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换; 而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和 范围。
【主权项】
1. 一种代码库拆分的方法,其特征在于,所述方法包括: 读取预设的拆分配置文件,所述拆分配置文件用于对原代码库进行拆分; 根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件; 根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分,获得 多个目标代码库; 将所述目标代码库推送给所述拆分配置文件指定的服务器。2. 根据权利要求1所述的方法,其特征在于,所述原代码库信息包含下述至少一种信 息: 原代码库名称、原代码库标识及原代码库地址; 所述根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件,包括: 根据所述原代码库名称、所述原代码库标识及所述原代码库地址中的一项或至少两项 的组合,查找所述原代码库; 读取所述原代码库中的代码文件。3. 根据权利要求1所述的方法,其特征在于,所述拆分配置信息包括与所述原代码库中 文件目录分支相对应的上游代码模块名称,以及与所述上游代码模块名称对应的拆分模块 名称; 所述根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分, 获得多个目标代码库,包括: 在所述原代码库中查找与所述上游代码模块名称对应的文件目录分支; 将所述文件目录分支下的代码文件拆分到与所述上游代码模块名称对应的拆分模块 名称下,获得对应所述拆分模块名称的目标代码库。4. 根据权利要求3所述的方法,其特征在于,所述将所述目标代码库推送给所述拆分配 置文件指定的服务器,包括: 将所述目标代码库推送给与所述拆分模块名称对应的服务器地址。5. 根据权利要求3或4所述的方法,其特征在于,所述方法进一步包括: 若所述上游代码模块名称与所述原代码库中文件目录分支不对应,则将所述原代码库 中的代码文件整体推送给预设的服务器。6. 根据权利要求1所述的方法,其特征在于,所述方法进一步包括: 将所述原代码库的代码历史信息同步到所述目标代码库中。7. -种代码库拆分的装置,其特征在于,所述装置包括: 读取单元,用于读取预设的拆分配置文件,所述拆分配置文件用于对原代码库进行拆 分; 获取单元,用于根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件; 拆分单元,用于根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件 进行拆分,获得多个目标代码库; 推送单元,用于将所述目标代码库推送给所述拆分配置文件指定的服务器。8. 根据权利要求7所述的装置,其特征在于,所述原代码库信息包含下述至少一种信 息: 原代码库名称、原代码库标识及原代码库地址; 所述获取单元,包括: 原代码库查找模块,用于根据所述原代码库名称、所述原代码库标识及所述原代码库 地址中的一项或至少两项的组合,查找所述原代码库; 读取模块,用于读取所述原代码库中的代码文件。9. 根据权利要求7所述的装置,其特征在于,所述拆分配置信息包括与所述原代码库中 文件目录分支相对应的上游代码模块名称,以及与所述上游代码模块名称对应的拆分模块 名称; 所述拆分单元,包括: 文件目录分支查找模块,用于在所述原代码库中查找与所述上游代码模块名称对应的 文件目录分支; 拆分模块,用于将所述文件目录分支下的代码文件拆分到与所述上游代码模块名称对 应的拆分模块名称下,获得对应所述拆分模块名称的目标代码库。10. 根据权利要求9所述的装置,其特征在于,所述推送单元,用于将所述目标代码库推 送给与所述拆分模块名称对应的服务器地址。11. 根据权利要求9或10所述的装置,其特征在于,所述推送单元,用于若所述上游代码 模块名称与所述原代码库中文件目录分支不对应,则将所述原代码库中的代码文件整体推 送给预设的服务器。12. 根据权利要求7所述的装置,其特征在于,所述装置进一步包括: 同步单元,用于将所述原代码库的代码历史信息同步到所述目标代码库中。
【文档编号】G06F9/44GK105867903SQ201511016900
【公开日】2016年8月17日
【申请日】2015年12月29日
【发明人】李欣
【申请人】乐视致新电子科技(天津)有限公司