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

一种代码搜索系统生成方法、代码搜索方法和搜索服务器与流程

2021-12-18 02:34:00 来源:中国专利 TAG:


1.本技术涉及数据检索领域,尤其涉及一种代码搜索系统生成方法、代码搜索方法和搜索服务器。


背景技术:

2.在开发某些大型网站或者某些操作系统(例如安卓
tm
系统)时,因为需要实现的功能非常多,所以这些大型网站或者操作系统的代码量非常大。以安卓系统为例,安卓系统本身具备有多个模块(例如启动模块、主页面模块、消息推送模块等),每个模块对应的代码量会很大。为了方便管理和调用,谷歌
tm
将安卓系统的所有代码文件按照模块的不同,划分至不同的代码仓,以供开发人员使用。为了方便开发和发布,实际中会针对某些需求/特性的代码文件建立一个分支,每个分支会对应有多个代码仓,后续用户在开发时便可以在该分支上方便的对不同代码仓中的代码文件进行修改或补充。
3.现有的代码搜索系统可以提供开发人员对目标代码文件进行搜索并查看的功能。在现有的代码搜索系统中,需要针对每个分支下载所有代码仓中对应该分支代码文件,而后建立对应每个分支的分支索引。每个分支的分支索引都可以关联至该分支的所有代码文件,以供后续搜索使用。在分支索引建立完成后,该代搜索系统便可以根据用户的搜索需求,利用分支索引查找到对应该搜索需求的代码文件提供给用户查看。因为不同分支可能会对应有相同的代码文件,所以现有的代码搜索系统会在本地下载多套重复的代码文件,对本地的存储资源造成极大浪费,降低了存储资源利用率。


技术实现要素:

