diff options
author | Nick Thomas <nick@gitlab.com> | 2018-08-01 19:56:20 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2018-08-01 19:56:20 +0000 |
commit | 9812e5dd7c52e67b22781a440ee04dbb2a086000 (patch) | |
tree | 860229eba147b2eaaa7561686760604d4763ad0b /app/models | |
parent | 92e079ede29d4d1e1c4a36166aa76ea13e3412d3 (diff) | |
parent | 79a5d76801a45696db629e1f543f2e1d6fa4784f (diff) | |
download | gitlab-ce-9812e5dd7c52e67b22781a440ee04dbb2a086000.tar.gz |
Merge branch 'zj-repository-languages' into 'master'
Add repository languages for projects
Closes #23931, #34671, #48647, and #47301
See merge request gitlab-org/gitlab-ce!19480
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/namespace.rb | 1 | ||||
-rw-r--r-- | app/models/programming_language.rb | 4 | ||||
-rw-r--r-- | app/models/project.rb | 1 | ||||
-rw-r--r-- | app/models/repository.rb | 8 | ||||
-rw-r--r-- | app/models/repository_language.rb | 12 |
5 files changed, 26 insertions, 0 deletions
diff --git a/app/models/namespace.rb b/app/models/namespace.rb index c1dc2f55346..de06e080a7d 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -122,6 +122,7 @@ class Namespace < ActiveRecord::Base def to_param full_path end + alias_method :flipper_id, :to_param def human_name owner_name diff --git a/app/models/programming_language.rb b/app/models/programming_language.rb new file mode 100644 index 00000000000..400d6c407a7 --- /dev/null +++ b/app/models/programming_language.rb @@ -0,0 +1,4 @@ +class ProgrammingLanguage < ActiveRecord::Base + validates :name, presence: true + validates :color, allow_blank: false, color: true +end diff --git a/app/models/project.rb b/app/models/project.rb index da30d2fbb4f..af32afc08e2 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -192,6 +192,7 @@ class Project < ActiveRecord::Base has_many :hooks, class_name: 'ProjectHook' has_many :protected_branches has_many :protected_tags + has_many :repository_languages, -> { order "share DESC" } has_many :project_authorizations has_many :authorized_users, through: :project_authorizations, source: :user, class_name: 'User' diff --git a/app/models/repository.rb b/app/models/repository.rb index 50f42be661b..9a6281bc1f7 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -235,6 +235,12 @@ class Repository false end + def languages + return [] if empty? + + raw_repository.languages(root_ref) + end + # Makes sure a commit is kept around when Git garbage collection runs. # Git GC will delete commits from the repository that are no longer in any # branches or tags, but we want to keep some of these commits around, for @@ -432,6 +438,8 @@ class Repository # Runs code after a repository has been forked/imported. def after_import expire_content_cache + + DetectRepositoryLanguagesWorker.perform_async(project.id, project.owner.id) end # Runs code after a new commit has been pushed. diff --git a/app/models/repository_language.rb b/app/models/repository_language.rb new file mode 100644 index 00000000000..f467d4eafa3 --- /dev/null +++ b/app/models/repository_language.rb @@ -0,0 +1,12 @@ +class RepositoryLanguage < ActiveRecord::Base + belongs_to :project + belongs_to :programming_language + + default_scope { includes(:programming_language) } + + validates :project, presence: true + validates :share, inclusion: { in: 0..100, message: "The share of a lanuage is between 0 and 100" } + validates :programming_language, uniqueness: { scope: :project_id } + + delegate :name, :color, to: :programming_language +end |