@@ -42,7 +42,6 @@ import (
4242 "github.com/unknwon/com"
4343 ini "gopkg.in/ini.v1"
4444 "xorm.io/builder"
45- "xorm.io/xorm"
4645)
4746
4847var repoWorkingPool = sync .NewExclusivePool ()
@@ -173,8 +172,8 @@ type Repository struct {
173172 * Mirror `xorm:"-"`
174173 Status RepositoryStatus `xorm:"NOT NULL DEFAULT 0"`
175174
176- ExternalMetas map [string ]string `xorm:"-"`
177- Units []* RepoUnit `xorm:"-"`
175+ RenderingMetas map [string ]string `xorm:"-"`
176+ Units []* RepoUnit `xorm:"-"`
178177
179178 IsFork bool `xorm:"INDEX NOT NULL DEFAULT false"`
180179 ForkID int64 `xorm:"INDEX"`
@@ -559,27 +558,39 @@ func (repo *Repository) mustOwnerName(e Engine) string {
559558
560559// ComposeMetas composes a map of metas for properly rendering issue links and external issue trackers.
561560func (repo * Repository ) ComposeMetas () map [string ]string {
562- if repo .ExternalMetas == nil {
563- repo . ExternalMetas = map [string ]string {
561+ if repo .RenderingMetas == nil {
562+ metas : = map [string ]string {
564563 "user" : repo .MustOwner ().Name ,
565564 "repo" : repo .Name ,
566565 "repoPath" : repo .RepoPath (),
567566 }
567+
568568 unit , err := repo .GetUnit (UnitTypeExternalTracker )
569- if err != nil {
570- return repo .ExternalMetas
569+ if err == nil {
570+ metas ["format" ] = unit .ExternalTrackerConfig ().ExternalTrackerFormat
571+ switch unit .ExternalTrackerConfig ().ExternalTrackerStyle {
572+ case markup .IssueNameStyleAlphanumeric :
573+ metas ["style" ] = markup .IssueNameStyleAlphanumeric
574+ default :
575+ metas ["style" ] = markup .IssueNameStyleNumeric
576+ }
571577 }
572578
573- repo .ExternalMetas ["format" ] = unit .ExternalTrackerConfig ().ExternalTrackerFormat
574- switch unit .ExternalTrackerConfig ().ExternalTrackerStyle {
575- case markup .IssueNameStyleAlphanumeric :
576- repo .ExternalMetas ["style" ] = markup .IssueNameStyleAlphanumeric
577- default :
578- repo .ExternalMetas ["style" ] = markup .IssueNameStyleNumeric
579+ if repo .Owner .IsOrganization () {
580+ teams := make ([]string , 0 , 5 )
581+ _ = x .Table ("team_repo" ).
582+ Join ("INNER" , "team" , "team.id = team_repo.team_id" ).
583+ Where ("team_repo.repo_id = ?" , repo .ID ).
584+ Select ("team.lower_name" ).
585+ OrderBy ("team.lower_name" ).
586+ Find (& teams )
587+ metas ["teams" ] = "," + strings .Join (teams , "," ) + ","
588+ metas ["org" ] = repo .Owner .LowerName
579589 }
580590
591+ repo .RenderingMetas = metas
581592 }
582- return repo .ExternalMetas
593+ return repo .RenderingMetas
583594}
584595
585596// DeleteWiki removes the actual and local copy of repository wiki.
@@ -1246,20 +1257,6 @@ type CreateRepoOptions struct {
12461257 Status RepositoryStatus
12471258}
12481259
1249- // GenerateRepoOptions contains the template units to generate
1250- type GenerateRepoOptions struct {
1251- Name string
1252- Description string
1253- Private bool
1254- GitContent bool
1255- Topics bool
1256- }
1257-
1258- // IsValid checks whether at least one option is chosen for generation
1259- func (gro GenerateRepoOptions ) IsValid () bool {
1260- return gro .GitContent || gro .Topics // or other items as they are added
1261- }
1262-
12631260func getRepoInitFile (tp , name string ) ([]byte , error ) {
12641261 cleanedName := strings .TrimLeft (path .Clean ("/" + name ), "/" )
12651262 relPath := path .Join ("options" , tp , cleanedName )
@@ -1471,37 +1468,6 @@ func initRepository(e Engine, repoPath string, u *User, repo *Repository, opts C
14711468 return nil
14721469}
14731470
1474- // generateRepository initializes repository from template
1475- func generateRepository (e Engine , repo , templateRepo * Repository ) (err error ) {
1476- tmpDir := filepath .Join (os .TempDir (), "gitea-" + repo .Name + "-" + com .ToStr (time .Now ().Nanosecond ()))
1477-
1478- if err := os .MkdirAll (tmpDir , os .ModePerm ); err != nil {
1479- return fmt .Errorf ("Failed to create dir %s: %v" , tmpDir , err )
1480- }
1481-
1482- defer func () {
1483- if err := os .RemoveAll (tmpDir ); err != nil {
1484- log .Error ("RemoveAll: %v" , err )
1485- }
1486- }()
1487-
1488- if err = generateRepoCommit (e , repo , templateRepo , tmpDir ); err != nil {
1489- return fmt .Errorf ("generateRepoCommit: %v" , err )
1490- }
1491-
1492- // re-fetch repo
1493- if repo , err = getRepositoryByID (e , repo .ID ); err != nil {
1494- return fmt .Errorf ("getRepositoryByID: %v" , err )
1495- }
1496-
1497- repo .DefaultBranch = "master"
1498- if err = updateRepository (e , repo , false ); err != nil {
1499- return fmt .Errorf ("updateRepository: %v" , err )
1500- }
1501-
1502- return nil
1503- }
1504-
15051471var (
15061472 reservedRepoNames = []string {"." , ".." }
15071473 reservedRepoPatterns = []string {"*.git" , "*.wiki" }
@@ -1512,7 +1478,7 @@ func IsUsableRepoName(name string) error {
15121478 return isUsableName (reservedRepoNames , reservedRepoPatterns , name )
15131479}
15141480
1515- func createRepository (e * xorm. Session , doer , u * User , repo * Repository ) (err error ) {
1481+ func createRepository (e Engine , doer , u * User , repo * Repository ) (err error ) {
15161482 if err = IsUsableRepoName (repo .Name ); err != nil {
15171483 return err
15181484 }
@@ -2759,72 +2725,6 @@ func ForkRepository(doer, owner *User, oldRepo *Repository, name, desc string) (
27592725 return repo , CopyLFS (repo , oldRepo )
27602726}
27612727
2762- // GenerateRepository generates a repository from a template
2763- func GenerateRepository (doer , owner * User , templateRepo * Repository , opts GenerateRepoOptions ) (_ * Repository , err error ) {
2764- repo := & Repository {
2765- OwnerID : owner .ID ,
2766- Owner : owner ,
2767- Name : opts .Name ,
2768- LowerName : strings .ToLower (opts .Name ),
2769- Description : opts .Description ,
2770- IsPrivate : opts .Private ,
2771- IsEmpty : ! opts .GitContent || templateRepo .IsEmpty ,
2772- IsFsckEnabled : templateRepo .IsFsckEnabled ,
2773- TemplateID : templateRepo .ID ,
2774- }
2775-
2776- createSess := x .NewSession ()
2777- defer createSess .Close ()
2778- if err = createSess .Begin (); err != nil {
2779- return nil , err
2780- }
2781-
2782- if err = createRepository (createSess , doer , owner , repo ); err != nil {
2783- return nil , err
2784- }
2785-
2786- //Commit repo to get created repo ID
2787- err = createSess .Commit ()
2788- if err != nil {
2789- return nil , err
2790- }
2791-
2792- sess := x .NewSession ()
2793- defer sess .Close ()
2794- if err = sess .Begin (); err != nil {
2795- return repo , err
2796- }
2797-
2798- repoPath := RepoPath (owner .Name , repo .Name )
2799- if err = checkInitRepository (repoPath ); err != nil {
2800- return repo , err
2801- }
2802-
2803- if opts .GitContent && ! templateRepo .IsEmpty {
2804- if err = generateRepository (sess , repo , templateRepo ); err != nil {
2805- return repo , err
2806- }
2807-
2808- if err = repo .updateSize (sess ); err != nil {
2809- return repo , fmt .Errorf ("failed to update size for repository: %v" , err )
2810- }
2811-
2812- if err = copyLFS (sess , repo , templateRepo ); err != nil {
2813- return repo , fmt .Errorf ("failed to copy LFS: %v" , err )
2814- }
2815- }
2816-
2817- if opts .Topics {
2818- for _ , topic := range templateRepo .Topics {
2819- if _ , err = addTopicByNameToRepo (sess , repo .ID , topic ); err != nil {
2820- return repo , err
2821- }
2822- }
2823- }
2824-
2825- return repo , sess .Commit ()
2826- }
2827-
28282728// GetForks returns all the forks of the repository
28292729func (repo * Repository ) GetForks () ([]* Repository , error ) {
28302730 forks := make ([]* Repository , 0 , repo .NumForks )
@@ -3041,8 +2941,12 @@ func (repo *Repository) GetTreePathLock(treePath string) (*LFSLock, error) {
30412941 return nil , nil
30422942}
30432943
2944+ func updateRepositoryCols (e Engine , repo * Repository , cols ... string ) error {
2945+ _ , err := e .ID (repo .ID ).Cols (cols ... ).Update (repo )
2946+ return err
2947+ }
2948+
30442949// UpdateRepositoryCols updates repository's columns
30452950func UpdateRepositoryCols (repo * Repository , cols ... string ) error {
3046- _ , err := x .ID (repo .ID ).Cols (cols ... ).Update (repo )
3047- return err
2951+ return updateRepositoryCols (x , repo , cols ... )
30482952}
0 commit comments