summaryrefslogtreecommitdiffstats
path: root/models/repo_generate.go
diff options
context:
space:
mode:
authorJohn Olheiser <42128690+jolheiser@users.noreply.github.com>2019-11-24 23:17:51 -0600
committerLunny Xiao <xiaolunwen@gmail.com>2019-11-25 13:17:51 +0800
commit62bcb2b7f1ce1a64f828d94f045d06bd8605455a (patch)
tree05e9c5c46e08ca787bc08326af6cadb130ded0fd /models/repo_generate.go
parent95c3dc856a7d4199232549e3b4d76769ef868bda (diff)
downloadgitea-62bcb2b7f1ce1a64f828d94f045d06bd8605455a.tar.gz
gitea-62bcb2b7f1ce1a64f828d94f045d06bd8605455a.zip
Add avatar and issue labels to template repositories (#9149)
* Add avatar and issue labels Signed-off-by: jolheiser <john.olheiser@gmail.com> * Fix redundant if-err Signed-off-by: jolheiser <john.olheiser@gmail.com>
Diffstat (limited to 'models/repo_generate.go')
-rw-r--r--models/repo_generate.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/models/repo_generate.go b/models/repo_generate.go
index 6406180038..234bdc27f2 100644
--- a/models/repo_generate.go
+++ b/models/repo_generate.go
@@ -8,6 +8,7 @@ import (
"fmt"
"os"
"path/filepath"
+ "strconv"
"strings"
"time"
@@ -17,6 +18,24 @@ import (
"github.com/unknwon/com"
)
+// GenerateRepoOptions contains the template units to generate
+type GenerateRepoOptions struct {
+ Name string
+ Description string
+ Private bool
+ GitContent bool
+ Topics bool
+ GitHooks bool
+ Webhooks bool
+ Avatar bool
+ IssueLabels bool
+}
+
+// IsValid checks whether at least one option is chosen for generation
+func (gro GenerateRepoOptions) IsValid() bool {
+ return gro.GitContent || gro.Topics || gro.GitHooks || gro.Webhooks || gro.Avatar || gro.IssueLabels // or other items as they are added
+}
+
// generateRepository initializes repository from template
func generateRepository(e Engine, repo, templateRepo *Repository) (err error) {
tmpDir := filepath.Join(os.TempDir(), "gitea-"+repo.Name+"-"+com.ToStr(time.Now().Nanosecond()))
@@ -160,3 +179,34 @@ func GenerateWebhooks(ctx DBContext, templateRepo, generateRepo *Repository) err
}
return nil
}
+
+// GenerateAvatar generates the avatar from a template repository
+func GenerateAvatar(ctx DBContext, templateRepo, generateRepo *Repository) error {
+ generateRepo.Avatar = strings.Replace(templateRepo.Avatar, strconv.FormatInt(templateRepo.ID, 10), strconv.FormatInt(generateRepo.ID, 10), 1)
+ if err := com.Copy(templateRepo.CustomAvatarPath(), generateRepo.CustomAvatarPath()); err != nil {
+ return err
+ }
+
+ return updateRepositoryCols(ctx.e, generateRepo, "avatar")
+}
+
+// GenerateIssueLabels generates issue labels from a template repository
+func GenerateIssueLabels(ctx DBContext, templateRepo, generateRepo *Repository) error {
+ templateLabels, err := getLabelsByRepoID(ctx.e, templateRepo.ID, "")
+ if err != nil {
+ return err
+ }
+
+ for _, templateLabel := range templateLabels {
+ generateLabel := &Label{
+ RepoID: generateRepo.ID,
+ Name: templateLabel.Name,
+ Description: templateLabel.Description,
+ Color: templateLabel.Color,
+ }
+ if err := newLabel(ctx.e, generateLabel); err != nil {
+ return err
+ }
+ }
+ return nil
+}