From 0541f237441a8a046273ac0c15cc509064affa41 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Mon, 15 Jan 2018 07:46:19 +0100 Subject: [PATCH 001/120] Add Inherit quick action Closes #38450 --- .../quick_actions/interpret_service.rb | 18 +++++ changelogs/unreleased/add-inherit-command.yml | 5 ++ doc/user/project/quick_actions.md | 3 +- .../quick_actions/interpret_service_spec.rb | 65 +++++++++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/add-inherit-command.yml diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index 669c1ba0a22..b8818399f78 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -256,6 +256,24 @@ module QuickActions end end + desc 'Inherit (copy) labels and milestone from other issue' + explanation do |issue_id| + "Inherit (copy) labels and milestone from issue \"#{issue_id}\"." + end + params '#issue' + condition do + issuable.persisted? && + current_user.can?(:"update_#{issuable.to_ability_name}", issuable) + end + command :inherit do |issue_id| + issue = extract_references(issue_id, :issue).first + if issue.present? && issue.project_id == issuable.project_id + @updates[:add_label_ids] = issue.labels.map(&:id) + + @updates[:milestone_id] = issue.milestone.id if issue.milestone + end + end + desc 'Add a todo' explanation 'Adds a todo.' condition do diff --git a/changelogs/unreleased/add-inherit-command.yml b/changelogs/unreleased/add-inherit-command.yml new file mode 100644 index 00000000000..84f5bc97fbe --- /dev/null +++ b/changelogs/unreleased/add-inherit-command.yml @@ -0,0 +1,5 @@ +--- +title: Add Inherit quick action +merge_request: +author: Mateusz Bajorski +type: added diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index 442fc978284..3b6bdc8ca3d 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -40,4 +40,5 @@ do. | `/duplicate #issue` | Closes this issue and marks it as a duplicate of another issue | | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | -| `/shrug` | Append the comment with `¯\_(ツ)_/¯` | \ No newline at end of file +| `/shrug` | Append the comment with `¯\_(ツ)_/¯` | +| `/inherit #issue` | Inherit (copy) labels and milestone from other issue | diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index ae160d104f1..31f9296e3bb 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -306,6 +306,23 @@ describe QuickActions::InterpretService do end end + shared_examples 'inherit command' do + it 'fetches issue and copies labels and milestone if content contains /inherit issue_reference' do + issue_father # populate the issue + todo_label # populate this label + inreview_label # populate this label + _, updates = service.execute(content, issuable) + + expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) + + if issue_father.milestone + expect(updates[:milestone_id]).to eq(issue_father.milestone.id) + else + expect(updates).not_to have_key(:milestone_id) + end + end + end + shared_examples 'shrug command' do it 'appends ¯\_(ツ)_/¯ to the comment' do new_content, _ = service.execute(content, issuable) @@ -741,6 +758,54 @@ describe QuickActions::InterpretService do let(:issuable) { issue } end + context '/inherit command' do + let!(:todo_label) { create(:label, project: project, title: 'To Do') } + let!(:inreview_label) { create(:label, project: project, title: 'In Review') } + + it_behaves_like 'inherit command' do + # Without milestone assignment + let(:issue_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } + + let(:content) { "/inherit #{issue_father.to_reference}" } + let(:issuable) { issue } + end + + it_behaves_like 'inherit command' do + # With milestone assignment + let(:issue_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } + + let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issuable) { issue } + end + + it_behaves_like 'empty command' do + let(:content) { '/inherit' } + let(:issuable) { issue } + end + + context 'cross project references' do + it_behaves_like 'empty command' do + let(:other_project) { create(:project, :public) } + let(:issue_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } + let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issuable) { issue } + end + + it_behaves_like 'empty command' do + let(:content) { "/inherit imaginary#1234" } + let(:issuable) { issue } + end + + it_behaves_like 'empty command' do + let(:other_project) { create(:project, :private) } + let(:issue_father) { create(:issue, project: other_project) } + + let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issuable) { issue } + end + end + end + context '/duplicate command' do it_behaves_like 'duplicate command' do let(:issue_duplicate) { create(:issue, project: project) } From d691df02560f06dc87aa5812ebea31de62e0e6e6 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Sun, 21 Jan 2018 18:16:56 +0100 Subject: [PATCH 002/120] Changed command name to copy_metadata and added MR support --- .../quick_actions/interpret_service.rb | 16 +++--- changelogs/unreleased/add-inherit-command.yml | 2 +- doc/user/project/quick_actions.md | 2 +- .../quick_actions/interpret_service_spec.rb | 56 +++++++++---------- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index b8818399f78..d9f33ebb108 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -256,18 +256,20 @@ module QuickActions end end - desc 'Inherit (copy) labels and milestone from other issue' - explanation do |issue_id| - "Inherit (copy) labels and milestone from issue \"#{issue_id}\"." + desc 'Copy labels and milestone from other issue or merge request' + explanation do |issueable_id| + "Copy labels and milestone from issue or merge_request \"#{issueable_id}\"." end - params '#issue' + params '< #issue | !merge_request >' condition do issuable.persisted? && current_user.can?(:"update_#{issuable.to_ability_name}", issuable) end - command :inherit do |issue_id| - issue = extract_references(issue_id, :issue).first - if issue.present? && issue.project_id == issuable.project_id + command :copy_metadata do |issueable_id| + reference_type = issueable_id.include?("#") ? :issue : :merge_request + issue = extract_references(issueable_id, reference_type).first + + if issue.present? && issue.project.id == issuable.project.id @updates[:add_label_ids] = issue.labels.map(&:id) @updates[:milestone_id] = issue.milestone.id if issue.milestone diff --git a/changelogs/unreleased/add-inherit-command.yml b/changelogs/unreleased/add-inherit-command.yml index 84f5bc97fbe..d47aa8c7b36 100644 --- a/changelogs/unreleased/add-inherit-command.yml +++ b/changelogs/unreleased/add-inherit-command.yml @@ -1,5 +1,5 @@ --- title: Add Inherit quick action -merge_request: +merge_request: 16473 author: Mateusz Bajorski type: added diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index 3b6bdc8ca3d..e2e2b859d35 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -41,4 +41,4 @@ do. | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` | -| `/inherit #issue` | Inherit (copy) labels and milestone from other issue | +| /copy_metadata < #issue | !merge_request > | copy_metadata labels and milestone from other issue or merge request | diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index 31f9296e3bb..54be5020a54 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -306,17 +306,17 @@ describe QuickActions::InterpretService do end end - shared_examples 'inherit command' do - it 'fetches issue and copies labels and milestone if content contains /inherit issue_reference' do - issue_father # populate the issue + shared_examples 'copy_metadata command' do + it 'fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference' do + issueable_father # populate the issue todo_label # populate this label inreview_label # populate this label _, updates = service.execute(content, issuable) expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) - if issue_father.milestone - expect(updates[:milestone_id]).to eq(issue_father.milestone.id) + if issueable_father.milestone + expect(updates[:milestone_id]).to eq(issueable_father.milestone.id) else expect(updates).not_to have_key(:milestone_id) end @@ -758,49 +758,49 @@ describe QuickActions::InterpretService do let(:issuable) { issue } end - context '/inherit command' do + context '/copy_metadata command' do let!(:todo_label) { create(:label, project: project, title: 'To Do') } let!(:inreview_label) { create(:label, project: project, title: 'In Review') } - it_behaves_like 'inherit command' do - # Without milestone assignment - let(:issue_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } - - let(:content) { "/inherit #{issue_father.to_reference}" } - let(:issuable) { issue } - end - - it_behaves_like 'inherit command' do - # With milestone assignment - let(:issue_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } - - let(:content) { "/inherit #{issue_father.to_reference(project)}" } - let(:issuable) { issue } - end - it_behaves_like 'empty command' do - let(:content) { '/inherit' } + let(:content) { '/copy_metadata' } let(:issuable) { issue } end + it_behaves_like 'copy_metadata command' do + let(:issueable_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } + + let(:content) { "/copy_metadata #{issueable_father.to_reference}" } + let(:issuable) { issue } + end + + context 'when the parent issueable has a milestone' do + it_behaves_like 'copy_metadata command' do + let(:issueable_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } + + let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:issuable) { issue } + end + end + context 'cross project references' do it_behaves_like 'empty command' do let(:other_project) { create(:project, :public) } - let(:issue_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } - let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issueable_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } + let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:issuable) { issue } end it_behaves_like 'empty command' do - let(:content) { "/inherit imaginary#1234" } + let(:content) { "/copy_metadata imaginary#1234" } let(:issuable) { issue } end it_behaves_like 'empty command' do let(:other_project) { create(:project, :private) } - let(:issue_father) { create(:issue, project: other_project) } + let(:issueable_father) { create(:issue, project: other_project) } - let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:issuable) { issue } end end From 427bfae287cb893bb02f6ae54b9e7a08ebe2a267 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Wed, 31 Jan 2018 18:41:06 +0100 Subject: [PATCH 003/120] Fixed typos and improved reference checking --- .../quick_actions/interpret_service.rb | 18 +++++++------- ...mand.yml => add-copy-metadata-command.yml} | 2 +- doc/user/project/quick_actions.md | 2 +- .../quick_actions/interpret_service_spec.rb | 24 +++++++++---------- 4 files changed, 23 insertions(+), 23 deletions(-) rename changelogs/unreleased/{add-inherit-command.yml => add-copy-metadata-command.yml} (62%) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index d9f33ebb108..6b0d8802a4e 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -257,22 +257,22 @@ module QuickActions end desc 'Copy labels and milestone from other issue or merge request' - explanation do |issueable_id| - "Copy labels and milestone from issue or merge_request \"#{issueable_id}\"." + explanation do |issuable_id| + "Copy labels and milestone from issue or merge_request \"#{issuable_id}\"." end - params '< #issue | !merge_request >' + params '#issue | !merge_request' condition do issuable.persisted? && current_user.can?(:"update_#{issuable.to_ability_name}", issuable) end - command :copy_metadata do |issueable_id| - reference_type = issueable_id.include?("#") ? :issue : :merge_request - issue = extract_references(issueable_id, reference_type).first + command :copy_metadata do |issuable_id| + source_issuable = extract_references(issuable_id, :issue).first + source_issuable = extract_references(issuable_id, :merge_request).first if !source_issuable.present? - if issue.present? && issue.project.id == issuable.project.id - @updates[:add_label_ids] = issue.labels.map(&:id) + if source_issuable.present? && source_issuable.project.id == issuable.project.id + @updates[:add_label_ids] = source_issuable.labels.map(&:id) - @updates[:milestone_id] = issue.milestone.id if issue.milestone + @updates[:milestone_id] = source_issuable.milestone.id if source_issuable.milestone end end diff --git a/changelogs/unreleased/add-inherit-command.yml b/changelogs/unreleased/add-copy-metadata-command.yml similarity index 62% rename from changelogs/unreleased/add-inherit-command.yml rename to changelogs/unreleased/add-copy-metadata-command.yml index d47aa8c7b36..3bf25ae6ce0 100644 --- a/changelogs/unreleased/add-inherit-command.yml +++ b/changelogs/unreleased/add-copy-metadata-command.yml @@ -1,5 +1,5 @@ --- -title: Add Inherit quick action +title: Add Copy metadata quick action merge_request: 16473 author: Mateusz Bajorski type: added diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index e2e2b859d35..75799caacde 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -41,4 +41,4 @@ do. | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` | -| /copy_metadata < #issue | !merge_request > | copy_metadata labels and milestone from other issue or merge request | +| /copy_metadata < #issue | !merge_request > | Copy labels and milestone from other issue or merge request | diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index 54be5020a54..5b70e434e23 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -308,15 +308,15 @@ describe QuickActions::InterpretService do shared_examples 'copy_metadata command' do it 'fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference' do - issueable_father # populate the issue + source_issuable # populate the issue todo_label # populate this label inreview_label # populate this label _, updates = service.execute(content, issuable) expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) - if issueable_father.milestone - expect(updates[:milestone_id]).to eq(issueable_father.milestone.id) + if source_issuable.milestone + expect(updates[:milestone_id]).to eq(source_issuable.milestone.id) else expect(updates).not_to have_key(:milestone_id) end @@ -768,17 +768,17 @@ describe QuickActions::InterpretService do end it_behaves_like 'copy_metadata command' do - let(:issueable_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } + let(:source_issuable) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } - let(:content) { "/copy_metadata #{issueable_father.to_reference}" } + let(:content) { "/copy_metadata #{source_issuable.to_reference}" } let(:issuable) { issue } end - context 'when the parent issueable has a milestone' do + context 'when the parent issuable has a milestone' do it_behaves_like 'copy_metadata command' do - let(:issueable_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } + let(:source_issuable) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } - let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" } let(:issuable) { issue } end end @@ -786,8 +786,8 @@ describe QuickActions::InterpretService do context 'cross project references' do it_behaves_like 'empty command' do let(:other_project) { create(:project, :public) } - let(:issueable_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } - let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:source_issuable) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } + let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" } let(:issuable) { issue } end @@ -798,9 +798,9 @@ describe QuickActions::InterpretService do it_behaves_like 'empty command' do let(:other_project) { create(:project, :private) } - let(:issueable_father) { create(:issue, project: other_project) } + let(:source_issuable) { create(:issue, project: other_project) } - let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" } let(:issuable) { issue } end end From da15007f2314e367ccd7e2bed13629864a5e4307 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Thu, 1 Feb 2018 19:38:10 +0100 Subject: [PATCH 004/120] Fixed inconsistent descriptions and refactored reference checking --- app/services/quick_actions/interpret_service.rb | 4 ++-- doc/user/project/quick_actions.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index 6b0d8802a4e..88ca26be1d5 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -258,7 +258,7 @@ module QuickActions desc 'Copy labels and milestone from other issue or merge request' explanation do |issuable_id| - "Copy labels and milestone from issue or merge_request \"#{issuable_id}\"." + "Copy labels and milestone from issue or merge_request #{issuable_id}." end params '#issue | !merge_request' condition do @@ -267,7 +267,7 @@ module QuickActions end command :copy_metadata do |issuable_id| source_issuable = extract_references(issuable_id, :issue).first - source_issuable = extract_references(issuable_id, :merge_request).first if !source_issuable.present? + source_issuable ||= extract_references(issuable_id, :merge_request).first if source_issuable.present? && source_issuable.project.id == issuable.project.id @updates[:add_label_ids] = source_issuable.labels.map(&:id) diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index 75799caacde..3e3b699edc4 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -41,4 +41,4 @@ do. | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` | -| /copy_metadata < #issue | !merge_request > | Copy labels and milestone from other issue or merge request | +| /copy_metadata #issue | !merge_request | Copy labels and milestone from other issue or merge request | From 4f10cad9ffdc508dbcecd477e93921367a69477d Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Mon, 15 Jan 2018 07:46:19 +0100 Subject: [PATCH 005/120] Add Inherit quick action Closes #38450 --- .../quick_actions/interpret_service.rb | 18 +++++ changelogs/unreleased/add-inherit-command.yml | 5 ++ doc/user/project/quick_actions.md | 3 +- .../quick_actions/interpret_service_spec.rb | 65 +++++++++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/add-inherit-command.yml diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index 1e9bd84e749..4abb936e14a 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -268,6 +268,24 @@ module QuickActions end end + desc 'Inherit (copy) labels and milestone from other issue' + explanation do |issue_id| + "Inherit (copy) labels and milestone from issue \"#{issue_id}\"." + end + params '#issue' + condition do + issuable.persisted? && + current_user.can?(:"update_#{issuable.to_ability_name}", issuable) + end + command :inherit do |issue_id| + issue = extract_references(issue_id, :issue).first + if issue.present? && issue.project_id == issuable.project_id + @updates[:add_label_ids] = issue.labels.map(&:id) + + @updates[:milestone_id] = issue.milestone.id if issue.milestone + end + end + desc 'Add a todo' explanation 'Adds a todo.' condition do diff --git a/changelogs/unreleased/add-inherit-command.yml b/changelogs/unreleased/add-inherit-command.yml new file mode 100644 index 00000000000..84f5bc97fbe --- /dev/null +++ b/changelogs/unreleased/add-inherit-command.yml @@ -0,0 +1,5 @@ +--- +title: Add Inherit quick action +merge_request: +author: Mateusz Bajorski +type: added diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index 442fc978284..3b6bdc8ca3d 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -40,4 +40,5 @@ do. | `/duplicate #issue` | Closes this issue and marks it as a duplicate of another issue | | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | -| `/shrug` | Append the comment with `¯\_(ツ)_/¯` | \ No newline at end of file +| `/shrug` | Append the comment with `¯\_(ツ)_/¯` | +| `/inherit #issue` | Inherit (copy) labels and milestone from other issue | diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index f793f55e51b..ebe0c7639a0 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -306,6 +306,23 @@ describe QuickActions::InterpretService do end end + shared_examples 'inherit command' do + it 'fetches issue and copies labels and milestone if content contains /inherit issue_reference' do + issue_father # populate the issue + todo_label # populate this label + inreview_label # populate this label + _, updates = service.execute(content, issuable) + + expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) + + if issue_father.milestone + expect(updates[:milestone_id]).to eq(issue_father.milestone.id) + else + expect(updates).not_to have_key(:milestone_id) + end + end + end + shared_examples 'shrug command' do it 'appends ¯\_(ツ)_/¯ to the comment' do new_content, _ = service.execute(content, issuable) @@ -757,6 +774,54 @@ describe QuickActions::InterpretService do let(:issuable) { issue } end + context '/inherit command' do + let!(:todo_label) { create(:label, project: project, title: 'To Do') } + let!(:inreview_label) { create(:label, project: project, title: 'In Review') } + + it_behaves_like 'inherit command' do + # Without milestone assignment + let(:issue_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } + + let(:content) { "/inherit #{issue_father.to_reference}" } + let(:issuable) { issue } + end + + it_behaves_like 'inherit command' do + # With milestone assignment + let(:issue_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } + + let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issuable) { issue } + end + + it_behaves_like 'empty command' do + let(:content) { '/inherit' } + let(:issuable) { issue } + end + + context 'cross project references' do + it_behaves_like 'empty command' do + let(:other_project) { create(:project, :public) } + let(:issue_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } + let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issuable) { issue } + end + + it_behaves_like 'empty command' do + let(:content) { "/inherit imaginary#1234" } + let(:issuable) { issue } + end + + it_behaves_like 'empty command' do + let(:other_project) { create(:project, :private) } + let(:issue_father) { create(:issue, project: other_project) } + + let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issuable) { issue } + end + end + end + context '/duplicate command' do it_behaves_like 'duplicate command' do let(:issue_duplicate) { create(:issue, project: project) } From a0adf87707e44fda83aca859b41ce18372a1c72b Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Sun, 21 Jan 2018 18:16:56 +0100 Subject: [PATCH 006/120] Changed command name to copy_metadata and added MR support --- .../quick_actions/interpret_service.rb | 16 +++--- changelogs/unreleased/add-inherit-command.yml | 2 +- doc/user/project/quick_actions.md | 2 +- .../quick_actions/interpret_service_spec.rb | 56 +++++++++---------- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index 4abb936e14a..28fa887bf2d 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -268,18 +268,20 @@ module QuickActions end end - desc 'Inherit (copy) labels and milestone from other issue' - explanation do |issue_id| - "Inherit (copy) labels and milestone from issue \"#{issue_id}\"." + desc 'Copy labels and milestone from other issue or merge request' + explanation do |issueable_id| + "Copy labels and milestone from issue or merge_request \"#{issueable_id}\"." end - params '#issue' + params '< #issue | !merge_request >' condition do issuable.persisted? && current_user.can?(:"update_#{issuable.to_ability_name}", issuable) end - command :inherit do |issue_id| - issue = extract_references(issue_id, :issue).first - if issue.present? && issue.project_id == issuable.project_id + command :copy_metadata do |issueable_id| + reference_type = issueable_id.include?("#") ? :issue : :merge_request + issue = extract_references(issueable_id, reference_type).first + + if issue.present? && issue.project.id == issuable.project.id @updates[:add_label_ids] = issue.labels.map(&:id) @updates[:milestone_id] = issue.milestone.id if issue.milestone diff --git a/changelogs/unreleased/add-inherit-command.yml b/changelogs/unreleased/add-inherit-command.yml index 84f5bc97fbe..d47aa8c7b36 100644 --- a/changelogs/unreleased/add-inherit-command.yml +++ b/changelogs/unreleased/add-inherit-command.yml @@ -1,5 +1,5 @@ --- title: Add Inherit quick action -merge_request: +merge_request: 16473 author: Mateusz Bajorski type: added diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index 3b6bdc8ca3d..e2e2b859d35 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -41,4 +41,4 @@ do. | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` | -| `/inherit #issue` | Inherit (copy) labels and milestone from other issue | +| /copy_metadata < #issue | !merge_request > | copy_metadata labels and milestone from other issue or merge request | diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index ebe0c7639a0..9a8240f9491 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -306,17 +306,17 @@ describe QuickActions::InterpretService do end end - shared_examples 'inherit command' do - it 'fetches issue and copies labels and milestone if content contains /inherit issue_reference' do - issue_father # populate the issue + shared_examples 'copy_metadata command' do + it 'fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference' do + issueable_father # populate the issue todo_label # populate this label inreview_label # populate this label _, updates = service.execute(content, issuable) expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) - if issue_father.milestone - expect(updates[:milestone_id]).to eq(issue_father.milestone.id) + if issueable_father.milestone + expect(updates[:milestone_id]).to eq(issueable_father.milestone.id) else expect(updates).not_to have_key(:milestone_id) end @@ -774,49 +774,49 @@ describe QuickActions::InterpretService do let(:issuable) { issue } end - context '/inherit command' do + context '/copy_metadata command' do let!(:todo_label) { create(:label, project: project, title: 'To Do') } let!(:inreview_label) { create(:label, project: project, title: 'In Review') } - it_behaves_like 'inherit command' do - # Without milestone assignment - let(:issue_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } - - let(:content) { "/inherit #{issue_father.to_reference}" } - let(:issuable) { issue } - end - - it_behaves_like 'inherit command' do - # With milestone assignment - let(:issue_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } - - let(:content) { "/inherit #{issue_father.to_reference(project)}" } - let(:issuable) { issue } - end - it_behaves_like 'empty command' do - let(:content) { '/inherit' } + let(:content) { '/copy_metadata' } let(:issuable) { issue } end + it_behaves_like 'copy_metadata command' do + let(:issueable_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } + + let(:content) { "/copy_metadata #{issueable_father.to_reference}" } + let(:issuable) { issue } + end + + context 'when the parent issueable has a milestone' do + it_behaves_like 'copy_metadata command' do + let(:issueable_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } + + let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:issuable) { issue } + end + end + context 'cross project references' do it_behaves_like 'empty command' do let(:other_project) { create(:project, :public) } - let(:issue_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } - let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:issueable_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } + let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:issuable) { issue } end it_behaves_like 'empty command' do - let(:content) { "/inherit imaginary#1234" } + let(:content) { "/copy_metadata imaginary#1234" } let(:issuable) { issue } end it_behaves_like 'empty command' do let(:other_project) { create(:project, :private) } - let(:issue_father) { create(:issue, project: other_project) } + let(:issueable_father) { create(:issue, project: other_project) } - let(:content) { "/inherit #{issue_father.to_reference(project)}" } + let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:issuable) { issue } end end From 26087ae91c0397054786bed7bcc078b03dd8752b Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Wed, 31 Jan 2018 18:41:06 +0100 Subject: [PATCH 007/120] Fixed typos and improved reference checking --- .../quick_actions/interpret_service.rb | 18 +++++++------- ...mand.yml => add-copy-metadata-command.yml} | 2 +- doc/user/project/quick_actions.md | 2 +- .../quick_actions/interpret_service_spec.rb | 24 +++++++++---------- 4 files changed, 23 insertions(+), 23 deletions(-) rename changelogs/unreleased/{add-inherit-command.yml => add-copy-metadata-command.yml} (62%) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index 28fa887bf2d..87937fef8f4 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -269,22 +269,22 @@ module QuickActions end desc 'Copy labels and milestone from other issue or merge request' - explanation do |issueable_id| - "Copy labels and milestone from issue or merge_request \"#{issueable_id}\"." + explanation do |issuable_id| + "Copy labels and milestone from issue or merge_request \"#{issuable_id}\"." end - params '< #issue | !merge_request >' + params '#issue | !merge_request' condition do issuable.persisted? && current_user.can?(:"update_#{issuable.to_ability_name}", issuable) end - command :copy_metadata do |issueable_id| - reference_type = issueable_id.include?("#") ? :issue : :merge_request - issue = extract_references(issueable_id, reference_type).first + command :copy_metadata do |issuable_id| + source_issuable = extract_references(issuable_id, :issue).first + source_issuable = extract_references(issuable_id, :merge_request).first if !source_issuable.present? - if issue.present? && issue.project.id == issuable.project.id - @updates[:add_label_ids] = issue.labels.map(&:id) + if source_issuable.present? && source_issuable.project.id == issuable.project.id + @updates[:add_label_ids] = source_issuable.labels.map(&:id) - @updates[:milestone_id] = issue.milestone.id if issue.milestone + @updates[:milestone_id] = source_issuable.milestone.id if source_issuable.milestone end end diff --git a/changelogs/unreleased/add-inherit-command.yml b/changelogs/unreleased/add-copy-metadata-command.yml similarity index 62% rename from changelogs/unreleased/add-inherit-command.yml rename to changelogs/unreleased/add-copy-metadata-command.yml index d47aa8c7b36..3bf25ae6ce0 100644 --- a/changelogs/unreleased/add-inherit-command.yml +++ b/changelogs/unreleased/add-copy-metadata-command.yml @@ -1,5 +1,5 @@ --- -title: Add Inherit quick action +title: Add Copy metadata quick action merge_request: 16473 author: Mateusz Bajorski type: added diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index e2e2b859d35..75799caacde 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -41,4 +41,4 @@ do. | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` | -| /copy_metadata < #issue | !merge_request > | copy_metadata labels and milestone from other issue or merge request | +| /copy_metadata < #issue | !merge_request > | Copy labels and milestone from other issue or merge request | diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb index 9a8240f9491..4aad2aaef79 100644 --- a/spec/services/quick_actions/interpret_service_spec.rb +++ b/spec/services/quick_actions/interpret_service_spec.rb @@ -308,15 +308,15 @@ describe QuickActions::InterpretService do shared_examples 'copy_metadata command' do it 'fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference' do - issueable_father # populate the issue + source_issuable # populate the issue todo_label # populate this label inreview_label # populate this label _, updates = service.execute(content, issuable) expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) - if issueable_father.milestone - expect(updates[:milestone_id]).to eq(issueable_father.milestone.id) + if source_issuable.milestone + expect(updates[:milestone_id]).to eq(source_issuable.milestone.id) else expect(updates).not_to have_key(:milestone_id) end @@ -784,17 +784,17 @@ describe QuickActions::InterpretService do end it_behaves_like 'copy_metadata command' do - let(:issueable_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } + let(:source_issuable) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } - let(:content) { "/copy_metadata #{issueable_father.to_reference}" } + let(:content) { "/copy_metadata #{source_issuable.to_reference}" } let(:issuable) { issue } end - context 'when the parent issueable has a milestone' do + context 'when the parent issuable has a milestone' do it_behaves_like 'copy_metadata command' do - let(:issueable_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } + let(:source_issuable) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } - let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" } let(:issuable) { issue } end end @@ -802,8 +802,8 @@ describe QuickActions::InterpretService do context 'cross project references' do it_behaves_like 'empty command' do let(:other_project) { create(:project, :public) } - let(:issueable_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } - let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:source_issuable) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } + let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" } let(:issuable) { issue } end @@ -814,9 +814,9 @@ describe QuickActions::InterpretService do it_behaves_like 'empty command' do let(:other_project) { create(:project, :private) } - let(:issueable_father) { create(:issue, project: other_project) } + let(:source_issuable) { create(:issue, project: other_project) } - let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } + let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" } let(:issuable) { issue } end end From 593e3ffc325a600a070ce6c247e33412473ec651 Mon Sep 17 00:00:00 2001 From: Mateusz Bajorski Date: Thu, 1 Feb 2018 19:38:10 +0100 Subject: [PATCH 008/120] Fixed inconsistent descriptions and refactored reference checking --- app/services/quick_actions/interpret_service.rb | 4 ++-- doc/user/project/quick_actions.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index 87937fef8f4..1a0e27d551a 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -270,7 +270,7 @@ module QuickActions desc 'Copy labels and milestone from other issue or merge request' explanation do |issuable_id| - "Copy labels and milestone from issue or merge_request \"#{issuable_id}\"." + "Copy labels and milestone from issue or merge_request #{issuable_id}." end params '#issue | !merge_request' condition do @@ -279,7 +279,7 @@ module QuickActions end command :copy_metadata do |issuable_id| source_issuable = extract_references(issuable_id, :issue).first - source_issuable = extract_references(issuable_id, :merge_request).first if !source_issuable.present? + source_issuable ||= extract_references(issuable_id, :merge_request).first if source_issuable.present? && source_issuable.project.id == issuable.project.id @updates[:add_label_ids] = source_issuable.labels.map(&:id) diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md index 75799caacde..3e3b699edc4 100644 --- a/doc/user/project/quick_actions.md +++ b/doc/user/project/quick_actions.md @@ -41,4 +41,4 @@ do. | `/move path/to/project` | Moves issue to another project | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` | -| /copy_metadata < #issue | !merge_request > | Copy labels and milestone from other issue or merge request | +| /copy_metadata #issue | !merge_request | Copy labels and milestone from other issue or merge request | From 748a2f2b542fed2cb8ab7d1792cb874ce7423a61 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 11 Apr 2018 17:12:01 +0100 Subject: [PATCH 009/120] Added fuzzy file finder to web IDE Closes #44841 --- .../ide/components/file_finder/index.vue | 100 ++++++++++++++++++ .../ide/components/file_finder/item.vue | 36 +++++++ app/assets/javascripts/ide/components/ide.vue | 13 ++- app/assets/javascripts/ide/stores/getters.js | 3 + app/assets/javascripts/ide/stores/state.js | 1 + package.json | 1 + yarn.lock | 4 + 7 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/ide/components/file_finder/index.vue create mode 100644 app/assets/javascripts/ide/components/file_finder/item.vue diff --git a/app/assets/javascripts/ide/components/file_finder/index.vue b/app/assets/javascripts/ide/components/file_finder/index.vue new file mode 100644 index 00000000000..ebcd6f7592b --- /dev/null +++ b/app/assets/javascripts/ide/components/file_finder/index.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/app/assets/javascripts/ide/components/file_finder/item.vue b/app/assets/javascripts/ide/components/file_finder/item.vue new file mode 100644 index 00000000000..482bfb96d93 --- /dev/null +++ b/app/assets/javascripts/ide/components/file_finder/item.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/assets/javascripts/ide/components/ide.vue b/app/assets/javascripts/ide/components/ide.vue index 1c237c0ec97..8489639e3b0 100644 --- a/app/assets/javascripts/ide/components/ide.vue +++ b/app/assets/javascripts/ide/components/ide.vue @@ -5,6 +5,7 @@ import ideContextbar from './ide_context_bar.vue'; import repoTabs from './repo_tabs.vue'; import ideStatusBar from './ide_status_bar.vue'; import repoEditor from './repo_editor.vue'; +import FindFile from './file_finder/index.vue'; export default { components: { @@ -13,6 +14,7 @@ export default { repoTabs, ideStatusBar, repoEditor, + FindFile, }, props: { emptyStateSvgPath: { @@ -29,7 +31,13 @@ export default { }, }, computed: { - ...mapState(['changedFiles', 'openFiles', 'viewer', 'currentMergeRequestId']), + ...mapState([ + 'changedFiles', + 'openFiles', + 'viewer', + 'currentMergeRequestId', + 'fileFindVisible', + ]), ...mapGetters(['activeFile', 'hasChanges']), }, mounted() { @@ -50,6 +58,9 @@ export default {
+
export const hasChanges = state => !!state.changedFiles.length; export const hasMergeRequest = state => !!state.currentMergeRequestId; + +export const allBlobs = state => + Object.keys(state.entries).reduce((acc, key) => acc.concat(state.entries[key]), []); diff --git a/app/assets/javascripts/ide/stores/state.js b/app/assets/javascripts/ide/stores/state.js index e5cc8814000..e976884ae1f 100644 --- a/app/assets/javascripts/ide/stores/state.js +++ b/app/assets/javascripts/ide/stores/state.js @@ -17,4 +17,5 @@ export default () => ({ entries: {}, viewer: 'editor', delayViewerUpdated: false, + fileFindVisible: true, }); diff --git a/package.json b/package.json index 45bea12fd9b..6f92600cfa5 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "vue-resource": "^1.3.5", "vue-router": "^3.0.1", "vue-template-compiler": "^2.5.13", + "vue-virtual-scroll-list": "^1.2.5", "vuex": "^3.0.1", "webpack": "^3.11.0", "webpack-bundle-analyzer": "^2.10.0", diff --git a/yarn.lock b/yarn.lock index 55a86a9a577..1718a56bac4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8683,6 +8683,10 @@ vue-template-es2015-compiler@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" +vue-virtual-scroll-list@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.2.5.tgz#bcbd010f7cdb035eba8958ebf807c6214d9a167a" + vue@^2.5.13: version "2.5.13" resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1" From d32eaee20e75ca2e90397182dce59ee263f5c249 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 12 Apr 2018 09:43:46 +0100 Subject: [PATCH 010/120] correctly show the dropdown with `t` keypress added arrow key navigation in the dropdown enter & click open the file highlight occurrences of the searched text in the drppdown item fixed some performance issues when rendering limit the dropdown items to a maximum of 20 - this may change to more depending on other performance changes --- .../ide/components/file_finder/index.vue | 171 ++++++++++++------ .../ide/components/file_finder/item.vue | 50 ++++- app/assets/javascripts/ide/components/ide.vue | 13 +- app/assets/javascripts/ide/stores/actions.js | 3 + app/assets/javascripts/ide/stores/getters.js | 10 +- .../javascripts/ide/stores/mutation_types.js | 2 + .../javascripts/ide/stores/mutations.js | 5 + app/assets/javascripts/ide/stores/state.js | 2 +- app/assets/stylesheets/pages/repo.scss | 1 + 9 files changed, 196 insertions(+), 61 deletions(-) diff --git a/app/assets/javascripts/ide/components/file_finder/index.vue b/app/assets/javascripts/ide/components/file_finder/index.vue index ebcd6f7592b..d1902557fe8 100644 --- a/app/assets/javascripts/ide/components/file_finder/index.vue +++ b/app/assets/javascripts/ide/components/file_finder/index.vue @@ -1,8 +1,11 @@ diff --git a/app/assets/javascripts/ide/components/ide.vue b/app/assets/javascripts/ide/components/ide.vue index 8489639e3b0..065edd81d2c 100644 --- a/app/assets/javascripts/ide/components/ide.vue +++ b/app/assets/javascripts/ide/components/ide.vue @@ -1,5 +1,6 @@ @@ -59,7 +68,7 @@ export default { class="ide-view" >
{ commit(types.UPDATE_DELAY_VIEWER_CHANGE, delay); }; +export const toggleFileFinder = ({ commit }, fileFindVisible) => + commit(types.TOGGLE_FILE_FINDER, fileFindVisible); + export * from './actions/tree'; export * from './actions/file'; export * from './actions/project'; diff --git a/app/assets/javascripts/ide/stores/getters.js b/app/assets/javascripts/ide/stores/getters.js index 6776be3b77c..07f7e73d8e9 100644 --- a/app/assets/javascripts/ide/stores/getters.js +++ b/app/assets/javascripts/ide/stores/getters.js @@ -37,4 +37,12 @@ export const hasChanges = state => !!state.changedFiles.length; export const hasMergeRequest = state => !!state.currentMergeRequestId; export const allBlobs = state => - Object.keys(state.entries).reduce((acc, key) => acc.concat(state.entries[key]), []); + Object.keys(state.entries).reduce((acc, key) => { + const entry = state.entries[key]; + + if (entry.type === 'blob') { + acc.push(entry); + } + + return acc; + }, []); diff --git a/app/assets/javascripts/ide/stores/mutation_types.js b/app/assets/javascripts/ide/stores/mutation_types.js index e3f504e5ab0..d64908ea971 100644 --- a/app/assets/javascripts/ide/stores/mutation_types.js +++ b/app/assets/javascripts/ide/stores/mutation_types.js @@ -53,3 +53,5 @@ export const UPDATE_DELAY_VIEWER_CHANGE = 'UPDATE_DELAY_VIEWER_CHANGE'; export const ADD_PENDING_TAB = 'ADD_PENDING_TAB'; export const REMOVE_PENDING_TAB = 'REMOVE_PENDING_TAB'; + +export const TOGGLE_FILE_FINDER = 'SHOW_FILE_FINDER'; diff --git a/app/assets/javascripts/ide/stores/mutations.js b/app/assets/javascripts/ide/stores/mutations.js index 5e5eb831662..4510ef64262 100644 --- a/app/assets/javascripts/ide/stores/mutations.js +++ b/app/assets/javascripts/ide/stores/mutations.js @@ -95,6 +95,11 @@ export default { delayViewerUpdated, }); }, + [types.TOGGLE_FILE_FINDER](state, fileFindVisible) { + Object.assign(state, { + fileFindVisible, + }); + }, ...projectMutations, ...mergeRequestMutation, ...fileMutations, diff --git a/app/assets/javascripts/ide/stores/state.js b/app/assets/javascripts/ide/stores/state.js index e976884ae1f..3694ad953fa 100644 --- a/app/assets/javascripts/ide/stores/state.js +++ b/app/assets/javascripts/ide/stores/state.js @@ -17,5 +17,5 @@ export default () => ({ entries: {}, viewer: 'editor', delayViewerUpdated: false, - fileFindVisible: true, + fileFindVisible: false, }); diff --git a/app/assets/stylesheets/pages/repo.scss b/app/assets/stylesheets/pages/repo.scss index 5f46e69a56d..340bba7ef4c 100644 --- a/app/assets/stylesheets/pages/repo.scss +++ b/app/assets/stylesheets/pages/repo.scss @@ -17,6 +17,7 @@ } .ide-view { + position: relative; display: flex; height: calc(100vh - #{$header-height}); margin-top: 0; From ba4dde7c41f0d3dcba12481c4ff0171044c9dc1c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 12 Apr 2018 10:36:10 +0100 Subject: [PATCH 011/120] small performance improvement by caching the computed prop fixed eslint there are still some performance issues with larger lists. Need to investigate whether this is a Vue issue or a fuzzaldrin issue --- .../ide/components/file_finder/index.vue | 13 ++++++++----- .../javascripts/ide/components/file_finder/item.vue | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/ide/components/file_finder/index.vue b/app/assets/javascripts/ide/components/file_finder/index.vue index d1902557fe8..3e7cf69dbda 100644 --- a/app/assets/javascripts/ide/components/file_finder/index.vue +++ b/app/assets/javascripts/ide/components/file_finder/index.vue @@ -31,13 +31,16 @@ export default { maxResults: MAX_RESULTS, }); }, + filteredBlobsLength() { + return this.filteredBlobs.length; + }, listShowCount() { - if (!this.filteredBlobs.length) return 1; + if (!this.filteredBlobsLength) return 1; - return this.filteredBlobs.length > 5 ? 5 : this.filteredBlobs.length; + return this.filteredBlobsLength > 5 ? 5 : this.filteredBlobsLength; }, listHeight() { - return this.filteredBlobs.length ? 55 : 33; + return this.filteredBlobsLength ? 55 : 33; }, }, watch: { @@ -62,7 +65,7 @@ export default { case 40: // DOWN e.preventDefault(); - if (this.focusedIndex < this.filteredBlobs.length - 1) this.focusedIndex += 1; + if (this.focusedIndex < this.filteredBlobsLength - 1) this.focusedIndex += 1; break; default: break; @@ -117,7 +120,7 @@ export default { :start="focusedIndex" wtag="ul" > -