发明内容
为克服上述由于源代码库更新不及时导致开发效率低且更新错误的问题或者至少部分地解决上述问题,本发明提供了一种源代码库更新方法及装置。
根据本发明的第一方面,提供一种源代码库更新方法,包括:
S1,根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项;
S2,根据各所述目录项的名称,获取各所述目录项类型;
S3,执行各所述目录项的类型对应的命令,对各所述目录项对应的目标源代码库进行更新;其中,所述类型与所述命令预先关联存储。
具体地,所述步骤S1之前还包括:
根据用户的输入或目标源代码库的文档结构,获取所述目标源代码库的目录;
根据所述目标源代码库的目录和所述预设阈值,生成JSON格式的配置文件。
具体地,所述步骤S2具体包括:
S21,在预先创建的各线程中,使用listdir函数枚举各所述线程被分配的各所述目录项;
S22,根据各所述目录项的名称,判断各所述目录项的类型是否为预设类型。
具体地,所述步骤S21之前包括:
获取运行线程的计算机上逻辑CPU的个数;
将所述个数乘以预设常数,获取最大线程个数;
将1到所述最大线程个数中的任一整数作为所述线程的个数。
具体地,所述步骤S22具体包括:
若各所述目录项的名称后缀为.svn,则获知所述目录项为SVN源代码管理工具的目录项;或者,
若各所述目录项的名称后缀为.git,则获知所述目录项为git源代码管理工具的目录项;或者,
若各所述目录项的名称后缀为.hg,则获知所述目录项为Mercurial源代码管理工具的目录项。
具体地,所述步骤S3之后还包括:
将所述目标源代码库的更新信息存放到日志缓存中,所述更新信息包括更新时间、更新的所述目标源代码库的目录项和更新结果。
根据本发明的第二方面,提供一种源代码库更新装置,包括:
第一获取单元,用于根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项;
第二获取单元,用于根据各所述目录项的名称,获取各所述目录项的类型;
执行单元,用于执行各所述目录项的类型对应的命令,对各所述目录项对应的源代码库进行更新,所述类型与所述命令预先关联存储。
具体地,还包括生成单元,用于:
根据用户的输入或源代码库的文档结构,获取所述目标源代码库的目录;
根据所述目标源代码库的目录和所述预设阈值,生成JSON格式的配置文件。
本发明提供一种源代码库更新方法及装置,该方法通过预设阈值控制检索的目录项的深度,从而控制需要更新的源代码库的范围,减少不必要的运算,提高源代码库更新的速度;同时,根据各所述目录项的类型执行不同的命令对所述目标源代码库进行更新,从而实现对多种类型的目标源代码库进行更新,且目标源代码库的更新能自动进行,提高了开发效率,减少了更新的错误率。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
在本发明的一个实施例中提供一种源代码库更新方法,图1为本发明实施例提供的源代码库更新方法整体流程示意图,该方法包括:S1,根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项;S2,根据各所述目录项的名称,获取各所述目录项的类型;S3,执行各所述目录项的类型对应的命令,对各所述目录项对应的目标源代码库进行更新;其中,所述类型与所述命令预先关联存储。
具体地,S1中,所述目标源代码库为需要进行更新的源代码库。所述配置文件为一个JSON格式的文本文件。在定义好的所述配置文件中配置好所述目标源代码库的目录和预设阈值。所述目录中包括多个目录项,根据各所述目录项的级别确定各所述目录项的深度,如二级目录项的深度为1,三级目录项的深度为2等,其中二级目录项为一级目录项的子目录项,三级目录项为二级目录项的子目录项。用户根据更新需要可以设置的预设阈值,从而只对深度小于或等于所述预设阈值的目录项对应的源代码库进行更新,缩小了更新范围,提高了更新速度。S2中,根据各所述目录项的名称,获取所述目录项的类型。所述目录项的类型根据所述目录项对应的源代码库的类型确定,如对于名称包含.svn的目录项,则获知所述目录项对应的源代码库的类型为SVN源代码管理工具的源代码库。所述目录项的类型为SVN源代码管理工具的目录项。S3中,对于不同类型的目录项,执行不同的命令对所述目录项对应的源代码库进行更新。每种类型对应一种命令,所述类型和所述命令预先关联存储。
本实施例通过预设阈值控制检索的目录项的深度,从而控制需要更新的源代码库的范围,减少不必要的运算,提高源代码库更新的速度;同时,根据各所述目录项的类型执行不同的命令对所述目标源代码库进行更新,从而实现对多种类型的目标源代码库进行更新,且目标源代码库的更新能自动进行,提高了开发效率,减少了更新的错误率。
在上述实施例的基础上,本实施例中所述步骤S1之前还包括:根据用户的输入或目标源代码库的文档结构,获取所述目标源代码库的目录;根据所述目标源代码库的目录和所述预设阈值,生成JSON格式的配置文件。
具体地,所述目标源代码库的目录和所述预设阈值可以是用户手动填写,所述目标源代码库的目录也可以根据所述目标源代码库的文档结构自动生成,具体根据所述目标源代码库中文件夹和文件的名称,以及文件夹之间,文件夹和文件之间的包含关系生成所述目标源代码库的目录。由于所述目标源代码库的目录为一系列的目录配置列表,因此在读取所述配置文件中目标源代码库的目录后,将所述目录用数组表示,其中数组中的每个元素表示所述目录的一个目录项,从而将所述目录映射为数组。通过所述数组的长度,可以获取配置文件中目录项的个数。
本实施例通过采用JSON格式的配置文件存储所述目标源代码库的目录和所述预设阈值,一方面,便于扩展和后期维护;另一方面,控制需要更新的源代码库的范围,减少不必要的运算,提高源代码库更新的速度。
在上述各实施例的基础上,本实施例中所述步骤S2具体包括:S21,在预先创建的各线程中,使用listdir函数枚举各所述线程被分配的各所述目录项;S22,根据各所述目录项的名称,判断各所述目录项的类型是否为预设类型。
具体地,在预先创建的线程中,首先读取所述线程被分配的目录项,然后通过listdir函数枚举所述线程被分配的目录项。根据各所述目录项的名称,判断各所述目录项是哪种源代码管理工具的目录项。所述预设类型根据源代码管理工具的种类确定。
在上述实施例的基础上,本实施例中所述步骤S21之前包括:获取运行线程的计算机上逻辑CPU的个数;将所述个数乘以预设常数,获取最大线程个数;将1到所述最大线程个数中的任一整数作为所述线程的个数,创建所述线程。
具体地,根据计算机的硬件信息创建相应数量的线程。具体根据运行线程的计算机上配置的逻辑CPU的个数确定需要创建的线程的数量,通过multiprocessing.cpu_count()获取所述逻辑CPU的个数。将所述计算机上逻辑CPU的个数乘以预设常数,获取最大线程个数。创建线程的个数为1到所述最大线程个数中的任一整数。例如,当所述预设常数为2时,创建线程的个数范围为[1,multiprocessing.cpu_count()*2]。然后使用所述线程读取所述目录。
本实施例中由于读取所述目标资源库的目录需要占用大量的计算机资源,当所述目录中的目录项过多时,单线程的处理会导致处理效率低,运用多线程对所述目录进行处理一方面利用计算机多CPU的优势,同时处理任务的线程与UI(User Interface,用户界面)线程独立,避免程序假死,提升用户体验。
在上述实施例的基础上,本实施例中所述步骤S22具体包括:若各所述目录项的名称后缀为.svn,则获知所述目录项为SVN源代码管理工具的目录项;或者,若各所述目录项的名称后缀为.git,则获知所述目录项为git源代码管理工具的目录项;或者,若各所述目录项的名称后缀为.hg,则获知所述目录项为Mercurial源代码管理工具的目录项。
具体地,根据各所述目录项的名称后缀判断各所述目录项是否为某种源代码工具的目录项。例如,若各所述目录项的名称后缀为.svn,则获知所述目录项为SVN源代码管理工具的目录项,执行如下命令对所述目录项对应的目标源代码库进行更新:
svn update;
若各所述目录项的名称后缀为.git,则获知所述目录项为git源代码管理工具的目录项,执行如下命令对所述目录项对应的目标源代码库进行更新:
for remote in git branch-r;
do git branch--track${remote#origin/}$remote;
done;
若各所述目录项的名称后缀为.hg,则获知所述目录项为Mercurial源代码管理工具的目录项,执行如下命令对所述目录项对应的目标源代码库进行更新:
hg update.
本实施例通过各所述目录项的名称后缀获取所述目录项的类型,即所述目录项是哪种源代码工具的目录项,可以支持多种源代码工具,满足不同的需求,根据目录的类型执行不同的命令对所述目标源代码库进行更新。
在上述各实施例的基础上,本实施例中所述步骤S3之后还包括:将所述目标源代码库的更新信息存放到日志缓存中,所述更新信息包括更新时间、更新的所述目标源代码库的目录项和更新结果。
具体地,在对所述目标源代码库进行更新后,将所述目标源代码库的更新信息存放到日志缓存中。所述更新信息在所述日志缓存中以数组形式进行存储,数组中的每个元素表示一条更新操作记录,所述更新操作记录的结构为{time,dir,result}。其中,time为所述目标源代码库的更新时间,dir表示更新的所述目标源代码库的目录项,result表示更新结果。在所有线程执行完毕后,读取所述日志缓存,将所述日期缓存中更新信息的数值写入日志文件,方便日后查看和警告。
在本发明的另一个实施例中提供一种源代码库更新装置,图2为本发明实施例提供的源代码库更新装置整体结构示意图,该装置包括第一获取单元1、第二获取单元2和执行单元3,其中:
所述第一获取单元1用于根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项;所述第二获取单元2用于根据各所述目录项的名称,获取各所述目录项的类型;所述执行单元3用于执行各所述目录项的类型对应的命令,对各所述目录项对应的源代码库进行更新,所述类型与所述命令预先关联存储。
具体地,所述目标源代码库为需要进行更新的源代码库。所述配置文件为一个JSON格式的文本文件。在定义好的所述配置文件中配置好所述目标源代码库的目录和预设阈值。所述目录中包括多个目录项,根据各所述目录项的级别确定各所述目录项的深度,如二级目录项的深度为1,三级目录项的深度为2等,其中二级目录项为一级目录项的子目录项,三级目录项为二级目录项的子目录项。用户根据更新需要可以设置的预设阈值,从而只对深度小于或等于所述预设阈值的目录项对应的源代码库进行更新,缩小了更新范围,提高了更新速度。所述第一获取单元1根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项。所述第二获取单元2根据各所述目录项的名称,获取所述目录项的类型。所述目录项的类型根据所述目录项对应的源代码库的类型确定,如对于名称包含.svn的目录项,则获知所述目录项对应的源代码库的类型为SVN源代码管理工具的源代码库。所述目录项的类型为SVN源代码管理工具的目录项。对于不同类型的目录项,所述执行单元3执行不同的命令对所述目录项对应的源代码库进行更新。每种类型对应一种命令,所述类型和所述命令预先关联存储。
本实施例通过预设阈值控制检索的目录项的深度,从而控制需要更新的源代码库的范围,减少不必要的运算,提高源代码库更新的速度;同时,根据各所述目录项的类型执行不同的命令对所述目标源代码库进行更新,从而实现对多种类型的目标源代码库进行更新,且目标源代码库的更新能自动进行,提高了开发效率,减少了更新的错误率。
在上述实施例的基础上,本实施例中还包括生成单元,用于根据用户的输入或目标源代码库的文档结构,获取所述目标源代码库的目录;根据所述目标源代码库的目录和所述预设阈值,生成JSON格式的配置文件。
具体地,所述目标源代码库的目录和所述预设阈值可以是用户手动填写,所述目标源代码库的目录也可以根据所述目标源代码库的文档结构自动生成,具体根据所述目标源代码库中文件夹和文件的名称,以及文件夹之间,文件夹和文件之间的包含关系生成所述目标源代码库的目录。由于所述目标源代码库的目录为一系列的目录配置列表,因此在读取所述配置文件中目标源代码库的目录后,将所述目录用数组表示,其中数组中的每个元素表示所述目录的一个目录项,从而将所述目录映射为数组。通过所述数组的长度,可以获取配置文件中目录项的个数。
本实施例通过采用JSON格式的配置文件存储所述目标源代码库的目录和所述预设阈值,一方面,便于扩展和后期维护;另一方面,控制需要更新的源代码库的范围,减少不必要的运算,提高源代码库更新的速度。
在上述实施例的基础上,本实施例中所述第二获取单元包括枚举子单元和判断子单元,其中:
所述枚举子单元用于在预先创建的各线程中,使用listdir函数枚举各所述线程被分配的各所述目录项;所述判断子单元用于根据各所述目录项的名称,判断各所述目录项的类型是否为预设类型。
在上述各实施例的基础上,本实施例中还包括创建单元,用于获取运行线程的计算机上逻辑CPU的个数;将所述个数乘以预设常数,获取最大线程个数;将1到所述最大线程个数中的任一整数作为所述线程的个数,创建所述线程。
在上述实施例的基础上,本实施例中所述判断子单元具体用于:若各所述目录项的名称后缀为.svn,则获知所述目录项为SVN源代码管理工具的目录项;或者,若各所述目录项的名称后缀为.git,则获知所述目录项为git源代码管理工具的目录项;或者,若各所述目录项的名称后缀为.hg,则获知所述目录项为Mercurial源代码管理工具的目录项。
在上述各实施例的基础上,本实施例中还包括存储单元,用于将所述目标源代码库的更新信息存放到日志缓存中,所述更新信息包括更新时间、更新的所述目标源代码库的目录项和更新结果。
本实施例提供一种源代码库更新设备,图3为本发明实施例提供的源代码库更新设备整体结构示意图,该设备包括:至少一个处理器31、至少一个存储器32和总线33;其中,
所述处理器31和存储器32通过所述总线33完成相互间的通信;
所述存储器32存储有可被所述处理器31执行的程序指令,所述处理器调用所述程序指令能够执行上述各方法实施例所提供的方法,例如包括:S1,根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项;S2,根据各所述目录项的名称,获取各所述目录项的类型;S3,执行各所述目录项的类型对应的命令,对各所述目录项对应的目标源代码库进行更新;其中,所述类型与所述命令预先关联存储。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:S1,根据预先生成的配置文件中的预设阈值,获取目标源代码库的目录中深度小于或等于所述预设阈值的各目录项;S2,根据各所述目录项的名称,获取各所述目录项的类型;S3,执行各所述目录项的类型对应的命令,对各所述目录项对应的目标源代码库进行更新;其中,所述类型与所述命令预先关联存储。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的源代码库更新设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。