2020-12-03 00:38:30 +03:00
// Copyright 2020 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package convert
import (
"code.gitea.io/gitea/models"
2021-11-09 22:57:58 +03:00
unit_model "code.gitea.io/gitea/models/unit"
2020-12-03 00:38:30 +03:00
api "code.gitea.io/gitea/modules/structs"
)
// ToRepo converts a Repository to api.Repository
func ToRepo ( repo * models . Repository , mode models . AccessMode ) * api . Repository {
return innerToRepo ( repo , mode , false )
}
func innerToRepo ( repo * models . Repository , mode models . AccessMode , isParent bool ) * api . Repository {
var parent * api . Repository
cloneLink := repo . CloneLink ( )
permission := & api . Permission {
Admin : mode >= models . AccessModeAdmin ,
Push : mode >= models . AccessModeWrite ,
Pull : mode >= models . AccessModeRead ,
}
if ! isParent {
err := repo . GetBaseRepo ( )
if err != nil {
return nil
}
if repo . BaseRepo != nil {
parent = innerToRepo ( repo . BaseRepo , mode , true )
}
}
//check enabled/disabled units
hasIssues := false
var externalTracker * api . ExternalTracker
var internalTracker * api . InternalTracker
2021-11-09 22:57:58 +03:00
if unit , err := repo . GetUnit ( unit_model . TypeIssues ) ; err == nil {
2020-12-03 00:38:30 +03:00
config := unit . IssuesConfig ( )
hasIssues = true
internalTracker = & api . InternalTracker {
EnableTimeTracker : config . EnableTimetracker ,
AllowOnlyContributorsToTrackTime : config . AllowOnlyContributorsToTrackTime ,
EnableIssueDependencies : config . EnableDependencies ,
}
2021-11-09 22:57:58 +03:00
} else if unit , err := repo . GetUnit ( unit_model . TypeExternalTracker ) ; err == nil {
2020-12-03 00:38:30 +03:00
config := unit . ExternalTrackerConfig ( )
hasIssues = true
externalTracker = & api . ExternalTracker {
ExternalTrackerURL : config . ExternalTrackerURL ,
ExternalTrackerFormat : config . ExternalTrackerFormat ,
ExternalTrackerStyle : config . ExternalTrackerStyle ,
}
}
hasWiki := false
var externalWiki * api . ExternalWiki
2021-11-09 22:57:58 +03:00
if _ , err := repo . GetUnit ( unit_model . TypeWiki ) ; err == nil {
2020-12-03 00:38:30 +03:00
hasWiki = true
2021-11-09 22:57:58 +03:00
} else if unit , err := repo . GetUnit ( unit_model . TypeExternalWiki ) ; err == nil {
2020-12-03 00:38:30 +03:00
hasWiki = true
config := unit . ExternalWikiConfig ( )
externalWiki = & api . ExternalWiki {
ExternalWikiURL : config . ExternalWikiURL ,
}
}
hasPullRequests := false
ignoreWhitespaceConflicts := false
allowMerge := false
allowRebase := false
allowRebaseMerge := false
allowSquash := false
2021-03-27 17:55:40 +03:00
defaultMergeStyle := models . MergeStyleMerge
2021-11-09 22:57:58 +03:00
if unit , err := repo . GetUnit ( unit_model . TypePullRequests ) ; err == nil {
2020-12-03 00:38:30 +03:00
config := unit . PullRequestsConfig ( )
hasPullRequests = true
ignoreWhitespaceConflicts = config . IgnoreWhitespaceConflicts
allowMerge = config . AllowMerge
allowRebase = config . AllowRebase
allowRebaseMerge = config . AllowRebaseMerge
allowSquash = config . AllowSquash
2021-03-27 17:55:40 +03:00
defaultMergeStyle = config . GetDefaultMergeStyle ( )
2020-12-03 00:38:30 +03:00
}
hasProjects := false
2021-11-09 22:57:58 +03:00
if _ , err := repo . GetUnit ( unit_model . TypeProjects ) ; err == nil {
2020-12-03 00:38:30 +03:00
hasProjects = true
}
if err := repo . GetOwner ( ) ; err != nil {
return nil
}
2021-06-18 02:24:55 +03:00
numReleases , _ := models . GetReleaseCountByRepoID ( repo . ID , models . FindReleasesOptions { IncludeDrafts : false , IncludeTags : false } )
2020-12-03 00:38:30 +03:00
2021-01-03 02:47:47 +03:00
mirrorInterval := ""
if repo . IsMirror {
if err := repo . GetMirror ( ) ; err == nil {
mirrorInterval = repo . Mirror . Interval . String ( )
}
}
2020-12-03 00:38:30 +03:00
return & api . Repository {
ID : repo . ID ,
2021-03-27 19:45:26 +03:00
Owner : ToUserWithAccessMode ( repo . Owner , mode ) ,
2020-12-03 00:38:30 +03:00
Name : repo . Name ,
FullName : repo . FullName ( ) ,
Description : repo . Description ,
Private : repo . IsPrivate ,
Template : repo . IsTemplate ,
Empty : repo . IsEmpty ,
Archived : repo . IsArchived ,
Size : int ( repo . Size / 1024 ) ,
Fork : repo . IsFork ,
Parent : parent ,
Mirror : repo . IsMirror ,
HTMLURL : repo . HTMLURL ( ) ,
SSHURL : cloneLink . SSH ,
CloneURL : cloneLink . HTTPS ,
2020-12-07 15:07:48 +03:00
OriginalURL : repo . SanitizedOriginalURL ( ) ,
2020-12-03 00:38:30 +03:00
Website : repo . Website ,
Stars : repo . NumStars ,
Forks : repo . NumForks ,
Watchers : repo . NumWatches ,
OpenIssues : repo . NumOpenIssues ,
OpenPulls : repo . NumOpenPulls ,
Releases : int ( numReleases ) ,
DefaultBranch : repo . DefaultBranch ,
Created : repo . CreatedUnix . AsTime ( ) ,
Updated : repo . UpdatedUnix . AsTime ( ) ,
Permissions : permission ,
HasIssues : hasIssues ,
ExternalTracker : externalTracker ,
InternalTracker : internalTracker ,
HasWiki : hasWiki ,
HasProjects : hasProjects ,
ExternalWiki : externalWiki ,
HasPullRequests : hasPullRequests ,
IgnoreWhitespaceConflicts : ignoreWhitespaceConflicts ,
AllowMerge : allowMerge ,
AllowRebase : allowRebase ,
AllowRebaseMerge : allowRebaseMerge ,
AllowSquash : allowSquash ,
2021-03-27 17:55:40 +03:00
DefaultMergeStyle : string ( defaultMergeStyle ) ,
2020-12-03 00:38:30 +03:00
AvatarURL : repo . AvatarLink ( ) ,
Internal : ! repo . IsPrivate && repo . Owner . Visibility == api . VisibleTypePrivate ,
2021-01-03 02:47:47 +03:00
MirrorInterval : mirrorInterval ,
2020-12-03 00:38:30 +03:00
}
}