- .github
- .vscode
- build
-
cmd
- zoekt
- zoekt-archive-index
- zoekt-dynamic-indexserver
- zoekt-git-clone
- zoekt-git-index
- zoekt-index
- zoekt-indexserver
- zoekt-merge-index
- zoekt-mirror-bitbucket-server
- zoekt-mirror-gerrit
- zoekt-mirror-github
- zoekt-mirror-gitiles
- zoekt-mirror-gitlab
- zoekt-repo-index
-
zoekt-sourcegraph-indexserver
-
json_schemas
- CdsConfig.json
- EdsLoadBalancingPolicyConfig.json
- GrpcLbConfig.json
- LeastRequestLocalityLoadBalancingPolicyConfig.json
- LoadBalancingConfig.json
- LrsLoadBalancingPolicyConfig.json
- MethodConfig.json
- OutlierDetectionLoadBalancingConfig.json
- OverrideHostLoadBalancingPolicyConfig.json
- PickFirstConfig.json
- PriorityLoadBalancingPolicyConfig.json
- RingHashLoadBalancingConfig.json
- RlsLoadBalancingPolicyConfig.json
- RoundRobinConfig.json
- ServiceConfig.json
- WeightedRoundRobinLbConfig.json
- WeightedTargetLoadBalancingPolicyConfig.json
- XdsClusterImplLoadBalancingPolicyConfig.json
- XdsClusterManagerLoadBalancingPolicyConfig.json
- XdsClusterResolverLoadBalancingPolicyConfig.json
- XdsConfig.json
- XdsServer.json
- XdsWrrLocalityLoadBalancingPolicyConfig.json
- update.sh
- protos
- backoff.go
- backoff_test.go
- cleanup.go
- cleanup_test.go
- debug.go
- default_grpc_service_configuration.json
- index.go
- index_mutex.go
- index_test.go
- main.go
- main_test.go
- merge.go
- merge_test.go
- meta.go
- meta_test.go
- meta_unix.go
- meta_windows.go
- owner.go
- owner_test.go
- queue.go
- queue_test.go
- sg.go
- sg_test.go
-
json_schemas
- zoekt-test
- zoekt-webserver
- flags.go
- ctags
- debugserver
- doc
- gitindex
- grpc
- ignore
-
internal
- archive
-
e2e
-
testdata
- Get_databaseuser.txt
- InternalDoer.txt
- Repository_metadata_Write_rbac.txt
- assets_are_not_configured_for_this_binary.txt
- bufio_buffer.txt
- bufio_flush_writer.txt
- bytes_buffer.txt
- coverage_data_writer.txt
- generate_unit_test.txt
- graphql_type_User.txt
- r_cody_sourcegraph_url.txt
- rank_stats.txt
- sourcegraphserver_docker_image_build.txt
- test_server.txt
- time_compare.txt
- zoekt_searcher.txt
- doc.go
- e2e_rank_test.go
- e2e_test.go
-
testdata
- languages
- mockSearcher
- otlpenv
- profiler
- syntaxutil
- tracer
- json
- query
- shards
- testdata
- trace
- web
- .bazelignore
- .dockerignore
- .gitignore
- .tool-versions
- Dockerfile
- Dockerfile.indexserver
- Dockerfile.webserver
- LICENSE
- README.md
- all.bash
- api.go
- api_proto.go
- api_proto_test.go
- api_test.go
- bits.go
- bits_test.go
- btree.go
- btree_test.go
- contentprovider.go
- contentprovider_test.go
- eval.go
- eval_test.go
- flake.lock
- flake.nix
- gen-proto.sh
- go.mod
- go.sum
- hititer.go
- hititer_test.go
- index_test.go
- indexbuilder.go
- indexdata.go
- indexdata_test.go
- indexfile_other.go
- indexfile_unix.go
- install-ctags-alpine.sh
- limit.go
- limit_test.go
- marshal.go
- marshal_test.go
- matchiter.go
- matchtree.go
- matchtree_test.go
- merge.go
- merge_test.go
- read.go
- read_test.go
- score.go
- score_test.go
- section.go
- shell.nix
- toc.go
- tombstones.go
- tombstones_test.go
- tombstones_unix.go
- tombstones_windows.go
- write.go
Explanation
This code provides two commands: merge
and explode
, both operating on Zoekt index files.
merge
Command:
mergeCmd
:- Takes a list of index file paths as input. If the first path is “-“, it reads paths from standard input.
- Calls the
merge
function with the destination directory (extracted from the first path) and the list of paths. merge
:- Opens each input index file and creates a
zoekt.IndexFile
object. - Calls
zoekt.Merge
with the destination directory and theIndexFile
objects to merge them into a single compound index. - Removes the original simple shards (individual index files) after the merge is complete.
- Renames the temporary compound shard to the final destination path.
explode
Command:
explodeCmd
:- Takes a single index file path as input.
- Calls the
explode
function with the destination directory (extracted from the path) and the input index file. explode
:- Opens the input index file and creates a
zoekt.IndexFile
object. - Calls
zoekt.Explode
to split the compound shard into individual shards. - Removes the input compound shard.
- Attempts to rename the temporary individual shards to their final destinations.
Key points:
- The code uses
zoekt.IndexFile
,zoekt.Merge
, andzoekt.Explode
from thegithub.com/sourcegraph/zoekt
package for index file operations. - It uses error handling throughout and returns errors for any issues encountered during file operations.
- The code ensures atomicity by first deleting the original files and then renaming the new files, avoiding duplicate indexes.
- It performs cleanup operations on temporary files, even in case of errors, to minimize potential issues.
In summary:
This code allows users to merge multiple Zoekt index files into a single compound index or to explode a compound index into individual shards. The code is well-structured, handles errors appropriately, and ensures atomicity for its operations.
Graph
The graph shows the usage of functions within the codebase.
Select a code symbol to view it's graph