summaryrefslogtreecommitdiffstats
path: root/models/repo_unit.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2017-02-04 23:53:46 +0800
committerGitHub <noreply@github.com>2017-02-04 23:53:46 +0800
commit8a421b1fd702d99e8438f6ef6f4ee339f1eaa130 (patch)
treec69e598ca9dca29dc64a4e1d8525165ec794106f /models/repo_unit.go
parent49fa03bf4286bd2cbf90b271fb65d4f70e5de57f (diff)
downloadgitea-8a421b1fd702d99e8438f6ef6f4ee339f1eaa130.tar.gz
gitea-8a421b1fd702d99e8438f6ef6f4ee339f1eaa130.zip
Add units concept for modulable functions of a repository (#742)
* Add units concept for modulable functions of a repository * remove unused comment codes & fix lints and tests * remove unused comment codes * use struct config instead of map * fix lint * rm wrong files * fix tests
Diffstat (limited to 'models/repo_unit.go')
-rw-r--r--models/repo_unit.go137
1 files changed, 137 insertions, 0 deletions
diff --git a/models/repo_unit.go b/models/repo_unit.go
new file mode 100644
index 0000000000..ee61ef4c9d
--- /dev/null
+++ b/models/repo_unit.go
@@ -0,0 +1,137 @@
+// Copyright 2017 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 models
+
+import (
+ "encoding/json"
+ "time"
+
+ "github.com/Unknwon/com"
+ "github.com/go-xorm/core"
+ "github.com/go-xorm/xorm"
+)
+
+// RepoUnit describes all units of a repository
+type RepoUnit struct {
+ ID int64
+ RepoID int64 `xorm:"INDEX(s)"`
+ Type UnitType `xorm:"INDEX(s)"`
+ Index int
+ Config core.Conversion `xorm:"TEXT"`
+ CreatedUnix int64 `xorm:"INDEX CREATED"`
+ Created time.Time `xorm:"-"`
+}
+
+// UnitConfig describes common unit config
+type UnitConfig struct {
+}
+
+// FromDB fills up a UnitConfig from serialized format.
+func (cfg *UnitConfig) FromDB(bs []byte) error {
+ return json.Unmarshal(bs, &cfg)
+}
+
+// ToDB exports a UnitConfig to a serialized format.
+func (cfg *UnitConfig) ToDB() ([]byte, error) {
+ return json.Marshal(cfg)
+}
+
+// ExternalWikiConfig describes external wiki config
+type ExternalWikiConfig struct {
+ ExternalWikiURL string
+}
+
+// FromDB fills up a ExternalWikiConfig from serialized format.
+func (cfg *ExternalWikiConfig) FromDB(bs []byte) error {
+ return json.Unmarshal(bs, &cfg)
+}
+
+// ToDB exports a ExternalWikiConfig to a serialized format.
+func (cfg *ExternalWikiConfig) ToDB() ([]byte, error) {
+ return json.Marshal(cfg)
+}
+
+// ExternalTrackerConfig describes external tracker config
+type ExternalTrackerConfig struct {
+ ExternalTrackerURL string
+ ExternalTrackerFormat string
+ ExternalTrackerStyle string
+}
+
+// FromDB fills up a ExternalTrackerConfig from serialized format.
+func (cfg *ExternalTrackerConfig) FromDB(bs []byte) error {
+ return json.Unmarshal(bs, &cfg)
+}
+
+// ToDB exports a ExternalTrackerConfig to a serialized format.
+func (cfg *ExternalTrackerConfig) ToDB() ([]byte, error) {
+ return json.Marshal(cfg)
+}
+
+// BeforeSet is invoked from XORM before setting the value of a field of this object.
+func (r *RepoUnit) BeforeSet(colName string, val xorm.Cell) {
+ switch colName {
+ case "type":
+ switch UnitType(Cell2Int64(val)) {
+ case UnitTypeCode, UnitTypeIssues, UnitTypePullRequests, UnitTypeCommits, UnitTypeReleases,
+ UnitTypeWiki, UnitTypeSettings:
+ r.Config = new(UnitConfig)
+ case UnitTypeExternalWiki:
+ r.Config = new(ExternalWikiConfig)
+ case UnitTypeExternalTracker:
+ r.Config = new(ExternalTrackerConfig)
+ default:
+ panic("unrecognized repo unit type: " + com.ToStr(*val))
+ }
+ }
+}
+
+// AfterSet is invoked from XORM after setting the value of a field of this object.
+func (r *RepoUnit) AfterSet(colName string, _ xorm.Cell) {
+ switch colName {
+ case "created_unix":
+ r.Created = time.Unix(r.CreatedUnix, 0).Local()
+ }
+}
+
+// Unit returns Unit
+func (r *RepoUnit) Unit() Unit {
+ return Units[r.Type]
+}
+
+// CodeConfig returns config for UnitTypeCode
+func (r *RepoUnit) CodeConfig() *UnitConfig {
+ return r.Config.(*UnitConfig)
+}
+
+// IssuesConfig returns config for UnitTypeIssues
+func (r *RepoUnit) IssuesConfig() *UnitConfig {
+ return r.Config.(*UnitConfig)
+}
+
+// PullRequestsConfig returns config for UnitTypePullRequests
+func (r *RepoUnit) PullRequestsConfig() *UnitConfig {
+ return r.Config.(*UnitConfig)
+}
+
+// CommitsConfig returns config for UnitTypeCommits
+func (r *RepoUnit) CommitsConfig() *UnitConfig {
+ return r.Config.(*UnitConfig)
+}
+
+// ReleasesConfig returns config for UnitTypeReleases
+func (r *RepoUnit) ReleasesConfig() *UnitConfig {
+ return r.Config.(*UnitConfig)
+}
+
+// ExternalWikiConfig returns config for UnitTypeExternalWiki
+func (r *RepoUnit) ExternalWikiConfig() *ExternalWikiConfig {
+ return r.Config.(*ExternalWikiConfig)
+}
+
+// ExternalTrackerConfig returns config for UnitTypeExternalTracker
+func (r *RepoUnit) ExternalTrackerConfig() *ExternalTrackerConfig {
+ return r.Config.(*ExternalTrackerConfig)
+}