in controllers/codebase/service/chain/checkout_branch.go [34:88]
func CheckoutBranch(repository, projectPath, branchName string, g git.Git, cb *codebaseApi.Codebase, c client.Client) error {
user, password, err := GetRepositoryCredentialsIfExists(cb, c)
if err != nil && !k8sErrors.IsNotFound(err) {
return err
}
if !g.CheckPermissions(ctrl.LoggerInto(context.TODO(), ctrl.Log.WithName("git-provider")), repository, user, password) {
msg := fmt.Errorf("user %s cannot get access to the repository %s", *user, repository)
return msg
}
currentBranchName, err := g.GetCurrentBranchName(projectPath)
if err != nil {
return fmt.Errorf("failed to get current branch name: %w", err)
}
if currentBranchName == branchName {
ctrl.Log.Info("default branch is already active", "name", branchName)
return nil
}
switch cb.Spec.Strategy {
case "create":
if err := g.Checkout(user, password, projectPath, branchName, false); err != nil {
return fmt.Errorf("failed to checkout to default branch %s (create strategy): %w", branchName, err)
}
case "clone":
if err := g.Checkout(user, password, projectPath, branchName, true); err != nil {
return fmt.Errorf("failed to checkout to default branch %s (clone strategy): %w", branchName, err)
}
case "import":
gs, err := util.GetGitServer(c, cb.Spec.GitServer, cb.Namespace)
if err != nil {
return fmt.Errorf("failed to get GitServer: %w", err)
}
secret, err := util.GetSecret(c, gs.NameSshKeySecret, cb.Namespace)
if err != nil {
return fmt.Errorf("failed to get %v secret: %w", gs.NameSshKeySecret, err)
}
k := string(secret.Data[util.PrivateSShKeyName])
u := gs.GitUser
// CheckoutRemoteBranchBySSH(key, user, gitPath, remoteBranchName string)
if err := g.CheckoutRemoteBranchBySSH(k, u, projectPath, branchName); err != nil {
return fmt.Errorf("failed to checkout to default branch %s (import strategy): %w", branchName, err)
}
default:
return fmt.Errorf("failed to checkout, unsupported strategy: '%s'", cb.Spec.Strategy)
}
return nil
}