4.本技术提供一种代码搜索系统生成方法、代码搜索方法和搜索服务器,可以避免代码搜索系统在搜索服务器中下载多套重复的代码文件,提高了搜索服务器的存储资源的利用率。
5.第一方面,本技术提供一种代码搜索系统生成方法,该方法可以应用于搜索服务器。该方法中,搜索服务器首先从代码服务器获取目标代码中至少一个目标分支的代码仓的特征信息和目录树信息。其中,特征信息包括:名称、相对路径、最新提交点和下载地址;目标分支的目标代码仓的最新提交点为目标分支在目标代码仓中提交代码文件的所有提交点中最新的一个;目标代码仓为目标分支的所有代码仓中的任一个;目录树信息至少包括目录树信息所属代码仓中的代码文件的特征参数;特征参数用于指示特征参数所属的代码文件。而后,搜索服务器根据目标分支的代码仓的相对路径和目录树信息,生成目标分支的分支目录;分支目录至少包括目标分支包括的代码仓的相对路径,以及目标分支对应的代码仓中的代码文件的特征参数。
6.在搜索服务器中未存储有目标代码的任一代码文件的情况下,搜索服务器根据第一分支的代码仓的名称和下载地址,从代码服务器下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件;第一分支为至少一个目标分支中
的任一个目标分支。然后,搜索服务器根据第一分支的所有代码文件、第一分支的分支目录和第一分支的所有代码文件的存储地址,生成第一分支的分支索引。其中,分支索引至少用于指示分支索引所属的分支对应的任意代码文件在分支索引对应的分支目录中的位置。
7.在搜索服务器中存储有已建分支的所有代码文件所属的代码仓的情况下,搜索服务器从本地依次读取第二分支的分支目录对应的代码文件中的所有第一代码文件;已建分支为已生成有分支索引的目标分支;第二分支为至少一个目标分支中除已建分支以外的任一个目标分支;第一代码文件是已建分支的所有代码文件所属的代码仓中的代码文件。然后,搜索服务器根据第二分支的分支目录对应的代码文件中除第一代码文件以外的所有第二代码文件的特征参数、所有第二代码文件所属代码仓的名称、所有第二代码文件所属代码仓的最新提交点和所有第二代码文件所属代码仓的下载地址,从代码服务器读取所有第二代码文件,并下载所有第二代码文件所属的代码仓。然后,搜索服务器根据第二分支的分支目录、第二分支的所有代码文件和第二分支的所有代码文件的存储地址,生成第二分支的分支索引。最后,搜索服务器根据至少一个目标分支的分支目录、至少一个目标分支的分支索引以及搜索服务器下载的对应至少一个目标分支的所有代码仓,生成代码搜索系统。
8.基于上述实施例,本技术实施例提供的代码搜索系统生成方法,搜索服务器可以在获取到目标代码的多个目标分支的代码仓的特征信息(包括名称、性对路径、最新提交点和下载地址)和目录树信息后,根据目标分支的代码仓的相对路径和目录树信息生成目标分支的分支目录。而后,在针对第一分支(任以目标分支)首次建立分支索引时,可以根据第一分支的代码仓的名称和下载地址,从代码服务器下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件。之后,搜索服务器可以根据第一分支的分支目录、第一分支的所有代码文件及其存储地址,生成第一分支的分支索引。该分支索引至少用于指示所述分支索引所属的分支对应的任意代码文件在所述分支目录中的位置。
9.在建立过某些目标分支的分支索引,搜索服务器中存在某些分支对应的代码仓(例如第一分支的所有代码文件所属的代码仓)的情况下,搜索服务器可以从本地读取当前需要建立分支索引的第二分支的分支目录对应的代码文件中的所有第一代码文件。而后,搜索服务器可以根据所述第二分支的分支目录对应的代码文件中除所述第一代码文件以外的所有第二代码文件的特征参数、所有所述第二代码文件所属代码仓的名称、所有所述第二代码文件所属代码仓的最新提交点和所有所述第二代码文件所属代码仓的下载地址,从所述代码服务器读取所有所述第二代码文件,并下载所有所述第二代码文件所属的代码仓。进而根据第二分支的分支目录、第二分支的所有代码文件及其存储地址,生成第二分支的分支索引。最后,根据至少一个目标分支的分支目录、至少一个目标分支的分支索引以及下载的所有代码仓,生成代码搜索系统。
10.可以看出,本技术实施例提供的技术方案,在构建代码搜索系统中的分支索引的过程中,在针对某个目标分支建立分支索引的过程中下载过某些代码仓后,后续在建立其他分支索引时便不需要再次下载代码仓,所以本技术实施例提供的技术方案仅会使得搜索服务器将每个代码仓下载一遍,之后便可以根据分支目录、读取结果(即目标分支的所有代码文件)和代码文件的存储地址生成分支索引。又因为该分支索引可以用于指示该分支索引所属的分支对应的任意代码文件在分支目录中的位置,所以后续用户使用代码搜索系统
的过程中,可以先根据搜索需求确定分支目录和分支索引,而后根据分支索引确定需要的代码文件在分支目录中对应的位置(即代码文件的名称所处位置),之后可以利用分支目录和代码中各代码文件的关联,从代码仓中获取到对应的代码文件,完成搜索过程。综上,本技术实施例相比于现有技术,不需要针对每个分支下载一遍其对应的所有代码仓,大大提高了搜索服务器的存储资源的利用率。
11.在第一方面的一种可能的设计方式中,搜索服务器从代码服务器获取目标代码中至少一个目标分支的代码仓的特征信息和目录树信息,包括:搜索服务器从代码服务器获取至少一个分支的manifest文件和至少一个分支的代码仓的目录树信息;搜索服务器解析至少一个目标分支的manifest文件,以获取至少一个目标分支的代码仓的特征信息。
12.这样一来,因为安卓系统的代码仓在存储时都会存在有manifest文件,该文件中包含有代码仓的特征信息,所以基于上述方案,可以顺利获取到目标分支的代码仓的特征信息。
13.在第一方面的一种可能的设计方式中,搜索服务器根据第一分支的代码仓的名称和下载地址,从代码服务器下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件,包括:
14.搜索服务器从本地依次读取第一分支的分支目录对应的每个代码文件;第一分支为至少一个分支中的一个分支;在搜索服务器无法从本地读取到目标代码文件的情况下,搜索服务器根据目标代码文件的特征参数、目标代码文件所属代码仓的名称、目标代码文件所属代码仓的最新提交点和目标代码文件所属代码仓的下载地址,从代码服务器读取目标代码文件,并下载目标代码文件所属的代码仓至本地存储器;目标代码文件为第一分支的分支目录对应的所有代码文件中的任一个。
15.基于上述方案,搜索服务器其可以以最快的速度读取到第一分支对应的所有代码文件以方便以读取结果作为建立分支索引的依据。同时可以不重复的下载第一分支对应的所有代码仓。从而会后续建立代码搜索系统提供数据支持。
16.在第一方面的一种可能的设计方式中,搜索服务器根据第二分支的分支目录对应的代码文件中除第一代码文件以外的所有第二代码文件的特征参数、所有第二代码文件所属代码仓的名称、所有第二代码文件所属代码仓的最新提交点和所有第二代码文件所属代码仓的下载地址,从代码服务器读取所有第二代码文件,并下载所有第二代码文件所属的代码仓,包括:
17.搜索服务器从本地依次读取所有第二代码文件;在搜索服务器无法从本地存储器中读取到第四代码文件的情况下,搜索服务器根据第四代码文件的特征参数、第四代码文件所属代码仓的名称、第四代码文件所属代码仓的最新提交点和第四代码文件所属代码仓的下载地址,从代码服务器读取第四代码文件,并下载第四代码文件所属的代码仓;第四代码文件为所有第二代码文件中的任一个。
18.基于上述方案,搜索服务器可以在读取第二分支目录中不属于之前针对第一分支下载的代码仓的第二代码文件时,可以快速从代码服务器中读取,并下载相应的代码仓。从而会后续建立第二分支的分支索引和代码搜索系统提供数据支持。进一步的,因为上述方案中,搜索服务器仅会下载之前针对第一分支下载的代码仓以外的代码仓,所以也就避免了现有技术中,因为第一分支和第二分支对应的代码文件存在重复导致的重复下载同一代
码文件的缺陷。
19.在第一方面的一种可能的设计方式中,该方法还包括:搜索服务器每隔预设时长从代码服务器获取对应所述目标分支的所有代码仓,并使用最新获取的对应所述目标分支的所有代码仓更新搜索服务器存储的对应所述目标分支对应所有代码仓。
20.基于上述方案,搜索服务器在本地存储的代码仓的内容可以及时和代码服务器中的相同代码仓同步,保证了用户在搜索代码时的准确性。
21.在第一方面的一种可能的设计方式中,生成代码搜索系统之后,方法还包括:
22.搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索与关键词匹配的第三代码文件;搜索服务器向开发客户端发送第三代码文件。
23.基于上述方案,搜索服务器可以利用前述实施例中生成的分支索引和分支目录,顺利的找到用户需要的代码文件。
24.在第一方面的一种可能的设计方式中,搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索对应关键词的第三代码文件,包括:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引,确定与搜索指令携带的关键词匹配的第三代码文件在分支目录中的目标位置;搜索服务器利用分支目录和目标位置,从本地搜索第三代码文件。
25.基于上述方案,因为搜索服务器在针对搜索指令,搜索对应的代码文件时,是通过分支索引确定代码文件在分支目录中的对应位置,之后根据分支目录获取代码文件的。而分支目录是根据分支对应的多个代码仓的目录树信息和相对路径生成的,所以某个分支的分支目录与本搜索服务器本地存储的所有代码仓中,与该分支相关的代码仓中的所有代码文件是存在关联的,可以使得搜索服务器在知晓开发人员需要搜索的代码文件在分支目录中的对应位置时,可以利用该分支目录顺利的获取代码文件。进而,即便搜索服务器同时接受到针对不同分支的多个搜索指令时,因为每个分支都有对应的分支目录可以从代码仓中获取代码文件,所以也就不会因为搜索指令对应的分支的不同,使得某个代码仓的工作空间频繁切换,降低搜索效率。
26.在第一方面的一种可能的设计方式中,搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索与关键词匹配的第三代码文件,包括:搜索服务器响应于来自开发客户端的搜索指令,在搜索指令携带的分支标记对应的分支为第二分支的情况下,若根据第二分支的分支索引和第二分支的分支目录,确定搜索指令携带的关键词对应的第三代码文件为第二代码仓中的代码文件,则从第二代码仓中获取第三代码文件;第二代码仓为已建分支的所有代码文件所属的代码仓中任一个代码仓。
27.基于上述方案,本技术实施例提供的技术方案生成的代码搜索系统可以使得搜索服务器,在搜索某个代码文件时,不管该代码文件所属的代码仓是之前针对哪一个分支索引建立时下载的,都可以顺利获取。
28.第二方面,本技术提供一种代码搜索方法,应用于搜索服务器,搜索服务器中设置有如第一方面提供的代码搜索系统生成方法生成的代码搜索系统。该代码搜索方法包括:
搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索对应关键词的第三代码文件;搜索服务器向开发客户端发送第三代码文件。
29.基于上述方案,搜索服务器可以利用前述实施例中生成的分支索引和分支目录,顺利的找到用户需要的代码文件。
30.第二方面一种可能的设计方式中,搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索与关键词匹配的第三代码文件,包括:
31.搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引,确定与搜索指令携带的关键词匹配的第三代码文件在分支目录中的目标位置;搜索服务器利用分支目录和目标位置,从本地搜索第三代码文件。
32.基于上述方案,因为搜索服务器在针对搜索指令,搜索对应的代码文件时,是通过分支索引确定代码文件在分支目录中的对应位置,之后根据分支目录获取代码文件的。而分支目录是根据分支对应的多个代码仓的目录树信息和相对路径生成的,所以某个分支的分支目录与本搜索服务器本地存储的所有代码仓中,与该分支相关的代码仓中的所有代码文件是存在关联的,可以使得搜索服务器在知晓开发人员需要搜索的代码文件在分支目录中的对应位置时,可以利用该分支目录顺利的获取代码文件。进而,即便搜索服务器同时接受到针对不同分支的多个搜索指令时,因为每个分支都有对应的分支目录可以从代码仓中获取代码文件,所以也就不会因为搜索指令对应的分支的不同,使得某个代码仓的工作空间频繁切换,降低搜索效率。
33.第三方面,本技术提供一种搜索服务器,该搜索服务器包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行指令,使得搜索服务器执行如下步骤:
34.搜索服务器从代码服务器获取目标代码中至少一个目标分支的代码仓的特征信息和目录树信息;特征信息包括:名称、相对路径、最新提交点和下载地址;目标分支的目标代码仓的最新提交点为目标分支在目标代码仓中提交代码文件的所有提交点中最新的一个;目标代码仓为目标分支的所有代码仓中的任一个;目录树信息至少包括目录树信息所属代码仓中的代码文件的特征参数;特征参数用于指示特征参数所属的代码文件;
35.搜索服务器根据目标分支的代码仓的相对路径和目录树信息,生成目标分支的分支目录;分支目录至少包括目标分支包括的代码仓的相对路径,以及目标分支对应的代码仓中的代码文件的特征参数;
36.在搜索服务器中未存储有目标代码的任一代码文件的情况下,搜索服务器根据第一分支的代码仓的名称和下载地址,从代码服务器下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件;第一分支为至少一个目标分支中的任一个目标分支;
37.搜索服务器根据第一分支的所有代码文件、第一分支的分支目录和第一分支的所有代码文件的存储地址,生成第一分支的分支索引;分支索引至少用于指示分支索引所属的分支对应的任意代码文件在分支索引对应的分支目录中的位置;
38.在搜索服务器中存储有已建分支的所有代码文件所属的代码仓的情况下,搜索服
务器从本地依次读取第二分支的分支目录对应的代码文件中的所有第一代码文件;已建分支为已生成有分支索引的目标分支;第二分支为至少一个目标分支中除已建分支以外的任一个目标分支;第一代码文件是已建分支的所有代码文件所属的代码仓中的代码文件;
39.搜索服务器根据第二分支的分支目录对应的代码文件中除第一代码文件以外的所有第二代码文件的特征参数、所有第二代码文件所属代码仓的名称、所有第二代码文件所属代码仓的最新提交点和所有第二代码文件所属代码仓的下载地址,从代码服务器读取所有第二代码文件,并下载所有第二代码文件所属的代码仓;
40.搜索服务器根据第二分支的分支目录、第二分支的所有代码文件和第二分支的所有代码文件的存储地址,生成第二分支的分支索引;
41.搜索服务器根据至少一个目标分支的分支目录、至少一个目标分支的分支索引以及搜索服务器下载的对应至少一个目标分支的所有代码仓,生成代码搜索系统。
42.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器从代码服务器获取至少一个分支的manifest文件和至少一个分支的代码仓的目录树信息;搜索服务器解析至少一个目标分支的manifest文件,以获取至少一个目标分支的代码仓的特征信息。
43.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器从本地依次读取第一分支的分支目录对应的每个代码文件;第一分支为至少一个分支中的一个分支;在搜索服务器无法从本地读取到目标代码文件的情况下,搜索服务器根据目标代码文件的特征参数、目标代码文件所属代码仓的名称、目标代码文件所属代码仓的最新提交点和目标代码文件所属代码仓的下载地址,从代码服务器读取目标代码文件,并下载目标代码文件所属的代码仓至本地存储器;目标代码文件为第一分支的分支目录对应的所有代码文件中的任一个。
44.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器从本地依次读取所有第二代码文件;在搜索服务器无法从本地存储器中读取到第四代码文件的情况下,搜索服务器根据第四代码文件的特征参数、第四代码文件所属代码仓的名称、第四代码文件所属代码仓的最新提交点和第四代码文件所属代码仓的下载地址,从代码服务器读取第四代码文件,并下载第四代码文件所属的代码仓;第四代码文件为所有第二代码文件中的任一个。
45.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器还执行如下步骤:搜索服务器每隔预设时长从代码服务器获取对应所述目标分支的所有代码仓,并使用最新获取的对应所述目标分支的所有代码仓更新搜索服务器存储的对应所述目标分支对应所有代码仓。
46.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器在生成代码搜索系统之后,还执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索与关键词匹配的第三代码文件;搜索服务器向开发客户端发送第三代码文件。
47.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带
的分支标记对应的分支的分支索引,确定与搜索指令携带的关键词匹配的第三代码文件在分支目录中的目标位置;搜索服务器利用分支目录和目标位置,从本地搜索第三代码文件。
48.在第三方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:
49.搜索服务器响应于来自开发客户端的搜索指令,在搜索指令携带的分支标记对应的分支为第二分支的情况下,若根据第二分支的分支索引和第二分支的分支目录,确定搜索指令携带的关键词对应的第三代码文件为第二代码仓中的代码文件,则从第二代码仓中获取第三代码文件;第二代码仓为已建分支的所有代码文件所属的代码仓中任一个代码仓。
50.第四方面,本技术提供一种搜索服务器,搜索服务器中设置有如第一方面提供的代码搜索系统生成方法生成的代码搜索系统。该搜索服务器包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行指令,使得搜索服务器执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索对应关键词的第三代码文件;搜索服务器向开发客户端发送第三代码文件。
51.在第四方面的一种可能的设计方式中,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引,确定与搜索指令携带的关键词匹配的第三代码文件在分支目录中的目标位置;搜索服务器利用分支目录和目标位置,从本地搜索第三代码文件。
52.第五方面,本技术提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在搜索服务器上运行时,使得搜索服务器执行如第一方面及其任一种可能的设计方式提供的代码搜索系统生成方法,或者如第二方面及其任一种可能的设计方式提供的代码搜索方法。
53.第六方面,本技术提供一种计算机程序产品,当计算机程序产品在搜索服务器上运行时,使得搜索服务器执行如第一方面及其任一种可能的设计方式提供的代码搜索系统生成方法,或者如第二方面及其任一种可能的设计方式提供的代码搜索方法。
54.可以理解地,上述提供的第三方面及其任一种可能的设计方式所述的搜索服务器所能达到的有益效果,可参考第一方面及其任一种可能的设计方式中的有益效果,此处不再赘述。第四方面及其任一种可能的设计方式所述的搜索服务器所能达到的有益效果,可参考第二方面及其任一种可能的设计方式中的有益效果,此处不再赘述。第五方面提供的计算机存储介质,第六方面提供的计算机程序产品所能达到的有益效果,可参考第一方面及其任一种可能的设计方式中的有益效果,以及第二方面及其任一种可能的设计方式中的有益效果,此处不再赘述。
附图说明
55.图1为本技术实施例提供的一种代码搜索系统的结构示意图;
56.图2为本技术实施例提供的一种开发客户端的结构示意图;
57.图3为本技术实施例提供的一种搜索服务器的结构示意图;
58.图4为现有技术提供的一种代码搜索方案的原理示意图;
59.图5为本技术实施例提供的一种代码仓的不同分支提交过程示意图;
60.图6为本技术实施例提供的一种代码搜索服务的登录界面示意图;
61.图7为本技术实施例提供的一种代码搜索场景示意图;
62.图8为本技术实施例提供的一种分支搜索界面示意图;
63.图9为本技术实施例提供的一种代码搜索方法的原理示意图;
64.图10为本技术实施例提供的一种分支目录的示意图;
65.图11为本技术实施例提供的一种生成分支目录的原理示意图;
66.图12为本技术实施例提供的一种生成分支索引的原理示意图;
67.图13为本技术实施例提供的一种代码搜索方法的流程示意图;
68.图14为本技术实施例提供的另一种代码搜索方法的流程示意图;
69.图15为本技术实施例提供的一种代码搜索的过程示意图;
70.图16为本技术实施例提供的又一种代码搜索方法的流程示意图;
71.图17为本技术实施例提供的另一种搜索服务器的结构示意图。
具体实施方式
72.以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
73.首先,对本技术中涉及的相关技术术语进行介绍:
74.用户空间文件系统(filesystem in userspace,fuse)是一个面向类unix计算机操作系统(相当于linux计算机操作系统)的软件接口,它使无特权的用户能够无需编辑内核代码而创建自己的文件系统。fuse可以被用来创建文件系统,例如本技术中各分支的目录树组成的文件系统。
75.索引:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。在本技术中,某个分支的分支索引为根据该分支的所有代码文件及其存储地址,以及该分支的分支目录生成的,能够反映不同的关键词对应的代码文件在该分支的分支目录中的对应位置(即该代码的名称在该分支目录中的位置)。
76.repo:repo是google用python脚本写的用于调用git的一个脚本,主要是用来下载、管理android项目的软件仓库。也就是说,repo用来管理一个个git仓库(即本技术中提到的代码仓),可以简化android开发中git的使用。
77.git:git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。git与常用的版本控制工具代码版本控制软件(concurrent version system,cvs)、时间机器(subversion,svn)等不同,它采用了分布式版本库的方式,不必服务器端软件支持。本技术实施例中的所有代码仓均为git管理的代码仓,即git仓。
78.git仓(即本技术中的代码仓):git仓用于管理开发人员针对至少一个分支提交的代码文件。其中,会设置有针对每个分支的代码文件在每次开发人员提交时间的提交点,每
个分支的每个提交点对应的代码文件是开发人员针对该分支在该提交点所有代码文件(即该提交点及其之前所有提交点提交的所有代码文件)。git仓的工作空间是一个分支的一个提交点(一般为最新的提交点,即本技术中的最新提交点)对应的代码文件,即git仓在同一时间只能向外展示一个分支的一个提交点对应的代码文件。如果需要展示其他分支的其他提交点对应的代码文件,需要使用特定函数切换。git仓的具体实例,可以参照后续图5对应的相关表述。不同分支的提交点不同。
79.gerrit:gerrit是一个基于git的web代码评审工具。gerrit旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅。gerrit会记录每一次提交的代码修改,但只有它们被审阅和接收后才能合入成为项目的一部分。
80.gitiles:是一个基于jgit的简单的git仓库浏览器。
81.manifest:android项目工程的第一步就是通过repo将所有的源代码source code信息获取并最终成功下载fetch到本地,而git的管理就是通过manifest.xml进行的。以本技术中的安卓分支为例,其manifest文件(即manifest.xml文件)可以包括有该安卓分支对应的所有代码仓的特征信息(名称、相对路径、提交点/版本号、下载地址)。
82.二进制大对象:即binary large object,简称为blob,是一个可以存储二进制文件的容器。在计算机中,blob常常是数据库中用来存储二进制文件的字段类型。
83.对于大型网站或某些操作系统而言,其代码量非常大。为了方便管理,这些大型网站或操作系统的厂商会将对应的代码按照功能的不同分为不同的代码仓,供开发人员使用。每个代码仓中的代码文件都是开发人员针对某种用户需求开发出的,不同代码仓中的部分或全部代码文件会对应同一用户需求。为了方便开发,实际中会针对对应同一需求的代码文件建立一个分支,后续用户在开发时便可以在该分支上方便的对不同代码仓中属于该分支的代码文件进行修改或补充。针对一个代码仓,不同的开发人员可能会在不同分支对该代码仓中的内容进行修改或补充,所以一个代码仓中同一名称的代码文件中的内容在不同分支中存在不同内容,为了体现这一点并且方便开发人员调用,目前会采用git技术生成并管理代码仓(即git仓)。
84.为了方便开发人员快速找到大型网站或某些操作系统的所有代码中需要查看的目标代码,目前会设计有代码搜索方案供开发人员对大量代码中的目标代码进行搜索、下载并查看。现有的代码搜索方案中,会在对应每个分支下载对应该分支的所有代码仓后,生成对应每个分支的分支索引。之后该代搜索系统则可以根据用户的搜索需求,利用分支索引查找到对应该搜索需求的代码文件提供给用户查看。
85.参照图1所示,为一种代码搜索系统的架构示意图,现有的代码搜索方案可以应用在该代码搜索系统中。该系统中可以包括有开发客户端01、搜索服务器02和代码服务器03。图1中以开发客户端01

