in internal/mode/advanced/advanced.go [45:192]
func Run(buildOpts shared.BuildOpts) error {
closer, err := configureLogger()
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "error initializing logkit %v", err)
return err
}
defer closer.Close() //nolint:errcheck
flag.Parse()
if *versionFlag {
_, _ = fmt.Fprintf(os.Stdout, "%s %s (built at: %s)", os.Args[0], buildOpts.Version, buildOpts.BuildTime)
os.Exit(0)
}
args := flag.Args()
if len(args) != 1 {
argsError := errors.New("WrongArguments")
logkit.WithError(argsError).Fatalf("Usage: %s [ --version | [--blob-type=(blob|wiki_blob)] [--group-id=<ID>] [--project-id=<ID>] [--skip-commits] [--search-curation] [--full-path=<full-path>] [--timeout=<timeout>] [--visbility-level=<visbility-level>] [--repository-access-level=<repository-access-level>] [--wiki-access-level=<wiki-access-level>] <repo-path> ]", os.Args[0])
}
projectID := *projectIdFlag
groupID := *groupIdFlag
if projectID < 0 && groupID < 0 {
logkit.WithError(err).WithField("projectID", projectID).WithField("groupID", groupID).Fatalf("Error: Both projectID and groupID are empty")
}
repoPath := args[0]
blobType := *blobTypeFlag
fromSHA := *fromSHAFlag
toSHA := *toSHAFlag
skipCommits := *skipCommitsFlag
fullPath := *fullPathFlag
timeoutOption := *timeoutOptionFlag
searchCurationFlag := *searchCurationFlag
traversalIds := *traversalIdsFlag
hashedRootNamespaceId := int16(*hashedRootNamespaceIdFlag) //nolint:gosec
correlationID := generateCorrelationID()
archived := *archivedFlag
schemaVersionBlob := uint16(*schemaVersionBlobFlag) //nolint:gosec
schemaVersionCommit := uint16(*schemaVersionCommitFlag) //nolint:gosec
schemaVersionWiki := uint16(*schemaVersionWikiFlag) //nolint:gosec
if traversalIds == "" {
logkit.WithField("traversalIds", traversalIds).Fatal("Error: traversalIds is empty")
}
repo, err := git.NewGitalyClientFromEnv(repoPath, fromSHA, toSHA, correlationID, projectID, fullPath)
if err != nil {
logkit.WithFields(
logkit.Fields{
"repoPath": repoPath,
"fromSHA": fromSHA,
"toSHA": toSHA,
"correlationID": correlationID,
"projectID": projectID,
"groupID": groupID,
"fullPath": fullPath,
},
).WithError(err).Fatal("Error creating gitaly client")
}
config, err := loadConfig(projectID, groupID, searchCurationFlag, traversalIds, hashedRootNamespaceId, archived, schemaVersionBlob, schemaVersionCommit, schemaVersionWiki)
if err != nil {
logkit.WithError(err).WithFields(
logkit.Fields{
"projectID": projectID,
"searchCurationFlag": searchCurationFlag,
"traversalIds": traversalIds,
"hashedRootNamespaceId": hashedRootNamespaceId,
"archived": archived,
"schemaVersionBlob": schemaVersionBlob,
"schemaVersionCommit": schemaVersionCommit,
"schemaVersionWiki": schemaVersionWiki,
}).Fatalf("Error loading config")
}
esClient, err := elastic.NewClient(config, correlationID)
if err != nil {
logkit.WithError(err).Fatal("Error creating elastic client")
}
if esClient.IndexNameWikis != "" && blobType == "wiki_blob" && schemaVersionWiki == 0 {
logkit.WithField("schemaVersionWiki", schemaVersionWiki).Fatal("Error: schemaVersionWiki is empty")
}
if !skipCommits && schemaVersionCommit == 0 {
logkit.WithField("schemaVersionCommit", schemaVersionCommit).Fatal("Error: schemaVersionCommit is empty")
}
if blobType == "blob" && schemaVersionBlob == 0 {
logkit.WithField("schemaVersionBlob", schemaVersionBlob).Fatal("Error: schemaVersionBlob is empty")
}
if timeoutOption != "" {
timeout, err := time.ParseDuration(timeoutOption)
if err != nil {
logkit.WithError(err).WithField("timeoutOption", timeoutOption).Fatalf("Error parsing timeout")
} else {
logkit.WithField("timeout", timeout).Info("Setting timeout")
time.AfterFunc(timeout, func() {
timedOutErr := errors.New("TimedOut")
logkit.WithError(timedOutErr).WithField("timeout", timeout).Fatalf("The process has timed out")
})
}
}
idx := indexer.NewIndexer(repo, esClient)
logkit.WithFields(
logkit.Fields{
"IndexNameDefault": esClient.IndexNameDefault,
"IndexNameCommits": esClient.IndexNameCommits,
"IndexNameWikis": esClient.IndexNameWikis,
"projectID": esClient.ParentID(),
"blobType": blobType,
"skipCommits": skipCommits,
"searchCuration": config.SearchCuration,
"Permissions": config.Permissions,
"PermissionsWiki": config.PermissionsWiki,
"traversalIds": traversalIds,
"hashedRootNamespaceId": hashedRootNamespaceId,
"archived": archived,
"schemaVersionBlob": schemaVersionBlob,
"schemaVersionCommit": schemaVersionCommit,
"schemaVersionWiki": schemaVersionWiki,
},
).Debugf("Indexing from %s to %s", repo.FromHash, repo.ToHash)
if err := idx.IndexBlobs(blobType); err != nil {
logkit.WithError(err).Fatalln("Indexing error")
}
if !skipCommits && blobType == "blob" {
if err := idx.IndexCommits(); err != nil {
logkit.WithError(err).Fatalln("Indexing error")
}
}
if err := idx.Flush(); err != nil {
logkit.WithError(err).Fatalln("Flushing error")
}
return nil
}