mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-17 00:26:07 +10:00
Merge branch 'ce_stabe_updates' into '7-13-stable'
Updates for 7.13 stable (RC4) See merge request !1012
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 7.13.0
|
||||
- Remove repository graph log to fix slow cache updates after push event (Stan Hu)
|
||||
- Only enable HSTS header for HTTPS and port 443 (Stan Hu)
|
||||
- Fix user autocomplete for unauthenticated users accessing public projects (Stan Hu)
|
||||
- Fix redirection to home page URL for unauthorized users (Daniel Gerhardt)
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
# GitLab
|
||||
|
||||
[](https://ci.gitlab.com/projects/1?ref=master)
|
||||
[](https://semaphoreapp.com/gitlabhq/gitlabhq)
|
||||
[](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||
[](https://coveralls.io/r/gitlabhq/gitlabhq?branch=master)
|
||||
|
||||
## Canonical source
|
||||
|
||||
The source of GitLab Community Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/) and there are mirrors to make [contributing](CONTRIBUTING.md) as easy as possible.
|
||||
|
||||
#  GitLab
|
||||
|
||||
## Open source software to collaborate on code
|
||||
|
||||
To see how GitLab looks please see the [features page on our website](https://about.gitlab.com/features/).
|
||||
@@ -23,16 +28,6 @@ There are two editions of GitLab.
|
||||
*GitLab Enterprise Edition (EE)* includes [extra features](https://about.gitlab.com/features/#compare) that are most useful for organizations with more than 100 users.
|
||||
To use EE and get official support please [become a subscriber](https://about.gitlab.com/pricing/).
|
||||
|
||||
## Code status
|
||||
|
||||
- [](https://ci.gitlab.com/projects/1?ref=master) on ci.gitlab.com (master branch)
|
||||
|
||||
- [](https://semaphoreapp.com/gitlabhq/gitlabhq)
|
||||
|
||||
- [](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||
|
||||
- [](https://coveralls.io/r/gitlabhq/gitlabhq?branch=master)
|
||||
|
||||
## Website
|
||||
|
||||
On [about.gitlab.com](https://about.gitlab.com/) you can find more information about:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class ProjectsController < ApplicationController
|
||||
prepend_before_filter :render_go_import, only: [:show]
|
||||
skip_before_action :authenticate_user!, only: [:show]
|
||||
skip_before_action :authenticate_user!, only: [:show, :activity]
|
||||
before_action :project, except: [:new, :create]
|
||||
before_action :repository, except: [:new, :create]
|
||||
|
||||
|
||||
@@ -276,4 +276,18 @@ module ProjectsHelper
|
||||
def readme_cache_key
|
||||
[@project.id, @project.commit.sha, "readme"].join('-')
|
||||
end
|
||||
|
||||
def round_commit_count(project)
|
||||
count = project.commit_count
|
||||
|
||||
if count > 10000
|
||||
'10000+'
|
||||
elsif count > 5000
|
||||
'5000+'
|
||||
elsif count > 1000
|
||||
'1000+'
|
||||
else
|
||||
count
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ class Note < ActiveRecord::Base
|
||||
participant :author, :mentioned_users
|
||||
|
||||
belongs_to :project
|
||||
belongs_to :noteable, polymorphic: true, touch: true
|
||||
belongs_to :noteable, polymorphic: true
|
||||
belongs_to :author, class_name: "User"
|
||||
|
||||
delegate :name, to: :project, prefix: true
|
||||
|
||||
@@ -683,6 +683,10 @@ class Project < ActiveRecord::Base
|
||||
update_attribute(:repository_size, repository.size)
|
||||
end
|
||||
|
||||
def update_commit_count
|
||||
update_attribute(:commit_count, repository.commit_count)
|
||||
end
|
||||
|
||||
def forks_count
|
||||
ForkedProjectLink.where(forked_from_project_id: self.id).count
|
||||
end
|
||||
|
||||
+18
-29
@@ -94,18 +94,6 @@ class Repository
|
||||
gitlab_shell.rm_tag(path_with_namespace, tag_name)
|
||||
end
|
||||
|
||||
def round_commit_count
|
||||
if commit_count > 10000
|
||||
'10000+'
|
||||
elsif commit_count > 5000
|
||||
'5000+'
|
||||
elsif commit_count > 1000
|
||||
'1000+'
|
||||
else
|
||||
commit_count
|
||||
end
|
||||
end
|
||||
|
||||
def branch_names
|
||||
cache.fetch(:branch_names) { raw_repository.branch_names }
|
||||
end
|
||||
@@ -130,28 +118,29 @@ class Repository
|
||||
cache.fetch(:size) { raw_repository.size }
|
||||
end
|
||||
|
||||
def cache_keys
|
||||
%i(size branch_names tag_names commit_count
|
||||
readme version contribution_guide changelog license)
|
||||
end
|
||||
|
||||
def build_cache
|
||||
cache_keys.each do |key|
|
||||
unless cache.exist?(key)
|
||||
send(key)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def expire_cache
|
||||
%i(size branch_names tag_names commit_count graph_log
|
||||
readme version contribution_guide changelog license).each do |key|
|
||||
cache_keys.each do |key|
|
||||
cache.expire(key)
|
||||
end
|
||||
end
|
||||
|
||||
def graph_log
|
||||
cache.fetch(:graph_log) do
|
||||
commits = raw_repository.log(limit: 6000, skip_merges: true,
|
||||
ref: root_ref)
|
||||
|
||||
commits.map do |rugged_commit|
|
||||
commit = Gitlab::Git::Commit.new(rugged_commit)
|
||||
|
||||
{
|
||||
author_name: commit.author_name,
|
||||
author_email: commit.author_email,
|
||||
additions: commit.stats.additions,
|
||||
deletions: commit.stats.deletions,
|
||||
}
|
||||
end
|
||||
def rebuild_cache
|
||||
cache_keys.each do |key|
|
||||
cache.expire(key)
|
||||
send(key)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ class GitPushService
|
||||
|
||||
project.ensure_satellite_exists
|
||||
project.repository.expire_cache
|
||||
project.update_repository_size
|
||||
|
||||
if push_remove_branch?(ref, newrev)
|
||||
@push_commits = []
|
||||
@@ -61,6 +60,7 @@ class GitPushService
|
||||
EventCreateService.new.push(project, user, @push_data)
|
||||
project.execute_hooks(@push_data.dup, :push_hooks)
|
||||
project.execute_services(@push_data.dup, :push_hooks)
|
||||
ProjectCacheWorker.perform_async(project.id)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
@@ -2,15 +2,15 @@ class GitTagPushService
|
||||
attr_accessor :project, :user, :push_data
|
||||
|
||||
def execute(project, user, oldrev, newrev, ref)
|
||||
@project, @user = project, user
|
||||
project.repository.expire_cache
|
||||
|
||||
@project, @user = project, user
|
||||
@push_data = build_push_data(oldrev, newrev, ref)
|
||||
|
||||
EventCreateService.new.push(project, user, @push_data)
|
||||
project.execute_hooks(@push_data.dup, :tag_push_hooks)
|
||||
project.execute_services(@push_data.dup, :tag_push_hooks)
|
||||
|
||||
project.repository.expire_cache
|
||||
ProjectCacheWorker.perform_async(project.id)
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
.repo-info
|
||||
- unless project.empty_repo?
|
||||
= link_to pluralize(project.repository.round_commit_count, 'commit'), namespace_project_commits_path(project.namespace, project, project.default_branch)
|
||||
= link_to pluralize(round_commit_count(project), 'commit'), namespace_project_commits_path(project.namespace, project, project.default_branch)
|
||||
·
|
||||
= link_to pluralize(project.repository.branch_names.count, 'branch'), namespace_project_branches_path(project.namespace, project)
|
||||
·
|
||||
|
||||
@@ -6,14 +6,16 @@
|
||||
= render 'shared/no_ssh'
|
||||
= render 'shared/no_password'
|
||||
|
||||
= render 'projects/last_push'
|
||||
- if prefer_readme?
|
||||
= render 'projects/last_push'
|
||||
|
||||
= render "home_panel"
|
||||
|
||||
.project-stats
|
||||
%ul.nav.nav-pills
|
||||
%li
|
||||
= link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref) do
|
||||
= pluralize(number_with_delimiter(@repository.commit_count), 'commit')
|
||||
= pluralize(number_with_delimiter(@project.commit_count), 'commit')
|
||||
%li
|
||||
= link_to namespace_project_branches_path(@project.namespace, @project) do
|
||||
= pluralize(number_with_delimiter(@repository.branch_names.count), 'branch')
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
- else
|
||||
none
|
||||
.issuable-context-selectbox
|
||||
- if can?(current_user, :admin_issue, @project)
|
||||
- if can?(current_user, :"admin_#{issuable.class.to_s.underscore}", @project)
|
||||
= users_select_tag("#{issuable.class.table_name.singularize}[assignee_id]", placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: issuable.assignee_id, project: @target_project, null_user: true)
|
||||
|
||||
%div.prepend-top-20.clearfix
|
||||
@@ -24,7 +24,7 @@
|
||||
- else
|
||||
none
|
||||
.issuable-context-selectbox
|
||||
- if can?(current_user, :admin_issue, @project)
|
||||
- if can?(current_user, :"admin_#{issuable.class.to_s.underscore}", @project)
|
||||
= f.select(:milestone_id, milestone_options(issuable), { include_blank: 'Select milestone' }, {class: 'select2 select2-compact js-select2 js-milestone'})
|
||||
= hidden_field_tag :issuable_context
|
||||
= f.submit class: 'btn hide'
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
class ProjectCacheWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: :default
|
||||
|
||||
def perform(project_id)
|
||||
project = Project.find(project_id)
|
||||
project.update_repository_size
|
||||
project.update_commit_count
|
||||
|
||||
if project.repository.root_ref
|
||||
project.repository.build_cache
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -28,7 +28,7 @@ class RepositoryImportWorker
|
||||
project.import_finish
|
||||
project.save
|
||||
project.satellite.create unless project.satellite.exists?
|
||||
project.update_repository_size
|
||||
ProjectCacheWorker.perform_async(project.id)
|
||||
Gitlab::BitbucketImport::KeyDeleter.new(project).execute if project.import_type == 'bitbucket'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,9 +11,42 @@ Sidekiq::Testing.inline! do
|
||||
'https://github.com/twitter/flight.git',
|
||||
'https://github.com/twitter/typeahead.js.git',
|
||||
'https://github.com/h5bp/html5-boilerplate.git',
|
||||
'https://github.com/google/material-design-lite.git',
|
||||
'https://github.com/jlevy/the-art-of-command-line.git',
|
||||
'https://github.com/FreeCodeCamp/freecodecamp.git',
|
||||
'https://github.com/google/deepdream.git',
|
||||
'https://github.com/jtleek/datasharing.git',
|
||||
'https://github.com/WebAssembly/design.git',
|
||||
'https://github.com/airbnb/javascript.git',
|
||||
'https://github.com/tessalt/echo-chamber-js.git',
|
||||
'https://github.com/atom/atom.git',
|
||||
'https://github.com/ipselon/react-ui-builder.git',
|
||||
'https://github.com/mattermost/platform.git',
|
||||
'https://github.com/purifycss/purifycss.git',
|
||||
'https://github.com/facebook/nuclide.git',
|
||||
'https://github.com/wbkd/awesome-d3.git',
|
||||
'https://github.com/kilimchoi/engineering-blogs.git',
|
||||
'https://github.com/gilbarbara/logos.git',
|
||||
'https://github.com/gaearon/redux.git',
|
||||
'https://github.com/awslabs/s2n.git',
|
||||
'https://github.com/arkency/reactjs_koans.git',
|
||||
'https://github.com/twbs/bootstrap.git',
|
||||
'https://github.com/chjj/ttystudio.git',
|
||||
'https://github.com/DrBoolean/mostly-adequate-guide.git',
|
||||
'https://github.com/octocat/Spoon-Knife.git',
|
||||
'https://github.com/opencontainers/runc.git',
|
||||
'https://github.com/googlesamples/android-topeka.git'
|
||||
]
|
||||
|
||||
project_urls.each_with_index do |url, i|
|
||||
# You can specify how many projects you need during seed execution
|
||||
size = if ENV['SIZE'].present?
|
||||
ENV['SIZE'].to_i
|
||||
else
|
||||
8
|
||||
end
|
||||
|
||||
|
||||
project_urls.first(size).each_with_index do |url, i|
|
||||
group_path, project_path = url.split('/')[-2..-1]
|
||||
|
||||
group = Group.find_by(path: group_path)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddCommitsCountToProject < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :projects, :commit_count, :integer, default: 0
|
||||
end
|
||||
end
|
||||
+2
-1
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20150713160110) do
|
||||
ActiveRecord::Schema.define(version: 20150717130904) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
@@ -374,6 +374,7 @@ ActiveRecord::Schema.define(version: 20150713160110) do
|
||||
t.integer "star_count", default: 0, null: false
|
||||
t.string "import_type"
|
||||
t.string "import_source"
|
||||
t.integer "commit_count", default: 0
|
||||
end
|
||||
|
||||
add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree
|
||||
|
||||
@@ -25,6 +25,7 @@ module Backup
|
||||
abort 'Backup failed' unless success
|
||||
|
||||
$progress.print 'Compressing database ... '
|
||||
FileUtils.rm_f db_file_name_gz
|
||||
success = system('gzip', db_file_name)
|
||||
report_success(success)
|
||||
abort 'Backup failed: compress error' unless success
|
||||
|
||||
@@ -18,4 +18,12 @@ class RepositoryCache
|
||||
def fetch(key, &block)
|
||||
backend.fetch(cache_key(key), &block)
|
||||
end
|
||||
|
||||
def exist?(key)
|
||||
backend.exist?(cache_key(key))
|
||||
end
|
||||
|
||||
def read(key)
|
||||
backend.read(cache_key(key))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -36,7 +36,6 @@ describe 'Gitlab::NoteDataBuilder' do
|
||||
let(:note) { create(:note_on_issue, noteable_id: issue.id) }
|
||||
|
||||
it 'returns the note and issue-specific data' do
|
||||
data[:issue]["updated_at"] = fixed_time
|
||||
expect(data).to have_key(:issue)
|
||||
expect(data[:issue]).to eq(issue.hook_attrs)
|
||||
end
|
||||
@@ -47,7 +46,6 @@ describe 'Gitlab::NoteDataBuilder' do
|
||||
let(:note) { create(:note_on_merge_request, noteable_id: merge_request.id) }
|
||||
|
||||
it 'returns the note and merge request data' do
|
||||
data[:merge_request]["updated_at"] = fixed_time
|
||||
expect(data).to have_key(:merge_request)
|
||||
expect(data[:merge_request]).to eq(merge_request.hook_attrs)
|
||||
end
|
||||
@@ -58,7 +56,6 @@ describe 'Gitlab::NoteDataBuilder' do
|
||||
let(:note) { create(:note_on_merge_request_diff, noteable_id: merge_request.id) }
|
||||
|
||||
it 'returns the note and merge request diff data' do
|
||||
data[:merge_request]["updated_at"] = fixed_time
|
||||
expect(data).to have_key(:merge_request)
|
||||
expect(data[:merge_request]).to eq(merge_request.hook_attrs)
|
||||
end
|
||||
@@ -69,7 +66,6 @@ describe 'Gitlab::NoteDataBuilder' do
|
||||
let!(:note) { create(:note_on_project_snippet, noteable_id: snippet.id) }
|
||||
|
||||
it 'returns the note and project snippet data' do
|
||||
data[:snippet]["updated_at"] = fixed_time
|
||||
expect(data).to have_key(:snippet)
|
||||
expect(data[:snippet]).to eq(snippet.hook_attrs)
|
||||
end
|
||||
|
||||
@@ -22,7 +22,7 @@ require 'spec_helper'
|
||||
describe Note do
|
||||
describe 'associations' do
|
||||
it { is_expected.to belong_to(:project) }
|
||||
it { is_expected.to belong_to(:noteable).touch(true) }
|
||||
it { is_expected.to belong_to(:noteable) }
|
||||
it { is_expected.to belong_to(:author).class_name('User') }
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user