func()

in pkg/git/git.go [432:478]


func (gp *GitProvider) CloneRepository(repo string, user, pass *string, destination string) error {
	log.Info("Start cloning", logRepositoryKey, repo)

	const httpClientErrors = 400

	if user != nil && pass != nil {
		u, err := url.Parse(repo)
		if err != nil {
			return fmt.Errorf("failed to parse repo url: %w", err)
		}

		u.User = url.UserPassword(*user, *pass)
		repo = u.String()
	} else {
		rsp, err := netHttp.Get(repo)
		if err != nil {
			return fmt.Errorf("failed to get repo: %w", err)
		}
		if rsp.StatusCode >= httpClientErrors {
			return fmt.Errorf("repo access denied, response code: %d: %w", rsp.StatusCode, err)
		}
	}

	cloneCMD := exec.Command(gitCMD, "clone", "--mirror", "--depth", "1", repo, destination)

	if bts, err := cloneCMD.CombinedOutput(); err != nil {
		return fmt.Errorf("failed to clone repo: %s: %w", string(bts), err)
	}

	fetchCMD := exec.Command(gitCMD, gitDirArg, destination, getFetchArg, gitUnshallowArg)

	bts, err := fetchCMD.CombinedOutput()
	if err != nil {
		return fmt.Errorf("failed to fetch unshallow repo: %s: %w", string(bts), err)
	}

	log.Info("Result of `git fetch unshallow` command", logOutKey, string(bts))

	err = gp.BareToNormal(destination)
	if err != nil {
		return fmt.Errorf("failed to covert bare repo to normal: %w", err)
	}

	log.Info("End cloning", logRepositoryKey, repo)

	return nil
}