func runWithFullHistory()

in internal/core/system.go [205:255]


func runWithFullHistory(ctx context.Context, c corescan.Context, startHash string) int {
	remoteUrl, err := git.RemoteUrl(c.RepositoryRoot(), c.LogDir())
	if err != nil {
		log.Fatal(err)
	}
	branch, err := git.Branch(c.RepositoryRoot(), c.LogDir())
	if err != nil {
		log.Fatal(err)
	}
	if remoteUrl == "" && branch == "" {
		log.Fatal("Please check that project is located within the Git repo. If you specified --repository-root option, check that it points to the right directory.")
	}

	err = git.Clean(c.RepositoryRoot(), c.LogDir())
	if err != nil {
		log.Fatal(err)
	}
	revisions := git.Revisions(c.RepositoryRoot())
	allCommits := len(revisions)
	counter := 0
	var exitCode int

	if startHash != "" {
		for i, revision := range revisions {
			counter++
			if revision == startHash {
				revisions = revisions[i:]
				break
			}
		}
	}

	for _, revision := range revisions {
		counter++

		msg.WarningMessage("[%d/%d] Running analysis for revision %s", counter+1, allCommits, revision)
		err = git.CheckoutAndUpdateSubmodule(c.RepositoryRoot(), revision, true, c.LogDir())
		if err != nil {
			log.Fatal(err)
		}
		msg.EmptyMessage()

		contextForAnalysis := c.WithVcsEnvForFullHistoryAnalysisIteration(remoteUrl, branch, revision)
		exitCode = runQodana(ctx, contextForAnalysis)
	}
	err = git.CheckoutAndUpdateSubmodule(c.RepositoryRoot(), branch, true, c.LogDir())
	if err != nil {
		log.Fatal(err)
	}
	return exitCode
}