diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2017-02-04 23:53:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-04 23:53:46 +0800 |
commit | 8a421b1fd702d99e8438f6ef6f4ee339f1eaa130 (patch) | |
tree | c69e598ca9dca29dc64a4e1d8525165ec794106f /models/repo_unit.go | |
parent | 49fa03bf4286bd2cbf90b271fb65d4f70e5de57f (diff) | |
download | gitea-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.go | 137 |
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) +} |