1和01

2作为开发客户端01的实例,实际中可以更多或更少,本技术对此不做具体限制。其中,开发客户端01和搜索服务器02之间通过有线或无线通讯方式进行通信,搜索服务器02和代码服务器03之间通过有线或无线通讯方式进行通信。
86.其中,开发客户端01主要用于供开发人员登录搜索服务器02中的搜索服务或搜索应用,进而进行代码搜索。搜索服务器02主要用于从代码服务器03中获取多个分支的代码文件,并针对每个分支生成分支索引,以供后续在接收到开发客户端01发送的搜索请求时,根据分支索引查找对应的代码文件并返回给开发客户端01。
87.本技术中,开发客户端01可以是手机、平板电脑、超级移动个人计算机(ultra

mobile personal computer,umpc)、上网本、台式电脑、笔记本电脑、小型笔记本电脑、超级本(ultrabook)、个人数字助理(personal digital assistant,pda)等能够供用户搜索并查看代码的设备。本技术对该开发客户端的具体形态不做特殊限制。
88.示例性的,参照图2所示,该开发客户端01可以包括处理器11、存储器12、显示屏13、wi

fi装置14、蓝牙装置15、音频电路16、麦克风16a、扬声器16b、电源系统17、外设接口18、传感器模块19等部件。这些部件可通过一根或多根通信总线或信号线(图2中未示出)进行通信。本领域技术人员可以理解,图2中示出的硬件结构并不构成对开发客户端01的限定,开发客户端01可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
89.其中,处理器11是开发客户端01的控制中心,利用各种接口和线路连接开发客户端01的各个部分,通过运行或执行存储在存储器12内的应用程序,以及调用存储在存储器12内的数据和指令,执行开发客户端01的各种功能和处理数据。在一些实施例中,处理器11可包括一个或多个处理单元;处理器11还可以集成应用处理器和调制解调处理器;其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器11中。
90.在本技术其他一些实施例中,上述处理器11还可以包括ai芯片。ai芯片的学习和处理能力包括图像理解能力、自然语言理解能力和语音识别能力等。ai芯片可以使得开发客户端01具有更好的性能、更长的续航时间以及更好的安全性和隐私性。例如,若开发客户端01通过云端处理数据则需要数据上传处理后再返回结果,在现有技术条件下效率很低。若开发客户端01本地端具有较强的ai学习能力,那么开发客户端01就不需要把数据上传到云端,直接在本地端处理即可,因而可以在提高处理效率的同时,提高数据的安全性和隐私性。
91.存储器12用于存储应用程序以及数据,处理器11通过运行存储在存储器12的应用程序以及数据,执行开发客户端01的各种功能以及数据处理。存储器12主要包括存储程序区以及存储数据区。其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等);存储数据区可以存储使用开发客户端01时所创建的数据(比如音频数据、视频数据等)。此外,存储器12可以包括高速随机存取存储器,还可以包括非易失存储器,例如磁盘存储器件、闪存器件或其他非易失性固态存储器件等。存储器12可以存储各种操作系统,例如苹果公司所开发的操作系统,微软公司所开发的操作系统等。
92.显示屏13用于显示图像,视频等。该显示屏可以是触摸屏。在一些实施例中,开发客户端01可以包括1个或n个显示屏13,n为大于1的正整数。开发客户端01通过gpu,显示屏194,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏13和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器11可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。
93.wi

