summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-08-01 19:56:20 +0000
committerNick Thomas <nick@gitlab.com>2018-08-01 19:56:20 +0000
commit9812e5dd7c52e67b22781a440ee04dbb2a086000 (patch)
tree860229eba147b2eaaa7561686760604d4763ad0b /app/models
parent92e079ede29d4d1e1c4a36166aa76ea13e3412d3 (diff)
parent79a5d76801a45696db629e1f543f2e1d6fa4784f (diff)
downloadgitlab-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.rb1
-rw-r--r--app/models/programming_language.rb4
-rw-r--r--app/models/project.rb1
-rw-r--r--app/models/repository.rb8
-rw-r--r--app/models/repository_language.rb12
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