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
}