fi装置14,用于为开发客户端01提供遵循wi

fi相关标准协议的网络接入。开发客户端01可以通过wi

fi装置14接入到wi

fi接入点,进而帮助用户收发电子邮件、浏览网页和访问流媒体等,它为用户提供了无线的宽带互联网访问。开发客户端01还可以通过
wi

fi装置和wi

fi接入点与连接到该wi

fi接入点的终端设备建立wi

fi连接,用于相互传输数据。在其他一些实施例中,该wi

fi装置14也可以作为wi

fi无线接入点,可以为其他电子设备提供wi

fi网络接入。
94.蓝牙装置15,用于实现开发客户端01与其他短距离的电子设备(例如终端、智能手表等)之间的数据交换。本技术实施例中的蓝牙装置可以是集成电路或者蓝牙芯片等。
95.音频电路16、扬声器16b、麦克风16a可提供用户与开发客户端01之间的音频接口。音频电路16可将接收到的音频数据转换后的电信号,传输到扬声器16b,由扬声器16b换为声音信号输出;另一方面,麦克风16a将收集的声音信号转换为电信号,由音频电路16接收后转换为音频数据,再通过互联网或者wi

fi网络或者蓝牙将音频数据发送给终端,或者将音频数据输出至存储器12以便进一步处理。
96.电源系统17用于给开发客户端01的各个部件充电。电源系统17可以包括有电池和电源管理模块,电池可以通过电源管理芯片与处理器11逻辑相连,从而通过电源系统17实现管理充电、放电、以及功耗管理等功能。
97.外设接口18,用于为外部的输入/输出设备(例如键盘、鼠标、外接显示器、外部存储器、用户识别模块卡等)提供各种接口。例如通过通用串行总线接口与鼠标连接,实现接收用户通过鼠标实施的相关操作的目的。又例如,通过外部存储器接口与外部存储器连接,例如micro sd卡,实现扩展开发客户端01的存储能力。外设接口110可以被用来将上述外部的输入/输出外围设备耦接到处理器11和存储器12。
98.传感器模块19可以包括至少一种传感器。例如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器。其中,环境光传感器可根据环境光线的明暗来调节显示屏13的亮度。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别个人计算机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等。当然,根据实际需求,传感器模块还可以包括其他任意可行的传感器。
99.尽管图2未示出,开发客户端01还可以包括摄像头,例如前置摄像头、后置摄像头,其中,前置摄像头可以用于捕捉人脸特征信息,处理器11可以对该人脸特征信息进行人脸识别,进而进行后续处理。开发客户端01还可以包括闪光灯、微型投影装置、近场通信(near field communication,nfc)装置等,在此不予赘述。
100.本技术中,搜索服务器02可以是一台服务器,也可以为由多台服务器组合构成的服务器集群,还可以为一个云计算服务中心,具体根据实际而定,本技术不做具体限制。现有的代码搜索方案中,以开发人员需要搜索安卓
tm
系统的某些代码为例,搜索服务器02中主要用于从代码服务器03中下载所有分支的代码文件,并建立相应的索引,供后续开发客户端01向搜索服务器请求代码文件时使用。
101.一种可实现的方式中,参照图3所示,在搜索服务器02为一台服务器时,搜索服务器02可以包括存储器21和处理器22;存储器21用于存储处理器22可执行的计算机执行指令。处理器22与存储器21通过总线23连接。
102.在具体的实现中,作为一种实施例,处理器22(22

1和22

2)可以包括一个或多个cpu,例如图3中所示的cpu0和cpu1。且作为一种实施例,搜索服务器02可以包括多个处理器22,例如图3中所示的处理器22

1和处理器22

