in pkg/git/git.go [104:156]
func (gp *GitProvider) CreateRemoteBranch(key, user, p, name, fromcommit string, port int32) error {
log.Info("start creating remote branch", logBranchNameKey, name)
r, err := git.PlainOpen(p)
if err != nil {
return fmt.Errorf(errPlainOpenTmpl, p, err)
}
ref, err := r.Head()
if err != nil {
return fmt.Errorf("failed to get git HEAD reference: %w", err)
}
if fromcommit != "" {
_, err = r.CommitObject(plumbing.NewHash(fromcommit))
if err != nil {
return fmt.Errorf("failed to get commit %s: %w", fromcommit, err)
}
ref = plumbing.NewReferenceFromStrings(name, fromcommit)
}
branches, err := r.Branches()
if err != nil {
return fmt.Errorf("failed to get branches iterator: %w", err)
}
exists, err := isBranchExists(name, branches)
if err != nil {
return err
}
if exists {
log.Info("branch already exists. skip creating", logBranchNameKey, name)
return nil
}
newRef := plumbing.NewReferenceFromStrings(fmt.Sprintf("refs/heads/%v", name), ref.Hash().String())
err = r.Storer.SetReference(newRef)
if err != nil {
return fmt.Errorf("failed to set refference: %w", err)
}
err = gp.PushChanges(key, user, p, port, "--all")
if err != nil {
return err
}
log.Info("branch has been created", logBranchNameKey, name)
return nil
}