From 2acb8a3085ad64ce56625a9d63f01f9398e757a3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 25 Jul 2016 14:09:23 +0300 Subject: [PATCH 001/107] Change merge request diff index to be not uniq Signed-off-by: Dmitriy Zaporozhets --- ...25104020_merge_request_diff_remove_uniq.rb | 21 +++++++++++++++++++ ...0725104452_merge_request_diff_add_index.rb | 17 +++++++++++++++ db/schema.rb | 14 ++++++------- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20160725104020_merge_request_diff_remove_uniq.rb create mode 100644 db/migrate/20160725104452_merge_request_diff_add_index.rb diff --git a/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb b/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb new file mode 100644 index 00000000000..c8cbd2718ff --- /dev/null +++ b/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb @@ -0,0 +1,21 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class MergeRequestDiffRemoveUniq < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + disable_ddl_transaction! + + DOWNTIME = false + + def up + if index_exists?(:merge_request_diffs, :merge_request_id) + remove_index :merge_request_diffs, :merge_request_id + end + end + + def down + unless index_exists?(:merge_request_diffs, :merge_request_id) + add_concurrent_index :merge_request_diffs, :merge_request_id, unique: true + end + end +end diff --git a/db/migrate/20160725104452_merge_request_diff_add_index.rb b/db/migrate/20160725104452_merge_request_diff_add_index.rb new file mode 100644 index 00000000000..6d04242dd25 --- /dev/null +++ b/db/migrate/20160725104452_merge_request_diff_add_index.rb @@ -0,0 +1,17 @@ +class MergeRequestDiffAddIndex < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + disable_ddl_transaction! + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + def up + add_concurrent_index :merge_request_diffs, :merge_request_id + end + + def down + if index_exists?(:merge_request_diffs, :merge_request_id) + remove_index :merge_request_diffs, :merge_request_id + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 5b35a528e71..e3eecfebfd4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160726093600) do +ActiveRecord::Schema.define(version: 20160725104452) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -84,8 +84,8 @@ ActiveRecord::Schema.define(version: 20160726093600) do t.string "health_check_access_token" t.boolean "send_user_confirmation_email", default: false t.integer "container_registry_token_expire_delay", default: 5 - t.boolean "user_default_external", default: false, null: false t.text "after_sign_up_text" + t.boolean "user_default_external", default: false, null: false t.string "repository_storage", default: "default" t.string "enabled_git_access_protocol" t.boolean "domain_blacklist_enabled", default: false @@ -167,8 +167,8 @@ ActiveRecord::Schema.define(version: 20160726093600) do t.text "artifacts_metadata" t.integer "erased_by_id" t.datetime "erased_at" - t.string "environment" t.datetime "artifacts_expire_at" + t.string "environment" t.integer "artifacts_size" t.string "when" t.text "yaml_variables" @@ -605,7 +605,7 @@ ActiveRecord::Schema.define(version: 20160726093600) do t.string "start_commit_sha" end - add_index "merge_request_diffs", ["merge_request_id"], name: "index_merge_request_diffs_on_merge_request_id", unique: true, using: :btree + add_index "merge_request_diffs", ["merge_request_id"], name: "index_merge_request_diffs_on_merge_request_id", using: :btree create_table "merge_requests", force: :cascade do |t| t.string "target_branch", null: false @@ -782,10 +782,10 @@ ActiveRecord::Schema.define(version: 20160726093600) do t.integer "user_id", null: false t.string "token", null: false t.string "name", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false t.boolean "revoked", default: false t.datetime "expires_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end add_index "personal_access_tokens", ["token"], name: "index_personal_access_tokens_on_token", unique: true, using: :btree @@ -847,8 +847,8 @@ ActiveRecord::Schema.define(version: 20160726093600) do t.boolean "only_allow_merge_if_build_succeeds", default: false, null: false t.boolean "has_external_issue_tracker" t.string "repository_storage", default: "default", null: false - t.boolean "has_external_wiki" t.boolean "request_access_enabled", default: true, null: false + t.boolean "has_external_wiki" end add_index "projects", ["builds_enabled", "shared_runners_enabled"], name: "index_projects_on_builds_enabled_and_shared_runners_enabled", using: :btree From 2afcc9e910bde32507e14be452c9f7681f5497e4 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 25 Jul 2016 14:10:21 +0300 Subject: [PATCH 002/107] Create new version of merge request diff on push instead of updating existing one Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index f1b9c1d6feb..ef0b7da048e 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -10,8 +10,7 @@ class MergeRequest < ActiveRecord::Base belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project" belongs_to :merge_user, class_name: "User" - has_one :merge_request_diff, dependent: :destroy - + has_many :merge_request_diffs, dependent: :destroy has_many :events, as: :target, dependent: :destroy serialize :merge_params, Hash @@ -294,7 +293,9 @@ class MergeRequest < ActiveRecord::Base end def reload_diff - return unless merge_request_diff && open? + return unless open? + + merge_request_diff = merge_request_diffs.create old_diff_refs = self.diff_refs @@ -691,4 +692,8 @@ class MergeRequest < ActiveRecord::Base def keep_around_commit project.repository.keep_around(self.merge_commit_sha) end + + def merge_request_diff + merge_request_diffs.first + end end From ceff8106433187613eb97d13952fc96c4806b847 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 25 Jul 2016 17:04:55 +0300 Subject: [PATCH 003/107] Create merge request diff on merge request creation Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index ef0b7da048e..88c5987d485 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -286,6 +286,10 @@ class MergeRequest < ActiveRecord::Base end end + def create_merge_request_diff + merge_request_diffs.create + end + def update_merge_request_diff if source_branch_changed? || target_branch_changed? reload_diff From 94ca25c9b8c62f9995fbd571c33954754950e1da Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 25 Jul 2016 18:42:57 +0300 Subject: [PATCH 004/107] Improve merge request diff creation and update tests Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 6 +----- spec/models/merge_request_spec.rb | 28 ++++++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 88c5987d485..cc1d0c18437 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -299,12 +299,8 @@ class MergeRequest < ActiveRecord::Base def reload_diff return unless open? - merge_request_diff = merge_request_diffs.create - old_diff_refs = self.diff_refs - - merge_request_diff.reload_content - + create_merge_request_diff new_diff_refs = self.diff_refs update_diff_notes_positions( diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index a0e3c26e542..03e4ae574ef 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -9,7 +9,7 @@ describe MergeRequest, models: true do it { is_expected.to belong_to(:target_project).with_foreign_key(:target_project_id).class_name('Project') } it { is_expected.to belong_to(:source_project).with_foreign_key(:source_project_id).class_name('Project') } it { is_expected.to belong_to(:merge_user).class_name("User") } - it { is_expected.to have_one(:merge_request_diff).dependent(:destroy) } + it { is_expected.to have_many(:merge_request_diffs).dependent(:destroy) } end describe 'modules' do @@ -134,7 +134,7 @@ describe MergeRequest, models: true do context 'when there are MR diffs' do it 'delegates to the MR diffs' do - merge_request.merge_request_diff = MergeRequestDiff.new + merge_request.merge_request_diffs.build expect(merge_request.merge_request_diff).to receive(:diffs).with(options) @@ -654,22 +654,26 @@ describe MergeRequest, models: true do let(:commit) { subject.project.commit(sample_commit.id) } - it "reloads the diff content" do - expect(subject.merge_request_diff).to receive(:reload_content) - + it "does not change existing merge request diff" do + expect(subject.merge_request_diff).not_to receive(:reload_content) subject.reload_diff end + it "creates new merge request diff" do + expect { subject.reload_diff }.to change { subject.merge_request_diffs.count }.by(1) + end + it "updates diff note positions" do old_diff_refs = subject.diff_refs - merge_request_diff = subject.merge_request_diff - # Update merge_request_diff so that #diff_refs will return commit.diff_refs - allow(merge_request_diff).to receive(:reload_content) do - merge_request_diff.base_commit_sha = commit.parent_id - merge_request_diff.start_commit_sha = commit.parent_id - merge_request_diff.head_commit_sha = commit.sha + allow(subject).to receive(:create_merge_request_diff) do + subject.merge_request_diffs.create( + importing: true, + base_commit_sha: commit.parent_id, + start_commit_sha: commit.parent_id, + head_commit_sha: commit.sha + ) end expect(Notes::DiffPositionUpdateService).to receive(:new).with( @@ -679,8 +683,8 @@ describe MergeRequest, models: true do new_diff_refs: commit.diff_refs, paths: note.position.paths ).and_call_original - expect_any_instance_of(Notes::DiffPositionUpdateService).to receive(:execute).with(note) + expect_any_instance_of(Notes::DiffPositionUpdateService).to receive(:execute).with(note) expect_any_instance_of(DiffNote).to receive(:save).once subject.reload_diff From b8fef7eb5948344f4d442a52637cad168f4c5bf1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 26 Jul 2016 18:24:25 +0300 Subject: [PATCH 005/107] Add ability to render different merge request versions Signed-off-by: Dmitriy Zaporozhets --- .../projects/merge_requests_controller.rb | 8 +++++++- app/models/merge_request_diff.rb | 10 ++++++++++ .../merge_requests/show/_diffs.html.haml | 5 +++-- .../merge_requests/show/_versions.html.haml | 18 ++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 app/views/projects/merge_requests/show/_versions.html.haml diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 03166294ddd..a886af713d5 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -81,7 +81,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController def diffs apply_diff_view_cookie! - @merge_request_diff = @merge_request.merge_request_diff + @merge_request_diff = + if params[:diff_id] + @merge_request.merge_request_diffs.find(params[:diff_id]) + else + @merge_request.merge_request_diff + end + respond_to do |format| format.html { define_discussion_vars } diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 3f520c8f3ff..a92f597225a 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -96,6 +96,16 @@ class MergeRequestDiff < ActiveRecord::Base end end + def diff_refs + return unless start_commit || base_commit + + Gitlab::Diff::DiffRefs.new( + base_sha: base_commit_sha, + start_sha: start_commit_sha, + head_sha: head_commit_sha + ) + end + private # Collect array of Git::Commit objects diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml index 1b0bae86ad4..e26499cc144 100644 --- a/app/views/projects/merge_requests/show/_diffs.html.haml +++ b/app/views/projects/merge_requests/show/_diffs.html.haml @@ -1,6 +1,7 @@ - if @merge_request_diff.collected? - = render "projects/diffs/diffs", diffs: @merge_request.diffs(diff_options), - project: @merge_request.project, diff_refs: @merge_request.diff_refs + = render 'projects/merge_requests/show/versions' + = render "projects/diffs/diffs", diffs: @merge_request_diff.diffs(diff_options), + project: @merge_request.project, diff_refs: @merge_request_diff.diff_refs - elsif @merge_request_diff.empty? .nothing-here-block Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch} - else diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml new file mode 100644 index 00000000000..2764786d9bf --- /dev/null +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -0,0 +1,18 @@ +- if @merge_request.merge_request_diffs.size > 1 + - latest_diff = @merge_request.merge_request_diff + .light-well + Merge Request version + + %span.dropdown.inline + %a.dropdown-toggle{ data: {toggle: :dropdown} } + %strong.monospace #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} + %span.caret + %ul.dropdown-menu + - @merge_request.merge_request_diffs.each do |merge_request_diff| + %li{ class: ('active' if merge_request_diff == latest_diff) } + = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id) do + %strong.monospace + #{merge_request_diff.base_commit.short_id}..#{merge_request_diff.head_commit.short_id} + %br + %small + = time_ago_with_tooltip(merge_request_diff.created_at) From dbd58dc4bb638be33f98336410ae6f4ede15f737 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 26 Jul 2016 20:03:45 +0300 Subject: [PATCH 006/107] Improve merge request version switcher Signed-off-by: Dmitriy Zaporozhets --- .../stylesheets/framework/dropdowns.scss | 6 +++++ .../stylesheets/pages/merge_requests.scss | 6 +++++ .../merge_requests/show/_versions.html.haml | 24 ++++++++++++------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index c54eb0d6479..28346423541 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -17,6 +17,12 @@ .dropdown { position: relative; + + .btn-link { + &:hover { + cursor: pointer; + } + } } .open { diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 0a661e529f0..14ded0eec72 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -371,3 +371,9 @@ } } } + +.mr-version-switch { + background: $background-color; + padding: $gl-btn-padding; + border-bottom: 1px solid $border-color; +} diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 2764786d9bf..5c0098bcf98 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -1,18 +1,24 @@ -- if @merge_request.merge_request_diffs.size > 1 - - latest_diff = @merge_request.merge_request_diff - .light-well - Merge Request version +- diffs_count = @merge_request.merge_request_diffs.count +- if diffs_count > 1 + - latest_diff = @merge_request.merge_request_diff + .mr-version-switch + Version:  %span.dropdown.inline - %a.dropdown-toggle{ data: {toggle: :dropdown} } - %strong.monospace #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} + %a.btn-link.dropdown-toggle{ data: {toggle: :dropdown} } + %strong.monospace< + - if latest_diff == @merge_request_diff + #{"latest"} + - else + #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} %span.caret - %ul.dropdown-menu + %ul.dropdown-menu.dropdown-menu-selectable - @merge_request.merge_request_diffs.each do |merge_request_diff| - %li{ class: ('active' if merge_request_diff == latest_diff) } - = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id) do + %li + = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id), class: ('is-active' if merge_request_diff == @merge_request_diff) do %strong.monospace #{merge_request_diff.base_commit.short_id}..#{merge_request_diff.head_commit.short_id} %br %small + = time_ago_with_tooltip(merge_request_diff.created_at) From 6190216541adb04fd0ce4b21862e6b253b868671 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 27 Jul 2016 11:27:06 +0300 Subject: [PATCH 007/107] Add small visual improvements to merge request version switch Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/pages/merge_requests.scss | 6 +++++- .../projects/merge_requests/show/_versions.html.haml | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 14ded0eec72..7d8f58ca5af 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -375,5 +375,9 @@ .mr-version-switch { background: $background-color; padding: $gl-btn-padding; - border-bottom: 1px solid $border-color; + color: $gl-placeholder-color; + + a.btn-link { + color: $gl-dark-link-color; + } } diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 5c0098bcf98..8b7d866941c 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -10,15 +10,18 @@ - if latest_diff == @merge_request_diff #{"latest"} - else - #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} + #{@merge_request_diff.head_commit.short_id} %span.caret %ul.dropdown-menu.dropdown-menu-selectable - @merge_request.merge_request_diffs.each do |merge_request_diff| %li = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id), class: ('is-active' if merge_request_diff == @merge_request_diff) do %strong.monospace - #{merge_request_diff.base_commit.short_id}..#{merge_request_diff.head_commit.short_id} + #{merge_request_diff.head_commit.short_id} %br %small - = time_ago_with_tooltip(merge_request_diff.created_at) + + .pull-right + %span.monospace + git diff #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} From 09fa0139281d7a76d6b40991f7672187fea40e67 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 27 Jul 2016 14:41:19 +0300 Subject: [PATCH 008/107] Refactor merge request diff Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 89 ++++++++++++++------------------ 1 file changed, 38 insertions(+), 51 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index a92f597225a..07bceda049c 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -8,7 +8,8 @@ class MergeRequestDiff < ActiveRecord::Base belongs_to :merge_request - delegate :source_branch_sha, :target_branch_sha, :target_branch, :source_branch, to: :merge_request, prefix: nil + delegate :source_branch_sha, :target_branch_sha, + :target_branch, :source_branch, to: :merge_request, prefix: nil state_machine :state, initial: :empty do state :collected @@ -24,9 +25,16 @@ class MergeRequestDiff < ActiveRecord::Base serialize :st_commits serialize :st_diffs + after_initialize :set_diff_range after_create :reload_content, unless: :importing? after_save :keep_around_commits, unless: :importing? + def set_diff_range + self.start_commit_sha ||= target_branch_sha + self.head_commit_sha ||= source_branch_sha + self.base_commit_sha ||= branch_base_sha + end + def reload_content reload_commits reload_diffs @@ -41,8 +49,8 @@ class MergeRequestDiff < ActiveRecord::Base @diffs_no_whitespace ||= begin compare = Gitlab::Git::Compare.new( repository.raw_repository, - self.start_commit_sha || self.target_branch_sha, - self.head_commit_sha || self.source_branch_sha, + start_commit_sha, + head_commit_sha ) compare.diffs(options) end @@ -65,35 +73,21 @@ class MergeRequestDiff < ActiveRecord::Base end def base_commit - return unless self.base_commit_sha + return unless base_commit_sha - project.commit(self.base_commit_sha) + project.commit(base_commit_sha) end def start_commit - return unless self.start_commit_sha + return unless start_commit_sha - project.commit(self.start_commit_sha) + project.commit(start_commit_sha) end def head_commit - return last_commit unless self.head_commit_sha + return last_commit unless head_commit_sha - project.commit(self.head_commit_sha) - end - - def compare - @compare ||= - begin - # Update ref for merge request - merge_request.fetch_ref - - Gitlab::Git::Compare.new( - repository.raw_repository, - self.target_branch_sha, - self.source_branch_sha - ) - end + project.commit(head_commit_sha) end def diff_refs @@ -108,16 +102,18 @@ class MergeRequestDiff < ActiveRecord::Base private - # Collect array of Git::Commit objects - # between target and source branches - def unmerged_commits - commits = compare.commits + def compare + @compare ||= + begin + # Update ref for merge request + merge_request.fetch_ref - if commits.present? - commits = Commit.decorate(commits, merge_request.source_project).reverse - end - - commits + Gitlab::Git::Compare.new( + repository.raw_repository, + start_commit_sha, + head_commit_sha + ) + end end def dump_commits(commits) @@ -133,21 +129,16 @@ class MergeRequestDiff < ActiveRecord::Base def reload_commits new_attributes = {} - commit_objects = unmerged_commits + commits = compare.commits - if commit_objects.present? - new_attributes[:st_commits] = dump_commits(commit_objects) + if commits.present? + commits = Commit.decorate(commits, merge_request.source_project).reverse + new_attributes[:st_commits] = dump_commits(commits) end update_columns_serialized(new_attributes) end - # Collect array of Git::Diff objects - # between target and source branches - def unmerged_diffs - compare.diffs(Commit.max_diff_options) - end - def dump_diffs(diffs) if diffs.respond_to?(:map) diffs.map(&:to_hash) @@ -177,7 +168,7 @@ class MergeRequestDiff < ActiveRecord::Base if commits.size.zero? new_attributes[:state] = :empty else - diff_collection = unmerged_diffs + diff_collection = compare.diffs(Commit.max_diff_options) if diff_collection.overflow? # Set our state to 'overflow' to make the #empty? and #collected? @@ -195,10 +186,6 @@ class MergeRequestDiff < ActiveRecord::Base new_attributes[:st_diffs] = new_diffs - new_attributes[:start_commit_sha] = self.target_branch_sha - new_attributes[:head_commit_sha] = self.source_branch_sha - new_attributes[:base_commit_sha] = branch_base_sha - update_columns_serialized(new_attributes) keep_around_commits @@ -213,9 +200,9 @@ class MergeRequestDiff < ActiveRecord::Base end def branch_base_commit - return unless self.source_branch_sha && self.target_branch_sha + return unless source_branch_sha && target_branch_sha - project.merge_base_commit(self.source_branch_sha, self.target_branch_sha) + project.merge_base_commit(source_branch_sha, target_branch_sha) end def branch_base_sha @@ -254,8 +241,8 @@ class MergeRequestDiff < ActiveRecord::Base end def keep_around_commits - repository.keep_around(target_branch_sha) - repository.keep_around(source_branch_sha) - repository.keep_around(branch_base_sha) + repository.keep_around(start_commit_sha) + repository.keep_around(head_commit_sha) + repository.keep_around(base_commit_sha) end end From 5d5f2cf3ef7bc238f75d9a73ce94efceec6f690e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 27 Jul 2016 17:55:12 +0300 Subject: [PATCH 009/107] Add feature test for merge request version Signed-off-by: Dmitriy Zaporozhets --- .../merge_request_versions_spec.rb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 spec/features/merge_requests/merge_request_versions_spec.rb diff --git a/spec/features/merge_requests/merge_request_versions_spec.rb b/spec/features/merge_requests/merge_request_versions_spec.rb new file mode 100644 index 00000000000..862ead4e72e --- /dev/null +++ b/spec/features/merge_requests/merge_request_versions_spec.rb @@ -0,0 +1,38 @@ +require 'spec_helper' + +feature 'Merge Request versions', js: true, feature: true do + before do + login_as :admin + merge_request = create(:merge_request, importing: true) + merge_request.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') + merge_request.merge_request_diffs.create(head_commit_sha: '5937ac0a7beb003549fc5fd26fc247adbce4a52e') + project = merge_request.source_project + visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) + end + + it 'show the latest version of the diff' do + page.within '.mr-version-switch' do + expect(page).to have_content 'Version: latest' + end + + expect(page).to have_content '8 changed files' + end + + describe 'switch between versions' do + before do + page.within '.mr-version-switch' do + find('.btn-link').click + #find('a', text: '6f6d7e7e').click + click_link '6f6d7e7e' + end + end + + it 'should show older version' do + page.within '.mr-version-switch' do + expect(page).to have_content 'Version: 6f6d7e7e' + end + + expect(page).to have_content '5 changed files' + end + end +end From 988836bc807a6e7ba5362fd8bddd330d1f3bf19b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 11:36:30 +0300 Subject: [PATCH 010/107] Refactor MergeRequestDiff model Since MergeRequestDiff is not about branches and current state of merge request diff anymore I removed most of branch related method and added validation for head/start/base commit sha. From this point MergeRequestDiff is about saving diff between branches only once at moment of creation. Once created MergeRequestDiff should not be changes. Because of that we should not rely on changes in source/target branches when read from MergeRequestDiff Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 07bceda049c..1e529c84706 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -8,9 +8,6 @@ class MergeRequestDiff < ActiveRecord::Base belongs_to :merge_request - delegate :source_branch_sha, :target_branch_sha, - :target_branch, :source_branch, to: :merge_request, prefix: nil - state_machine :state, initial: :empty do state :collected state :overflow @@ -25,14 +22,23 @@ class MergeRequestDiff < ActiveRecord::Base serialize :st_commits serialize :st_diffs - after_initialize :set_diff_range - after_create :reload_content, unless: :importing? + validates :head_commit_sha, presence: true + validates :start_commit_sha, presence: true + validates :base_commit_sha, presence: true + + after_initialize :ensure_head_commit_sha, if: :persisted? + before_create :set_diff_range, unless: :importing? + after_create :reload_content, unless: :importing? after_save :keep_around_commits, unless: :importing? + def ensure_head_commit_sha + self.head_commit_sha ||= last_commit.sha + end + def set_diff_range - self.start_commit_sha ||= target_branch_sha - self.head_commit_sha ||= source_branch_sha - self.base_commit_sha ||= branch_base_sha + self.start_commit_sha ||= merge_request.target_branch_sha + self.head_commit_sha ||= merge_request.source_branch_sha + self.base_commit_sha ||= find_base_sha end def reload_content @@ -199,14 +205,10 @@ class MergeRequestDiff < ActiveRecord::Base project.repository end - def branch_base_commit - return unless source_branch_sha && target_branch_sha + def find_base_sha + return unless head_commit_sha && start_commit_sha - project.merge_base_commit(source_branch_sha, target_branch_sha) - end - - def branch_base_sha - branch_base_commit.try(:sha) + project.merge_base_commit(head_commit_sha, start_commit_sha).try(:sha) end def utf8_st_diffs From 964742f600f5fc5e07272982c4d3847ccc76ce00 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 13:46:27 +0300 Subject: [PATCH 011/107] Ensure merge request is created with valid diff object * Add merge_request_diff validation to merge_request model * Improve initialize of merge_request_diff object * Rename some merge_request_diff methods for clarity Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 7 +++++- app/models/merge_request_diff.rb | 41 +++++++++++++++++--------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index cc1d0c18437..618829891a0 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -15,7 +15,7 @@ class MergeRequest < ActiveRecord::Base serialize :merge_params, Hash - after_create :create_merge_request_diff, unless: :importing? + before_validation :ensure_merge_request_diff, on: :create, unless: :importing? after_update :update_merge_request_diff delegate :commits, :real_size, to: :merge_request_diff, prefix: nil @@ -95,6 +95,7 @@ class MergeRequest < ActiveRecord::Base validates :merge_user, presence: true, if: :merge_when_build_succeeds? validate :validate_branches, unless: [:allow_broken, :importing?] validate :validate_fork + validates_associated :merge_request_diff, on: :create, unless: [:allow_broken, :importing?] scope :by_branch, ->(branch_name) { where("(source_branch LIKE :branch) OR (target_branch LIKE :branch)", branch: branch_name) } scope :cared, ->(user) { where('assignee_id = :user OR author_id = :user', user: user.id) } @@ -286,6 +287,10 @@ class MergeRequest < ActiveRecord::Base end end + def ensure_merge_request_diff + merge_request_diff || merge_request_diffs.build + end + def create_merge_request_diff merge_request_diffs.create end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 1e529c84706..da1e317027d 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -22,28 +22,31 @@ class MergeRequestDiff < ActiveRecord::Base serialize :st_commits serialize :st_diffs - validates :head_commit_sha, presence: true validates :start_commit_sha, presence: true + validates :head_commit_sha, presence: true validates :base_commit_sha, presence: true - after_initialize :ensure_head_commit_sha, if: :persisted? - before_create :set_diff_range, unless: :importing? - after_create :reload_content, unless: :importing? - after_save :keep_around_commits, unless: :importing? - - def ensure_head_commit_sha - self.head_commit_sha ||= last_commit.sha - end + after_initialize :set_diff_range, unless: :importing? + after_create :save_git_content, unless: :importing? + after_save :keep_around_commits, unless: :importing? def set_diff_range - self.start_commit_sha ||= merge_request.target_branch_sha - self.head_commit_sha ||= merge_request.source_branch_sha - self.base_commit_sha ||= find_base_sha + if persisted? + # Workaround for old MergeRequestDiff object + # that does not have head_commit_sha in the database + self.head_commit_sha ||= last_commit.sha + else + self.start_commit_sha ||= merge_request.target_branch_sha + self.head_commit_sha ||= merge_request.source_branch_sha + self.base_commit_sha ||= find_base_sha + end end - def reload_content - reload_commits - reload_diffs + # Collect information about commits and diff from repository + # and save it to the database as serialized data + def save_git_content + save_commits + save_diffs end def size @@ -130,9 +133,9 @@ class MergeRequestDiff < ActiveRecord::Base array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash), merge_request.source_project) } end - # Reload all commits related to current merge request from repo + # Load all commits related to current merge request diff from repo # and save it as array of hashes in st_commits db field - def reload_commits + def save_commits new_attributes = {} commits = compare.commits @@ -165,9 +168,9 @@ class MergeRequestDiff < ActiveRecord::Base end end - # Reload diffs between branches related to current merge request from repo + # Load diffs between branches related to current merge request diff from repo # and save it as array of hashes in st_diffs db field - def reload_diffs + def save_diffs new_attributes = {} new_diffs = [] From 5cad2d290219d29aa2be6e991b42b73ac9d87754 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 17:26:54 +0300 Subject: [PATCH 012/107] Add improvements to merge request versions * show commits count in the merge request version dropdown * initialize base/start commit sha for old merge request diffs from repo Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 4 +++- app/views/projects/merge_requests/show/_versions.html.haml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index da1e317027d..2bc0b2636f4 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -34,7 +34,9 @@ class MergeRequestDiff < ActiveRecord::Base if persisted? # Workaround for old MergeRequestDiff object # that does not have head_commit_sha in the database - self.head_commit_sha ||= last_commit.sha + self.start_commit_sha ||= merge_request.target_branch_sha + self.head_commit_sha ||= last_commit.sha + self.base_commit_sha ||= find_base_sha else self.start_commit_sha ||= merge_request.target_branch_sha self.head_commit_sha ||= merge_request.source_branch_sha diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 8b7d866941c..93a06154022 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -20,8 +20,9 @@ #{merge_request_diff.head_commit.short_id} %br %small + #{number_with_delimiter(merge_request_diff.commits.count)} #{'commit'.pluralize(merge_request_diff.commits.count)}, = time_ago_with_tooltip(merge_request_diff.created_at) .pull-right %span.monospace - git diff #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} + #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} From 8e031ce3b29b186858ddda2a28a6ea8f98b2f749 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 17:41:35 +0300 Subject: [PATCH 013/107] Remove requirement for base_commit_sha to allow creation of merge requests for orphaned branches Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 2bc0b2636f4..da0c15ddeea 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -22,9 +22,8 @@ class MergeRequestDiff < ActiveRecord::Base serialize :st_commits serialize :st_diffs - validates :start_commit_sha, presence: true - validates :head_commit_sha, presence: true - validates :base_commit_sha, presence: true + validates :start_commit_sha, presence: true, unless: :importing? + validates :head_commit_sha, presence: true, unless: :importing? after_initialize :set_diff_range, unless: :importing? after_create :save_git_content, unless: :importing? From b0a023842d4e9fc29db7fa6c7168528d9e4ac09d Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 18:41:57 +0300 Subject: [PATCH 014/107] Reload merge request association reload when update code Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 9 ++------- spec/models/merge_request_spec.rb | 5 ++--- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 618829891a0..08523e45c65 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -246,13 +246,7 @@ class MergeRequest < ActiveRecord::Base end def diff_refs - return unless diff_start_commit || diff_base_commit - - Gitlab::Diff::DiffRefs.new( - base_sha: diff_base_sha, - start_sha: diff_start_sha, - head_sha: diff_head_sha - ) + merge_request_diff.diff_refs end def validate_branches @@ -306,6 +300,7 @@ class MergeRequest < ActiveRecord::Base old_diff_refs = self.diff_refs create_merge_request_diff + merge_request_diffs.reload new_diff_refs = self.diff_refs update_diff_notes_positions( diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 03e4ae574ef..f095e23f7ac 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -291,7 +291,7 @@ describe MergeRequest, models: true do end it "can be removed if the last commit is the head of the source branch" do - allow(subject.source_project).to receive(:commit).and_return(subject.diff_head_commit) + allow(subject).to receive(:source_branch_head).and_return(subject.diff_head_commit) expect(subject.can_remove_source_branch?(user)).to be_truthy end @@ -655,7 +655,7 @@ describe MergeRequest, models: true do let(:commit) { subject.project.commit(sample_commit.id) } it "does not change existing merge request diff" do - expect(subject.merge_request_diff).not_to receive(:reload_content) + expect(subject.merge_request_diff).not_to receive(:save_git_content) subject.reload_diff end @@ -669,7 +669,6 @@ describe MergeRequest, models: true do # Update merge_request_diff so that #diff_refs will return commit.diff_refs allow(subject).to receive(:create_merge_request_diff) do subject.merge_request_diffs.create( - importing: true, base_commit_sha: commit.parent_id, start_commit_sha: commit.parent_id, head_commit_sha: commit.sha From 0e974b52d8f5806c24fdc80ef5b62b261f5be2ba Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 22:36:18 +0300 Subject: [PATCH 015/107] Refactor MergeRequestDiff initialize method Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 26 ++++++++----------- .../merge_request_versions_spec.rb | 1 - 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index da0c15ddeea..940a1016302 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -25,22 +25,18 @@ class MergeRequestDiff < ActiveRecord::Base validates :start_commit_sha, presence: true, unless: :importing? validates :head_commit_sha, presence: true, unless: :importing? - after_initialize :set_diff_range, unless: :importing? - after_create :save_git_content, unless: :importing? - after_save :keep_around_commits, unless: :importing? + after_initialize :initialize_commits_sha, unless: :importing? + after_create :save_git_content, unless: :importing? + after_save :keep_around_commits, unless: :importing? - def set_diff_range - if persisted? - # Workaround for old MergeRequestDiff object - # that does not have head_commit_sha in the database - self.start_commit_sha ||= merge_request.target_branch_sha - self.head_commit_sha ||= last_commit.sha - self.base_commit_sha ||= find_base_sha - else - self.start_commit_sha ||= merge_request.target_branch_sha - self.head_commit_sha ||= merge_request.source_branch_sha - self.base_commit_sha ||= find_base_sha - end + # Those variables are used for collecting commits and diff from git repository. + # After object is created those sha are stored in the database. + # However some old MergeRequestDiff records don't + # have those variables in the database so we try to initialize it + def initialize_commits_sha + self.start_commit_sha ||= merge_request.target_branch_sha + self.head_commit_sha ||= last_commit.try(:sha) || merge_request.source_branch_sha + self.base_commit_sha ||= find_base_sha end # Collect information about commits and diff from repository diff --git a/spec/features/merge_requests/merge_request_versions_spec.rb b/spec/features/merge_requests/merge_request_versions_spec.rb index 862ead4e72e..577c910f11b 100644 --- a/spec/features/merge_requests/merge_request_versions_spec.rb +++ b/spec/features/merge_requests/merge_request_versions_spec.rb @@ -22,7 +22,6 @@ feature 'Merge Request versions', js: true, feature: true do before do page.within '.mr-version-switch' do find('.btn-link').click - #find('a', text: '6f6d7e7e').click click_link '6f6d7e7e' end end From 3c1dca0301366c63d1800aa11e73a82e68e120d0 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 28 Jul 2016 23:40:13 +0300 Subject: [PATCH 016/107] Add more tests to merge_request_diff and improve initialize Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 4 +++- app/models/merge_request_diff.rb | 4 +--- spec/models/merge_request_diff_spec.rb | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 08523e45c65..6d36a5ba288 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -246,7 +246,9 @@ class MergeRequest < ActiveRecord::Base end def diff_refs - merge_request_diff.diff_refs + if merge_request_diff + merge_request_diff.diff_refs + end end def validate_branches diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 940a1016302..b668b62cdac 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -35,7 +35,7 @@ class MergeRequestDiff < ActiveRecord::Base # have those variables in the database so we try to initialize it def initialize_commits_sha self.start_commit_sha ||= merge_request.target_branch_sha - self.head_commit_sha ||= last_commit.try(:sha) || merge_request.source_branch_sha + self.head_commit_sha ||= persisted? ? last_commit.sha : merge_request.source_branch_sha self.base_commit_sha ||= find_base_sha end @@ -191,9 +191,7 @@ class MergeRequestDiff < ActiveRecord::Base end new_attributes[:st_diffs] = new_diffs - update_columns_serialized(new_attributes) - keep_around_commits end diff --git a/spec/models/merge_request_diff_spec.rb b/spec/models/merge_request_diff_spec.rb index 9a637c94fbe..16bba82181b 100644 --- a/spec/models/merge_request_diff_spec.rb +++ b/spec/models/merge_request_diff_spec.rb @@ -1,6 +1,23 @@ require 'spec_helper' describe MergeRequestDiff, models: true do + describe 'initialize new object' do + subject { build(:merge_request).merge_request_diffs.build } + + it { expect(subject).to be_valid } + it { expect(subject.head_commit_sha).to eq('5937ac0a7beb003549fc5fd26fc247adbce4a52e') } + it { expect(subject.base_commit_sha).to eq('ae73cb07c9eeaf35924a10f713b364d32b2dd34f') } + it { expect(subject.start_commit_sha).to eq('0b4bc9a49b562e85de7cc9e834518ea6828729b9') } + end + + describe 'create new record' do + subject { create(:merge_request) } + + it { expect(subject).to be_valid } + it { expect(subject.commits.count).to eq(5) } + it { expect(subject.diffs.count).to eq(8) } + end + describe '#diffs' do let(:mr) { create(:merge_request, :with_diffs) } let(:mr_diff) { mr.merge_request_diff } From f8aeb8cdac98108bca5d1be2a382c32df6a500e5 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 1 Aug 2016 18:41:21 +0300 Subject: [PATCH 017/107] Change merge request diff creation from callback to part of the service Signed-off-by: Dmitriy Zaporozhets --- app/controllers/projects/merge_requests_controller.rb | 1 - app/models/merge_request.rb | 5 ----- app/services/merge_requests/create_service.rb | 1 + spec/factories/merge_requests.rb | 6 ++++++ spec/models/merge_request_diff_spec.rb | 3 ++- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index a886af713d5..33188e88385 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -88,7 +88,6 @@ class Projects::MergeRequestsController < Projects::ApplicationController @merge_request.merge_request_diff end - respond_to do |format| format.html { define_discussion_vars } format.json { render json: { html: view_to_html_string("projects/merge_requests/show/_diffs") } } diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 6d36a5ba288..85048f928dc 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -15,7 +15,6 @@ class MergeRequest < ActiveRecord::Base serialize :merge_params, Hash - before_validation :ensure_merge_request_diff, on: :create, unless: :importing? after_update :update_merge_request_diff delegate :commits, :real_size, to: :merge_request_diff, prefix: nil @@ -283,10 +282,6 @@ class MergeRequest < ActiveRecord::Base end end - def ensure_merge_request_diff - merge_request_diff || merge_request_diffs.build - end - def create_merge_request_diff merge_request_diffs.create end diff --git a/app/services/merge_requests/create_service.rb b/app/services/merge_requests/create_service.rb index 96a25330af1..553d7443c86 100644 --- a/app/services/merge_requests/create_service.rb +++ b/app/services/merge_requests/create_service.rb @@ -16,6 +16,7 @@ module MergeRequests merge_request.target_project ||= source_project merge_request.author = current_user merge_request.merge_params['force_remove_source_branch'] = force_remove_source_branch + merge_request.merge_request_diffs.build if merge_request.save merge_request.update_attributes(label_ids: label_params) diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb index c6a08d78b78..05851c49497 100644 --- a/spec/factories/merge_requests.rb +++ b/spec/factories/merge_requests.rb @@ -68,5 +68,11 @@ FactoryGirl.define do factory :closed_merge_request, traits: [:closed] factory :reopened_merge_request, traits: [:reopened] factory :merge_request_with_diffs, traits: [:with_diffs] + + after :create do |merge_request| + unless merge_request.merge_request_diff + merge_request.create_merge_request_diff + end + end end end diff --git a/spec/models/merge_request_diff_spec.rb b/spec/models/merge_request_diff_spec.rb index 16bba82181b..0a55515e8c6 100644 --- a/spec/models/merge_request_diff_spec.rb +++ b/spec/models/merge_request_diff_spec.rb @@ -11,9 +11,10 @@ describe MergeRequestDiff, models: true do end describe 'create new record' do - subject { create(:merge_request) } + subject { create(:merge_request).merge_request_diff } it { expect(subject).to be_valid } + it { expect(subject).to be_persisted } it { expect(subject.commits.count).to eq(5) } it { expect(subject.diffs.count).to eq(8) } end From 6515ec09bbfa25027d1b8a1240e09bc1c6edbcfb Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 2 Aug 2016 15:38:03 +0300 Subject: [PATCH 018/107] Chnage the way how merge request diff is initialized and saved Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 15 +++--- app/models/merge_request_diff.rb | 54 +++++++++++-------- app/services/merge_requests/create_service.rb | 1 - features/project/merge_requests.feature | 2 +- features/steps/project/merge_requests.rb | 6 +-- spec/factories/merge_requests.rb | 6 --- spec/models/merge_request_diff_spec.rb | 12 ++--- 7 files changed, 44 insertions(+), 52 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 85048f928dc..6f2216ab5db 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -11,11 +11,13 @@ class MergeRequest < ActiveRecord::Base belongs_to :merge_user, class_name: "User" has_many :merge_request_diffs, dependent: :destroy + has_one :merge_request_diff has_many :events, as: :target, dependent: :destroy serialize :merge_params, Hash - after_update :update_merge_request_diff + after_create :ensure_merge_request_diff, unless: :importing? + after_update :reload_diff_if_branch_changed delegate :commits, :real_size, to: :merge_request_diff, prefix: nil @@ -94,7 +96,6 @@ class MergeRequest < ActiveRecord::Base validates :merge_user, presence: true, if: :merge_when_build_succeeds? validate :validate_branches, unless: [:allow_broken, :importing?] validate :validate_fork - validates_associated :merge_request_diff, on: :create, unless: [:allow_broken, :importing?] scope :by_branch, ->(branch_name) { where("(source_branch LIKE :branch) OR (target_branch LIKE :branch)", branch: branch_name) } scope :cared, ->(user) { where('assignee_id = :user OR author_id = :user', user: user.id) } @@ -282,11 +283,11 @@ class MergeRequest < ActiveRecord::Base end end - def create_merge_request_diff - merge_request_diffs.create + def ensure_merge_request_diff + merge_request_diff || create_merge_request_diff end - def update_merge_request_diff + def reload_diff_if_branch_changed if source_branch_changed? || target_branch_changed? reload_diff end @@ -689,8 +690,4 @@ class MergeRequest < ActiveRecord::Base def keep_around_commit project.repository.keep_around(self.merge_commit_sha) end - - def merge_request_diff - merge_request_diffs.first - end end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index b668b62cdac..074d8f5d40a 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -22,28 +22,28 @@ class MergeRequestDiff < ActiveRecord::Base serialize :st_commits serialize :st_diffs - validates :start_commit_sha, presence: true, unless: :importing? - validates :head_commit_sha, presence: true, unless: :importing? + # For compatibility with old MergeRequestDiff which + # does not store those variables in database + after_initialize :ensure_commits_sha, if: :persisted? - after_initialize :initialize_commits_sha, unless: :importing? + # All diff information is collected from repository after object is created. + # It allows you to override variables like head_commit_sha before getting diff. after_create :save_git_content, unless: :importing? - after_save :keep_around_commits, unless: :importing? - - # Those variables are used for collecting commits and diff from git repository. - # After object is created those sha are stored in the database. - # However some old MergeRequestDiff records don't - # have those variables in the database so we try to initialize it - def initialize_commits_sha - self.start_commit_sha ||= merge_request.target_branch_sha - self.head_commit_sha ||= persisted? ? last_commit.sha : merge_request.source_branch_sha - self.base_commit_sha ||= find_base_sha - end # Collect information about commits and diff from repository # and save it to the database as serialized data def save_git_content + ensure_commits_sha save_commits + reload_commits save_diffs + keep_around_commits + end + + def ensure_commits_sha + self.start_commit_sha ||= merge_request.target_branch_sha + self.head_commit_sha ||= last_commit.try(:sha) || merge_request.source_branch_sha + self.base_commit_sha ||= find_base_sha end def size @@ -52,14 +52,15 @@ class MergeRequestDiff < ActiveRecord::Base def diffs(options={}) if options[:ignore_whitespace_change] - @diffs_no_whitespace ||= begin - compare = Gitlab::Git::Compare.new( - repository.raw_repository, - start_commit_sha, - head_commit_sha - ) - compare.diffs(options) - end + @diffs_no_whitespace ||= + begin + compare = Gitlab::Git::Compare.new( + repository.raw_repository, + start_commit_sha, + head_commit_sha + ) + compare.diffs(options) + end else @diffs ||= {} @diffs[options] ||= load_diffs(st_diffs, options) @@ -70,6 +71,11 @@ class MergeRequestDiff < ActiveRecord::Base @commits ||= load_commits(st_commits || []) end + def reload_commits + @commits = nil + commits + end + def last_commit commits.first end @@ -192,7 +198,6 @@ class MergeRequestDiff < ActiveRecord::Base new_attributes[:st_diffs] = new_diffs update_columns_serialized(new_attributes) - keep_around_commits end def project @@ -207,6 +212,9 @@ class MergeRequestDiff < ActiveRecord::Base return unless head_commit_sha && start_commit_sha project.merge_base_commit(head_commit_sha, start_commit_sha).try(:sha) + rescue Rugged::OdbError + # In case head or start commit does not exist in the repository any more + nil end def utf8_st_diffs diff --git a/app/services/merge_requests/create_service.rb b/app/services/merge_requests/create_service.rb index 553d7443c86..96a25330af1 100644 --- a/app/services/merge_requests/create_service.rb +++ b/app/services/merge_requests/create_service.rb @@ -16,7 +16,6 @@ module MergeRequests merge_request.target_project ||= source_project merge_request.author = current_user merge_request.merge_params['force_remove_source_branch'] = force_remove_source_branch - merge_request.merge_request_diffs.build if merge_request.save merge_request.update_attributes(label_ids: label_params) diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature index 21768c15c17..7673b4284ef 100644 --- a/features/project/merge_requests.feature +++ b/features/project/merge_requests.feature @@ -24,7 +24,7 @@ Feature: Project Merge Requests Scenario: I should see target branch when it is different from default Given project "Shop" have "Bug NS-06" open merge request When I visit project "Shop" merge requests page - Then I should see "other_branch" branch + Then I should see "feature_conflict" branch Scenario: I should not see the numbers of diverged commits if the branch is rebased on the target Given project "Shop" have "Bug NS-07" open merge request with rebased branch diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb index da848afd48e..74e162aadee 100644 --- a/features/steps/project/merge_requests.rb +++ b/features/steps/project/merge_requests.rb @@ -56,8 +56,8 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps expect(find('.merge-request-info')).not_to have_content "master" end - step 'I should see "other_branch" branch' do - expect(page).to have_content "other_branch" + step 'I should see "feature_conflict" branch' do + expect(page).to have_content "feature_conflict" end step 'I should see "Bug NS-04" in merge requests' do @@ -122,7 +122,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps source_project: project, target_project: project, source_branch: 'fix', - target_branch: 'other_branch', + target_branch: 'feature_conflict', author: project.users.first, description: "# Description header" ) diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb index 05851c49497..c6a08d78b78 100644 --- a/spec/factories/merge_requests.rb +++ b/spec/factories/merge_requests.rb @@ -68,11 +68,5 @@ FactoryGirl.define do factory :closed_merge_request, traits: [:closed] factory :reopened_merge_request, traits: [:reopened] factory :merge_request_with_diffs, traits: [:with_diffs] - - after :create do |merge_request| - unless merge_request.merge_request_diff - merge_request.create_merge_request_diff - end - end end end diff --git a/spec/models/merge_request_diff_spec.rb b/spec/models/merge_request_diff_spec.rb index 0a55515e8c6..f2954a39b08 100644 --- a/spec/models/merge_request_diff_spec.rb +++ b/spec/models/merge_request_diff_spec.rb @@ -1,15 +1,6 @@ require 'spec_helper' describe MergeRequestDiff, models: true do - describe 'initialize new object' do - subject { build(:merge_request).merge_request_diffs.build } - - it { expect(subject).to be_valid } - it { expect(subject.head_commit_sha).to eq('5937ac0a7beb003549fc5fd26fc247adbce4a52e') } - it { expect(subject.base_commit_sha).to eq('ae73cb07c9eeaf35924a10f713b364d32b2dd34f') } - it { expect(subject.start_commit_sha).to eq('0b4bc9a49b562e85de7cc9e834518ea6828729b9') } - end - describe 'create new record' do subject { create(:merge_request).merge_request_diff } @@ -17,6 +8,9 @@ describe MergeRequestDiff, models: true do it { expect(subject).to be_persisted } it { expect(subject.commits.count).to eq(5) } it { expect(subject.diffs.count).to eq(8) } + it { expect(subject.head_commit_sha).to eq('5937ac0a7beb003549fc5fd26fc247adbce4a52e') } + it { expect(subject.base_commit_sha).to eq('ae73cb07c9eeaf35924a10f713b364d32b2dd34f') } + it { expect(subject.start_commit_sha).to eq('0b4bc9a49b562e85de7cc9e834518ea6828729b9') } end describe '#diffs' do From 7cb8ceb5b9b7da6f9bd5f80a50eeca6727ac5902 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 2 Aug 2016 16:28:37 +0300 Subject: [PATCH 019/107] Fix creation and reload of the merge request diff Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 6f2216ab5db..8b0b413343c 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -11,7 +11,9 @@ class MergeRequest < ActiveRecord::Base belongs_to :merge_user, class_name: "User" has_many :merge_request_diffs, dependent: :destroy - has_one :merge_request_diff + has_one :merge_request_diff, + -> { order('merge_request_diffs.id DESC') } + has_many :events, as: :target, dependent: :destroy serialize :merge_params, Hash @@ -287,6 +289,15 @@ class MergeRequest < ActiveRecord::Base merge_request_diff || create_merge_request_diff end + def create_merge_request_diff + merge_request_diffs.create + reload_merge_request_diff + end + + def reload_merge_request_diff + merge_request_diff(true) + end + def reload_diff_if_branch_changed if source_branch_changed? || target_branch_changed? reload_diff @@ -298,7 +309,6 @@ class MergeRequest < ActiveRecord::Base old_diff_refs = self.diff_refs create_merge_request_diff - merge_request_diffs.reload new_diff_refs = self.diff_refs update_diff_notes_positions( From fc8d2fbc946d144d2a9d075d67a9f1fe1035da0e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 2 Aug 2016 17:52:20 +0300 Subject: [PATCH 020/107] Build diff_refs for merge request if merge request diff does not exist Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 8b0b413343c..56d5157298f 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -250,6 +250,12 @@ class MergeRequest < ActiveRecord::Base def diff_refs if merge_request_diff merge_request_diff.diff_refs + elsif diff_start_commit || diff_base_commit + Gitlab::Diff::DiffRefs.new( + base_sha: diff_base_sha, + start_sha: diff_start_sha, + head_sha: diff_head_sha + ) end end From 159998a460be6ca1ea5efd135a5c3aefeab2d9b6 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 2 Aug 2016 18:07:50 +0300 Subject: [PATCH 021/107] Fix merge request spec for update diff note Signed-off-by: Dmitriy Zaporozhets --- spec/models/merge_request_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index f095e23f7ac..eb382f9ef84 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -673,6 +673,8 @@ describe MergeRequest, models: true do start_commit_sha: commit.parent_id, head_commit_sha: commit.sha ) + + subject.merge_request_diff(true) end expect(Notes::DiffPositionUpdateService).to receive(:new).with( From 9a5f40878c6d71e7fd4858f7fa1d948af6c371ae Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 3 Aug 2016 11:32:29 +0300 Subject: [PATCH 022/107] Add API to list merge request diff versions Signed-off-by: Dmitriy Zaporozhets --- doc/api/merge_requests.md | 90 +++++++++++++++++++ lib/api/api.rb | 1 + lib/api/entities.rb | 11 +++ lib/api/merge_request_diffs.rb | 25 ++++++ spec/requests/api/merge_request_diffs_spec.rb | 32 +++++++ 5 files changed, 159 insertions(+) create mode 100644 lib/api/merge_request_diffs.rb create mode 100644 spec/requests/api/merge_request_diffs_spec.rb diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index e00882e6d5d..cf262dc4a80 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -894,3 +894,93 @@ Example response: "created_at": "2016-07-01T11:14:15.530Z" } ``` + +## Get MR diff versions + +Get a list of merge request diff versions. + +``` +GET /projects/:id/merge_requests/:merge_request_id/versions +``` + +Parameters: + +- `id` (required) - The ID of a project +- `merge_request_id` (required) - The ID of MR + + +```json +[{ + "id": 110, + "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-26T14:44:48.926Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1", + "commits": [{ + "id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", + "short_id": "33e2ee85", + "title": "Change year to 2018", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-26T17:44:29.000+03:00", + "message": "Change year to 2018" + }, { + "id": "aa24655de48b36335556ac8a3cd8bb521f977cbd", + "short_id": "aa24655d", + "title": "Update LICENSE", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-25T17:21:53.000+03:00", + "message": "Update LICENSE" + }, { + "id": "3eed087b29835c48015768f839d76e5ea8f07a24", + "short_id": "3eed087b", + "title": "Add license", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-25T17:21:20.000+03:00", + "message": "Add license" + }], + "diffs": [{ + "old_path": "LICENSE", + "new_path": "LICENSE", + "a_mode": "0", + "b_mode": "100644", + "diff": "--- /dev/null\n+++ b/LICENSE\n@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2018 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n", + "new_file": true, + "renamed_file": false, + "deleted_file": false + }] +}, { + "id": 108, + "head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-25T14:21:33.028Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1", + "commits": [{ + "id": "3eed087b29835c48015768f839d76e5ea8f07a24", + "short_id": "3eed087b", + "title": "Add license", + "author_name": "Administrator", + "author_email": "admin@example.com", + "created_at": "2016-07-25T17:21:20.000+03:00", + "message": "Add license" + }], + "diffs": [{ + "old_path": "LICENSE", + "new_path": "LICENSE", + "a_mode": "0", + "b_mode": "100644", + "diff": "--- /dev/null\n+++ b/LICENSE\n@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2016 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n", + "new_file": true, + "renamed_file": false, + "deleted_file": false + }] +}] +``` diff --git a/lib/api/api.rb b/lib/api/api.rb index bd16806892b..9d8f297191f 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -67,5 +67,6 @@ module API mount ::API::Triggers mount ::API::Users mount ::API::Variables + mount ::API::MergeRequestDiffs end end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 3e21b7a0b8a..af069063f0c 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -228,6 +228,17 @@ module API end end + class MergeRequestDiff < Grape::Entity + expose :id, :head_commit_sha, :base_commit_sha, :start_commit_sha, + :created_at, :merge_request_id, :state, :real_size + + expose :commits, using: Entities::RepoCommit + + expose :diffs, using: Entities::RepoDiff do |compare, _| + compare.diffs(all_diffs: true).to_a + end + end + class SSHKey < Grape::Entity expose :id, :title, :key, :created_at end diff --git a/lib/api/merge_request_diffs.rb b/lib/api/merge_request_diffs.rb new file mode 100644 index 00000000000..4bd149d1603 --- /dev/null +++ b/lib/api/merge_request_diffs.rb @@ -0,0 +1,25 @@ +module API + # MergeRequestDiff API + class MergeRequestDiffs < Grape::API + before { authenticate! } + + resource :projects do + # List merge requests diff versions + # + # Parameters: + # id (required) - The ID of a project + # merge_request_id (required) - The ID of MR + # + # Example: + # GET /projects/:id/merge_requests/:merge_request_id/versions + # + get ":id/merge_requests/:merge_request_id/versions" do + merge_request = user_project.merge_requests. + find(params[:merge_request_id]) + + authorize! :read_merge_request, merge_request + present merge_request.merge_request_diffs, with: Entities::MergeRequestDiff + end + end + end +end diff --git a/spec/requests/api/merge_request_diffs_spec.rb b/spec/requests/api/merge_request_diffs_spec.rb new file mode 100644 index 00000000000..db076b4b9a5 --- /dev/null +++ b/spec/requests/api/merge_request_diffs_spec.rb @@ -0,0 +1,32 @@ +require "spec_helper" + +describe API::API, 'MergeRequestDiffs', api: true do + include ApiHelpers + + let!(:user) { create(:user) } + let!(:merge_request) { create(:merge_request, importing: true) } + let!(:project) { merge_request.target_project } + + before do + merge_request.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') + merge_request.merge_request_diffs.create(head_commit_sha: '5937ac0a7beb003549fc5fd26fc247adbce4a52e') + project.team << [user, :master] + end + + describe 'GET /projects/:id/merge_requests/:merge_request_id/versions' do + context 'valid merge request' do + before { get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/versions", user) } + let(:merge_request_diff) { merge_request.merge_request_diffs.first } + + it { expect(response.status).to eq 200 } + it { expect(json_response.size).to eq(merge_request.merge_request_diffs.size) } + it { expect(json_response.first['id']).to eq(merge_request_diff.id) } + it { expect(json_response.first['head_commit_sha']).to eq(merge_request_diff.head_commit_sha) } + end + + it 'returns a 404 when merge_request_id not found' do + get api("/projects/#{project.id}/merge_requests/999/versions", user) + expect(response).to have_http_status(404) + end + end +end From 69096ad9da77ce51d544a8f23f4e8873df273f4e Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 3 Aug 2016 11:58:09 +0300 Subject: [PATCH 023/107] Update merge request versions API to match styleguide Signed-off-by: Dmitriy Zaporozhets --- doc/api/merge_requests.md | 11 ++++++++--- lib/api/merge_request_diffs.rb | 19 ++++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index cf262dc4a80..68b5172ed0d 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -903,11 +903,16 @@ Get a list of merge request diff versions. GET /projects/:id/merge_requests/:merge_request_id/versions ``` -Parameters: +| Attribute | Type | Required | Description | +| --------- | ------- | -------- | --------------------- | +| `id` | integer | yes | The ID of the project | +| `merge_request_id` | integer | yes | The ID of the merge request | -- `id` (required) - The ID of a project -- `merge_request_id` (required) - The ID of MR +```bash +curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/1/merge_requests/1/versions +``` +Example response: ```json [{ diff --git a/lib/api/merge_request_diffs.rb b/lib/api/merge_request_diffs.rb index 4bd149d1603..be954ff96ac 100644 --- a/lib/api/merge_request_diffs.rb +++ b/lib/api/merge_request_diffs.rb @@ -4,15 +4,16 @@ module API before { authenticate! } resource :projects do - # List merge requests diff versions - # - # Parameters: - # id (required) - The ID of a project - # merge_request_id (required) - The ID of MR - # - # Example: - # GET /projects/:id/merge_requests/:merge_request_id/versions - # + desc 'Get a list of merge request diff versions' do + detail 'This feature was introduced in GitLab 8.12.' + success Entities::MergeRequestDiff + end + + params do + requires :id, type: Integer, desc: 'The ID of a project' + requests :merge_request_id, type: Integer, desc: 'The ID of a merge request' + end + get ":id/merge_requests/:merge_request_id/versions" do merge_request = user_project.merge_requests. find(params[:merge_request_id]) From 08f5f897889dc7e7f00a65f56e988449350e60f2 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 3 Aug 2016 12:35:20 +0300 Subject: [PATCH 024/107] Fix project id param for merge request version API Signed-off-by: Dmitriy Zaporozhets --- doc/api/merge_requests.md | 2 +- lib/api/merge_request_diffs.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index 68b5172ed0d..0c06cfcd876 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -905,7 +905,7 @@ GET /projects/:id/merge_requests/:merge_request_id/versions | Attribute | Type | Required | Description | | --------- | ------- | -------- | --------------------- | -| `id` | integer | yes | The ID of the project | +| `id` | String | yes | The ID of the project | | `merge_request_id` | integer | yes | The ID of the merge request | ```bash diff --git a/lib/api/merge_request_diffs.rb b/lib/api/merge_request_diffs.rb index be954ff96ac..a2f92f81107 100644 --- a/lib/api/merge_request_diffs.rb +++ b/lib/api/merge_request_diffs.rb @@ -10,8 +10,8 @@ module API end params do - requires :id, type: Integer, desc: 'The ID of a project' - requests :merge_request_id, type: Integer, desc: 'The ID of a merge request' + requires :id, type: String, desc: 'The ID of a project' + requires :merge_request_id, type: Integer, desc: 'The ID of a merge request' end get ":id/merge_requests/:merge_request_id/versions" do From d99d5198c2df6f931664b8096bcbfc28e8221145 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 8 Aug 2016 23:00:11 +0300 Subject: [PATCH 025/107] Add MergeRequest#branch_merge_base_commit method Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 35 ++++++++++++++++++++++++------- spec/models/merge_request_spec.rb | 17 +++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 56d5157298f..7e3444882ea 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -177,8 +177,8 @@ class MergeRequest < ActiveRecord::Base def diff_base_commit if persisted? merge_request_diff.base_commit - elsif diff_start_commit && diff_head_commit - self.target_project.merge_base_commit(diff_start_sha, diff_head_sha) + else + branch_merge_base_commit end end @@ -239,6 +239,15 @@ class MergeRequest < ActiveRecord::Base target_project.repository.commit(target_branch) if target_branch_ref end + def branch_merge_base_commit + start_sha = target_branch_sha + head_sha = source_branch_sha + + if start_sha && head_sha + target_project.merge_base_commit(start_sha, head_sha) + end + end + def target_branch_sha @target_branch_sha || target_branch_head.try(:sha) end @@ -247,15 +256,25 @@ class MergeRequest < ActiveRecord::Base @source_branch_sha || source_branch_head.try(:sha) end + def branch_merge_base_sha + branch_merge_base_commit.try(:sha) + end + def diff_refs if merge_request_diff merge_request_diff.diff_refs - elsif diff_start_commit || diff_base_commit - Gitlab::Diff::DiffRefs.new( - base_sha: diff_base_sha, - start_sha: diff_start_sha, - head_sha: diff_head_sha - ) + else + start_sha = target_branch_sha + head_sha = source_branch_sha + base_sha = branch_merge_base_sha + + if start_sha || base_sha + Gitlab::Diff::DiffRefs.new( + base_sha: base_sha, + start_sha: start_sha, + head_sha: head_sha + ) + end end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index eb382f9ef84..d32bec53a28 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -691,4 +691,21 @@ describe MergeRequest, models: true do subject.reload_diff end end + + describe '#branch_merge_base_commit' do + context 'source and target branch exist' do + it { expect(subject.branch_merge_base_commit.sha).to eq('ae73cb07c9eeaf35924a10f713b364d32b2dd34f') } + it { expect(subject.branch_merge_base_commit).to be_a(Commit) } + end + + context 'when the target branch does not exist' do + before do + subject.project.repository.raw_repository.delete_branch(subject.target_branch) + end + + it 'returns nil' do + expect(subject.branch_merge_base_commit).to be_nil + end + end + end end From 28e33df46bdffac3dc9388b56035db38dcdab5e3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 9 Aug 2016 15:16:50 +0300 Subject: [PATCH 026/107] Load merge request versions without loading whole diff from database Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 4 ++++ .../projects/merge_requests/show/_versions.html.haml | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 074d8f5d40a..24e09c4d57c 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -30,6 +30,10 @@ class MergeRequestDiff < ActiveRecord::Base # It allows you to override variables like head_commit_sha before getting diff. after_create :save_git_content, unless: :importing? + def self.select_without_diff + select(column_names - ['st_diffs']) + end + # Collect information about commits and diff from repository # and save it to the database as serialized data def save_git_content diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 93a06154022..84c2b83e330 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -1,7 +1,7 @@ -- diffs_count = @merge_request.merge_request_diffs.count +- merge_request_diffs = @merge_request.merge_request_diffs.select_without_diff +- latest_diff = merge_request_diffs.first -- if diffs_count > 1 - - latest_diff = @merge_request.merge_request_diff +- if merge_request_diffs.size > 1 .mr-version-switch Version:  %span.dropdown.inline @@ -13,7 +13,7 @@ #{@merge_request_diff.head_commit.short_id} %span.caret %ul.dropdown-menu.dropdown-menu-selectable - - @merge_request.merge_request_diffs.each do |merge_request_diff| + - merge_request_diffs.each do |merge_request_diff| %li = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id), class: ('is-active' if merge_request_diff == @merge_request_diff) do %strong.monospace From 445edcfacc583ba613a4b865b104d7d7e1f7ec0f Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 12 Aug 2016 13:08:16 +0300 Subject: [PATCH 027/107] Remove unnecessary   in merge request versions dropdown Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/merge_requests/show/_versions.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 84c2b83e330..15d94b16ced 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -3,7 +3,7 @@ - if merge_request_diffs.size > 1 .mr-version-switch - Version:  + Version: %span.dropdown.inline %a.btn-link.dropdown-toggle{ data: {toggle: :dropdown} } %strong.monospace< From ac072132b8f0e36badf297208a5964109dbed126 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 12 Aug 2016 14:44:49 +0300 Subject: [PATCH 028/107] Add single merge request diff API endpoint Signed-off-by: Dmitriy Zaporozhets --- doc/api/merge_requests.md | 72 +++++++++++-------- lib/api/entities.rb | 2 + lib/api/merge_request_diffs.rb | 19 +++++ spec/requests/api/merge_request_diffs_spec.rb | 17 +++++ 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index 0c06cfcd876..130488bf7c1 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -916,6 +916,48 @@ Example response: ```json [{ + "id": 110, + "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-26T14:44:48.926Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1" +}, { + "id": 108, + "head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24", + "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", + "created_at": "2016-07-25T14:21:33.028Z", + "merge_request_id": 105, + "state": "collected", + "real_size": "1" +}] +``` + +## Get a single MR diff version + +Get a single merge request diff version. + +``` +GET /projects/:id/merge_requests/:merge_request_id/versions/:version_id +``` + +| Attribute | Type | Required | Description | +| --------- | ------- | -------- | --------------------- | +| `id` | String | yes | The ID of the project | +| `merge_request_id` | integer | yes | The ID of the merge request | +| `version_id` | integer | yes | The ID of the merge request diff version | + +```bash +curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/1/merge_requests/1/versions/1 +``` + +Example response: + +```json +{ "id": 110, "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", @@ -959,33 +1001,5 @@ Example response: "renamed_file": false, "deleted_file": false }] -}, { - "id": 108, - "head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24", - "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", - "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd", - "created_at": "2016-07-25T14:21:33.028Z", - "merge_request_id": 105, - "state": "collected", - "real_size": "1", - "commits": [{ - "id": "3eed087b29835c48015768f839d76e5ea8f07a24", - "short_id": "3eed087b", - "title": "Add license", - "author_name": "Administrator", - "author_email": "admin@example.com", - "created_at": "2016-07-25T17:21:20.000+03:00", - "message": "Add license" - }], - "diffs": [{ - "old_path": "LICENSE", - "new_path": "LICENSE", - "a_mode": "0", - "b_mode": "100644", - "diff": "--- /dev/null\n+++ b/LICENSE\n@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2016 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n", - "new_file": true, - "renamed_file": false, - "deleted_file": false - }] -}] +} ``` diff --git a/lib/api/entities.rb b/lib/api/entities.rb index af069063f0c..f582b2ce250 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -231,7 +231,9 @@ module API class MergeRequestDiff < Grape::Entity expose :id, :head_commit_sha, :base_commit_sha, :start_commit_sha, :created_at, :merge_request_id, :state, :real_size + end + class MergeRequestDiffFull < MergeRequestDiff expose :commits, using: Entities::RepoCommit expose :diffs, using: Entities::RepoDiff do |compare, _| diff --git a/lib/api/merge_request_diffs.rb b/lib/api/merge_request_diffs.rb index a2f92f81107..07435d78468 100644 --- a/lib/api/merge_request_diffs.rb +++ b/lib/api/merge_request_diffs.rb @@ -21,6 +21,25 @@ module API authorize! :read_merge_request, merge_request present merge_request.merge_request_diffs, with: Entities::MergeRequestDiff end + + desc 'Get a single merge request diff version' do + detail 'This feature was introduced in GitLab 8.12.' + success Entities::MergeRequestDiffFull + end + + params do + requires :id, type: String, desc: 'The ID of a project' + requires :merge_request_id, type: Integer, desc: 'The ID of a merge request' + requires :version_id, type: Integer, desc: 'The ID of a merge request diff version' + end + + get ":id/merge_requests/:merge_request_id/versions/:version_id" do + merge_request = user_project.merge_requests. + find(params[:merge_request_id]) + + authorize! :read_merge_request, merge_request + present merge_request.merge_request_diffs.find(params[:version_id]), with: Entities::MergeRequestDiffFull + end end end end diff --git a/spec/requests/api/merge_request_diffs_spec.rb b/spec/requests/api/merge_request_diffs_spec.rb index db076b4b9a5..8f1e5ac9891 100644 --- a/spec/requests/api/merge_request_diffs_spec.rb +++ b/spec/requests/api/merge_request_diffs_spec.rb @@ -29,4 +29,21 @@ describe API::API, 'MergeRequestDiffs', api: true do expect(response).to have_http_status(404) end end + + describe 'GET /projects/:id/merge_requests/:merge_request_id/versions/:version_id' do + context 'valid merge request' do + before { get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/versions/#{merge_request_diff.id}", user) } + let(:merge_request_diff) { merge_request.merge_request_diffs.first } + + it { expect(response.status).to eq 200 } + it { expect(json_response['id']).to eq(merge_request_diff.id) } + it { expect(json_response['head_commit_sha']).to eq(merge_request_diff.head_commit_sha) } + it { expect(json_response['diffs'].size).to eq(merge_request_diff.diffs.size) } + end + + it 'returns a 404 when merge_request_id not found' do + get api("/projects/#{project.id}/merge_requests/#{merge_request.id}/versions/999", user) + expect(response).to have_http_status(404) + end + end end From a8fe213ebbb4a1aa48a20c908ba989190d20f2a1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 12 Aug 2016 15:40:00 +0300 Subject: [PATCH 029/107] Add documentation for merge request versions Signed-off-by: Dmitriy Zaporozhets --- doc/workflow/merge_requests.md | 8 ++++++++ doc/workflow/merge_requests/versions.png | Bin 0 -> 100566 bytes 2 files changed, 8 insertions(+) create mode 100644 doc/workflow/merge_requests/versions.png diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md index d2ec56e6504..a81b1080ca6 100644 --- a/doc/workflow/merge_requests.md +++ b/doc/workflow/merge_requests.md @@ -61,3 +61,11 @@ If you click the "Hide whitespace changes" button, you can see the diff without It is also working on commits compare view. ![Commit Compare](merge_requests/commit_compare.png) + +## Merge Requests versions + +Every time you push to merge request branch, a new version of merge request diff +is created. When you visit the merge request page you see latest version of changes. +However you can select an older one from version dropdown + +![Merge Request Versions](merge_requests/versions.png) diff --git a/doc/workflow/merge_requests/versions.png b/doc/workflow/merge_requests/versions.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a6dfe6806a0baf710b4c1f93fb10836ed7ce8d GIT binary patch literal 100566 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.=&w5(3zB{g{IfOREj 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 Yv6D)f$|*X2M+M?-tn4i-PhGnCKiJ>iwg3PC literal 0 HcmV?d00001 From 29ac60d7fbb8208880408dbf98a94acd0ae73730 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Aug 2016 15:20:36 +0300 Subject: [PATCH 030/107] Change the way old merge request diff handled Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request.rb | 2 +- app/models/merge_request_diff.rb | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 7e3444882ea..b7c2afb0920 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -261,7 +261,7 @@ class MergeRequest < ActiveRecord::Base end def diff_refs - if merge_request_diff + if persisted? merge_request_diff.diff_refs else start_sha = target_branch_sha diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 24e09c4d57c..4c18775c44a 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -22,10 +22,6 @@ class MergeRequestDiff < ActiveRecord::Base serialize :st_commits serialize :st_diffs - # For compatibility with old MergeRequestDiff which - # does not store those variables in database - after_initialize :ensure_commits_sha, if: :persisted? - # All diff information is collected from repository after object is created. # It allows you to override variables like head_commit_sha before getting diff. after_create :save_git_content, unless: :importing? @@ -50,6 +46,20 @@ class MergeRequestDiff < ActiveRecord::Base self.base_commit_sha ||= find_base_sha end + # This method will rely on repository branch sha + # in case start_commit_sha is nil. Its necesarry for old merge request diff + # created before version 8.4 to work + def safe_start_commit_sha + start_commit_sha || merge_request.target_branch_sha + end + + # This method will rely on repository branch sha + # in case head_commit_sha is nil. Its necesarry for old merge request diff + # created before version 8.4 to work + def safe_head_commit_sha + head_commit_sha || last_commit.try(:sha) || merge_request.source_branch_sha + end + def size real_size.presence || diffs.size end @@ -60,8 +70,8 @@ class MergeRequestDiff < ActiveRecord::Base begin compare = Gitlab::Git::Compare.new( repository.raw_repository, - start_commit_sha, - head_commit_sha + safe_start_commit_sha, + safe_head_commit_sha ) compare.diffs(options) end @@ -126,8 +136,8 @@ class MergeRequestDiff < ActiveRecord::Base Gitlab::Git::Compare.new( repository.raw_repository, - start_commit_sha, - head_commit_sha + safe_start_commit_sha, + safe_head_commit_sha ) end end @@ -216,9 +226,6 @@ class MergeRequestDiff < ActiveRecord::Base return unless head_commit_sha && start_commit_sha project.merge_base_commit(head_commit_sha, start_commit_sha).try(:sha) - rescue Rugged::OdbError - # In case head or start commit does not exist in the repository any more - nil end def utf8_st_diffs From 94a7198ade54595d72797cab09db2c2a89172535 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Aug 2016 16:25:29 +0300 Subject: [PATCH 031/107] Fix merge request diff create and head_commit_sha compatibility Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 4c18775c44a..950b00f1001 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -42,8 +42,19 @@ class MergeRequestDiff < ActiveRecord::Base def ensure_commits_sha self.start_commit_sha ||= merge_request.target_branch_sha - self.head_commit_sha ||= last_commit.try(:sha) || merge_request.source_branch_sha + self.head_commit_sha ||= merge_request.source_branch_sha self.base_commit_sha ||= find_base_sha + save + end + + # Override head_commit_sha to keep compatibility with merge request diff + # created before version 8.4 that does not store head_commit_sha in separate db field. + def head_commit_sha + if persisted? && super.nil? + last_commit.try(:sha) + else + super + end end # This method will rely on repository branch sha @@ -57,7 +68,7 @@ class MergeRequestDiff < ActiveRecord::Base # in case head_commit_sha is nil. Its necesarry for old merge request diff # created before version 8.4 to work def safe_head_commit_sha - head_commit_sha || last_commit.try(:sha) || merge_request.source_branch_sha + head_commit_sha || merge_request.source_branch_sha end def size @@ -111,7 +122,7 @@ class MergeRequestDiff < ActiveRecord::Base end def head_commit - return last_commit unless head_commit_sha + return unless head_commit_sha project.commit(head_commit_sha) end From 643a368fa437725cbfffcfdc251055c4d125438c Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Aug 2016 17:57:19 +0300 Subject: [PATCH 032/107] Make merge request diff works with new FileCollection logic Signed-off-by: Dmitriy Zaporozhets --- .../projects/merge_requests_controller.rb | 2 +- app/models/merge_request.rb | 6 +++--- app/models/merge_request_diff.rb | 14 +++++++++----- .../merge_requests/show/_diffs.html.haml | 1 + .../{merge_request.rb => merge_request_diff.rb} | 16 ++++++++-------- 5 files changed, 22 insertions(+), 17 deletions(-) rename lib/gitlab/diff/file_collection/{merge_request.rb => merge_request_diff.rb} (83%) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index a0b80c823fb..a4b1262896c 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -91,7 +91,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController respond_to do |format| format.html { define_discussion_vars } format.json do - @diffs = @merge_request.diffs(diff_options) + @diffs = @merge_request_diff.diffs(diff_options) render json: { html: view_to_html_string("projects/merge_requests/show/_diffs") } end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 7c3845ef538..104f9c7223d 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -172,10 +172,10 @@ class MergeRequest < ActiveRecord::Base end def diffs(diff_options = nil) - if self.compare - self.compare.diffs(diff_options) + if compare + compare.diffs(diff_options) else - Gitlab::Diff::FileCollection::MergeRequest.new(self, diff_options: diff_options) + merge_request_diff.diffs(diff_options) end end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 8920641cfec..9a34d099acd 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -141,7 +141,13 @@ class MergeRequestDiff < ActiveRecord::Base base_commit_sha? && head_commit_sha? && start_commit_sha? end - private + def diffs(diff_options = nil) + Gitlab::Diff::FileCollection::MergeRequestDiff.new(self, diff_options: diff_options) + end + + def project + merge_request.target_project + end def compare @compare ||= @@ -157,6 +163,8 @@ class MergeRequestDiff < ActiveRecord::Base end end + private + def dump_commits(commits) commits.map(&:to_hash) end @@ -229,10 +237,6 @@ class MergeRequestDiff < ActiveRecord::Base update_columns_serialized(new_attributes) end - def project - merge_request.target_project - end - def repository project.repository end diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml index 013b05628fa..99c71e1454a 100644 --- a/app/views/projects/merge_requests/show/_diffs.html.haml +++ b/app/views/projects/merge_requests/show/_diffs.html.haml @@ -1,4 +1,5 @@ - if @merge_request_diff.collected? + = render 'projects/merge_requests/show/versions' = render "projects/diffs/diffs", diffs: @diffs - elsif @merge_request_diff.empty? .nothing-here-block Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch} diff --git a/lib/gitlab/diff/file_collection/merge_request.rb b/lib/gitlab/diff/file_collection/merge_request_diff.rb similarity index 83% rename from lib/gitlab/diff/file_collection/merge_request.rb rename to lib/gitlab/diff/file_collection/merge_request_diff.rb index 4f946908e2f..36348b33943 100644 --- a/lib/gitlab/diff/file_collection/merge_request.rb +++ b/lib/gitlab/diff/file_collection/merge_request_diff.rb @@ -1,14 +1,14 @@ module Gitlab module Diff module FileCollection - class MergeRequest < Base - def initialize(merge_request, diff_options:) - @merge_request = merge_request + class MergeRequestDiff < Base + def initialize(merge_request_diff, diff_options:) + @merge_request_diff = merge_request_diff - super(merge_request, - project: merge_request.project, + super(merge_request_diff, + project: merge_request_diff.project, diff_options: diff_options, - diff_refs: merge_request.diff_refs) + diff_refs: merge_request_diff.diff_refs) end def diff_files @@ -61,11 +61,11 @@ module Gitlab end def cacheable? - @merge_request.merge_request_diff.present? + @merge_request_diff.present? end def cache_key - [@merge_request.merge_request_diff, 'highlighted-diff-files', diff_options] + [@merge_request_diff, 'highlighted-diff-files', diff_options] end end end From 49d63dc131da899ac2c91c26fe7e22f02da34dbd Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Aug 2016 18:11:18 +0300 Subject: [PATCH 033/107] Fix and refactor merge request diff_refs method Signed-off-by: Dmitriy Zaporozhets --- app/models/diff_note.rb | 6 +----- app/models/merge_request.rb | 17 ++--------------- app/models/merge_request_diff.rb | 2 +- spec/models/merge_request_spec.rb | 13 +++++++------ 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/app/models/diff_note.rb b/app/models/diff_note.rb index c816deb4e0c..364e1a8341b 100644 --- a/app/models/diff_note.rb +++ b/app/models/diff_note.rb @@ -79,11 +79,7 @@ class DiffNote < Note end def noteable_diff_refs - if noteable.respond_to?(:diff_sha_refs) - noteable.diff_sha_refs - else - noteable.diff_refs - end + noteable.diff_refs end def set_original_position diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 104f9c7223d..007c2aa74e1 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -270,7 +270,7 @@ class MergeRequest < ActiveRecord::Base end def diff_refs - if persisted? + if merge_request_diff && merge_request_diff.diff_refs_by_sha? merge_request_diff.diff_refs else start_sha = target_branch_sha @@ -287,19 +287,6 @@ class MergeRequest < ActiveRecord::Base end end - # Return diff_refs instance trying to not touch the git repository - def diff_sha_refs - if merge_request_diff && merge_request_diff.diff_refs_by_sha? - return Gitlab::Diff::DiffRefs.new( - base_sha: merge_request_diff.base_commit_sha, - start_sha: merge_request_diff.start_commit_sha, - head_sha: merge_request_diff.head_commit_sha - ) - else - diff_refs - end - end - def validate_branches if target_project == source_project && target_branch == source_branch errors.add :branch_conflict, "You can not use same project/branch for source and target" @@ -716,7 +703,7 @@ class MergeRequest < ActiveRecord::Base end def support_new_diff_notes? - diff_sha_refs && diff_sha_refs.complete? + diff_refs && diff_refs.complete? end def update_diff_notes_positions(old_diff_refs:, new_diff_refs:) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 9a34d099acd..a769d31ac93 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -128,7 +128,7 @@ class MergeRequestDiff < ActiveRecord::Base end def diff_refs - return unless start_commit || base_commit + return unless start_commit_sha || base_commit_sha Gitlab::Diff::DiffRefs.new( base_sha: base_commit_sha, diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 9de9f19a27c..7242c4fc8d3 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -723,7 +723,6 @@ describe MergeRequest, models: true do end end -<<<<<<< HEAD describe '#branch_merge_base_commit' do context 'source and target branch exist' do it { expect(subject.branch_merge_base_commit.sha).to eq('ae73cb07c9eeaf35924a10f713b364d32b2dd34f') } @@ -737,8 +736,11 @@ describe MergeRequest, models: true do it 'returns nil' do expect(subject.branch_merge_base_commit).to be_nil -======= - describe "#diff_sha_refs" do + end + end + end + + describe "#diff_refs" do context "with diffs" do subject { create(:merge_request, :with_diffs) } @@ -747,7 +749,7 @@ describe MergeRequest, models: true do expect_any_instance_of(Repository).not_to receive(:commit) - subject.diff_sha_refs + subject.diff_refs end it "returns expected diff_refs" do @@ -757,8 +759,7 @@ describe MergeRequest, models: true do head_sha: subject.merge_request_diff.head_commit_sha ) - expect(subject.diff_sha_refs).to eq(expected_diff_refs) ->>>>>>> master + expect(subject.diff_refs).to eq(expected_diff_refs) end end end From a94553a90c16b58c9cc9d56488e3aa3c35b8d699 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 15 Aug 2016 18:22:26 +0300 Subject: [PATCH 034/107] Fix merge request diffs spec Signed-off-by: Dmitriy Zaporozhets --- spec/models/merge_request_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 7242c4fc8d3..c066b65e7ba 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -159,7 +159,7 @@ describe MergeRequest, models: true do context 'when there are MR diffs' do it 'delegates to the MR diffs' do - merge_request.merge_request_diffs.build + merge_request.save expect(merge_request.merge_request_diff).to receive(:raw_diffs).with(hash_including(options)) From e067e699c3250882ea08594243b6c6d3ad84d6e0 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 19 Aug 2016 12:35:16 +0300 Subject: [PATCH 035/107] Make sure merge request is fetched before collecting base sha in merge request diff Signed-off-by: Dmitriy Zaporozhets --- app/models/merge_request_diff.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index a769d31ac93..42ab6b620bd 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -41,6 +41,7 @@ class MergeRequestDiff < ActiveRecord::Base end def ensure_commits_sha + merge_request.fetch_ref self.start_commit_sha ||= merge_request.target_branch_sha self.head_commit_sha ||= merge_request.source_branch_sha self.base_commit_sha ||= find_base_sha From 74461ccc1f1503c86102b7d8e790ebac0d28fc0b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 19 Aug 2016 12:35:40 +0300 Subject: [PATCH 036/107] Fix merge request versions api doc Signed-off-by: Dmitriy Zaporozhets --- doc/api/merge_requests.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index 66957647d00..1cf4940198f 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -909,7 +909,7 @@ GET /projects/:id/merge_requests/:merge_request_id/versions | `merge_request_id` | integer | yes | The ID of the merge request | ```bash -curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/1/merge_requests/1/versions +curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/1/merge_requests/1/versions ``` Example response: @@ -951,7 +951,7 @@ GET /projects/:id/merge_requests/:merge_request_id/versions/:version_id | `version_id` | integer | yes | The ID of the merge request diff version | ```bash -curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/1/merge_requests/1/versions/1 +curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/1/merge_requests/1/versions/1 ``` Example response: From 06ac1c26a14be73f409138f2877c236f352bcdf9 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Sat, 20 Aug 2016 20:42:53 +0200 Subject: [PATCH 037/107] Add tests coverage report badge to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fee93d5f9c3..f00dec0ab82 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # GitLab [![build status](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/build.svg)](https://gitlab.com/gitlab-org/gitlab-ce/commits/master) +[![coverage report](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)](https://gitlab.com/gitlab-org/gitlab-ce/commits/master) [![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.svg)](https://codeclimate.com/github/gitlabhq/gitlabhq) ## Canonical source From eb355dec8768ef128795309c6c9ffa296a6eee22 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Aug 2016 14:18:58 +0300 Subject: [PATCH 038/107] Restore diff_sha_refs method Signed-off-by: Dmitriy Zaporozhets --- app/models/diff_note.rb | 6 +++++- app/models/merge_request.rb | 31 ++++++++++++++++--------------- spec/models/merge_request_spec.rb | 6 +++--- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/app/models/diff_note.rb b/app/models/diff_note.rb index 0c23c1c1934..c8320ff87fa 100644 --- a/app/models/diff_note.rb +++ b/app/models/diff_note.rb @@ -118,7 +118,11 @@ class DiffNote < Note end def noteable_diff_refs - noteable.diff_refs + if noteable.respond_to?(:diff_sha_refs) + noteable.diff_sha_refs + else + noteable.diff_refs + end end def set_original_position diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 14b785e6bd4..615e550cf05 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -265,28 +265,29 @@ class MergeRequest < ActiveRecord::Base @source_branch_sha || source_branch_head.try(:sha) end - def branch_merge_base_sha - branch_merge_base_commit.try(:sha) + def diff_refs + return unless diff_start_commit || diff_base_commit + + Gitlab::Diff::DiffRefs.new( + base_sha: diff_base_sha, + start_sha: diff_start_sha, + head_sha: diff_head_sha + ) end - def diff_refs + # Return diff_refs instance trying to not touch the git repository + def diff_sha_refs if merge_request_diff && merge_request_diff.diff_refs_by_sha? merge_request_diff.diff_refs else - start_sha = target_branch_sha - head_sha = source_branch_sha - base_sha = branch_merge_base_sha - - if start_sha || base_sha - Gitlab::Diff::DiffRefs.new( - base_sha: base_sha, - start_sha: start_sha, - head_sha: head_sha - ) - end + diff_refs end end + def branch_merge_base_sha + branch_merge_base_commit.try(:sha) + end + def validate_branches if target_project == source_project && target_branch == source_branch errors.add :branch_conflict, "You can not use same project/branch for source and target" @@ -748,7 +749,7 @@ class MergeRequest < ActiveRecord::Base end def has_complete_diff_refs? - diff_refs && diff_refs.complete? + diff_sha_refs && diff_sha_refs.complete? end def update_diff_notes_positions(old_diff_refs:, new_diff_refs:) diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 573c8c6c9ce..18d178be49c 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -782,7 +782,7 @@ describe MergeRequest, models: true do end end - describe "#diff_refs" do + describe "#diff_sha_refs" do context "with diffs" do subject { create(:merge_request, :with_diffs) } @@ -791,7 +791,7 @@ describe MergeRequest, models: true do expect_any_instance_of(Repository).not_to receive(:commit) - subject.diff_refs + subject.diff_sha_refs end it "returns expected diff_refs" do @@ -801,7 +801,7 @@ describe MergeRequest, models: true do head_sha: subject.merge_request_diff.head_commit_sha ) - expect(subject.diff_refs).to eq(expected_diff_refs) + expect(subject.diff_sha_refs).to eq(expected_diff_refs) end end end From dde44b83ddeae75a5c14810d0571ee5c7ab0a26d Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Aug 2016 15:30:23 +0300 Subject: [PATCH 039/107] Fix merge request diff api Signed-off-by: Dmitriy Zaporozhets --- lib/api/entities.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 3f050a8fd81..3241cb7ca56 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -246,7 +246,7 @@ module API expose :commits, using: Entities::RepoCommit expose :diffs, using: Entities::RepoDiff do |compare, _| - compare.diffs(all_diffs: true).to_a + compare.raw_diffs(all_diffs: true).to_a end end From d7a9dcc1b14d6abc723b232dbedd025469511cb7 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Aug 2016 15:44:48 +0300 Subject: [PATCH 040/107] Fix merge request diff cache service spec Signed-off-by: Dmitriy Zaporozhets --- .../merge_requests/merge_request_diff_cache_service_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb b/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb index c4b87468275..807f89e80b7 100644 --- a/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb +++ b/spec/services/merge_requests/merge_request_diff_cache_service_spec.rb @@ -6,7 +6,7 @@ describe MergeRequests::MergeRequestDiffCacheService do describe '#execute' do it 'retrieves the diff files to cache the highlighted result' do merge_request = create(:merge_request) - cache_key = [merge_request.merge_request_diff, 'highlighted-diff-files', Gitlab::Diff::FileCollection::MergeRequest.default_options] + cache_key = [merge_request.merge_request_diff, 'highlighted-diff-files', Gitlab::Diff::FileCollection::MergeRequestDiff.default_options] expect(Rails.cache).to receive(:read).with(cache_key).and_return({}) expect(Rails.cache).to receive(:write).with(cache_key, anything) From 7b3fd81673e595b48b4c0e5f1ca5f1ab806f8ac3 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Aug 2016 18:21:28 +0300 Subject: [PATCH 041/107] Disable comments on older merge request diff Signed-off-by: Dmitriy Zaporozhets --- app/controllers/projects/merge_requests_controller.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 438dd928853..eff959c781c 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -93,6 +93,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController respond_to do |format| format.html { define_discussion_vars } format.json do + if @merge_request_diff != @merge_request.merge_request_diff + # Disable comments if browsing older version of the diff + @diff_notes_disabled = true + end + @diffs = @merge_request_diff.diffs(diff_options) render json: { html: view_to_html_string("projects/merge_requests/show/_diffs") } From 4b1a98ba9847579db32da95ed479e2da098eb155 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Aug 2016 21:15:06 +0300 Subject: [PATCH 042/107] Fix db schema via db:migrate:reset Signed-off-by: Dmitriy Zaporozhets --- db/schema.rb | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index 4947745b232..77f114ede45 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -70,11 +70,11 @@ ActiveRecord::Schema.define(version: 20160819221833) do t.string "recaptcha_site_key" t.string "recaptcha_private_key" t.integer "metrics_port", default: 8089 + t.boolean "akismet_enabled", default: false + t.string "akismet_api_key" t.integer "metrics_sample_interval", default: 15 t.boolean "sentry_enabled", default: false t.string "sentry_dsn" - t.boolean "akismet_enabled", default: false - t.string "akismet_api_key" t.boolean "email_author_in_body", default: false t.integer "default_group_visibility" t.boolean "repository_checks_enabled", default: false @@ -467,11 +467,10 @@ ActiveRecord::Schema.define(version: 20160819221833) do t.string "state" t.integer "iid" t.integer "updated_by_id" - t.integer "moved_to_id" t.boolean "confidential", default: false t.datetime "deleted_at" t.date "due_date" - t.integer "lock_version", default: 0, null: false + t.integer "moved_to_id" end add_index "issues", ["assignee_id"], name: "index_issues_on_assignee_id", using: :btree @@ -614,13 +613,12 @@ ActiveRecord::Schema.define(version: 20160819221833) do t.datetime "locked_at" t.integer "updated_by_id" t.string "merge_error" + t.text "merge_params" t.boolean "merge_when_build_succeeds", default: false, null: false t.integer "merge_user_id" t.string "merge_commit_sha" t.datetime "deleted_at" - t.integer "lock_version", default: 0, null: false t.string "in_progress_merge_commit_sha" - t.text "merge_params" end add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree @@ -915,9 +913,9 @@ ActiveRecord::Schema.define(version: 20160819221833) do t.string "type" t.string "title" t.integer "project_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "active", null: false + t.datetime "created_at" + t.datetime "updated_at" + t.boolean "active", default: false, null: false t.text "properties" t.boolean "template", default: false t.boolean "push_events", default: true @@ -962,8 +960,8 @@ ActiveRecord::Schema.define(version: 20160819221833) do t.string "noteable_type" t.string "title" t.text "description" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.boolean "submitted_as_ham", default: false, null: false end @@ -1034,13 +1032,13 @@ ActiveRecord::Schema.define(version: 20160819221833) do add_index "u2f_registrations", ["user_id"], name: "index_u2f_registrations_on_user_id", using: :btree create_table "user_agent_details", force: :cascade do |t| - t.string "user_agent", null: false - t.string "ip_address", null: false - t.integer "subject_id", null: false - t.string "subject_type", null: false + t.string "user_agent", null: false + t.string "ip_address", null: false + t.integer "subject_id", null: false + t.string "subject_type", null: false t.boolean "submitted", default: false, null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "users", force: :cascade do |t| @@ -1156,4 +1154,4 @@ ActiveRecord::Schema.define(version: 20160819221833) do add_foreign_key "protected_branch_merge_access_levels", "protected_branches" add_foreign_key "protected_branch_push_access_levels", "protected_branches" add_foreign_key "u2f_registrations", "users" -end \ No newline at end of file +end From 03671c30df268c787420cb163beb41d208a3c9e7 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 22 Aug 2016 21:17:17 +0300 Subject: [PATCH 043/107] Add changelog item for merge request versions feature Signed-off-by: Dmitriy Zaporozhets --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index c6a4fe5f5b8..88a2acd15d2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ Please view this file on the master branch, on stable branches it's out of date. +v 8.12.0 (unreleased) + - Add merge request versions !5467 + v 8.11.0 (unreleased) - Use test coverage value from the latest successful pipeline in badge. !5862 - Add test coverage report badge. !5708 From eff3c35410e97d4238ef93816e5164884c8b1369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Mon, 22 Aug 2016 19:57:43 +0000 Subject: [PATCH 044/107] Update merge_requests.md with a simpler way to check out a merge request The previous way was put under the "By modifying `.git/config` for a given repository" section. The disadvantage is that one has to modify `.git/config` for each repository that one uses. The new way was put under the "By adding a git alias" section. One has to create this git alias once, and then it will work from any repository, without having to modify `.git/config` over and over again. --- doc/workflow/merge_requests.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md index d2ec56e6504..12ffa916a8f 100644 --- a/doc/workflow/merge_requests.md +++ b/doc/workflow/merge_requests.md @@ -15,6 +15,21 @@ Please note that you need to have builds configured to enable this feature. ## Checkout merge requests locally +### By adding a git alias + +Add the following alias to your `~/.gitconfig`: +``` +[alias] + mr = !sh -c 'git fetch origin merge-requests/$1/head:mr-$1 && git checkout mr-$1' - +``` +Now you can check out a particular merge request from any repository (it will use the `origin` remote) by: +``` +$ git mr 5 +``` +This will fetch the merge request into a local `mr-5` branch and check it out. + +### By modifying `.git/config` for a given repository + Locate the section for your GitLab remote in the `.git/config` file. It looks like this: ``` From c2d0bb9b034fb11b352ae7336c0fe8a7bd4cba48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Mon, 22 Aug 2016 20:17:23 +0000 Subject: [PATCH 045/107] Update CHANGELOG --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c6a4fe5f5b8..e5da0b45f66 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -163,6 +163,7 @@ v 8.11.0 (unreleased) - Eliminate unneeded calls to Repository#blob_at when listing commits with no path - Update gitlab_git gem to 10.4.7 - Simplify SQL queries of marking a todo as done + - Update merge_requests.md with a simpler way to check out a merge request. !5944 v 8.10.7 - Upgrade Hamlit to 2.6.1. !5873 From 251ded248dcda8c7a552e52ddb2582ad961e4bc0 Mon Sep 17 00:00:00 2001 From: Sebastiaan Lokhorst Date: Tue, 23 Aug 2016 17:33:59 +0000 Subject: [PATCH 046/107] Update Ruby version to 2.3 in Requirements --- doc/install/requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/install/requirements.md b/doc/install/requirements.md index a65ac8a5f79..571f1a38358 100644 --- a/doc/install/requirements.md +++ b/doc/install/requirements.md @@ -32,7 +32,7 @@ Please consider using a virtual machine to run GitLab. ## Ruby versions -GitLab requires Ruby (MRI) 2.1.x and currently does not work with versions 2.2 or 2.3. +GitLab requires Ruby (MRI) 2.3. Support for Ruby versions below 2.3 (2.1, 2.2) will stop with GitLab 8.13. You will have to use the standard MRI implementation of Ruby. We love [JRuby](http://jruby.org/) and [Rubinius](http://rubini.us/) but GitLab From d04e8f4fc09832473f7b3794d617aaba9cb204aa Mon Sep 17 00:00:00 2001 From: Sebastiaan Lokhorst Date: Tue, 23 Aug 2016 18:12:27 +0000 Subject: [PATCH 047/107] Update Ruby version to 2.3 in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fee93d5f9c3..33d9407a0c1 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Instructions on how to start GitLab and how to run the tests can be found in the GitLab is a Ruby on Rails application that runs on the following software: - Ubuntu/Debian/CentOS/RHEL -- Ruby (MRI) 2.1 +- Ruby (MRI) 2.3 - Git 2.7.4+ - Redis 2.8+ - MySQL or PostgreSQL From d1ed0c76ec7e9ef4ec1ccff2756433997b3a2397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Tue, 23 Aug 2016 13:02:16 -0600 Subject: [PATCH 048/107] Add new lines after backticks and colons --- doc/workflow/merge_requests.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md index 12ffa916a8f..adee26f0fe9 100644 --- a/doc/workflow/merge_requests.md +++ b/doc/workflow/merge_requests.md @@ -18,14 +18,18 @@ Please note that you need to have builds configured to enable this feature. ### By adding a git alias Add the following alias to your `~/.gitconfig`: + ``` [alias] mr = !sh -c 'git fetch origin merge-requests/$1/head:mr-$1 && git checkout mr-$1' - ``` + Now you can check out a particular merge request from any repository (it will use the `origin` remote) by: + ``` $ git mr 5 ``` + This will fetch the merge request into a local `mr-5` branch and check it out. ### By modifying `.git/config` for a given repository From a7bd1c23dd03f00d10b0ff4db655690283e2f88a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Tue, 23 Aug 2016 13:05:34 -0600 Subject: [PATCH 049/107] Modify the alias to allow specifying a remote Now the alias should be used as: git mr upstream 5 To check out a MR number 5 from the upstream remote, into a `mr-upstream-5` local branch. Also clarify that the `5` in the merge request is the number shown in GitLab. --- doc/workflow/merge_requests.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md index adee26f0fe9..91fcfb02d39 100644 --- a/doc/workflow/merge_requests.md +++ b/doc/workflow/merge_requests.md @@ -21,16 +21,16 @@ Add the following alias to your `~/.gitconfig`: ``` [alias] - mr = !sh -c 'git fetch origin merge-requests/$1/head:mr-$1 && git checkout mr-$1' - + mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' - ``` -Now you can check out a particular merge request from any repository (it will use the `origin` remote) by: +Now you can check out a particular merge request from any repository and any remote, e.g. to check out a merge request number 5 as shown in GitLab from the `upstream` remote, do: ``` -$ git mr 5 +$ git mr upstream 5 ``` -This will fetch the merge request into a local `mr-5` branch and check it out. +This will fetch the merge request into a local `mr-upstream-5` branch and check it out. ### By modifying `.git/config` for a given repository From 009727fb80da7c3c2f4414b1e4d0a31c9e13ff68 Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Date: Mon, 22 Aug 2016 13:43:21 -0500 Subject: [PATCH 050/107] Remove ugly horizontal scrollbars in windows --- app/assets/stylesheets/pages/builds.scss | 2 +- app/assets/stylesheets/pages/pipelines.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/pages/builds.scss b/app/assets/stylesheets/pages/builds.scss index c1bb250b42d..8c33e7d9a2e 100644 --- a/app/assets/stylesheets/pages/builds.scss +++ b/app/assets/stylesheets/pages/builds.scss @@ -150,7 +150,7 @@ border-top: 1px solid $border-color; border-bottom: 1px solid $border-color; max-height: 300px; - overflow: scroll; + overflow: auto; svg { position: relative; diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index 6fa097e3bf1..8e7cfafe76f 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -265,7 +265,7 @@ .pipeline-visualization { position: relative; - min-width: 1220px; + min-width: 1200px; ul { padding: 0; From 2f4cde01c2849168c5cb1aea3902e0af8bcaced1 Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Date: Mon, 22 Aug 2016 13:51:38 -0500 Subject: [PATCH 051/107] Remove graph min width --- app/assets/stylesheets/pages/pipelines.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index 8e7cfafe76f..7eb4e7ec676 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -265,7 +265,6 @@ .pipeline-visualization { position: relative; - min-width: 1200px; ul { padding: 0; From 3a9091b43d06ab499968571bfa13e1c613114e4d Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Date: Tue, 23 Aug 2016 15:02:16 -0500 Subject: [PATCH 052/107] Fix overflow scroll --- app/assets/stylesheets/pages/merge_requests.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index fcdaf671538..4bfdc4a2b26 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -269,7 +269,7 @@ .builds { .table-holder { - overflow-x: scroll; + overflow-x: auto; } } From 75d48ae35bcdb8bfc0a6f661de32718710082856 Mon Sep 17 00:00:00 2001 From: winniehell Date: Wed, 24 Aug 2016 02:18:38 +0200 Subject: [PATCH 053/107] Add failing test for #21334 --- spec/lib/extracts_path_spec.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb index 86d04ecfa36..e10c1f5c547 100644 --- a/spec/lib/extracts_path_spec.rb +++ b/spec/lib/extracts_path_spec.rb @@ -51,6 +51,16 @@ describe ExtractsPath, lib: true do expect(@path).to eq(params[:path]) end end + + context 'subclass overrides get_id' do + it 'uses ref returned by get_id' do + allow_any_instance_of(self.class).to receive(:get_id){ '38008cb17ce1466d8fec2dfa6f6ab8dcfe5cf49e' } + + assign_ref_vars + + expect(@id).to eq(get_id) + end + end end describe '#extract_ref' do From 0762f680c653dff9ff45fe0ce72136b39e125979 Mon Sep 17 00:00:00 2001 From: tiagonbotelho Date: Mon, 22 Aug 2016 13:56:07 +0100 Subject: [PATCH 054/107] change from members using size to start using total_count in the group members page --- CHANGELOG | 1 + app/views/groups/group_members/index.html.haml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index ef38d3e29f5..d9b8372be18 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ v 8.12.0 (unreleased) v 8.11.1 (unreleased) - Fix file links on project page when default view is Files !5933 + - Change using size to use count and caching it for number of group members v 8.11.0 - Use test coverage value from the latest successful pipeline in badge. !5862 diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 90f362c052b..f789796e942 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -17,7 +17,7 @@ .panel-heading %strong #{@group.name} group members - %span.badge= @members.size + %span.badge= @members.total_count .controls = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do .form-group From 31b2c1ef880349c9579f41e501de0346e59f0a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Dequ=C3=A8nes=20=28Duck=29?= Date: Mon, 22 Aug 2016 12:47:58 +0900 Subject: [PATCH 055/107] expose 'only_allow_merge_if_build_succeeds' project setting in the API --- CHANGELOG | 1 + doc/api/projects.md | 24 ++++++++++++++------- lib/api/entities.rb | 1 + lib/api/projects.rb | 9 +++++--- spec/javascripts/fixtures/projects.json | 2 +- spec/requests/api/projects_spec.rb | 28 ++++++++++++++++++++++++- 6 files changed, 53 insertions(+), 12 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ef38d3e29f5..c28daf5e6df 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ v 8.12.0 (unreleased) - Change merge_error column from string to text type - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Added tests for diff notes + - Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck) v 8.11.1 (unreleased) - Fix file links on project page when default view is Files !5933 diff --git a/doc/api/projects.md b/doc/api/projects.md index 37d97b2db44..fe3c38750d6 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -84,7 +84,8 @@ Parameters: "star_count": 0, "runners_token": "b8547b1dc37721d05889db52fa2f02", "public_builds": true, - "shared_with_groups": [] + "shared_with_groups": [], + "only_allow_merge_if_build_succeeds": false }, { "id": 6, @@ -144,7 +145,8 @@ Parameters: "star_count": 0, "runners_token": "b8547b1dc37721d05889db52fa2f02", "public_builds": true, - "shared_with_groups": [] + "shared_with_groups": [], + "only_allow_merge_if_build_succeeds": false } ] ``` @@ -280,7 +282,8 @@ Parameters: "group_name": "Gitlab Org", "group_access_level": 10 } - ] + ], + "only_allow_merge_if_build_succeeds": false } ``` @@ -448,6 +451,7 @@ Parameters: - `visibility_level` (optional) - `import_url` (optional) - `public_builds` (optional) +- `only_allow_merge_if_build_succeeds` (optional) ### Create project for user @@ -473,6 +477,7 @@ Parameters: - `visibility_level` (optional) - `import_url` (optional) - `public_builds` (optional) +- `only_allow_merge_if_build_succeeds` (optional) ### Edit project @@ -499,6 +504,7 @@ Parameters: - `public` (optional) - if `true` same as setting visibility_level = 20 - `visibility_level` (optional) - `public_builds` (optional) +- `only_allow_merge_if_build_succeeds` (optional) On success, method returns 200 with the updated project. If parameters are invalid, 400 is returned. @@ -577,7 +583,8 @@ Example response: "forks_count": 0, "star_count": 1, "public_builds": true, - "shared_with_groups": [] + "shared_with_groups": [], + "only_allow_merge_if_build_succeeds": false } ``` @@ -643,7 +650,8 @@ Example response: "forks_count": 0, "star_count": 0, "public_builds": true, - "shared_with_groups": [] + "shared_with_groups": [], + "only_allow_merge_if_build_succeeds": false } ``` @@ -729,7 +737,8 @@ Example response: "star_count": 0, "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b", "public_builds": true, - "shared_with_groups": [] + "shared_with_groups": [], + "only_allow_merge_if_build_succeeds": false } ``` @@ -815,7 +824,8 @@ Example response: "star_count": 0, "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b", "public_builds": true, - "shared_with_groups": [] + "shared_with_groups": [], + "only_allow_merge_if_build_succeeds": false } ``` diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 66b85ab1793..0f6d28f1821 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -90,6 +90,7 @@ module API expose :shared_with_groups do |project, options| SharedGroup.represent(project.project_group_links.all, options) end + expose :only_allow_merge_if_build_succeeds end class Member < UserBasic diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 60cfc103afd..71efd4f33ca 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -123,7 +123,8 @@ module API :public, :visibility_level, :import_url, - :public_builds] + :public_builds, + :only_allow_merge_if_build_succeeds] attrs = map_public_to_visibility_level(attrs) @project = ::Projects::CreateService.new(current_user, attrs).execute if @project.saved? @@ -172,7 +173,8 @@ module API :public, :visibility_level, :import_url, - :public_builds] + :public_builds, + :only_allow_merge_if_build_succeeds] attrs = map_public_to_visibility_level(attrs) @project = ::Projects::CreateService.new(user, attrs).execute if @project.saved? @@ -234,7 +236,8 @@ module API :shared_runners_enabled, :public, :visibility_level, - :public_builds] + :public_builds, + :only_allow_merge_if_build_succeeds] attrs = map_public_to_visibility_level(attrs) authorize_admin_project authorize! :rename_project, user_project if attrs[:name].present? diff --git a/spec/javascripts/fixtures/projects.json b/spec/javascripts/fixtures/projects.json index 84e8d0ba1e4..4919d77e5a4 100644 --- a/spec/javascripts/fixtures/projects.json +++ b/spec/javascripts/fixtures/projects.json @@ -1 +1 @@ -[{"id":9,"description":"","default_branch":null,"tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:root/test.git","http_url_to_repo":"http://localhost:3000/root/test.git","web_url":"http://localhost:3000/root/test","owner":{"name":"Administrator","username":"root","id":1,"state":"active","avatar_url":"http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon","web_url":"http://localhost:3000/u/root"},"name":"test","name_with_namespace":"Administrator / test","path":"test","path_with_namespace":"root/test","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-14T19:08:05.364Z","last_activity_at":"2016-01-14T19:08:07.418Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":1,"name":"root","path":"root","owner_id":1,"created_at":"2016-01-13T20:19:44.439Z","updated_at":"2016-01-13T20:19:44.439Z","description":"","avatar":null},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":0,"permissions":{"project_access":null,"group_access":null}},{"id":8,"description":"Voluptatem quae nulla eius numquam ullam voluptatibus quia modi.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:h5bp/html5-boilerplate.git","http_url_to_repo":"http://localhost:3000/h5bp/html5-boilerplate.git","web_url":"http://localhost:3000/h5bp/html5-boilerplate","name":"Html5 Boilerplate","name_with_namespace":"H5bp / Html5 Boilerplate","path":"html5-boilerplate","path_with_namespace":"h5bp/html5-boilerplate","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:57.525Z","last_activity_at":"2016-01-13T20:27:57.280Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":5,"name":"H5bp","path":"h5bp","owner_id":null,"created_at":"2016-01-13T20:19:57.239Z","updated_at":"2016-01-13T20:19:57.239Z","description":"Tempore accusantium possimus aut libero.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":5,"permissions":{"project_access":{"access_level":10,"notification_level":3},"group_access":{"access_level":50,"notification_level":3}}},{"id":7,"description":"Modi odio mollitia dolorem qui.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:twitter/typeahead-js.git","http_url_to_repo":"http://localhost:3000/twitter/typeahead-js.git","web_url":"http://localhost:3000/twitter/typeahead-js","name":"Typeahead.Js","name_with_namespace":"Twitter / Typeahead.Js","path":"typeahead-js","path_with_namespace":"twitter/typeahead-js","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:56.212Z","last_activity_at":"2016-01-13T20:27:51.496Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":4,"name":"Twitter","path":"twitter","owner_id":null,"created_at":"2016-01-13T20:19:54.480Z","updated_at":"2016-01-13T20:19:54.480Z","description":"Id voluptatem ipsa maiores omnis repudiandae et et.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":4,"permissions":{"project_access":null,"group_access":{"access_level":10,"notification_level":3}}},{"id":6,"description":"Omnis asperiores ipsa et beatae quidem necessitatibus quia.","default_branch":"master","tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:twitter/flight.git","http_url_to_repo":"http://localhost:3000/twitter/flight.git","web_url":"http://localhost:3000/twitter/flight","name":"Flight","name_with_namespace":"Twitter / Flight","path":"flight","path_with_namespace":"twitter/flight","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:54.754Z","last_activity_at":"2016-01-13T20:27:50.502Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":4,"name":"Twitter","path":"twitter","owner_id":null,"created_at":"2016-01-13T20:19:54.480Z","updated_at":"2016-01-13T20:19:54.480Z","description":"Id voluptatem ipsa maiores omnis repudiandae et et.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":4,"permissions":{"project_access":null,"group_access":{"access_level":10,"notification_level":3}}},{"id":5,"description":"Voluptatem commodi voluptate placeat architecto beatae illum dolores fugiat.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-test.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-test.git","web_url":"http://localhost:3000/gitlab-org/gitlab-test","name":"Gitlab Test","name_with_namespace":"Gitlab Org / Gitlab Test","path":"gitlab-test","path_with_namespace":"gitlab-org/gitlab-test","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:53.202Z","last_activity_at":"2016-01-13T20:27:41.626Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":5,"permissions":{"project_access":null,"group_access":{"access_level":50,"notification_level":3}}},{"id":4,"description":"Aut molestias quas est ut aperiam officia quod libero.","default_branch":"master","tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-shell.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-shell.git","web_url":"http://localhost:3000/gitlab-org/gitlab-shell","name":"Gitlab Shell","name_with_namespace":"Gitlab Org / Gitlab Shell","path":"gitlab-shell","path_with_namespace":"gitlab-org/gitlab-shell","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:51.882Z","last_activity_at":"2016-01-13T20:27:35.678Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":5,"permissions":{"project_access":{"access_level":20,"notification_level":3},"group_access":{"access_level":50,"notification_level":3}}},{"id":3,"description":"Excepturi molestiae quia repellendus omnis est illo illum eligendi.","default_branch":"master","tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-ci.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-ci.git","web_url":"http://localhost:3000/gitlab-org/gitlab-ci","name":"Gitlab Ci","name_with_namespace":"Gitlab Org / Gitlab Ci","path":"gitlab-ci","path_with_namespace":"gitlab-org/gitlab-ci","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:50.346Z","last_activity_at":"2016-01-13T20:27:30.115Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":3,"permissions":{"project_access":null,"group_access":{"access_level":50,"notification_level":3}}},{"id":2,"description":"Adipisci quaerat dignissimos enim sed ipsam dolorem quia.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":10,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-ce.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-ce.git","web_url":"http://localhost:3000/gitlab-org/gitlab-ce","name":"Gitlab Ce","name_with_namespace":"Gitlab Org / Gitlab Ce","path":"gitlab-ce","path_with_namespace":"gitlab-org/gitlab-ce","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:49.065Z","last_activity_at":"2016-01-13T20:26:58.454Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":5,"permissions":{"project_access":{"access_level":30,"notification_level":3},"group_access":{"access_level":50,"notification_level":3}}},{"id":1,"description":"Vel voluptatem maxime saepe ex quia.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:documentcloud/underscore.git","http_url_to_repo":"http://localhost:3000/documentcloud/underscore.git","web_url":"http://localhost:3000/documentcloud/underscore","name":"Underscore","name_with_namespace":"Documentcloud / Underscore","path":"underscore","path_with_namespace":"documentcloud/underscore","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:45.862Z","last_activity_at":"2016-01-13T20:25:03.106Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":2,"name":"Documentcloud","path":"documentcloud","owner_id":null,"created_at":"2016-01-13T20:19:44.464Z","updated_at":"2016-01-13T20:19:44.464Z","description":"Aut impedit perferendis fuga et ipsa repellat cupiditate et.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"open_issues_count":5,"permissions":{"project_access":null,"group_access":{"access_level":50,"notification_level":3}}}] +[{"id":9,"description":"","default_branch":null,"tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:root/test.git","http_url_to_repo":"http://localhost:3000/root/test.git","web_url":"http://localhost:3000/root/test","owner":{"name":"Administrator","username":"root","id":1,"state":"active","avatar_url":"http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon","web_url":"http://localhost:3000/u/root"},"name":"test","name_with_namespace":"Administrator / test","path":"test","path_with_namespace":"root/test","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-14T19:08:05.364Z","last_activity_at":"2016-01-14T19:08:07.418Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":1,"name":"root","path":"root","owner_id":1,"created_at":"2016-01-13T20:19:44.439Z","updated_at":"2016-01-13T20:19:44.439Z","description":"","avatar":null},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":0,"permissions":{"project_access":null,"group_access":null}},{"id":8,"description":"Voluptatem quae nulla eius numquam ullam voluptatibus quia modi.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:h5bp/html5-boilerplate.git","http_url_to_repo":"http://localhost:3000/h5bp/html5-boilerplate.git","web_url":"http://localhost:3000/h5bp/html5-boilerplate","name":"Html5 Boilerplate","name_with_namespace":"H5bp / Html5 Boilerplate","path":"html5-boilerplate","path_with_namespace":"h5bp/html5-boilerplate","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:57.525Z","last_activity_at":"2016-01-13T20:27:57.280Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":5,"name":"H5bp","path":"h5bp","owner_id":null,"created_at":"2016-01-13T20:19:57.239Z","updated_at":"2016-01-13T20:19:57.239Z","description":"Tempore accusantium possimus aut libero.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":5,"permissions":{"project_access":{"access_level":10,"notification_level":3},"group_access":{"access_level":50,"notification_level":3}}},{"id":7,"description":"Modi odio mollitia dolorem qui.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:twitter/typeahead-js.git","http_url_to_repo":"http://localhost:3000/twitter/typeahead-js.git","web_url":"http://localhost:3000/twitter/typeahead-js","name":"Typeahead.Js","name_with_namespace":"Twitter / Typeahead.Js","path":"typeahead-js","path_with_namespace":"twitter/typeahead-js","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:56.212Z","last_activity_at":"2016-01-13T20:27:51.496Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":4,"name":"Twitter","path":"twitter","owner_id":null,"created_at":"2016-01-13T20:19:54.480Z","updated_at":"2016-01-13T20:19:54.480Z","description":"Id voluptatem ipsa maiores omnis repudiandae et et.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":true,"open_issues_count":4,"permissions":{"project_access":null,"group_access":{"access_level":10,"notification_level":3}}},{"id":6,"description":"Omnis asperiores ipsa et beatae quidem necessitatibus quia.","default_branch":"master","tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:twitter/flight.git","http_url_to_repo":"http://localhost:3000/twitter/flight.git","web_url":"http://localhost:3000/twitter/flight","name":"Flight","name_with_namespace":"Twitter / Flight","path":"flight","path_with_namespace":"twitter/flight","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:54.754Z","last_activity_at":"2016-01-13T20:27:50.502Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":4,"name":"Twitter","path":"twitter","owner_id":null,"created_at":"2016-01-13T20:19:54.480Z","updated_at":"2016-01-13T20:19:54.480Z","description":"Id voluptatem ipsa maiores omnis repudiandae et et.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":true,"open_issues_count":4,"permissions":{"project_access":null,"group_access":{"access_level":10,"notification_level":3}}},{"id":5,"description":"Voluptatem commodi voluptate placeat architecto beatae illum dolores fugiat.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-test.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-test.git","web_url":"http://localhost:3000/gitlab-org/gitlab-test","name":"Gitlab Test","name_with_namespace":"Gitlab Org / Gitlab Test","path":"gitlab-test","path_with_namespace":"gitlab-org/gitlab-test","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:53.202Z","last_activity_at":"2016-01-13T20:27:41.626Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":5,"permissions":{"project_access":null,"group_access":{"access_level":50,"notification_level":3}}},{"id":4,"description":"Aut molestias quas est ut aperiam officia quod libero.","default_branch":"master","tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-shell.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-shell.git","web_url":"http://localhost:3000/gitlab-org/gitlab-shell","name":"Gitlab Shell","name_with_namespace":"Gitlab Org / Gitlab Shell","path":"gitlab-shell","path_with_namespace":"gitlab-org/gitlab-shell","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:51.882Z","last_activity_at":"2016-01-13T20:27:35.678Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":5,"permissions":{"project_access":{"access_level":20,"notification_level":3},"group_access":{"access_level":50,"notification_level":3}}},{"id":3,"description":"Excepturi molestiae quia repellendus omnis est illo illum eligendi.","default_branch":"master","tag_list":[],"public":true,"archived":false,"visibility_level":20,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-ci.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-ci.git","web_url":"http://localhost:3000/gitlab-org/gitlab-ci","name":"Gitlab Ci","name_with_namespace":"Gitlab Org / Gitlab Ci","path":"gitlab-ci","path_with_namespace":"gitlab-org/gitlab-ci","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:50.346Z","last_activity_at":"2016-01-13T20:27:30.115Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":3,"permissions":{"project_access":null,"group_access":{"access_level":50,"notification_level":3}}},{"id":2,"description":"Adipisci quaerat dignissimos enim sed ipsam dolorem quia.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":10,"ssh_url_to_repo":"phil@localhost:gitlab-org/gitlab-ce.git","http_url_to_repo":"http://localhost:3000/gitlab-org/gitlab-ce.git","web_url":"http://localhost:3000/gitlab-org/gitlab-ce","name":"Gitlab Ce","name_with_namespace":"Gitlab Org / Gitlab Ce","path":"gitlab-ce","path_with_namespace":"gitlab-org/gitlab-ce","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:49.065Z","last_activity_at":"2016-01-13T20:26:58.454Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":3,"name":"Gitlab Org","path":"gitlab-org","owner_id":null,"created_at":"2016-01-13T20:19:48.851Z","updated_at":"2016-01-13T20:19:48.851Z","description":"Magni mollitia quod quidem soluta nesciunt impedit.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":5,"permissions":{"project_access":{"access_level":30,"notification_level":3},"group_access":{"access_level":50,"notification_level":3}}},{"id":1,"description":"Vel voluptatem maxime saepe ex quia.","default_branch":"master","tag_list":[],"public":false,"archived":false,"visibility_level":0,"ssh_url_to_repo":"phil@localhost:documentcloud/underscore.git","http_url_to_repo":"http://localhost:3000/documentcloud/underscore.git","web_url":"http://localhost:3000/documentcloud/underscore","name":"Underscore","name_with_namespace":"Documentcloud / Underscore","path":"underscore","path_with_namespace":"documentcloud/underscore","issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"builds_enabled":true,"snippets_enabled":false,"created_at":"2016-01-13T20:19:45.862Z","last_activity_at":"2016-01-13T20:25:03.106Z","shared_runners_enabled":true,"creator_id":1,"namespace":{"id":2,"name":"Documentcloud","path":"documentcloud","owner_id":null,"created_at":"2016-01-13T20:19:44.464Z","updated_at":"2016-01-13T20:19:44.464Z","description":"Aut impedit perferendis fuga et ipsa repellat cupiditate et.","avatar":{"url":null}},"avatar_url":null,"star_count":0,"forks_count":0,"only_allow_merge_if_build_succeeds":false,"open_issues_count":5,"permissions":{"project_access":null,"group_access":{"access_level":50,"notification_level":3}}}] diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 4742b3d0e37..63f2467be63 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -224,7 +224,8 @@ describe API::API, api: true do description: FFaker::Lorem.sentence, issues_enabled: false, merge_requests_enabled: false, - wiki_enabled: false + wiki_enabled: false, + only_allow_merge_if_build_succeeds: false }) post api('/projects', user), project @@ -276,6 +277,18 @@ describe API::API, api: true do expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE) end + it 'sets a project as allowing merge even if build fails' do + project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false }) + post api('/projects', user), project + expect(json_response['only_allow_merge_if_build_succeeds']).to be_falsey + end + + it 'sets a project as allowing merge only if build succeeds' do + project = attributes_for(:project, { only_allow_merge_if_build_succeeds: true }) + post api('/projects', user), project + expect(json_response['only_allow_merge_if_build_succeeds']).to be_truthy + end + context 'when a visibility level is restricted' do before do @project = attributes_for(:project, { public: true }) @@ -384,6 +397,18 @@ describe API::API, api: true do expect(json_response['public']).to be_falsey expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE) end + + it 'sets a project as allowing merge even if build fails' do + project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false }) + post api("/projects/user/#{user.id}", admin), project + expect(json_response['only_allow_merge_if_build_succeeds']).to be_falsey + end + + it 'sets a project as allowing merge only if build succeeds' do + project = attributes_for(:project, { only_allow_merge_if_build_succeeds: true }) + post api("/projects/user/#{user.id}", admin), project + expect(json_response['only_allow_merge_if_build_succeeds']).to be_truthy + end end describe "POST /projects/:id/uploads" do @@ -444,6 +469,7 @@ describe API::API, api: true do expect(json_response['shared_with_groups'][0]['group_id']).to eq(group.id) expect(json_response['shared_with_groups'][0]['group_name']).to eq(group.name) expect(json_response['shared_with_groups'][0]['group_access_level']).to eq(link.group_access) + expect(json_response['only_allow_merge_if_build_succeeds']).to eq(project.only_allow_merge_if_build_succeeds) end it 'returns a project by path name' do From ddbdf4e609c70dc6ed88860b5e1e65abde69ee94 Mon Sep 17 00:00:00 2001 From: winniehell Date: Wed, 24 Aug 2016 02:22:30 +0200 Subject: [PATCH 056/107] Restore get_id in ExtractsPath --- app/controllers/projects_controller.rb | 9 +-------- lib/extracts_path.rb | 13 ++++++++++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 2a6385c1029..fc52cd2f367 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -5,7 +5,7 @@ class ProjectsController < Projects::ApplicationController before_action :project, except: [:new, :create] before_action :repository, except: [:new, :create] before_action :assign_ref_vars, only: [:show], if: :repo_exists? - before_action :assign_tree_vars, only: [:show], if: [:repo_exists?, :project_view_files?] + before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?] # Authorize before_action :authorize_admin_project!, only: [:edit, :update, :housekeeping, :download_export, :export, :remove_export, :generate_new_export] @@ -332,11 +332,4 @@ class ProjectsController < Projects::ApplicationController def get_id project.repository.root_ref end - - # ExtractsPath will set @id = project.path on the show route, but it has to be the - # branch name for the tree view to work correctly. - def assign_tree_vars - @id = get_id - tree - end end diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb index a293fa2752f..a4558d157c0 100644 --- a/lib/extracts_path.rb +++ b/lib/extracts_path.rb @@ -94,9 +94,7 @@ module ExtractsPath @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? } @options = HashWithIndifferentAccess.new(@options) - @id = params[:id] || params[:ref] - @id += "/" + params[:path] unless params[:path].blank? - + @id = get_id @ref, @path = extract_ref(@id) @repo = @project.repository if @options[:extended_sha1].blank? @@ -118,4 +116,13 @@ module ExtractsPath def tree @tree ||= @repo.tree(@commit.id, @path) end + + private + + # overriden in subclasses, do not remove + def get_id + id = params[:id] || params[:ref] + id += "/" + params[:path] unless params[:path].blank? + id + end end From 5ddb51ba5a4c58db86645424211783af4e390166 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Wed, 24 Aug 2016 11:25:06 +0000 Subject: [PATCH 057/107] Update abuse_reports.js.es6 with prettier `window.gl` assignment --- app/assets/javascripts/abuse_reports.js.es6 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/assets/javascripts/abuse_reports.js.es6 b/app/assets/javascripts/abuse_reports.js.es6 index 748084b0307..2fe46b9fd06 100644 --- a/app/assets/javascripts/abuse_reports.js.es6 +++ b/app/assets/javascripts/abuse_reports.js.es6 @@ -1,4 +1,3 @@ -window.gl = window.gl || {}; ((global) => { const MAX_MESSAGE_LENGTH = 500; const MESSAGE_CELL_SELECTOR = '.abuse-reports .message'; @@ -36,4 +35,4 @@ window.gl = window.gl || {}; } global.AbuseReports = AbuseReports; -})(window.gl); +})(window.gl || (window.gl = {})); From 3ae4e1ebf7826340d0a4a15e350c614b6223f06f Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Wed, 24 Aug 2016 15:50:24 +0200 Subject: [PATCH 058/107] Use gitlab-workhorse 0.7.11 Versions 0.7.9 and 0.7.10 crash on previously valid 'authBackend' settings. --- GITLAB_WORKHORSE_VERSION | 2 +- doc/install/installation.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index 5b209ea2067..b4d6d12101f 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -0.7.10 +0.7.11 diff --git a/doc/install/installation.md b/doc/install/installation.md index b0ec9b4a961..d4b89fa8345 100644 --- a/doc/install/installation.md +++ b/doc/install/installation.md @@ -397,7 +397,7 @@ If you are not using Linux you may have to run `gmake` instead of cd /home/git sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git cd gitlab-workhorse - sudo -u git -H git checkout v0.7.10 + sudo -u git -H git checkout v0.7.11 sudo -u git -H make ### Initialize Database and Activate Advanced Features From ae4efc8d5e6a195452f0ecf550198575c63a49b9 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 23 Aug 2016 13:56:21 -0400 Subject: [PATCH 059/107] docs: update created_at docs for creating issues via API See also #19863. Fixes #18458. --- doc/api/issues.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/issues.md b/doc/api/issues.md index a665645ad0e..ff8038c78d1 100644 --- a/doc/api/issues.md +++ b/doc/api/issues.md @@ -323,7 +323,7 @@ POST /projects/:id/issues | `assignee_id` | integer | no | The ID of a user to assign issue | | `milestone_id` | integer | no | The ID of a milestone to assign issue | | `labels` | string | no | Comma-separated label names for an issue | -| `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` | +| `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) | | `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | ```bash @@ -384,7 +384,7 @@ PUT /projects/:id/issues/:issue_id | `milestone_id` | integer | no | The ID of a milestone to assign the issue to | | `labels` | string | no | Comma-separated label names for an issue | | `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it | -| `updated_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` | +| `updated_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) | | `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | ```bash From a5f3bdc5c862944f755f1e61bf965a54e0a6d95d Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 23 Aug 2016 13:57:34 -0400 Subject: [PATCH 060/107] docs: fix table alignment --- doc/api/issues.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/issues.md b/doc/api/issues.md index ff8038c78d1..443ba50af73 100644 --- a/doc/api/issues.md +++ b/doc/api/issues.md @@ -324,7 +324,7 @@ POST /projects/:id/issues | `milestone_id` | integer | no | The ID of a milestone to assign issue | | `labels` | string | no | Comma-separated label names for an issue | | `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) | -| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | +| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | ```bash curl --request POST --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues?title=Issues%20with%20auth&labels=bug @@ -385,7 +385,7 @@ PUT /projects/:id/issues/:issue_id | `labels` | string | no | Comma-separated label names for an issue | | `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it | | `updated_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` (requires admin or project owner rights) | -| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | +| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` | ```bash curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues/85?state_event=close From 9b470aebb993d7a5745f0e9fc17b207fe46b16fe Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 11 Aug 2016 18:11:16 -0400 Subject: [PATCH 061/107] url_builder: handle project snippets --- lib/gitlab/url_builder.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/gitlab/url_builder.rb b/lib/gitlab/url_builder.rb index fe65c246101..99d0c28e749 100644 --- a/lib/gitlab/url_builder.rb +++ b/lib/gitlab/url_builder.rb @@ -22,6 +22,8 @@ module Gitlab note_url when WikiPage wiki_page_url + when ProjectSnippet + project_snippet_url(object) else raise NotImplementedError.new("No URL builder defined for #{object.class}") end From e43c4060b67c1996b917bc00afa72122d1d00004 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 2 Aug 2016 13:37:04 -0400 Subject: [PATCH 062/107] api: expose web_url for project entities This allows web hooks to have a URL back to entities without having to generate it themselves. --- CHANGELOG | 1 + doc/api/issues.md | 31 +++++++++++++++------- doc/api/merge_requests.md | 22 ++++++++++----- doc/api/project_snippets.md | 3 ++- lib/api/entities.rb | 12 +++++++++ spec/requests/api/issues_spec.rb | 1 + spec/requests/api/merge_requests_spec.rb | 1 + spec/requests/api/project_snippets_spec.rb | 1 + 8 files changed, 54 insertions(+), 18 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ef38d3e29f5..cb3069c1ccd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.12.0 (unreleased) - Change merge_error column from string to text type + - Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Added tests for diff notes diff --git a/doc/api/issues.md b/doc/api/issues.md index a665645ad0e..b5730574308 100644 --- a/doc/api/issues.md +++ b/doc/api/issues.md @@ -79,7 +79,8 @@ Example response: "labels" : [], "subscribed" : false, "user_notes_count": 1, - "due_date": "2016-07-22" + "due_date": "2016-07-22", + "web_url": "http://example.com/example/example/issues/6" } ] ``` @@ -156,7 +157,8 @@ Example response: "created_at" : "2016-01-04T15:31:46.176Z", "subscribed" : false, "user_notes_count": 1, - "due_date": null + "due_date": null, + "web_url": "http://example.com/example/example/issues/1" } ] ``` @@ -235,7 +237,8 @@ Example response: "created_at" : "2016-01-04T15:31:46.176Z", "subscribed" : false, "user_notes_count": 1, - "due_date": "2016-07-22" + "due_date": "2016-07-22", + "web_url": "http://example.com/example/example/issues/1" } ] ``` @@ -299,7 +302,8 @@ Example response: "created_at" : "2016-01-04T15:31:46.176Z", "subscribed": false, "user_notes_count": 1, - "due_date": null + "due_date": null, + "web_url": "http://example.com/example/example/issues/1" } ``` @@ -357,7 +361,8 @@ Example response: "milestone" : null, "subscribed" : true, "user_notes_count": 0, - "due_date": null + "due_date": null, + "web_url": "http://example.com/example/example/issues/14" } ``` @@ -418,7 +423,8 @@ Example response: "milestone" : null, "subscribed" : true, "user_notes_count": 0, - "due_date": "2016-07-22" + "due_date": "2016-07-22", + "web_url": "http://example.com/example/example/issues/15" } ``` @@ -496,7 +502,8 @@ Example response: "avatar_url": "http://www.gravatar.com/avatar/7a190fecbaa68212a4b68aeb6e3acd10?s=80&d=identicon", "web_url": "https://gitlab.example.com/u/solon.cremin" }, - "due_date": null + "due_date": null, + "web_url": "http://example.com/example/example/issues/11" } ``` @@ -551,7 +558,8 @@ Example response: "avatar_url": "http://www.gravatar.com/avatar/7a190fecbaa68212a4b68aeb6e3acd10?s=80&d=identicon", "web_url": "https://gitlab.example.com/u/solon.cremin" }, - "due_date": null + "due_date": null, + "web_url": "http://example.com/example/example/issues/11" } ``` @@ -607,7 +615,8 @@ Example response: "web_url": "https://gitlab.example.com/u/orville" }, "subscribed": false, - "due_date": null + "due_date": null, + "web_url": "http://example.com/example/example/issues/12" } ``` @@ -693,7 +702,9 @@ Example response: "subscribed": true, "user_notes_count": 7, "upvotes": 0, - "downvotes": 0 + "downvotes": 0, + "due_date": null, + "web_url": "http://example.com/example/example/issues/110" }, "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ci/issues/10", "body": "Vel voluptas atque dicta mollitia adipisci qui at.", diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index 3e88a758936..f275762da3e 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -70,7 +70,8 @@ Parameters: "subscribed" : false, "user_notes_count": 1, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" } ] ``` @@ -136,7 +137,8 @@ Parameters: "subscribed" : true, "user_notes_count": 1, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" } ``` @@ -239,6 +241,7 @@ Parameters: "user_notes_count": 1, "should_remove_source_branch": true, "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1", "changes": [ { "old_path": "VERSION", @@ -321,7 +324,8 @@ Parameters: "subscribed" : true, "user_notes_count": 0, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" } ``` @@ -395,7 +399,8 @@ Parameters: "subscribed" : true, "user_notes_count": 1, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" } ``` @@ -496,7 +501,8 @@ Parameters: "subscribed" : true, "user_notes_count": 1, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" } ``` @@ -565,7 +571,8 @@ Parameters: "subscribed" : true, "user_notes_count": 1, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" } ``` @@ -886,7 +893,8 @@ Example response: "subscribed": true, "user_notes_count": 7, "should_remove_source_branch": true, - "force_remove_source_branch": false + "force_remove_source_branch": false, + "web_url": "http://example.com/example/example/merge_requests/1" }, "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ci/merge_requests/7", "body": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.", diff --git a/doc/api/project_snippets.md b/doc/api/project_snippets.md index a7acf37b5bc..c6685f54a9d 100644 --- a/doc/api/project_snippets.md +++ b/doc/api/project_snippets.md @@ -53,7 +53,8 @@ Parameters: }, "expires_at": null, "updated_at": "2012-06-28T10:52:04Z", - "created_at": "2012-06-28T10:52:04Z" + "created_at": "2012-06-28T10:52:04Z", + "web_url": "http://example.com/example/example/snippets/1" } ``` diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 66b85ab1793..e6bc23b97d7 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -177,6 +177,10 @@ module API # TODO (rspeicher): Deprecated; remove in 9.0 expose(:expires_at) { |snippet| nil } + + expose :web_url do |snippet, options| + Gitlab::UrlBuilder.build(snippet) + end end class ProjectEntity < Grape::Entity @@ -206,6 +210,10 @@ module API expose :user_notes_count expose :upvotes, :downvotes expose :due_date + + expose :web_url do |issue, options| + Gitlab::UrlBuilder.build(issue) + end end class ExternalIssue < Grape::Entity @@ -229,6 +237,10 @@ module API expose :user_notes_count expose :should_remove_source_branch?, as: :should_remove_source_branch expose :force_remove_source_branch?, as: :force_remove_source_branch + + expose :web_url do |merge_request, options| + Gitlab::UrlBuilder.build(merge_request) + end end class MergeRequestChanges < MergeRequest diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index a40e1a93b71..b8038fc85a1 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -61,6 +61,7 @@ describe API::API, api: true do expect(response).to have_http_status(200) expect(json_response).to be_an Array expect(json_response.first['title']).to eq(issue.title) + expect(json_response.last).to have_key('web_url') end it "adds pagination headers and keep query params" do diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index 617600d6173..baff872e28e 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -33,6 +33,7 @@ describe API::API, api: true do expect(json_response).to be_an Array expect(json_response.length).to eq(3) expect(json_response.last['title']).to eq(merge_request.title) + expect(json_response.last).to have_key('web_url') end it "returns an array of all merge_requests" do diff --git a/spec/requests/api/project_snippets_spec.rb b/spec/requests/api/project_snippets_spec.rb index 42757ff21b0..01148f0a05e 100644 --- a/spec/requests/api/project_snippets_spec.rb +++ b/spec/requests/api/project_snippets_spec.rb @@ -30,6 +30,7 @@ describe API::API, api: true do expect(response).to have_http_status(200) expect(json_response.size).to eq(3) expect(json_response.map{ |snippet| snippet['id']} ).to include(public_snippet.id, internal_snippet.id, private_snippet.id) + expect(json_response.last).to have_key('web_url') end it 'hides private snippets from regular user' do From f413d7ed8014601497834e5093a1892dd616875b Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 23 Aug 2016 14:51:05 -0400 Subject: [PATCH 063/107] docs: document other project webhook fields --- doc/api/projects.md | 7 +++++++ spec/requests/api/project_hooks_spec.rb | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index 37d97b2db44..0905bdea714 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -914,7 +914,10 @@ Parameters: "push_events": true, "issues_events": true, "merge_requests_events": true, + "tag_push_events": true, "note_events": true, + "build_events": true, + "pipeline_events": true, "enable_ssl_verification": true, "created_at": "2012-10-12T17:04:47Z" } @@ -937,6 +940,8 @@ Parameters: - `merge_requests_events` - Trigger hook on merge_requests events - `tag_push_events` - Trigger hook on push_tag events - `note_events` - Trigger hook on note events +- `build_events` - Trigger hook on build events +- `pipeline_events` - Trigger hook on pipeline events - `enable_ssl_verification` - Do SSL verification when triggering the hook ### Edit project hook @@ -957,6 +962,8 @@ Parameters: - `merge_requests_events` - Trigger hook on merge_requests events - `tag_push_events` - Trigger hook on push_tag events - `note_events` - Trigger hook on note events +- `build_events` - Trigger hook on build events +- `pipeline_events` - Trigger hook on pipeline events - `enable_ssl_verification` - Do SSL verification when triggering the hook ### Delete project hook diff --git a/spec/requests/api/project_hooks_spec.rb b/spec/requests/api/project_hooks_spec.rb index 914e88c9487..4a585c78edf 100644 --- a/spec/requests/api/project_hooks_spec.rb +++ b/spec/requests/api/project_hooks_spec.rb @@ -57,6 +57,8 @@ describe API::API, 'ProjectHooks', api: true do expect(json_response['merge_requests_events']).to eq(hook.merge_requests_events) expect(json_response['tag_push_events']).to eq(hook.tag_push_events) expect(json_response['note_events']).to eq(hook.note_events) + expect(json_response['build_events']).to eq(hook.build_events) + expect(json_response['pipeline_events']).to eq(hook.pipeline_events) expect(json_response['enable_ssl_verification']).to eq(hook.enable_ssl_verification) end @@ -118,6 +120,8 @@ describe API::API, 'ProjectHooks', api: true do expect(json_response['merge_requests_events']).to eq(hook.merge_requests_events) expect(json_response['tag_push_events']).to eq(hook.tag_push_events) expect(json_response['note_events']).to eq(hook.note_events) + expect(json_response['build_events']).to eq(hook.build_events) + expect(json_response['pipeline_events']).to eq(hook.pipeline_events) expect(json_response['enable_ssl_verification']).to eq(hook.enable_ssl_verification) end From 99c2f3b3c534386d1d8258fea23d3991695ff4fe Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 23 Aug 2016 14:54:44 -0400 Subject: [PATCH 064/107] api: expose wiki_page_events project hook field in the API --- CHANGELOG | 1 + doc/api/projects.md | 3 +++ lib/api/entities.rb | 2 +- lib/api/project_hooks.rb | 2 ++ spec/factories/project_hooks.rb | 1 + spec/requests/api/project_hooks_spec.rb | 4 ++++ 6 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index ef38d3e29f5..437e2d5d8fa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.12.0 (unreleased) - Change merge_error column from string to text type - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) + - Add `wiki_page_events` to project hook APIs (Ben Boeckel) - Added tests for diff notes v 8.11.1 (unreleased) diff --git a/doc/api/projects.md b/doc/api/projects.md index 0905bdea714..156deca932b 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -918,6 +918,7 @@ Parameters: "note_events": true, "build_events": true, "pipeline_events": true, + "wiki_page_events": true, "enable_ssl_verification": true, "created_at": "2012-10-12T17:04:47Z" } @@ -942,6 +943,7 @@ Parameters: - `note_events` - Trigger hook on note events - `build_events` - Trigger hook on build events - `pipeline_events` - Trigger hook on pipeline events +- `wiki_page_events` - Trigger hook on wiki page events - `enable_ssl_verification` - Do SSL verification when triggering the hook ### Edit project hook @@ -964,6 +966,7 @@ Parameters: - `note_events` - Trigger hook on note events - `build_events` - Trigger hook on build events - `pipeline_events` - Trigger hook on pipeline events +- `wiki_page_events` - Trigger hook on wiki page events - `enable_ssl_verification` - Do SSL verification when triggering the hook ### Delete project hook diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 66b85ab1793..3ecdc7d448a 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -49,7 +49,7 @@ module API class ProjectHook < Hook expose :project_id, :push_events expose :issues_events, :merge_requests_events, :tag_push_events - expose :note_events, :build_events, :pipeline_events + expose :note_events, :build_events, :pipeline_events, :wiki_page_events expose :enable_ssl_verification end diff --git a/lib/api/project_hooks.rb b/lib/api/project_hooks.rb index 3f63cd678e8..14f5be3b5f6 100644 --- a/lib/api/project_hooks.rb +++ b/lib/api/project_hooks.rb @@ -46,6 +46,7 @@ module API :note_events, :build_events, :pipeline_events, + :wiki_page_events, :enable_ssl_verification ] @hook = user_project.hooks.new(attrs) @@ -80,6 +81,7 @@ module API :note_events, :build_events, :pipeline_events, + :wiki_page_events, :enable_ssl_verification ] diff --git a/spec/factories/project_hooks.rb b/spec/factories/project_hooks.rb index 4fd51a23490..424ecc65759 100644 --- a/spec/factories/project_hooks.rb +++ b/spec/factories/project_hooks.rb @@ -14,6 +14,7 @@ FactoryGirl.define do note_events true build_events true pipeline_events true + wiki_page_events true end end end diff --git a/spec/requests/api/project_hooks_spec.rb b/spec/requests/api/project_hooks_spec.rb index 4a585c78edf..765dc8a8f66 100644 --- a/spec/requests/api/project_hooks_spec.rb +++ b/spec/requests/api/project_hooks_spec.rb @@ -34,6 +34,7 @@ describe API::API, 'ProjectHooks', api: true do expect(json_response.first['note_events']).to eq(true) expect(json_response.first['build_events']).to eq(true) expect(json_response.first['pipeline_events']).to eq(true) + expect(json_response.first['wiki_page_events']).to eq(true) expect(json_response.first['enable_ssl_verification']).to eq(true) end end @@ -59,6 +60,7 @@ describe API::API, 'ProjectHooks', api: true do expect(json_response['note_events']).to eq(hook.note_events) expect(json_response['build_events']).to eq(hook.build_events) expect(json_response['pipeline_events']).to eq(hook.pipeline_events) + expect(json_response['wiki_page_events']).to eq(hook.wiki_page_events) expect(json_response['enable_ssl_verification']).to eq(hook.enable_ssl_verification) end @@ -95,6 +97,7 @@ describe API::API, 'ProjectHooks', api: true do expect(json_response['note_events']).to eq(false) expect(json_response['build_events']).to eq(false) expect(json_response['pipeline_events']).to eq(false) + expect(json_response['wiki_page_events']).to eq(false) expect(json_response['enable_ssl_verification']).to eq(true) end @@ -122,6 +125,7 @@ describe API::API, 'ProjectHooks', api: true do expect(json_response['note_events']).to eq(hook.note_events) expect(json_response['build_events']).to eq(hook.build_events) expect(json_response['pipeline_events']).to eq(hook.pipeline_events) + expect(json_response['wiki_page_events']).to eq(hook.wiki_page_events) expect(json_response['enable_ssl_verification']).to eq(hook.enable_ssl_verification) end From 3c09000e18dcbf6a74ed1f749db3184e309cf081 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 10 Aug 2016 18:22:21 -0300 Subject: [PATCH 065/107] Does not halt the GitHub import process when an error occurs --- app/models/project.rb | 2 - app/workers/repository_import_worker.rb | 2 + lib/gitlab/github_import/importer.rb | 82 ++++++----- .../github_import/pull_request_formatter.rb | 4 + .../lib/gitlab/github_import/importer_spec.rb | 129 ++++++++++++++++++ .../pull_request_formatter_spec.rb | 11 +- 6 files changed, 194 insertions(+), 36 deletions(-) create mode 100644 spec/lib/gitlab/github_import/importer_spec.rb diff --git a/app/models/project.rb b/app/models/project.rb index 1855760e694..8cf093be4c3 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -471,8 +471,6 @@ class Project < ActiveRecord::Base end def reset_cache_and_import_attrs - update(import_error: nil) - ProjectCacheWorker.perform_async(self.id) self.import_data.destroy if self.import_data diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb index e6701078f71..d2ca8813ab9 100644 --- a/app/workers/repository_import_worker.rb +++ b/app/workers/repository_import_worker.rb @@ -14,6 +14,8 @@ class RepositoryImportWorker import_url: @project.import_url, path: @project.path_with_namespace) + project.update_column(:import_error, nil) + result = Projects::ImportService.new(project, current_user).execute if result[:status] == :error diff --git a/lib/gitlab/github_import/importer.rb b/lib/gitlab/github_import/importer.rb index 9ddc8905bd6..86b49a5021a 100644 --- a/lib/gitlab/github_import/importer.rb +++ b/lib/gitlab/github_import/importer.rb @@ -3,12 +3,13 @@ module Gitlab class Importer include Gitlab::ShellAdapter - attr_reader :client, :project, :repo, :repo_url + attr_reader :client, :errors, :project, :repo, :repo_url def initialize(project) @project = project @repo = project.import_source @repo_url = project.import_url + @errors = [] if credentials @client = Client.new(credentials[:user]) @@ -18,8 +19,14 @@ module Gitlab end def execute - import_labels && import_milestones && import_issues && - import_pull_requests && import_wiki + import_labels + import_milestones + import_issues + import_pull_requests + import_wiki + handle_errors + + true end private @@ -28,22 +35,32 @@ module Gitlab @credentials ||= project.import_data.credentials if project.import_data end + def handle_errors + project.update_column(:import_error, errors.to_json) unless errors.empty? + end + def import_labels labels = client.labels(repo, per_page: 100) - labels.each { |raw| LabelFormatter.new(project, raw).create! } - true - rescue ActiveRecord::RecordInvalid => e - raise Projects::ImportService::Error, e.message + labels.each do |raw| + begin + LabelFormatter.new(project, raw).create! + rescue => e + errors << { type: :label, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message } + end + end end def import_milestones milestones = client.milestones(repo, state: :all, per_page: 100) - milestones.each { |raw| MilestoneFormatter.new(project, raw).create! } - true - rescue ActiveRecord::RecordInvalid => e - raise Projects::ImportService::Error, e.message + milestones.each do |raw| + begin + MilestoneFormatter.new(project, raw).create! + rescue => e + errors << { type: :milestone, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message } + end + end end def import_issues @@ -53,15 +70,15 @@ module Gitlab gh_issue = IssueFormatter.new(project, raw) if gh_issue.valid? - issue = gh_issue.create! - apply_labels(issue) - import_comments(issue) if gh_issue.has_comments? + begin + issue = gh_issue.create! + apply_labels(issue) + import_comments(issue) if gh_issue.has_comments? + rescue => e + errors << { type: :issue, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message } + end end end - - true - rescue ActiveRecord::RecordInvalid => e - raise Projects::ImportService::Error, e.message end def import_pull_requests @@ -77,14 +94,12 @@ module Gitlab apply_labels(merge_request) import_comments(merge_request) import_comments_on_diff(merge_request) - rescue ActiveRecord::RecordInvalid => e - raise Projects::ImportService::Error, e.message + rescue => e + errors << { type: :pull_request, url: Gitlab::UrlSanitizer.sanitize(pull_request.url), errors: e.message } ensure clean_up_restored_branches(pull_request) end end - - true end def restore_source_branch(pull_request) @@ -98,7 +113,7 @@ module Gitlab def remove_branch(name) project.repository.delete_branch(name) rescue Rugged::ReferenceError - nil + errors << { type: :remove_branch, name: name } end def clean_up_restored_branches(pull_request) @@ -112,9 +127,10 @@ module Gitlab issue = client.issue(repo, issuable.iid) if issue.labels.count > 0 - label_ids = issue.labels.map do |raw| - Label.find_by(LabelFormatter.new(project, raw).attributes).try(:id) - end + label_ids = issue.labels + .map { |raw| LabelFormatter.new(project, raw).attributes } + .map { |attrs| Label.find_by(attrs).try(:id) } + .compact issuable.update_attribute(:label_ids, label_ids) end @@ -132,8 +148,12 @@ module Gitlab def create_comments(issuable, comments) comments.each do |raw| - comment = CommentFormatter.new(project, raw) - issuable.notes.create!(comment.attributes) + begin + comment = CommentFormatter.new(project, raw) + issuable.notes.create!(comment.attributes) + rescue => e + errors << { type: :comment, url: Gitlab::UrlSanitizer.sanitize(raw.url), errors: e.message } + end end end @@ -143,16 +163,12 @@ module Gitlab gitlab_shell.import_repository(project.repository_storage_path, wiki.path_with_namespace, wiki.import_url) project.update_attribute(:wiki_enabled, true) end - - true rescue Gitlab::Shell::Error => e # GitHub error message when the wiki repo has not been created, # this means that repo has wiki enabled, but have no pages. So, # we can skip the import. if e.message !~ /repository not exported/ - raise Projects::ImportService::Error, e.message - else - true + errors << { type: :wiki, errors: e.message } end end end diff --git a/lib/gitlab/github_import/pull_request_formatter.rb b/lib/gitlab/github_import/pull_request_formatter.rb index b84538a090a..04aa3664f64 100644 --- a/lib/gitlab/github_import/pull_request_formatter.rb +++ b/lib/gitlab/github_import/pull_request_formatter.rb @@ -56,6 +56,10 @@ module Gitlab end end + def url + raw_data.url + end + private def assigned? diff --git a/spec/lib/gitlab/github_import/importer_spec.rb b/spec/lib/gitlab/github_import/importer_spec.rb new file mode 100644 index 00000000000..2c8d86ef9b6 --- /dev/null +++ b/spec/lib/gitlab/github_import/importer_spec.rb @@ -0,0 +1,129 @@ +require 'spec_helper' + +describe Gitlab::GithubImport::Importer, lib: true do + describe '#execute' do + context 'when an error occurs' do + let(:project) { create(:project, import_url: 'https://github.com/octocat/Hello-World.git', wiki_enabled: false) } + let(:octocat) { double(id: 123456, login: 'octocat') } + let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') } + let(:updated_at) { DateTime.strptime('2011-01-27T19:01:12Z') } + let(:repository) { double(id: 1, fork: false) } + let(:source_sha) { create(:commit, project: project).id } + let(:source_branch) { double(ref: 'feature', repo: repository, sha: source_sha) } + let(:target_sha) { create(:commit, project: project, git_commit: RepoHelpers.another_sample_commit).id } + let(:target_branch) { double(ref: 'master', repo: repository, sha: target_sha) } + + let(:label) do + double( + name: 'Bug', + color: 'ff0000', + url: 'https://api.github.com/repos/octocat/Hello-World/labels/bug' + ) + end + + let(:milestone) do + double( + number: 1347, + state: 'open', + title: '1.0', + description: 'Version 1.0', + due_on: nil, + created_at: created_at, + updated_at: updated_at, + closed_at: nil, + url: 'https://api.github.com/repos/octocat/Hello-World/milestones/1' + ) + end + + let(:issue1) do + double( + number: 1347, + milestone: nil, + state: 'open', + title: 'Found a bug', + body: "I'm having a problem with this.", + assignee: nil, + user: octocat, + comments: 0, + pull_request: nil, + created_at: created_at, + updated_at: updated_at, + closed_at: nil, + url: 'https://api.github.com/repos/octocat/Hello-World/issues/1347' + ) + end + + let(:issue2) do + double( + number: 1348, + milestone: nil, + state: 'open', + title: nil, + body: "I'm having a problem with this.", + assignee: nil, + user: octocat, + comments: 0, + pull_request: nil, + created_at: created_at, + updated_at: updated_at, + closed_at: nil, + url: 'https://api.github.com/repos/octocat/Hello-World/issues/1348' + ) + end + + let(:pull_request) do + double( + number: 1347, + milestone: nil, + state: 'open', + title: 'New feature', + body: 'Please pull these awesome changes', + head: source_branch, + base: target_branch, + assignee: nil, + user: octocat, + created_at: created_at, + updated_at: updated_at, + closed_at: nil, + merged_at: nil, + url: 'https://api.github.com/repos/octocat/Hello-World/pulls/1347' + ) + end + + before do + allow(project).to receive(:import_data).and_return(double.as_null_object) + allow_any_instance_of(Octokit::Client).to receive(:rate_limit!).and_raise(Octokit::NotFound) + allow_any_instance_of(Octokit::Client).to receive(:labels).and_return([label, label]) + allow_any_instance_of(Octokit::Client).to receive(:milestones).and_return([milestone, milestone]) + allow_any_instance_of(Octokit::Client).to receive(:issues).and_return([issue1, issue2]) + allow_any_instance_of(Octokit::Client).to receive(:pull_requests).and_return([pull_request, pull_request]) + allow_any_instance_of(Octokit::Client).to receive(:last_response).and_return(double(rels: { next: nil })) + allow_any_instance_of(Gitlab::Shell).to receive(:import_repository).and_raise(Gitlab::Shell::Error) + end + + it 'returns true' do + expect(described_class.new(project).execute).to eq true + end + + it 'does not raise an error' do + expect { described_class.new(project).execute }.not_to raise_error + end + + it 'stores error messages' do + errors = [ + { type: :label, url: "https://api.github.com/repos/octocat/Hello-World/labels/bug", errors: "Validation failed: Title has already been taken" }, + { type: :milestone, url: "https://api.github.com/repos/octocat/Hello-World/milestones/1", errors: "Validation failed: Title has already been taken" }, + { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1347", errors: "Invalid Repository. Use user/repo format." }, + { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1348", errors: "Validation failed: Title can't be blank, Title is too short (minimum is 0 characters)" }, + { type: :pull_request, url: "https://api.github.com/repos/octocat/Hello-World/pulls/1347", errors: "Invalid Repository. Use user/repo format." }, + { type: :pull_request, url: "https://api.github.com/repos/octocat/Hello-World/pulls/1347", errors: "Validation failed: Validate branches Cannot Create: This merge request already exists: [\"New feature\"]" }, + { type: :wiki, errors: "Gitlab::Shell::Error" } + ] + + described_class.new(project).execute + + expect(project.import_error).to eq errors.to_json + end + end + end +end diff --git a/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb b/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb index aa28e360993..b667abf063d 100644 --- a/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb +++ b/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb @@ -27,7 +27,8 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do created_at: created_at, updated_at: updated_at, closed_at: nil, - merged_at: nil + merged_at: nil, + url: 'https://api.github.com/repos/octocat/Hello-World/pulls/1347' } end @@ -229,4 +230,12 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do end end end + + describe '#url' do + let(:raw_data) { double(base_data) } + + it 'return raw url' do + expect(pull_request.url).to eq 'https://api.github.com/repos/octocat/Hello-World/pulls/1347' + end + end end From 2986de7c8c63c0a90f750adbfd843d3b2d50e25f Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 24 Aug 2016 12:14:06 -0300 Subject: [PATCH 066/107] Add readable error message when remote data could not be fully imported --- lib/gitlab/github_import/importer.rb | 7 +++++- .../lib/gitlab/github_import/importer_spec.rb | 23 +++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/gitlab/github_import/importer.rb b/lib/gitlab/github_import/importer.rb index 86b49a5021a..02ffb43d89b 100644 --- a/lib/gitlab/github_import/importer.rb +++ b/lib/gitlab/github_import/importer.rb @@ -36,7 +36,12 @@ module Gitlab end def handle_errors - project.update_column(:import_error, errors.to_json) unless errors.empty? + return unless errors.any? + + project.update_column(:import_error, { + message: 'The remote data could not be fully imported.', + errors: errors + }.to_json) end def import_labels diff --git a/spec/lib/gitlab/github_import/importer_spec.rb b/spec/lib/gitlab/github_import/importer_spec.rb index 2c8d86ef9b6..b7c3bc4e1a7 100644 --- a/spec/lib/gitlab/github_import/importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer_spec.rb @@ -110,19 +110,22 @@ describe Gitlab::GithubImport::Importer, lib: true do end it 'stores error messages' do - errors = [ - { type: :label, url: "https://api.github.com/repos/octocat/Hello-World/labels/bug", errors: "Validation failed: Title has already been taken" }, - { type: :milestone, url: "https://api.github.com/repos/octocat/Hello-World/milestones/1", errors: "Validation failed: Title has already been taken" }, - { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1347", errors: "Invalid Repository. Use user/repo format." }, - { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1348", errors: "Validation failed: Title can't be blank, Title is too short (minimum is 0 characters)" }, - { type: :pull_request, url: "https://api.github.com/repos/octocat/Hello-World/pulls/1347", errors: "Invalid Repository. Use user/repo format." }, - { type: :pull_request, url: "https://api.github.com/repos/octocat/Hello-World/pulls/1347", errors: "Validation failed: Validate branches Cannot Create: This merge request already exists: [\"New feature\"]" }, - { type: :wiki, errors: "Gitlab::Shell::Error" } - ] + error = { + message: 'The remote data could not be fully imported.', + errors: [ + { type: :label, url: "https://api.github.com/repos/octocat/Hello-World/labels/bug", errors: "Validation failed: Title has already been taken" }, + { type: :milestone, url: "https://api.github.com/repos/octocat/Hello-World/milestones/1", errors: "Validation failed: Title has already been taken" }, + { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1347", errors: "Invalid Repository. Use user/repo format." }, + { type: :issue, url: "https://api.github.com/repos/octocat/Hello-World/issues/1348", errors: "Validation failed: Title can't be blank, Title is too short (minimum is 0 characters)" }, + { type: :pull_request, url: "https://api.github.com/repos/octocat/Hello-World/pulls/1347", errors: "Invalid Repository. Use user/repo format." }, + { type: :pull_request, url: "https://api.github.com/repos/octocat/Hello-World/pulls/1347", errors: "Validation failed: Validate branches Cannot Create: This merge request already exists: [\"New feature\"]" }, + { type: :wiki, errors: "Gitlab::Shell::Error" } + ] + } described_class.new(project).execute - expect(project.import_error).to eq errors.to_json + expect(project.import_error).to eq error.to_json end end end From 8e52705776dce7021ac1a150253037f085638a46 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 24 Aug 2016 13:04:26 -0300 Subject: [PATCH 067/107] Update CHANGELOG --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index ef38d3e29f5..b3cb9d4b3e1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ v 8.12.0 (unreleased) - Added tests for diff notes v 8.11.1 (unreleased) + - Does not halt the GitHub import process when an error occurs - Fix file links on project page when default view is Files !5933 v 8.11.0 From 60ac1167d1324b4468e3ae85000feb2bf78a24e2 Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Date: Wed, 24 Aug 2016 11:29:18 -0500 Subject: [PATCH 068/107] Remove max height on pipelines graph --- app/assets/stylesheets/pages/pipelines.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index 6fa097e3bf1..dcb3e48d686 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -254,7 +254,6 @@ width: 100%; overflow: auto; white-space: nowrap; - max-height: 500px; transition: max-height 0.3s, padding 0.3s; &.graph-collapsed { From cfe512d6e926a3f757d18e5269214c06b8f9643d Mon Sep 17 00:00:00 2001 From: Paco Guzman Date: Wed, 24 Aug 2016 13:13:26 +0200 Subject: [PATCH 069/107] Show "Create Merge Request" widget for push events to fork projects on the source project --- CHANGELOG | 3 +++ app/helpers/projects_helper.rb | 21 +++++++-------- app/models/user.rb | 4 +-- spec/helpers/projects_helper_spec.rb | 38 ++++++++++++++++++++++++++++ spec/models/user_spec.rb | 10 ++++++++ 5 files changed, 64 insertions(+), 12 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ef38d3e29f5..65796fd808c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,9 @@ v 8.12.0 (unreleased) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Added tests for diff notes +v 8.11.2 (unreleased) + - Show "Create Merge Request" widget for push events to fork projects on the source project + v 8.11.1 (unreleased) - Fix file links on project page when default view is Files !5933 diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 249d18c4486..356f27f2d5d 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -116,6 +116,17 @@ module ProjectsHelper license.nickname || license.name end + def last_push_event + return unless current_user + + project_ids = [@project.id] + if fork = current_user.fork_of(@project) + project_ids << fork.id + end + + current_user.recent_push(project_ids) + end + private def get_project_nav_tabs(project, current_user) @@ -351,16 +362,6 @@ module ProjectsHelper namespace_project_new_blob_path(@project.namespace, @project, tree_join(ref), file_name: 'LICENSE') end - def last_push_event - return unless current_user - - if fork = current_user.fork_of(@project) - current_user.recent_push(fork.id) - else - current_user.recent_push(@project.id) - end - end - def readme_cache_key sha = @project.commit.try(:sha) || 'nil' [@project.path_with_namespace, sha, "readme"].join('-') diff --git a/app/models/user.rb b/app/models/user.rb index 48e83ab7e56..ad3cfbc03e4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -489,10 +489,10 @@ class User < ActiveRecord::Base (personal_projects.count.to_f / projects_limit) * 100 end - def recent_push(project_id = nil) + def recent_push(project_ids = nil) # Get push events not earlier than 2 hours ago events = recent_events.code_push.where("created_at > ?", Time.now - 2.hours) - events = events.where(project_id: project_id) if project_id + events = events.where(project_id: project_ids) if project_ids # Use the latest event that has not been pushed or merged recently events.recent.find do |event| diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 604204cca0a..284b58d8d5c 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -136,4 +136,42 @@ describe ProjectsHelper do expect(sanitize_repo_path(project, import_error)).to eq('Could not clone [REPOS PATH]/namespace/test.git') end end + + describe '#last_push_event' do + let(:user) { double(:user, fork_of: nil) } + let(:project) { double(:project, id: 1) } + + before do + allow(helper).to receive(:current_user).and_return(user) + helper.instance_variable_set(:@project, project) + end + + context 'when there is no current_user' do + let(:user) { nil } + + it 'returns nil' do + expect(helper.last_push_event).to eq(nil) + end + end + + it 'returns recent push on the current project' do + event = double(:event) + expect(user).to receive(:recent_push).with([project.id]).and_return(event) + + expect(helper.last_push_event).to eq(event) + end + + context 'when current user has a fork of the current project' do + let(:fork) { double(:fork, id: 2) } + + it 'returns recent push considering fork events' do + expect(user).to receive(:fork_of).with(project).and_return(fork) + + event_on_fork = double(:event) + expect(user).to receive(:recent_push).with([project.id, fork.id]).and_return(event_on_fork) + + expect(helper.last_push_event).to eq(event_on_fork) + end + end + end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 51e4780e2b1..8eb0c5033c9 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -920,6 +920,16 @@ describe User, models: true do expect(subject.recent_push).to eq(nil) end + + it "includes push events on any of the provided projects" do + expect(subject.recent_push(project1)).to eq(nil) + expect(subject.recent_push(project2)).to eq(push_event) + + push_data1 = Gitlab::DataBuilder::Push.build_sample(project1, subject) + push_event1 = create(:event, action: Event::PUSHED, project: project1, target: project1, author: subject, data: push_data1) + + expect(subject.recent_push([project1, project2])).to eq(push_event1) # Newest + end end describe '#authorized_groups' do From 170885edd6f3ea52792511586778e0dce8021cf7 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Thu, 18 Aug 2016 17:06:33 -0700 Subject: [PATCH 070/107] Add Sentry logging to API calls Closes #21043 --- CHANGELOG | 1 + app/controllers/application_controller.rb | 23 +--------------- app/helpers/sentry_helper.rb | 27 +++++++++++++++++++ lib/api/api.rb | 12 ++------- lib/api/helpers.rb | 32 +++++++++++++++++++++++ lib/ci/api/api.rb | 12 ++------- spec/requests/api/api_helpers_spec.rb | 27 +++++++++++++++++++ 7 files changed, 92 insertions(+), 42 deletions(-) create mode 100644 app/helpers/sentry_helper.rb diff --git a/CHANGELOG b/CHANGELOG index 3e6066cfae0..ea9ebf740e1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ v 8.12.0 (unreleased) - Change merge_error column from string to text type - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Add `wiki_page_events` to project hook APIs (Ben Boeckel) + - Add Sentry logging to API calls - Added tests for diff notes v 8.11.2 (unreleased) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 634d36a4467..70a2275592b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -6,6 +6,7 @@ class ApplicationController < ActionController::Base include Gitlab::GonHelper include GitlabRoutingHelper include PageLayoutHelper + include SentryHelper include WorkhorseHelper before_action :authenticate_user_from_private_token! @@ -46,28 +47,6 @@ class ApplicationController < ActionController::Base protected - def sentry_context - if Rails.env.production? && current_application_settings.sentry_enabled - if current_user - Raven.user_context( - id: current_user.id, - email: current_user.email, - username: current_user.username, - ) - end - - Raven.tags_context(program: sentry_program_context) - end - end - - def sentry_program_context - if Sidekiq.server? - 'sidekiq' - else - 'rails' - end - end - # This filter handles both private tokens and personal access tokens def authenticate_user_from_private_token! token_string = params[:private_token].presence || request.headers['PRIVATE-TOKEN'].presence diff --git a/app/helpers/sentry_helper.rb b/app/helpers/sentry_helper.rb new file mode 100644 index 00000000000..f8cccade15b --- /dev/null +++ b/app/helpers/sentry_helper.rb @@ -0,0 +1,27 @@ +module SentryHelper + def sentry_enabled? + Rails.env.production? && current_application_settings.sentry_enabled? + end + + def sentry_context + return unless sentry_enabled? + + if current_user + Raven.user_context( + id: current_user.id, + email: current_user.email, + username: current_user.username, + ) + end + + Raven.tags_context(program: sentry_program_context) + end + + def sentry_program_context + if Sidekiq.server? + 'sidekiq' + else + 'rails' + end + end +end diff --git a/lib/api/api.rb b/lib/api/api.rb index 6b8bfbbdae6..ecbd5a6e2fa 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -18,22 +18,14 @@ module API end rescue_from :all do |exception| - # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb#L60 - # why is this not wrapped in something reusable? - trace = exception.backtrace - - message = "\n#{exception.class} (#{exception.message}):\n" - message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code) - message << " " << trace.join("\n ") - - API.logger.add Logger::FATAL, message - rack_response({ 'message' => '500 Internal Server Error' }.to_json, 500) + handle_api_exception(exception) end format :json content_type :txt, "text/plain" # Ensure the namespace is right, otherwise we might load Grape::API::Helpers + helpers ::SentryHelper helpers ::API::Helpers mount ::API::AccessRequests diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index d0469d6602d..da4b1bf9902 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -279,6 +279,24 @@ module API error!({ 'message' => message }, status) end + def handle_api_exception(exception) + if sentry_enabled? && report_exception?(exception) + define_params_for_grape_middleware + sentry_context + Raven.capture_exception(exception) + end + + # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb#L60 + trace = exception.backtrace + + message = "\n#{exception.class} (#{exception.message}):\n" + message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code) + message << " " << trace.join("\n ") + + API.logger.add Logger::FATAL, message + rack_response({ 'message' => '500 Internal Server Error' }.to_json, 500) + end + # Projects helpers def filter_projects(projects) @@ -419,5 +437,19 @@ module API Entities::Issue end end + + # The Grape Error Middleware only has access to env but no params. We workaround this by + # defining a method that returns the right value. + def define_params_for_grape_middleware + self.define_singleton_method(:params) { Rack::Request.new(env).params.symbolize_keys } + end + + # We could get a Grape or a standard Ruby exception. We should only report anything that + # is clearly an error. + def report_exception?(exception) + return true unless exception.respond_to?(:status) + + exception.status == 500 + end end end diff --git a/lib/ci/api/api.rb b/lib/ci/api/api.rb index 17bb99a2ae5..a6b9beecded 100644 --- a/lib/ci/api/api.rb +++ b/lib/ci/api/api.rb @@ -9,22 +9,14 @@ module Ci end rescue_from :all do |exception| - # lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb#L60 - # why is this not wrapped in something reusable? - trace = exception.backtrace - - message = "\n#{exception.class} (#{exception.message}):\n" - message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code) - message << " " << trace.join("\n ") - - API.logger.add Logger::FATAL, message - rack_response({ 'message' => '500 Internal Server Error' }, 500) + handle_api_exception(exception) end content_type :txt, 'text/plain' content_type :json, 'application/json' format :json + helpers ::SentryHelper helpers ::Ci::API::Helpers helpers ::API::Helpers helpers Gitlab::CurrentSettings diff --git a/spec/requests/api/api_helpers_spec.rb b/spec/requests/api/api_helpers_spec.rb index c65510fadec..bbdf8f03c2b 100644 --- a/spec/requests/api/api_helpers_spec.rb +++ b/spec/requests/api/api_helpers_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe API::Helpers, api: true do include API::Helpers include ApiHelpers + include SentryHelper let(:user) { create(:user) } let(:admin) { create(:admin) } @@ -234,4 +235,30 @@ describe API::Helpers, api: true do expect(to_boolean(nil)).to be_nil end end + + describe '.handle_api_exception' do + before do + allow_any_instance_of(self.class).to receive(:sentry_enabled?).and_return(true) + allow_any_instance_of(self.class).to receive(:rack_response) + end + + it 'does not report a MethodNotAllowed exception to Sentry' do + exception = Grape::Exceptions::MethodNotAllowed.new({ 'X-GitLab-Test' => '1' }) + allow(exception).to receive(:backtrace).and_return(caller) + + expect(Raven).not_to receive(:capture_exception).with(exception) + + handle_api_exception(exception) + end + + it 'does report RuntimeError to Sentry' do + exception = RuntimeError.new('test error') + allow(exception).to receive(:backtrace).and_return(caller) + + expect_any_instance_of(self.class).to receive(:sentry_context) + expect(Raven).to receive(:capture_exception).with(exception) + + handle_api_exception(exception) + end + end end From bba85773519e972d036a933b1f054b6c76050c5f Mon Sep 17 00:00:00 2001 From: Drew Blessing Date: Tue, 26 Jul 2016 16:48:51 -0500 Subject: [PATCH 071/107] Add two factor recovery endpoint to internal API --- CHANGELOG | 1 + doc/README.md | 1 + doc/user/account/security.md | 3 + doc/user/account/two_factor_authentication.md | 68 +++++++++++++++++++ lib/api/internal.rb | 25 +++++++ spec/requests/api/internal_spec.rb | 62 +++++++++++++++++ 6 files changed, 160 insertions(+) create mode 100644 doc/user/account/security.md create mode 100644 doc/user/account/two_factor_authentication.md diff --git a/CHANGELOG b/CHANGELOG index 8b25b94b772..346618b0160 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.12.0 (unreleased) + - Add two-factor recovery endpoint to internal API !5510 - Change merge_error column from string to text type - Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) diff --git a/doc/README.md b/doc/README.md index 195b7c7af62..047035dfb09 100644 --- a/doc/README.md +++ b/doc/README.md @@ -2,6 +2,7 @@ ## User documentation +- [Account Security](user/account/security.md) Securing your account via two-factor authentication, etc. - [API](api/README.md) Automate GitLab via a simple and powerful API. - [CI/CD](ci/README.md) GitLab Continuous Integration (CI) and Continuous Delivery (CD) getting started, `.gitlab-ci.yml` options, and examples. - [GitLab as OAuth2 authentication service provider](integration/oauth_provider.md). It allows you to login to other applications from GitLab. diff --git a/doc/user/account/security.md b/doc/user/account/security.md new file mode 100644 index 00000000000..816094bf8d2 --- /dev/null +++ b/doc/user/account/security.md @@ -0,0 +1,3 @@ +# Account Security + +- [Two-Factor Authentication](two_factor_authentication.md) diff --git a/doc/user/account/two_factor_authentication.md b/doc/user/account/two_factor_authentication.md new file mode 100644 index 00000000000..881358ed94d --- /dev/null +++ b/doc/user/account/two_factor_authentication.md @@ -0,0 +1,68 @@ +# Two-Factor Authentication + +## Recovery options + +If you lose your code generation device (such as your mobile phone) and you need +to disable two-factor authentication on your account, you have several options. + +### Use a saved recovery code + +When you enabled two-factor authentication for your account, a series of +recovery codes were generated. If you saved those codes somewhere safe, you +may use one to sign in. + +First, enter your username/email and password on the GitLab sign in page. When +prompted for a two-factor code, enter one of the recovery codes you saved +previously. + +> **Note:** Once a particular recovery code has been used, it cannot be used again. + You may still use the other saved recovery codes at a later time. + +### Generate new recovery codes using SSH + +It's not uncommon for users to forget to save the recovery codes when enabling +two-factor authentication. If you have an SSH key added to your GitLab account, +you can generate a new set of recovery codes using SSH. + +Run `ssh git@gitlab.example.com 2fa_recovery_codes`. You will be prompted to +confirm that you wish to generate new codes. If you choose to continue, any +previously saved codes will be invalidated. + +```bash +$ ssh git@gitlab.example.com 2fa_recovery_codes +Are you sure you want to generate new two-factor recovery codes? +Any existing recovery codes you saved will be invalidated. (yes/no) +yes + +Your two-factor authentication recovery codes are: + +119135e5a3ebce8e +11f6v2a498810dcd +3924c7ab2089c902 +e79a3398bfe4f224 +34bd7b74adbc8861 +f061691d5107df1a +169bf32a18e63e7f +b510e7422e81c947 +20dbed24c5e74663 +df9d3b9403b9c9f0 + +During sign in, use one of the codes above when prompted for +your two-factor code. Then, visit your Profile Settings and add +a new device so you do not lose access to your account again. +``` + +Next, go to the GitLab sign in page and enter your username/email and password. +When prompted for a two-factor code, enter one of the recovery codes obtained +from the command line output. + +> **Note:** After signing in, you should immediately visit your **Profile Settings + -> Account** to set up two-factor authentication with a new device. + +### Ask a GitLab administrator to disable two-factor on your account + +If the above two methods are not possible, you may ask a GitLab global +administrator to disable two-factor authentication for your account. Please +be aware that this will temporarily leave your account in a less secure state. +You should sign in and re-enable two-factor authentication as soon as possible +after the administrator disables it. diff --git a/lib/api/internal.rb b/lib/api/internal.rb index d8e9ac406c4..5b54c11ef62 100644 --- a/lib/api/internal.rb +++ b/lib/api/internal.rb @@ -101,6 +101,31 @@ module API {} end end + + post '/two_factor_recovery_codes' do + status 200 + + key = Key.find(params[:key_id]) + user = key.user + + # Make sure this isn't a deploy key + unless key.type.nil? + return { success: false, message: 'Deploy keys cannot be used to retrieve recovery codes' } + end + + unless user.present? + return { success: false, message: 'Could not find a user for the given key' } + end + + unless user.two_factor_enabled? + return { success: false, message: 'Two-factor authentication is not enabled for this user' } + end + + codes = user.generate_otp_backup_codes! + user.save! + + { success: true, recovery_codes: codes } + end end end end diff --git a/spec/requests/api/internal_spec.rb b/spec/requests/api/internal_spec.rb index be52f88831f..5d06abcfeb3 100644 --- a/spec/requests/api/internal_spec.rb +++ b/spec/requests/api/internal_spec.rb @@ -38,6 +38,68 @@ describe API::API, api: true do end end + describe 'GET /internal/two_factor_recovery_codes' do + it 'returns an error message when the key does not exist' do + post api('/internal/two_factor_recovery_codes'), + secret_token: secret_token, + key_id: 12345 + + expect(response).to have_http_status(404) + expect(json_response['message']).to eq('404 Not found') + end + + it 'returns an error message when the key is a deploy key' do + deploy_key = create(:deploy_key) + + post api('/internal/two_factor_recovery_codes'), + secret_token: secret_token, + key_id: deploy_key.id + + expect(json_response['success']).to be_falsey + expect(json_response['message']).to eq('Deploy keys cannot be used to retrieve recovery codes') + end + + it 'returns an error message when the user does not exist' do + key_without_user = create(:key, user: nil) + + post api('/internal/two_factor_recovery_codes'), + secret_token: secret_token, + key_id: key_without_user.id + + expect(json_response['success']).to be_falsey + expect(json_response['message']).to eq('Could not find a user for the given key') + expect(json_response['recovery_codes']).to be_nil + end + + context 'when two-factor is enabled' do + it 'returns new recovery codes when the user exists' do + allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(true) + allow_any_instance_of(User) + .to receive(:generate_otp_backup_codes!).and_return(%w(119135e5a3ebce8e 34bd7b74adbc8861)) + + post api('/internal/two_factor_recovery_codes'), + secret_token: secret_token, + key_id: key.id + + expect(json_response['success']).to be_truthy + expect(json_response['recovery_codes']).to match_array(%w(119135e5a3ebce8e 34bd7b74adbc8861)) + end + end + + context 'when two-factor is not enabled' do + it 'returns an error message' do + allow_any_instance_of(User).to receive(:two_factor_enabled?).and_return(false) + + post api('/internal/two_factor_recovery_codes'), + secret_token: secret_token, + key_id: key.id + + expect(json_response['success']).to be_falsey + expect(json_response['recovery_codes']).to be_nil + end + end + end + describe "GET /internal/discover" do it do get(api("/internal/discover"), key_id: key.id, secret_token: secret_token) From 23bed91b3fb21a92b836011677cc75c884188f10 Mon Sep 17 00:00:00 2001 From: De Wet Blomerus Date: Thu, 25 Aug 2016 04:55:32 +0200 Subject: [PATCH 072/107] rename Statuseable to HasStatus --- app/models/ci/pipeline.rb | 2 +- app/models/commit_status.rb | 2 +- app/models/concerns/{statuseable.rb => has_status.rb} | 2 +- app/services/ci/process_pipeline_service.rb | 2 +- .../concerns/{statuseable_spec.rb => has_status_spec.rb} | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) rename app/models/concerns/{statuseable.rb => has_status.rb} (99%) rename spec/models/concerns/{statuseable_spec.rb => has_status_spec.rb} (97%) diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 087abe4cbb1..255fb33bdeb 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -1,7 +1,7 @@ module Ci class Pipeline < ActiveRecord::Base extend Ci::Model - include Statuseable + include HasStatus self.table_name = 'ci_commits' diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 84ceeac7d3e..9114af18496 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -1,5 +1,5 @@ class CommitStatus < ActiveRecord::Base - include Statuseable + include HasStatus include Importable self.table_name = 'ci_builds' diff --git a/app/models/concerns/statuseable.rb b/app/models/concerns/has_status.rb similarity index 99% rename from app/models/concerns/statuseable.rb rename to app/models/concerns/has_status.rb index 750f937b724..f7b8352405c 100644 --- a/app/models/concerns/statuseable.rb +++ b/app/models/concerns/has_status.rb @@ -1,4 +1,4 @@ -module Statuseable +module HasStatus extend ActiveSupport::Concern AVAILABLE_STATUSES = %w[created pending running success failed canceled skipped] diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb index 6f7610d42ba..f049ed628db 100644 --- a/app/services/ci/process_pipeline_service.rb +++ b/app/services/ci/process_pipeline_service.rb @@ -34,7 +34,7 @@ module Ci end def process_build(build, current_status) - return false unless Statuseable::COMPLETED_STATUSES.include?(current_status) + return false unless HasStatus::COMPLETED_STATUSES.include?(current_status) if valid_statuses_for_when(build.when).include?(current_status) build.enqueue diff --git a/spec/models/concerns/statuseable_spec.rb b/spec/models/concerns/has_status_spec.rb similarity index 97% rename from spec/models/concerns/statuseable_spec.rb rename to spec/models/concerns/has_status_spec.rb index 8e0a2a2cbde..e118432d098 100644 --- a/spec/models/concerns/statuseable_spec.rb +++ b/spec/models/concerns/has_status_spec.rb @@ -1,9 +1,9 @@ require 'spec_helper' -describe Statuseable do +describe HasStatus do before do @object = Object.new - @object.extend(Statuseable::ClassMethods) + @object.extend(HasStatus::ClassMethods) end describe '.status' do @@ -12,7 +12,7 @@ describe Statuseable do end subject { @object.status } - + shared_examples 'build status summary' do context 'all successful' do let(:statuses) { Array.new(2) { create(type, status: :success) } } From 33694a5a6465785c2fcd5c8217197070cbd7b316 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Tue, 2 Aug 2016 10:16:41 -0500 Subject: [PATCH 073/107] use gitlab global root url as canonical base url for all javascript set cookies (closes #20435) --- CHANGELOG | 1 + app/assets/javascripts/activities.js | 2 +- app/assets/javascripts/application.js | 4 +-- app/assets/javascripts/awards_handler.js | 1 + app/assets/javascripts/project.js | 8 ++---- app/assets/javascripts/right_sidebar.js | 2 +- app/assets/javascripts/user.js | 4 +-- spec/javascripts/awards_handler_spec.js | 32 ++++++++++++++++++++++-- 8 files changed, 39 insertions(+), 15 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 518e80a360a..245219531aa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ v 8.12.0 (unreleased) - Add two-factor recovery endpoint to internal API !5510 - Change merge_error column from string to text type - Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel) + - Set path for all JavaScript cookies to honor GitLab's subdirectory setting !5627 (Mike Greiling) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Add `wiki_page_events` to project hook APIs (Ben Boeckel) - Add Sentry logging to API calls diff --git a/app/assets/javascripts/activities.js b/app/assets/javascripts/activities.js index 1ab3c2197d8..5ea6086ab77 100644 --- a/app/assets/javascripts/activities.js +++ b/app/assets/javascripts/activities.js @@ -26,7 +26,7 @@ event_filters = $.cookie("event_filter"); filter = sender.attr("id").split("_")[0]; $.cookie("event_filter", (event_filters !== filter ? filter : ""), { - path: '/' + path: gon.relative_url_root || '/' }); if (event_filters !== filter) { return sender.closest('li').toggleClass("active"); diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index fc354dfd677..43a679501a7 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -288,7 +288,7 @@ new Aside(); if ($window.width() < 1024 && $.cookie('pin_nav') === 'true') { $.cookie('pin_nav', 'false', { - path: '/', + path: gon.relative_url_root || '/', expires: 365 * 10 }); $('.page-with-sidebar').toggleClass('page-sidebar-collapsed page-sidebar-expanded').removeClass('page-sidebar-pinned'); @@ -313,7 +313,7 @@ $topNav.removeClass('header-pinned-nav').toggleClass('header-collapsed header-expanded'); } $.cookie('pin_nav', doPinNav, { - path: '/', + path: gon.relative_url_root || '/', expires: 365 * 10 }); if ($.cookie('pin_nav') === 'true' || doPinNav) { diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js index aee1c29eee3..ad12cb906e1 100644 --- a/app/assets/javascripts/awards_handler.js +++ b/app/assets/javascripts/awards_handler.js @@ -320,6 +320,7 @@ frequentlyUsedEmojis = this.getFrequentlyUsedEmojis(); frequentlyUsedEmojis.push(emoji); return $.cookie('frequently_used_emojis', frequentlyUsedEmojis.join(','), { + path: gon.relative_url_root || '/', expires: 365 }); }; diff --git a/app/assets/javascripts/project.js b/app/assets/javascripts/project.js index 4e1de4dfb72..66e097c0a28 100644 --- a/app/assets/javascripts/project.js +++ b/app/assets/javascripts/project.js @@ -17,19 +17,15 @@ return $(this).parents('form').submit(); }); $('.hide-no-ssh-message').on('click', function(e) { - var path; - path = '/'; $.cookie('hide_no_ssh_message', 'false', { - path: path + path: gon.relative_url_root || '/' }); $(this).parents('.no-ssh-key-message').remove(); return e.preventDefault(); }); $('.hide-no-password-message').on('click', function(e) { - var path; - path = '/'; $.cookie('hide_no_password_message', 'false', { - path: path + path: gon.relative_url_root || '/' }); $(this).parents('.no-password-message').remove(); return e.preventDefault(); diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js index dc4d5113826..e3d5f413c77 100644 --- a/app/assets/javascripts/right_sidebar.js +++ b/app/assets/javascripts/right_sidebar.js @@ -30,7 +30,7 @@ } if (!triggered) { return $.cookie("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed'), { - path: '/' + path: gon.relative_url_root || '/' }); } }); diff --git a/app/assets/javascripts/user.js b/app/assets/javascripts/user.js index b46390ad8f4..6c4d88cf407 100644 --- a/app/assets/javascripts/user.js +++ b/app/assets/javascripts/user.js @@ -7,10 +7,8 @@ }); this.initTabs(); $('.hide-project-limit-message').on('click', function(e) { - var path; - path = '/'; $.cookie('hide_project_limit_message', 'false', { - path: path + path: gon.relative_url_root || '/' }); $(this).parents('.project-limit-message').remove(); return e.preventDefault(); diff --git a/spec/javascripts/awards_handler_spec.js b/spec/javascripts/awards_handler_spec.js index fa32d0d7da5..c1c12b57b53 100644 --- a/spec/javascripts/awards_handler_spec.js +++ b/spec/javascripts/awards_handler_spec.js @@ -11,7 +11,7 @@ /*= require ./fixtures/emoji_menu */ (function() { - var awardsHandler, lazyAssert; + var awardsHandler, lazyAssert, urlRoot; awardsHandler = null; @@ -27,6 +27,7 @@ }; gon.award_menu_url = '/emojis'; + urlRoot = gon.relative_url_root; lazyAssert = function(done, assertFn) { return setTimeout(function() { @@ -45,9 +46,14 @@ return cb(); }; })(this)); - return spyOn(jQuery, 'get').and.callFake(function(req, cb) { + spyOn(jQuery, 'get').and.callFake(function(req, cb) { return cb(window.emojiMenu); }); + spyOn(jQuery, 'cookie'); + }); + afterEach(function() { + // restore original url root value + gon.relative_url_root = urlRoot; }); describe('::showEmojiMenu', function() { it('should show emoji menu when Add emoji button clicked', function(done) { @@ -189,6 +195,28 @@ return expect($thumbsUpEmoji.data("original-title")).toBe('sam'); }); }); + describe('::addEmojiToFrequentlyUsedList', function() { + it('should set a cookie with the correct default path', function() { + gon.relative_url_root = ''; + awardsHandler.addEmojiToFrequentlyUsedList('sunglasses'); + expect(jQuery.cookie) + .toHaveBeenCalledWith('frequently_used_emojis', 'sunglasses', { + path: '/', + expires: 365 + }) + ; + }); + it('should set a cookie with the correct custom root path', function() { + gon.relative_url_root = '/gitlab/subdir'; + awardsHandler.addEmojiToFrequentlyUsedList('alien'); + expect(jQuery.cookie) + .toHaveBeenCalledWith('frequently_used_emojis', 'alien', { + path: '/gitlab/subdir', + expires: 365 + }) + ; + }); + }); describe('search', function() { return it('should filter the emoji', function() { $('.js-add-award').eq(0).click(); From 96051549672084fabec9f67b1cf03c59e8ac3370 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Sun, 31 Jul 2016 20:17:19 -0500 Subject: [PATCH 074/107] Automatically expand hidden discussions when accessed via a permalink hash (closes #19304) --- CHANGELOG | 1 + .../javascripts/behaviors/toggler_behavior.js | 30 ++++++++++++++----- .../javascripts/lib/utils/url_utility.js | 12 +++++++- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 518e80a360a..46dfe2fd355 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ v 8.12.0 (unreleased) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Add `wiki_page_events` to project hook APIs (Ben Boeckel) - Add Sentry logging to API calls + - Automatically expand hidden discussions when accessed by a permalink !5585 (Mike Greiling) - Added tests for diff notes - Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck) diff --git a/app/assets/javascripts/behaviors/toggler_behavior.js b/app/assets/javascripts/behaviors/toggler_behavior.js index 1b7b63489ea..8ac1ba7665e 100644 --- a/app/assets/javascripts/behaviors/toggler_behavior.js +++ b/app/assets/javascripts/behaviors/toggler_behavior.js @@ -1,10 +1,26 @@ -(function() { +(function(w) { $(function() { - return $("body").on("click", ".js-toggle-button", function(e) { - $(this).find('i').toggleClass('fa fa-chevron-down').toggleClass('fa fa-chevron-up'); - $(this).closest(".js-toggle-container").find(".js-toggle-content").toggle(); - return e.preventDefault(); + $('.js-toggle-button').on('click', function(e) { + e.preventDefault(); + $(this) + .find('.fa') + .toggleClass('fa-chevron-down fa-chevron-up') + .end() + .closest('.js-toggle-container') + .find('.js-toggle-content') + .toggle() + ; }); - }); -}).call(this); + // If we're accessing a permalink, ensure it is not inside a + // closed js-toggle-container! + var hash = w.gl.utils.getLocationHash(); + var anchor = hash && document.getElementById(hash); + var container = anchor && $(anchor).closest('.js-toggle-container'); + + if (container && container.find('.js-toggle-content').is(':hidden')) { + container.find('.js-toggle-button').trigger('click'); + anchor.scrollIntoView(); + } + }); +})(window); diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js index fffbfd19745..533310cc87c 100644 --- a/app/assets/javascripts/lib/utils/url_utility.js +++ b/app/assets/javascripts/lib/utils/url_utility.js @@ -43,7 +43,7 @@ } return newUrl; }; - return w.gl.utils.removeParamQueryString = function(url, param) { + w.gl.utils.removeParamQueryString = function(url, param) { var urlVariables, variables; url = decodeURIComponent(url); urlVariables = url.split('&'); @@ -59,6 +59,16 @@ return results; })()).join('&'); }; + w.gl.utils.getLocationHash = function(url) { + var hashIndex; + if (typeof url === 'undefined') { + // Note: We can't use window.location.hash here because it's + // not consistent across browsers - Firefox will pre-decode it + url = window.location.href; + } + hashIndex = url.indexOf('#'); + return hashIndex === -1 ? null : url.substring(hashIndex + 1); + }; })(window); }).call(this); From f8a7430b00cfe410b0274b8963f0de017ef098ee Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Wed, 24 Aug 2016 23:13:38 -0500 Subject: [PATCH 075/107] Fix unnecessary horizontal scroll area in pipeline visualizations --- app/assets/stylesheets/pages/pipelines.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index 6fa097e3bf1..7eb4e7ec676 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -265,7 +265,6 @@ .pipeline-visualization { position: relative; - min-width: 1220px; ul { padding: 0; From 7629dc9982f5559972acf9d9b9d98f78ad53e54c Mon Sep 17 00:00:00 2001 From: Paco Guzman Date: Fri, 12 Aug 2016 17:38:09 +0200 Subject: [PATCH 076/107] Add specs to ensure a successful return on the UI when mark as done a already done todo. --- app/services/todo_service.rb | 3 ++- spec/features/todos/todos_spec.rb | 21 +++++++++++++++++++++ spec/services/todo_service_spec.rb | 21 +++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb index e0ccb654590..2aab8c736d6 100644 --- a/app/services/todo_service.rb +++ b/app/services/todo_service.rb @@ -148,7 +148,8 @@ class TodoService def mark_todos_as_done_by_ids(ids, current_user) todos = current_user.todos.where(id: ids) - marked_todos = todos.update_all(state: :done) + # Only return those that are not really on that state + marked_todos = todos.where.not(state: :done).update_all(state: :done) current_user.update_todos_count_cache marked_todos end diff --git a/spec/features/todos/todos_spec.rb b/spec/features/todos/todos_spec.rb index 0342f4f1d97..32544f3f538 100644 --- a/spec/features/todos/todos_spec.rb +++ b/spec/features/todos/todos_spec.rb @@ -41,6 +41,27 @@ describe 'Dashboard Todos', feature: true do expect(page).to have_content("You're all done!") end end + + context 'todo is stale on the page' do + before do + todos = TodosFinder.new(user, state: :pending).execute + TodoService.new.mark_todos_as_done(todos, user) + end + + describe 'deleting the todo' do + before do + first('.done-todo').click + end + + it 'is removed from the list' do + expect(page).not_to have_selector('.todos-list .todo') + end + + it 'shows "All done" message' do + expect(page).to have_content("You're all done!") + end + end + end end context 'User has Todos with labels spanning multiple projects' do diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb index 296fd1bd5a4..cafcad3e3c0 100644 --- a/spec/services/todo_service_spec.rb +++ b/spec/services/todo_service_spec.rb @@ -496,6 +496,7 @@ describe TodoService, services: true do describe '#mark_todos_as_done' do let(:issue) { create(:issue, project: project, author: author, assignee: john_doe) } + let(:another_issue) { create(:issue, project: project, author: author, assignee: john_doe) } it 'marks a relation of todos as done' do create(:todo, :mentioned, user: john_doe, target: issue, project: project) @@ -518,6 +519,26 @@ describe TodoService, services: true do expect(TodoService.new.mark_todos_as_done([todo], john_doe)).to eq(1) end + context 'when some of the todos are done already' do + before do + create(:todo, :mentioned, user: john_doe, target: issue, project: project) + create(:todo, :mentioned, user: john_doe, target: another_issue, project: project) + end + + it 'returns the number of those still pending' do + TodoService.new.mark_pending_todos_as_done(issue, john_doe) + + expect(TodoService.new.mark_todos_as_done(Todo.all, john_doe)).to eq(1) + end + + it 'returns 0 if all are done' do + TodoService.new.mark_pending_todos_as_done(issue, john_doe) + TodoService.new.mark_pending_todos_as_done(another_issue, john_doe) + + expect(TodoService.new.mark_todos_as_done(Todo.all, john_doe)).to eq(0) + end + end + it 'caches the number of todos of a user', :caching do create(:todo, :mentioned, user: john_doe, target: issue, project: project) todo = create(:todo, :mentioned, user: john_doe, target: issue, project: project) From 89fcdbe84c8591b72a2730658ece24f94551a1e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Steinblock?= Date: Thu, 25 Aug 2016 04:56:48 +0000 Subject: [PATCH 077/107] removed redundant word --- doc/workflow/merge_requests.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/workflow/merge_requests.md b/doc/workflow/merge_requests.md index 91fcfb02d39..334a119e522 100644 --- a/doc/workflow/merge_requests.md +++ b/doc/workflow/merge_requests.md @@ -53,7 +53,7 @@ It should look like this: fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* ``` -Now you can fetch all the merge requests requests: +Now you can fetch all the merge requests: ``` $ git fetch origin From 44eb3197a9c30503a00384b3d688b64558b80397 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Tue, 23 Aug 2016 16:37:14 +0100 Subject: [PATCH 078/107] Handle non-UTF-8 conflicts gracefully These can't be resolved in the UI because if they aren't in a UTF-8 compatible encoding, they can't be rendered as JSON. Even if they could, we would be implicitly changing the file encoding anyway, which seems like a bad idea. --- CHANGELOG | 3 +++ doc/user/project/merge_requests/resolve_conflicts.md | 1 + lib/gitlab/conflict/parser.rb | 9 +++++++++ spec/features/merge_requests/conflicts_spec.rb | 3 ++- spec/lib/gitlab/conflict/parser_spec.rb | 5 +++++ spec/support/test_env.rb | 3 ++- 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 518e80a360a..05517de501a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,9 @@ v 8.12.0 (unreleased) - Added tests for diff notes - Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck) +v 8.11.3 (unreleased) + - Don't try to show merge conflict resolution info if a merge conflict contains non-UTF-8 characters + v 8.11.2 (unreleased) - Show "Create Merge Request" widget for push events to fork projects on the source project diff --git a/doc/user/project/merge_requests/resolve_conflicts.md b/doc/user/project/merge_requests/resolve_conflicts.md index 44b76ffc8e6..4d7225bd820 100644 --- a/doc/user/project/merge_requests/resolve_conflicts.md +++ b/doc/user/project/merge_requests/resolve_conflicts.md @@ -26,6 +26,7 @@ this is similar to performing `git checkout feature; git merge master` locally. GitLab allows resolving conflicts in a file where all of the below are true: - The file is text, not binary +- The file is in a UTF-8 compatible encoding - The file does not already contain conflict markers - The file, with conflict markers added, is not over 200 KB in size - The file exists under the same path in both branches diff --git a/lib/gitlab/conflict/parser.rb b/lib/gitlab/conflict/parser.rb index 6eccded7872..2d4d55daeeb 100644 --- a/lib/gitlab/conflict/parser.rb +++ b/lib/gitlab/conflict/parser.rb @@ -13,10 +13,19 @@ module Gitlab class UnmergeableFile < ParserError end + class UnsupportedEncoding < ParserError + end + def parse(text, our_path:, their_path:, parent_file: nil) raise UnmergeableFile if text.blank? # Typically a binary file raise UnmergeableFile if text.length > 102400 + begin + text.to_json + rescue Encoding::UndefinedConversionError + raise UnsupportedEncoding + end + line_obj_index = 0 line_old = 1 line_new = 1 diff --git a/spec/features/merge_requests/conflicts_spec.rb b/spec/features/merge_requests/conflicts_spec.rb index 930c36ade2b..759edf8ec80 100644 --- a/spec/features/merge_requests/conflicts_spec.rb +++ b/spec/features/merge_requests/conflicts_spec.rb @@ -43,7 +43,8 @@ feature 'Merge request conflict resolution', js: true, feature: true do 'conflict-too-large' => 'when the conflicts contain a large file', 'conflict-binary-file' => 'when the conflicts contain a binary file', 'conflict-contains-conflict-markers' => 'when the conflicts contain a file with ambiguous conflict markers', - 'conflict-missing-side' => 'when the conflicts contain a file edited in one branch and deleted in another' + 'conflict-missing-side' => 'when the conflicts contain a file edited in one branch and deleted in another', + 'conflict-non-utf8' => 'when the conflicts contain a non-UTF-8 file', } UNRESOLVABLE_CONFLICTS.each do |source_branch, description| diff --git a/spec/lib/gitlab/conflict/parser_spec.rb b/spec/lib/gitlab/conflict/parser_spec.rb index 65a828accde..a1d2ca1e272 100644 --- a/spec/lib/gitlab/conflict/parser_spec.rb +++ b/spec/lib/gitlab/conflict/parser_spec.rb @@ -183,6 +183,11 @@ CONFLICT expect { parse_text('a' * 102401) }. to raise_error(Gitlab::Conflict::Parser::UnmergeableFile) end + + it 'raises UnsupportedEncoding when the file contains non-UTF-8 characters' do + expect { parse_text("a\xC4\xFC".force_encoding(Encoding::ASCII_8BIT)) }. + to raise_error(Gitlab::Conflict::Parser::UnsupportedEncoding) + end end end end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index edbbfc3c9e5..c7a45fc4ff9 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -24,11 +24,12 @@ module TestEnv 'expand-collapse-lines' => '238e82d', 'video' => '8879059', 'crlf-diff' => '5938907', - 'conflict-start' => '14fa46b', + 'conflict-start' => '75284c7', 'conflict-resolvable' => '1450cd6', 'conflict-binary-file' => '259a6fb', 'conflict-contains-conflict-markers' => '5e0964c', 'conflict-missing-side' => 'eb227b3', + 'conflict-non-utf8' => 'd0a293c', 'conflict-too-large' => '39fa04f', } From 085e1f89f327ad4d679696fe4673d09e1840b236 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 24 Aug 2016 18:06:19 +0100 Subject: [PATCH 079/107] Handle unavailable system info For Linux with the grsecurity patches applied, paths in `/proc` may not be readable, so handle those cases and show a message rather than blowing up. --- CHANGELOG | 3 ++ .../admin/system_info_controller.rb | 8 +--- app/views/admin/system_info/show.html.haml | 12 ++++- spec/features/admin/admin_system_info_spec.rb | 47 +++++++++++++++++-- 4 files changed, 57 insertions(+), 13 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 518e80a360a..f43eeb34d37 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,9 @@ v 8.12.0 (unreleased) - Added tests for diff notes - Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck) +v 8.11.3 (unreleased) + - Allow system info page to handle case where info is unavailable + v 8.11.2 (unreleased) - Show "Create Merge Request" widget for push events to fork projects on the source project diff --git a/app/controllers/admin/system_info_controller.rb b/app/controllers/admin/system_info_controller.rb index e4c73008826..ca04a17caa1 100644 --- a/app/controllers/admin/system_info_controller.rb +++ b/app/controllers/admin/system_info_controller.rb @@ -29,7 +29,8 @@ class Admin::SystemInfoController < Admin::ApplicationController ] def show - system_info = Vmstat.snapshot + @cpus = Vmstat.cpu rescue nil + @memory = Vmstat.memory rescue nil mounts = Sys::Filesystem.mounts @disks = [] @@ -50,10 +51,5 @@ class Admin::SystemInfoController < Admin::ApplicationController rescue Sys::Filesystem::Error end end - - @cpus = system_info.cpus.length - - @mem_used = system_info.memory.active_bytes - @mem_total = system_info.memory.total_bytes end end diff --git a/app/views/admin/system_info/show.html.haml b/app/views/admin/system_info/show.html.haml index 6956e5ab795..7f3b95699db 100644 --- a/app/views/admin/system_info/show.html.haml +++ b/app/views/admin/system_info/show.html.haml @@ -9,12 +9,20 @@ .light-well %h4 CPU .data - %h1= "#{@cpus} cores" + - if @cpus + %h1= "#{@cpus.length} cores" + - else + %i.fa.fa-warning.text-warning + Unable to collect CPU info .col-sm-4 .light-well %h4 Memory .data - %h1= "#{number_to_human_size(@mem_used)} / #{number_to_human_size(@mem_total)}" + - if @memory + %h1= "#{number_to_human_size(@memory.active_bytes)} / #{number_to_human_size(@memory.total_bytes)}" + - else + %i.fa.fa-warning.text-warning + Unable to collect memory info .col-sm-4 .light-well %h4 Disks diff --git a/spec/features/admin/admin_system_info_spec.rb b/spec/features/admin/admin_system_info_spec.rb index f4e5c26b519..1df972843e2 100644 --- a/spec/features/admin/admin_system_info_spec.rb +++ b/spec/features/admin/admin_system_info_spec.rb @@ -6,12 +6,49 @@ describe 'Admin System Info' do end describe 'GET /admin/system_info' do - it 'shows system info page' do - visit admin_system_info_path + let(:cpu) { double(:cpu, length: 2) } + let(:memory) { double(:memory, active_bytes: 4294967296, total_bytes: 17179869184) } - expect(page).to have_content 'CPU' - expect(page).to have_content 'Memory' - expect(page).to have_content 'Disks' + context 'when all info is available' do + before do + allow(Vmstat).to receive(:cpu).and_return(cpu) + allow(Vmstat).to receive(:memory).and_return(memory) + visit admin_system_info_path + end + + it 'shows system info page' do + expect(page).to have_content 'CPU 2 cores' + expect(page).to have_content 'Memory 4 GB / 16 GB' + expect(page).to have_content 'Disks' + end + end + + context 'when CPU info is not available' do + before do + allow(Vmstat).to receive(:cpu).and_raise(Errno::ENOENT) + allow(Vmstat).to receive(:memory).and_return(memory) + visit admin_system_info_path + end + + it 'shows system info page with no CPU info' do + expect(page).to have_content 'CPU Unable to collect CPU info' + expect(page).to have_content 'Memory 4 GB / 16 GB' + expect(page).to have_content 'Disks' + end + end + + context 'when memory info is not available' do + before do + allow(Vmstat).to receive(:cpu).and_return(cpu) + allow(Vmstat).to receive(:memory).and_raise(Errno::ENOENT) + visit admin_system_info_path + end + + it 'shows system info page with no CPU info' do + expect(page).to have_content 'CPU 2 cores' + expect(page).to have_content 'Memory Unable to collect memory info' + expect(page).to have_content 'Disks' + end end end end From 3d98494815b9cb574a82c1e8b566ac9c2fadc1da Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Thu, 25 Aug 2016 08:30:17 +0100 Subject: [PATCH 080/107] Update vmstat for {Open,Net}BSD support --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 68547b6fac8..194379dd687 100644 --- a/Gemfile +++ b/Gemfile @@ -349,5 +349,5 @@ gem 'paranoia', '~> 2.0' gem 'health_check', '~> 2.1.0' # System information -gem 'vmstat', '~> 2.1.1' +gem 'vmstat', '~> 2.2' gem 'sys-filesystem', '~> 1.1.6' diff --git a/Gemfile.lock b/Gemfile.lock index 5511d718938..0c28975060c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -772,7 +772,7 @@ GEM coercible (~> 1.0) descendants_tracker (~> 0.0, >= 0.0.3) equalizer (~> 0.0, >= 0.0.9) - vmstat (2.1.1) + vmstat (2.2.0) warden (1.2.6) rack (>= 1.0) web-console (2.3.0) @@ -980,7 +980,7 @@ DEPENDENCIES unicorn-worker-killer (~> 0.4.2) version_sorter (~> 2.1.0) virtus (~> 1.0.1) - vmstat (~> 2.1.1) + vmstat (~> 2.2) web-console (~> 2.0) webmock (~> 1.21.0) wikicloth (= 0.8.1) From d64c15c5c391e8f49a9f261ba0e59bafb99d97fe Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 25 Aug 2016 10:59:30 +0300 Subject: [PATCH 081/107] Add code improvements to merge request version feature * Add MergeRequestDiff#latest? * Remove unnecessary variable assignment Signed-off-by: Dmitriy Zaporozhets --- .../projects/merge_requests_controller.rb | 2 +- app/models/merge_request_diff.rb | 16 ++++++++-------- .../merge_requests/show/_versions.html.haml | 3 +-- spec/models/merge_request_diff_spec.rb | 9 +++++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index eff959c781c..3be9bdb076d 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -93,7 +93,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController respond_to do |format| format.html { define_discussion_vars } format.json do - if @merge_request_diff != @merge_request.merge_request_diff + unless @merge_request_diff.latest? # Disable comments if browsing older version of the diff @diff_notes_disabled = true end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 42ab6b620bd..e353bdb24b8 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -79,14 +79,10 @@ class MergeRequestDiff < ActiveRecord::Base def raw_diffs(options = {}) if options[:ignore_whitespace_change] @diffs_no_whitespace ||= - begin - compare = Gitlab::Git::Compare.new( - repository.raw_repository, - safe_start_commit_sha, - safe_head_commit_sha - ) - compare.diffs(options) - end + Gitlab::Git::Compare.new( + repository.raw_repository, + safe_start_commit_sha, + safe_head_commit_sha).diffs(options) else @raw_diffs ||= {} @raw_diffs[options] ||= load_diffs(st_diffs, options) @@ -164,6 +160,10 @@ class MergeRequestDiff < ActiveRecord::Base end end + def latest? + self == merge_request.merge_request_diff + end + private def dump_commits(commits) diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 15d94b16ced..08c54f0aeff 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -1,5 +1,4 @@ - merge_request_diffs = @merge_request.merge_request_diffs.select_without_diff -- latest_diff = merge_request_diffs.first - if merge_request_diffs.size > 1 .mr-version-switch @@ -7,7 +6,7 @@ %span.dropdown.inline %a.btn-link.dropdown-toggle{ data: {toggle: :dropdown} } %strong.monospace< - - if latest_diff == @merge_request_diff + - if @merge_request_diff.latest? #{"latest"} - else #{@merge_request_diff.head_commit.short_id} diff --git a/spec/models/merge_request_diff_spec.rb b/spec/models/merge_request_diff_spec.rb index 2f3bb3ed2c4..e5b185dc3f6 100644 --- a/spec/models/merge_request_diff_spec.rb +++ b/spec/models/merge_request_diff_spec.rb @@ -13,6 +13,15 @@ describe MergeRequestDiff, models: true do it { expect(subject.start_commit_sha).to eq('0b4bc9a49b562e85de7cc9e834518ea6828729b9') } end + describe '#latest' do + let!(:mr) { create(:merge_request, :with_diffs) } + let!(:first_diff) { mr.merge_request_diff } + let!(:last_diff) { mr.create_merge_request_diff } + + it { expect(last_diff.latest?).to be_truthy } + it { expect(first_diff.latest?).to be_falsey } + end + describe '#diffs' do let(:mr) { create(:merge_request, :with_diffs) } let(:mr_diff) { mr.merge_request_diff } From 70fe671c299513a43797dc1e7ab0e32f14503175 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 25 Aug 2016 11:16:03 +0300 Subject: [PATCH 082/107] Make it more obvious when the user isn't currently viewing the latest mr version Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/merge_requests/show/_versions.html.haml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 08c54f0aeff..2da70ce7137 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -22,6 +22,10 @@ #{number_with_delimiter(merge_request_diff.commits.count)} #{'commit'.pluralize(merge_request_diff.commits.count)}, = time_ago_with_tooltip(merge_request_diff.created_at) + - unless @merge_request_diff.latest? + %span.prepend-left-default + = icon('info-circle') + This version is not the latest one. Comments are disabled .pull-right %span.monospace #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id} From cad63d4045623391d5e36ff541d531b6dfae7d81 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Thu, 25 Aug 2016 10:21:51 +0200 Subject: [PATCH 083/107] Use new image for Issue Board page [ci skip] --- doc/user/project/img/issue_board.png | Bin 200614 -> 275093 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/user/project/img/issue_board.png b/doc/user/project/img/issue_board.png index accd0900cbbda0d74e19cc41ef545b827ffe243b..63c269f6dbc41a8f9d8db31f485ae95f012473c5 100644 GIT binary patch literal 275093 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 sU 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%0DQu^o1N%bgW5HDEy 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

-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

rv0vQ=X-2WH#io(WKNLjmyzufZ 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%0D&f-rhH64vZDbm!YgZl|~5;AZ5#x=hU#tYYQ)ENh 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