2。这些处理器22中的每一个cpu可以是一个
单核处理器(single

cpu),也可以是一个多核处理器(multi

cpu)。这里的处理器22可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
103.存储器21可以是只读存储器21(read

only memory,rom)或可存储静态信息和指令的其他类型的静态存储设备,可以是高速缓冲存储器,可以是随机存取存储器(random access memory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read

only memory,eeprom)、只读光盘(compact disc read

only memory,cd

rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器21可以是独立存在,通过总线23与处理器22相连接。存储器21也可以和处理器22集成在一起。
104.在具体的实现中,存储器21,用于存储本技术中的数据(从代码服务器中获取的代码文件)和执行本技术的软件程序对应的计算机执行指令。处理器22可以通过运行或执行存储在存储器21内的软件程序,以及调用存储在存储器21内的数据,实现搜索服务器02的各种功能。
105.可选的,参照图3所示,该搜索服务器02还包括:通信接口24,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如控制系统、无线接入网(radio access network,ran),无线局域网(wireless local area networks,wlan)等。通信接口24可以包括接收单元实现接收功能,以及发送单元实现发送功能。
106.总线23,可以是工业标准体系结构(industry standard architecture,isa)总线、外部设备互连(peripheral component interconnect,pci)总线或扩展工业标准体系结构(extended industry standard architecture,eisa)总线等。该总线23可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
107.本技术中,代码服务器03可以是一台服务器,也可以为由多台服务器组合构成的服务器集群,还可以为一个云计算服务中心,具体根据实际而定,本技术不做具体限制。本技术中,代码服务器02中主要用于使用git技术存储开发人员需要查找的所有代码文件,并在接收到搜索服务器02的下载指令或获取指令时,将对应的代码文件发送给搜索服务器02存储。代码服务器03的具体结果可参照前述搜索服务器02的结构,此处不再赘述。
108.另外,需要说明的是,若开发客户端01的存储能力足够强大,或者开发客户端01需要搜索查看的代码文件较少,则实际中还可以不存在搜索服务器02,搜索服务器02的所有功能集成在开发客户端上即可。
109.图4为现有的代码搜索方案的原理示意图。首先,搜索服务器02从代码服务器03下载针对每个分支的代码文件。示例性的,参照图4所示,以代码服务器03中总共存储有三个代码仓为例,针对分支1而言,搜索服务器02需要从每个代码仓中下载分支1对应的代码文件(具体包括代码仓1分支1部分、代码仓2分支1部分和代码仓3分支1部分)。针对分支2而言,搜索服务器需要从每个代码仓中下载分支2对应的代码文件(具体包括代码仓1分支2部分、代码仓2分支2部分和代码仓3分支2部分)。针对分支m而言,搜索服务器需要下载每个代码仓对应分支m的部分(具体包括代码仓1分支m部分、代码仓2分支m部分和代码仓3分支m部
分)。图4中是以每个代码仓都存在所有分支的一部分代码文件为例进行展示的,实际中可以是一个代码仓中仅存在部分分支的一部分代码文件。例如,代码仓1中可以仅存在有分支1和分支2的代码文件,即代码仓1中包括有代码仓1分支1部分和代码仓1分支2部分。
110.需要说明的是,这里的代码仓x分支y部分指:分支y最新一次提交代码后,代码仓x中分支y对应的代码文件。其中,代码仓x可以为前述的代码仓1或代码仓2或代码仓3,分支y可以为分支1或分支2或分支3。
111.示例性的,图5为某个代码仓的不同分支的提交过程示意图。图5所示的c0、c1、c2、c3和c4用于表示分支提交代码的提交点(即提交代码的时间)。其中,分支1、分支2和分支3,均从c0开始提交代码。该代码仓中分支1的代码文件为依次在c0、c1和c2三个提交点提交代码后,该代码仓中分支1的代码文件。换言之,该代码仓中分支1的代码文件为在c2提交点提交代码后,该代码仓中分支1的代码文件。
112.该代码仓中分支2的代码文件为依次在c0、c1、c2和c4四个提交点提交代码后,该代码仓中分支2的代码文件。换言之,该代码仓中分支1的代码文件为在c4提交点提交代码后,该代码仓中分支2的代码文件。
113.该代码仓中分支3的代码文件为依次在c0、c1、c2和c3四个提交点提交代码后,该代码仓中分支3的代码文件。换言之,该代码仓中分支1的代码文件为在c3提交点提交代码后,该代码仓中分支3的代码文件。
114.其中,分支1对应的最新提交点为c2,分支2对应的最新提交点为c4,分支3对应的最新提交点为c3。
115.之后,搜索服务器02则可以根据不同分支的代码文件及其存储地址,生成该分支的分支索引。例如,针对分支1生成分支索引1,针对分支2生成分支索引2,针对分支m生成分支索引m。如此,设置在搜索服务器中的搜索服务/应用便设立完成。
116.之后,开发人员可以通过开发客户端01登录搜索服务器中的代码搜索应用/服务。例如可以通过浏览输入搜索服务器对应网站的网址后,在登录界面上登录代码搜索应用/服务。之后开发客户端可以在响应于开发人员对某个分支的分支索引(分支索引1、分支索引2、

分支索引m中的任一个)的选择操作,从搜索服务器02处获取对应的代码文件显示。
117.示例性的,以该代码搜索方法用于搜索安卓系统的代码为例,开发客户端01上的登录界面如图6所示。在开发人员输入合法账号和密码后,开发客户端便可以登录代码搜索应用/服务。登录成功后,参照图7所示,开发客户端01可以显示搜索服务器02提供的搜索界面71。具体的,该搜索界面71中,可以包括有hxxx x.x、mx9xxx x.x、mxx5 x.x、mxx6xxxx.x、mxxx7xxx.x和sxxxx.x等分支的选择控件(即图7所示的有下划线的分支名),不同的搜索方式对应的输入框(全文搜索(full search)、定义(definition)、符号(symbol)、文件路径(file path)、历史(history)、类型(type)等),以及针对所有分支的项目列表。项目列表中则包括有每个分支的编号、分支名和下载地址等。
118.之后,参照图7所示,开发客户端01可以响应于开发人员对某个分支(例如mx9xxx x.x)的选择控件的点击操作,向搜索服务器02请求mx9xxx x.x这一分支的目录树。然后,开发客户端01接收并显示搜索服务器02发送的mx9xxx x.x这一分支的目录树。具体显示界面参照图8所示,其中,该界面包括有mx9xxx x.x这一分支包括的各个代码仓的名称、日期(相当于其对应mx9xxx x.x这一分支的最新提交点的时间)和大小。每个代码仓的名称则同时
可以作为索引控件供用户触发。
119.针对一个分支,代码仓中可能有一个或多个代码文件。在代码仓中只有一个代码文件的情况下,可以直接显示对应该代码文件的一类控件。如图8所示的“android.bp”、“bootstrap.bash”、“build.sh”等。在代码仓中有多个代码文件的情况下,可以显示对应该代码仓的二类控件。如图8所示的“art/”、“binary/”、“bionic/”、“cts/”、“system/”等。
120.参照图8所示,一类控件和二类控件的可以根据其旁边的图标来进行区分,例如一类控件“android.bp”、“bootstrap.bash”、“build.sh”等旁边的图标一致为图标1,二类控件“art/”、“binary/”、“bionic/”、“cts/”、“system/”等旁边的图标一致为图标2,图标1和图标2不同。
121.开发客户端01可以响应于开发人员对一类控件(例如图8中的“android.bp”)的触发操作(例如点击、双击、长按等),可以向搜索服务器02请求对应该一类控件的代码文件。搜索服务器02在接收到搜索服务器的请求某一类控件的代码文件的请求后,可以根据该一类控件对应的代码仓的名字(例如android.bp)以及该一类控件对应的分支(例如mx9xxx x.x)的分支索引,查找对应的代码文件并向开发客户端01发送查找到的代码文件。开发客户端01可以在接收到搜索服务器发送的代码文件后显示该代码文件。
122.开发客户端01还可以响应于开发人员对二类控件(例如图8中的“art/”)的触发操作(例如点击、双击、长按等),向搜索服务器02请求该二类控件所述代码仓的所有代码文件的一类控件(即名称)并显示(具体如何显示,可根据实际而定,此处不做具体限制)。之后,开发客户端01则可以响应于用户对该二类控件对应的一类控件的触发操作,向搜索服务器02请求到对应代码文件内容后显示(具体实施可参照前述开发人员触发一类控件的相关表述)。
123.为了方便开发人员搜索需要代码文件,如图8所示,开发客户端01接收并显示搜索服务器02发送的mx9xxx x.x这一分支的分支索引的显示界面中还可以包括有搜索框81,以及查找控件82。在用户需要搜索某个代码文件时,可以在该搜索框81中输入关键词后点击查找控件82。之后,开发客户端01可以响应于用户对查找控件82的点击,向搜索服务器02请求与搜索框81中的关键词相关的代码文件,并在接收到搜索服务器02发送的代码文件后显示。
124.另外,因为用户需要的代码文件有可能不在开发客户端当前显示的内容对应的分支中,所以为了方便用户的查找,如图8所示,开发客户端01接收并显示搜索服务器02发送的mx9xxx x.x这一分支的分支索引的显示界面中,还可以包括定选控件83,该控件的附件有类似“仅在此目录中”的说明字样。示例性的,如图8所示,定选控件83的初始状态为空白的方框,在用户触发选定该定选控件83时,定选控件83变为中间存在对号的方框。开发客户端可以响应于用于对定选控件83的触发选定,之后仅向搜索服务器02请求mx9xxx x.x这一分支中匹配用户选择(关键词或者对某个代码文件的索引控件的触发操作)的代码文件。
125.基于前述方案可以看出,现有的代码搜索方案中,针对每个分支,均需要下载其所有的代码文件。而由于不同的分支对应的代码文件时存在一定重复的,所有这样会对承载搜索服务的搜索服务器的存储资源造成极大浪费,利用率不高。
126.针对这一问题,基于图1所示的代码搜索系统,本技术实施例提供一种代码搜索方法,其原理参照图9所示。搜索服务器02可以从代码服务器03下载需要搜索的目标代码(例
如安卓系统的代码)的所有代码仓(例如代码仓1、代码仓2和代码仓3)。这里,下载一个代码仓具体指下载当前时刻该代码仓中的所有代码文件。
127.实际中代码仓是使用git管理的,该代码仓的工作空间只对应一个分支的一个提交点(一般为最新提交点)的代码文件(即在一个时刻仅能展示一个分支的一个提交点的代码文件),如果需要展示另一分支最新提交点的代码文件,则需要进行提交点(或版本号)的切换。而且,如果有两个针对不同分支的分支索引从该代码仓中获取数据展示,该代码仓将无法同时展示不同的目录树给开发人员查看使用。直接使用代码仓中的所有代码文件建立全文索引是最简单的索引建立方式。但是,对于一个代码仓而言,如果两个开发人员需要搜索该代码仓中属于不同的两个分支的代码文件,且这两个分支存在相同名称但内容略有区别的代码文件,那么因为同一目录中不可能存在两个相同文件名的代码文件,此时搜索服务器将无法给这两个开发人员展示代码文件目录,整个代码搜索过程也将无法顺利进行。因而,如果直接使用代码仓中的所有代码文件建立索引,则无法完成正常的数据搜索。
128.因此,搜索服务器02还可以利用fuse技术构建出对应每个分支的分支目录,每个分支目录都与该分支对应的代码文件关联,该分支对应的代码文件处于至少一个代码仓中,进而每个分支目录都关联有至少一个代码仓。因为分支目录是利用了代码仓中真实的文件虚拟得出的,且与其所属分支的代码文件关联,所以其可以作为后续搜索服务器02发送给开发客户端供用户查看的目录使用。而且,后续搜索服务器02在需要同时获取代码文件时,也可以借助该分支目录与快速的从代码仓中获取到对应的代码文件。
129.示例性的,目标分支的分支目录具体可以如图10所示。其中,若某个代码仓对应该目标分支包括有多个代码文件(如代码仓1和代码仓2),则该分支目录中除了可以存在有用该代码仓的路径指代该代码仓以外,还可以存在子目录用于展示该代码仓中的代码文件(例如代码仓2的子目录中包括有代码文件2.1的名称和代码文件2.2的名称)。若某个代码仓对应该目标分支仅有一个代码文件(如代码仓3和代码仓4),则该分支目录中可以存在有用该代码仓的路径指代该代码仓中的唯一文件。
130.示例性的,搜索服务器02生成目标分支的分支目录的具体原理如图11所示。具体包括s101

s104步骤。
131.s101、搜索服务器02获取目标分支的mainfest文件。
132.s102、搜索服务器02获取目标分支的代码仓的目录树信息。
133.其中代码仓的目录树信息用于表达或展示代码仓中有哪些代码文件。
134.具体的,s101和s102步骤中,搜索服务器02可以借助代码服务器03中的gerrit和gitiles,下载目标分支的mainfest文件,并获取目标分支对应的代码仓的目录树信息。其中搜索服务器02需要使用repo下载目标分支的mainfest文件。
135.s103、搜索服务器02解析目标分支的manifest文件,获取目标分支对应的代码仓的特征信息。
136.其中,特征信息可以包括:名称、相对路径、最新提交点(或者版本号)和下载地址(或者克隆地址)。其中,相对路径为代码服务器03规定该代码仓在被下载时的路径,例如\代码仓a。目标分支的目标代码仓的最新提交点为目标分支在目标代码仓中提交代码文件的所有提交点中最新的一个,目标代码仓为目标分支的所有代码仓中的任一个。以代码仓为图5对应的代码仓,当前时刻为图5最新提交点的时刻为例,若目标分支为分支2,则图5对
应的代码仓的最新提交点为c4(具体可以为c4对应的时刻)。
137.s104、搜索服务器02利用fuse,根据目标分支对应的代码仓的路径和目标分支的目录树信息,生成目标分支的分支目录。
138.之后,搜索服务器02可以根据每个分支的分支目录以及其对应代码文件,生成对应的分支索引。例如图9中的分支索引1

分支索引n。之后,搜索服务器02在接收到开发客户端01的搜索指令后,便可以利用分支索引和搜索指令中的搜索信息(例如分支标记和关键词),确定搜索指令对应的代码文件所属的分支目录以及搜索指令对应的代码文件在分支目录中的位置。而后,搜索服务器02可以依据分支目录顺利从本地存储器中获取搜索指令对应的代码文件。
139.可以看出,因为分支目录是由真实的代码文件虚拟得出的,其可以关联至真实的代码文件,而根据分支目录和代码文件生成的分支索引由可以确定搜索信息对应的分支目录,所以在该代码搜索方法中,分支目录的存在可以使得仅下载一遍各个代码仓的所有代码文件(不存在重复代码文件),便可以生成合适的分支索引,完成后续的代码搜索过程。
140.示例性的,搜索服务器具生成某个分支的分支目录的具体原理如图12所示。具体包括s111

s113。
141.s111、搜索服务器02利用索引生成器依次读取目标分支的分支目录中的各个代码文件。
142.示例性的,本技术实施例中,索引生成器可以为lucence。该索引生成器可以配置在搜索服务器中。
143.具体的,在本地存储器不存在目标代码文件的情况下,此时搜索服务器利用索引生成器无法读取到目标代码文件,执行s112。其中,目标代码文件为目标分支的分支目录对应的所有代码文件中的任一代码文件。
144.在本地存储器存在目标代码文件的情况下,搜索服务器从本地存储器中正常读取目标代码文件。
145.s112、搜索服务器02可以根据目标代码文件的名称等特征参数,以及目标代码文件所属代码仓的名称、提交点和下载地址,从代码服务器03中获取该目标代码文件供索引生成器读取。
146.s113、搜索服务器下载/克隆目标代码文件所属的代码仓至本地存储器。
147.示例性的,图12中以目标代码文件所属的代码仓为代码仓a为例。另外,以代码仓为git技术生成为例,搜索服务器02可以使用git clone函数下载/克隆代码仓至本地存储器,进一步的,在代码搜索方案中,一般是不允许搜索者(即开发人员)修改代码的,所以这里的git clone函数具体可以为git clone—bare。
148.示例性的,如图12所示,本地存储器中可以以blob的方式存储代码仓中的代码文件。
149.进一步的,为了保证本地存储器中存储的代码仓(例如代码仓a)及时更新,在搜索服务器下载了代码仓后,可以使用特定函数(例如git fetch origin函数)定期将最新的代码仓a克隆至本地存储器以替代原先的代码仓a。
150.在搜索服务器02使用索引生成器读取到了目标分支的分支目录中的所有代码文件后,便可以使用索引生成器,根据读取结果(即目标分支的分支目录中的所有代码文件)
和目标分支的所有代码文件的存储地址,生成目标分支的分支索引。具体分支索引的生成方式,可以为任意可行方式,本技术不做具体限制。
151.之后,开发人员可以通过开发客户端登录搜索服务器中的代码搜索应用/服务。例如可以通过浏览输入搜索服务器对应网站的网址后,在登录界面上登录代码搜索应用/服务。之后开发客户端可以在响应于用户对某个分支的分支索引(分支索引1、分支索引2、

分支索引n中的任一个)的选择操作或者用户输入的关键词,向搜索服务器发送请求对应该选择操作或该关键词的代码文件的搜索指令。搜索服务器可以根据该搜索指令,结合对应的分支索引和分支目录,找到对应代码文件并向开发客户端发送,以使开发客户端显示该代码文件。
152.基于上述原理,参照图13所示,本技术实施例提供一种代码搜索方法,该方法可以应用于图1所示的代码搜索系统。如图13所示,该方法可以包括s121

s129:
153.s121、搜索服务器02从代码服务器03中获取目标代码中至少一个目标分支的代码仓的特征信息和目录树信息。
154.其中,目标代码为本技术提供的代码搜索方法针对的一套代码(例如安卓系统的所有代码)。实际中,为了更好的提供代码搜索服务,搜索服务器会获取目标代码的所有分支对应的代码仓的特征信息和目录树信息。目录树信息至少包括目录树信息所属代码仓中的代码文件的特征参数;特征参数用于指示特征参数所属的代码文件。例如,特征参数可以为代码文件的名称或者id。
155.特征信息可以包括:名称、相对路径、最新提交点(或者版本号)和下载地址(或者克隆地址)。其中,相对路径为代码服务器03规定该代码仓在被下载时的路径,例如\代码仓a。最新提交点为代码仓对应目标分支最新的提交点,以代码仓为图5对应的代码仓,当前时刻为图5中最新的时刻为例,若目标分支为分支2,则图5对应的代码仓的最新提交点为c4(具体可以为c4对应的时刻)。
156.一种可实现的方式中,以代码搜索方法用于搜索安卓系统的代码为例,参照图14所示,s121步骤具体可以包括s121a和s121b:
157.s121a、搜索服务器02从代码服务器03获取至少一个目标分支的manifest文件和目标分支对应的代码仓的目录树信息。
158.一种可实现的方式中,搜索服务器02具体可以利用repo下载目标分支的manifest文件。
159.s121b、搜索服务器02解析目标分支的mainfest文件,以获取目标分支对应的代码仓的特征信息。
160.基于此,因为安卓系统的代码仓在存储时都会存在有manifest文件,该文件中包含有代码仓的特征信息,所以基于上述方案,可以顺利获取到目标分支的代码仓的特征信息。
161.s122、搜索服务器02根据目标分支对应的代码仓的路径和目录树信息,生成目标分支的分支目录。
162.其中,分支目录至少包括目标分支包括的代码仓的相对路径,以及目标分支对应的代码仓中的代码文件的特征参数。特征参数用于指示代码文件,例如特征参数可以为代码文件的名称或者id等。
163.一种可实现的方式中,搜索服务器02可以根据目标分支对应的代码仓的路径和目录树信息,利用用户空间文件系统生成目标分支的分支目录。
164.示例性的,因为实际中用户空间文件系统(fuse)是linux系统中的模块,只能在linux系统中使用。本技术实施例中,为了方便使用,搜索服务器02中的用户空间文件系统(fuse)的使用高级计算机语言实现的(例如go语言)。在实际中,使用go语言实现的fuse可以称为go fuse接口。
165.示例性的,目标分支的分支目录具体可以如图10所示。其具体表述可参照前述实施例中针对图10的相关表述,此处不再赘述。
166.s123、搜索服务器02在本地依次读取目标分支的分支目录中的每个代码文件。
167.一种可实现的方式中,这里的读取具体是为了后续根据读取结果生成分支索引,所以搜索服务器02可以利用索引生成器在本地依次读取目标分支的分支目录中的每个代码文件。
168.在搜索服务器02在本地中无法读取到目标代码文件的情况下,可以执行s124和s125。在搜索服务器02读取到目标分支的分支目录中的所有代码文件的情况下,可以执行s126。
169.s124、搜索服务器02根据目标代码文件的特征参数和目标代码文件所属代码仓的名称、最新提交点和下载地址,从代码服务器03读取目标代码文件。
170.一种可实现的方式中,s124具体可以是搜索服务器02根据目标代码文件的特征参数和目标代码文件所属代码仓的名称、最新提交点和下载地址,从代码服务器03获取目标代码文件,以供索引生成器读取。
171.其中目标代码文件为目标分支的分支目录中的任一个代码文件。特征参数可以为能够指示该目标代码文件的数据,例如目标代码文件的名称。
172.搜索服务器02在能够从本地读取目标分支的分支目录中的某个代码文件时,则从本地存储器中读取。
173.s125、搜索服务器02目标代码文件所属代码仓的名称、提交点和下载地址,从代码服务器03下载目标代码文件所属代码仓。
174.具体如何下载,可以参照前述实施例中针对图12所示实例的相关说明,此处不再赘述。下载的代码仓可以放在搜索服务器02的本地存储器中,后续同理。
175.另外,因为目标分支的分支目录中包括有各个代码仓的路径,而搜索服务器在下载目标分支对应的各个代码仓时也是根据其路径下载的,所以在目标分支对应的所有代码仓在本地下载完成后,后续可以根据目标分支的分支目录获取相应的实际代码文件。
176.s126、搜索服务器02根据读取到的目标分支的所有代码文件、目标分支的分支目录和目标分支的分支目录中的所有代码文件的存储地址,生成目标分支的分支索引。
177.其中,分支索引至少用于指示分支索引所属的分支对应的任意代码文件在分支索引对应的分支目录中的位置。
178.为了更清楚的说明本技术实施例提供的技术方案,可以在生成代码搜索系统中的分支索引(即上述的s123

s126步骤)时,提高搜索服务器的存储资源的利用效率,以如下实施例进行说明。该实施例中具体可以包括t1

t5:
179.t1、在搜索服务器02中未存储有目标代码的任一代码文件的情况下,搜索服务器
02根据第一分支的代码仓的名称和下载地址,从代码服务器03下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件。
180.其中,第一分支为至少一个目标分支中的任一个目标分支。可选的,搜索服务器02在读取代码文件时,是利用索引生成器读取的。
181.一种可实现的方式中,t1中搜索服务器02根据第一分支的代码仓的名称和下载地址,从代码服务器03下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件,具体可以为:代码服务器02从本地依次读取第一分支的分支目录对应的每个代码文件;第一分支为至少一个分支中的一个分支;在代码服务器02无法从本地读取到目标代码文件的情况下,代码服务器02根据目标代码文件的特征参数、目标代码文件所属代码仓的名称、目标代码文件所属代码仓的最新提交点和目标代码文件所属代码仓的下载地址,从代码服务器读取目标代码文件,并下载目标代码文件所属的代码仓至本地存储器;目标代码文件为第一分支的分支目录对应的所有代码文件中的任一个。
182.可以理解的,上述t1中部分步骤的具体实现,即为前述s123

s125的一种特定情况,即搜索服务器在建立第一个分支(即本技术中的第一分支)的分支索引时的情况。
183.t2、搜索服务器02根据第一分支的所有代码文件、第一分支的分支目录和第一分支的所有代码文件的存储地址,生成第一分支的分支索引。
184.其中,分支索引至少用于指示分支索引所属的分支对应的任意代码文件在分支索引对应的分支目录中的位置。
185.可以理解的,t2步骤即为前述s126的一种特定情况,即搜索服务器在建立第一个分支(即本技术中的第一分支)的分支索引时的情况。
186.t3、在搜索服务器02中存储有已建分支的所有代码文件所属的代码仓的情况下,搜索服务器02从本地依次读取第二分支的分支目录对应的代码文件中的所有第一代码文件。
187.其中,已建分支为已生成有分支索引的目标分支;第二分支为至少一个目标分支中除已建分支以外的任一个目标分支;第一代码文件是已建分支的所有代码文件所属的代码仓中的代码文件。
188.可以理解的,t3步骤即为前述s123的一种特定情况,即搜索服务器在建立第一个分支(即本技术中的第一分支)的分支索引时的情况。
189.t4、搜索服务器02根据第二分支的分支目录对应的代码文件中除第一代码文件以外的所有第二代码文件的特征参数、所有第二代码文件所属代码仓的名称、所有第二代码文件所属代码仓的最新提交点和所有第二代码文件所属代码仓的下载地址,从代码服务器03读取所有第二代码文件,并下载所有第二代码文件所属的代码仓。
190.一种可实现的方式中,t4具体可以为:搜索服务器02从本地依次读取所有第二代码文件;在搜索服务器无法从本地存储器中读取到第四代码文件的情况下,搜索服务器根据第四代码文件的特征参数、第四代码文件所属代码仓的名称、第四代码文件所属代码仓的最新提交点和第四代码文件所属代码仓的下载地址,从代码服务器读取第四代码文件,并下载第四代码文件所属的代码仓;第四代码文件为所有第二代码文件中的任一个。
191.可以理解的,前述t4步骤的可实现的方式即为前述s123

s125的组合的一种特定情况,即搜索服务器在建立非首个分支(即本技术中的第一分支以外的目标分支)的分支索
引时的情况。另外,这里搜索服务器读取第二代码文件,具体可以是利用索引生成器读取。t5、搜索服务器根据第二分支的分支目录、第二分支的所有代码文件和第二分支的所有代码文件的存储地址,生成第二分支的分支索引。
192.可以理解的,t2步骤即为前述s126的一种特定情况,即搜索服务器在建立非首个分支(即本技术中的第一分支以外的目标分支)的分支索引时的情况。
193.基于上述t1

t5对应的技术方案可以看出,在构建代码搜索系统中的分支索引的过程中,在针对某个目标分支建立分支索引的过程中下载过某些代码仓后,后续在建立其他分支索引时便不需要再次下载代码仓,所以本技术实施例提供的技术方案仅会使得搜索服务器将每个代码仓下载一遍,之后便可以根据分支目录、读取结果(即目标分支的所有代码文件)和代码文件的存储地址生成分支索引。进而提高搜索服务器的存储资源的利用率。
194.s127、搜索服务器根据至少一个目标分支的分支目录、至少一个目标分支的分支索引以及搜索服务器下载的对应至少一个目标分支的所有代码仓,生成代码搜索系统。
195.需要说明的是,上述s121

s127步骤即为本技术实施例提供的一种代码搜索系统生成方法的流程示意。
196.s128、搜索服务器02响应于来自开发客户端01

1的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索与关键词匹配的第三代码文件。
197.其中,搜索指令用于请求对应该分支标记和关键词的代码文件。
198.基于本技术实施例建立的目标分支的分支索引和分支目录,实际中开发人员通过登录搜索服务器02的代码搜索服务进入某个分支的搜索界面的过程类似图6、图7和图8相关的表述。以图8所示的界面为例,其中展示mx9xxx x.x这一分支包括的各个代码仓的名称、日期(相当于其对应mx9xxx x.x这一分支的最新提交点的时间)和大小,可以认为是本技术实施例中的分支目录。区别在于,图8中为了方便用户知晓更多的信息,还展示了不同代码仓对应mx9xxx x.x这一分支的最新日期和大小。
199.在一种可实现的场景中,以图8所示的搜索界面为例,开发客户端01

1可以响应于用户对任一代码仓中的索引控件的触发操作,产生搜索指令并发送给搜索服务器。以android.bp为例,因为图8中android.bp这一代码仓中仅有一个代码文件,所以此时搜索指令携带的分支标记可以为“mx9xxx x.x”,关键词可以为“android.bp”。
200.在另一种可实现的场景中,以图8所示的搜索界面为例,开发客户端01

1还可以响应于用户在搜索框81中的输入以及对查找控件82的点击操作,产生搜索指令并发送给搜索服务器。若此时用户触发了定选控件83,使定选控件83变为中间存在对号的方框,则此时搜索指令中携带的分支标记可以为“mx9xxx x.x”,关键词可以为用户输入的内容。若此时用户触发了定选控件83,使定选控件83变为中间存在对号的方框,则此时搜索指令中携带的分支标记可以为图7中所示的所有分支(hisi 4.0、mx9xxx x.x、mtk5g 5.0、mtk6756 4.0、mtk6768 4.0和sprd 4.0等),关键词可以为用户输入的内容。
201.以总共有三个代码仓为例,s107步骤实现的具体过程可以参照图15所示。搜索服务器02的处理模块在接收到开发客户端01

1的搜索指令后,根据其中携带的分支标记确定对应分支索引和分支目录(例如分支索引2和分支2的分支目录)。具体处理模块可以通过搜索服务器的通信模块获取开发客户端01

1的搜索指令,处理模块具体可以是搜索服务器的
cpu。
202.之后,搜索服务器02利用该分支索引可以根据搜索指令中的关键词,确定搜索指令对应的代码文件具体在该分支目录的目标位置(目标位置具体为该代码文件的名称在该分支目录中的位置)。而后,搜索服务器可以利用分支目录和分支索引确定的目标位置,依据分支目录与各个代码仓的关联,从所有代码仓中获取对应该分支标记和关键词的代码文件。之后,处理模块可以将分支目录从代码仓中获取的代码文件返回给开发客户端01

1。
203.一种可实现的方式中,s127可以为:搜索服务器02响应于来自开发客户端的搜索指令,在搜索指令携带的分支标记对应的分支为第二分支的情况下,若根据第二分支的分支索引和第二分支的分支目录,确定搜索指令携带的关键词对应的第三代码文件为第二代码仓中的代码文件,则从第二代码仓中获取第三代码文件;第二代码仓为已建分支的所有代码文件所属的代码仓中任一个代码仓。
204.基于上述方案,可以看出本技术实施例提供的技术方案生成的代码搜索系统可以使得搜索服务器,在搜索某个代码文件时,不管该代码文件所属的代码仓是之前针对哪一个分支索引建立时下载的,都可以顺利获取。
205.s129、搜索服务器02向开发客户端01

1发送所述第三代码文件。
206.基于本技术实施例提供的技术方案,在构建代码搜索系统中的分支索引的过程中,在针对某个目标分支建立分支索引的过程中下载过某些代码仓后,后续在建立其他分支索引时便不需要再次下载代码仓,所以本技术实施例提供的技术方案仅会使得搜索服务器将每个代码仓下载一遍,之后便可以根据分支目录、读取结果(即目标分支的所有代码文件)和代码文件的存储地址生成分支索引。又因为该分支索引可以用于指示该分支索引所属的分支对应的任意代码文件在分支目录中的位置,所以后续用户使用代码搜索系统的过程中,可以先根据搜索需求确定分支目录和分支索引,而后根据分支索引确定需要的代码文件在分支目录中对应的位置(即代码文件的名称所处位置),之后可以利用分支目录和代码中各代码文件的关联,从代码仓中获取到对应的代码文件,完成搜索过程。综上,本技术实施例相比于现有技术,不需要针对每个分支下载一遍其对应的所有代码仓,大大提高了搜索服务器的存储资源的利用率。
207.在一些实施例中,为了保证搜索服务器中下载的代码仓及时的与代码服务器中的相同代码仓内容同步,结合图13,参照图16所示,该代码搜索方法中在s125之后(具体为搜索服务器下载了任一个代码仓后),还包括s125a:
208.s125a、搜索服务器02每隔预设时长从代码服务器03获取对应目标分支的所有代码仓,并使用最新获取的目标分支的所有代码仓更新本地存储器中目标分支的所有代码仓。
209.这样一来,搜索服务器的本地存储器存储的代码仓的内容可以及时和代码服务器中的相同代码仓同步,保证了用户在搜索代码时的准确性。
210.可以理解的是,上述设备(搜索服务器)等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同
方法来实现所描述的功能,但是这种实现不应认为超出本技术实施例的范围。
211.本技术实施例可以根据上述方法示例对上述搜索服务器进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
212.在采用对应各个功能划分各个功能模块的情况下,参照图17所示,本技术实施例提供了一种搜索服务器16,包括:获取模块161和处理模块162。
213.其中,获取模块161具体用于执行前述实施例中的s121(包括s121a和s121b)。处理模块162具体用于执行前述实施例中的s123

s128、s125a、t1

t5。当然,实施中获取模块161和处理模块162还可以是由多个能够实现不同功能或执行不同步骤的子模块构成,本技术对此不做具体限制。
214.关于上述实施例中的搜索服务器,其中各个模块执行操作的具体方式已经在前述实施例中的代码搜索方法的实施例中进行了详细描述,此处不再具体阐述。其相关的有益效果也可参照前述代码搜索方法的相关有益效果,此处不再赘述。
215.本技术实施例还提供一种搜索服务器,该搜索服务器包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行指令,使得搜索服务器执行如下步骤:
216.搜索服务器从代码服务器获取目标代码中至少一个目标分支的代码仓的特征信息和目录树信息;特征信息包括:名称、相对路径、最新提交点和下载地址;目标分支的目标代码仓的最新提交点为目标分支在目标代码仓中提交代码文件的所有提交点中最新的一个;目标代码仓为目标分支的所有代码仓中的任一个;目录树信息至少包括目录树信息所属代码仓中的代码文件的特征参数;特征参数用于指示特征参数所属的代码文件;
217.搜索服务器根据目标分支的代码仓的相对路径和目录树信息,生成目标分支的分支目录;分支目录至少包括目标分支包括的代码仓的相对路径,以及目标分支对应的代码仓中的代码文件的特征参数;
218.在搜索服务器中未存储有目标代码的任一代码文件的情况下,搜索服务器根据第一分支的代码仓的名称和下载地址,从代码服务器下载第一分支的所有代码文件所属的代码仓,并读取第一分支的分支目录对应的所有代码文件;第一分支为至少一个目标分支中的任一个目标分支;
219.搜索服务器根据第一分支的所有代码文件、第一分支的分支目录和第一分支的所有代码文件的存储地址,生成第一分支的分支索引;分支索引至少用于指示分支索引所属的分支对应的任意代码文件在分支索引对应的分支目录中的位置;
220.在搜索服务器中存储有已建分支的所有代码文件所属的代码仓的情况下,搜索服务器从本地依次读取第二分支的分支目录对应的代码文件中的所有第一代码文件;已建分支为已生成有分支索引的目标分支;第二分支为至少一个目标分支中除已建分支以外的任一个目标分支;第一代码文件是已建分支的所有代码文件所属的代码仓中的代码文件;
221.搜索服务器根据第二分支的分支目录对应的代码文件中除第一代码文件以外的所有第二代码文件的特征参数、所有第二代码文件所属代码仓的名称、所有第二代码文件所属代码仓的最新提交点和所有第二代码文件所属代码仓的下载地址,从代码服务器读取
所有第二代码文件,并下载所有第二代码文件所属的代码仓;
222.搜索服务器根据第二分支的分支目录、第二分支的所有代码文件和第二分支的所有代码文件的存储地址,生成第二分支的分支索引;
223.搜索服务器根据至少一个目标分支的分支目录、至少一个目标分支的分支索引以及搜索服务器下载的对应至少一个目标分支的所有代码仓,生成代码搜索系统。
224.可选的,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器从代码服务器获取至少一个分支的manifest文件和至少一个分支的代码仓的目录树信息;搜索服务器解析至少一个目标分支的manifest文件,以获取至少一个目标分支的代码仓的特征信息。
225.可选的,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器从本地依次读取第一分支的分支目录对应的每个代码文件;第一分支为至少一个分支中的一个分支;在搜索服务器无法从本地读取到目标代码文件的情况下,搜索服务器根据目标代码文件的特征参数、目标代码文件所属代码仓的名称、目标代码文件所属代码仓的最新提交点和目标代码文件所属代码仓的下载地址,从代码服务器读取目标代码文件,并下载目标代码文件所属的代码仓至本地存储器;目标代码文件为第一分支的分支目录对应的所有代码文件中的任一个。
226.可选的,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器从本地依次读取所有第二代码文件;在搜索服务器无法从本地存储器中读取到第四代码文件的情况下,搜索服务器根据第四代码文件的特征参数、第四代码文件所属代码仓的名称、第四代码文件所属代码仓的最新提交点和第四代码文件所属代码仓的下载地址,从代码服务器读取第四代码文件,并下载第四代码文件所属的代码仓;第四代码文件为所有第二代码文件中的任一个。
227.可选的,处理器被配置为执行指令,使得搜索服务器还执行如下步骤:搜索服务器每隔预设时长从代码服务器获取对应所述目标分支的所有代码仓,并使用最新获取的对应所述目标分支的所有代码仓更新搜索服务器存储的对应所述目标分支对应所有代码仓。
228.可选的,处理器被配置为执行指令,使得搜索服务器在生成代码搜索系统之后,还执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索与关键词匹配的第三代码文件;搜索服务器向开发客户端发送第三代码文件。
229.可选的,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引,确定与搜索指令携带的关键词匹配的第三代码文件在分支目录中的目标位置;搜索服务器利用分支目录和目标位置,从本地搜索第三代码文件。
230.可选的,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:
231.搜索服务器响应于来自开发客户端的搜索指令,在搜索指令携带的分支标记对应的分支为第二分支的情况下,若根据第二分支的分支索引和第二分支的分支目录,确定搜索指令携带的关键词对应的第三代码文件为第二代码仓中的代码文件,则从第二代码仓中获取第三代码文件;第二代码仓为已建分支的所有代码文件所属的代码仓中任一个代码仓。
232.本技术实施例还提供另一种搜索服务器,该搜索服务器中设置有前述实施例中提供的代码搜索方法中生成的代码搜索系统。该搜索服务器包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行指令,使得搜索服务器执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引和分支目录,利用搜索指令携带的关键词,从本地搜索对应关键词的第三代码文件;搜索服务器向开发客户端发送第三代码文件。
233.可选的,处理器被配置为执行指令,使得搜索服务器具体执行如下步骤:搜索服务器响应于来自开发客户端的搜索指令,根据搜索指令携带的分支标记对应的分支的分支索引,确定与搜索指令携带的关键词匹配的第三代码文件在分支目录中的目标位置;搜索服务器利用分支目录和目标位置,从本地搜索第三代码文件。
234.本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在搜索服务器上运行时,使得搜索服务器执行如前述实施例提供的代码搜索方法或代码搜索系统生成方法。
235.本技术实施例还提供一种计算机程序产品,当该计算机程序产品在搜索服务器上运行时,使得搜索服务器执行如前述实施例提供的代码搜索方法或代码搜索系统生成方法。
236.通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
237.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
238.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
239.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
240.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、随机存取存
储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
241.以上内容,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

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

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

相关文献