From 021cff67f3514b4c2cb1f7b859cbfc314afa0a0c Mon Sep 17 00:00:00 2001 From: marmis85 Date: Wed, 31 Dec 2014 03:15:04 +0100 Subject: Flatten the directory hierarchy while there is only one directory descendant --- app/helpers/tree_helper.rb | 10 ++++++++++ app/views/projects/tree/_tree_item.html.haml | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index e32aeba5f8f..5a96a208e93 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -113,6 +113,16 @@ module TreeHelper tree_join(@ref, file) end + # returns the relative path of the first subdir that doesn't have only one directory descendand + def flatten_tree(tree) + subtree = Gitlab::Git::Tree.where(@repository, @commit.id, tree.path) + if subtree.count == 1 && subtree.first.dir? + return tree_join(tree.name, flatten_tree(subtree.first)) + else + return tree.name + end + end + def leave_edit_message "Leave edit mode?\nAll unsaved changes will be lost." end diff --git a/app/views/projects/tree/_tree_item.html.haml b/app/views/projects/tree/_tree_item.html.haml index f8cecf9be1f..5adbf93ff8f 100644 --- a/app/views/projects/tree/_tree_item.html.haml +++ b/app/views/projects/tree/_tree_item.html.haml @@ -2,7 +2,8 @@ %td.tree-item-file-name = tree_icon(type) %span.str-truncated - = link_to tree_item.name, project_tree_path(@project, tree_join(@id || @commit.id, tree_item.name)) + - path = flatten_tree(tree_item) + = link_to path, project_tree_path(@project, tree_join(@id || @commit.id, path)) %td.tree_time_ago.cgray = render 'spinner' %td.hidden-xs.tree_commit -- cgit v1.2.3 From 3efb06a22bb970c0e6db0bbd1fc9f8c4caba44ba Mon Sep 17 00:00:00 2001 From: marmis85 Date: Sat, 10 Jan 2015 21:37:48 +0100 Subject: Add test spec for TreeHelper module --- spec/helpers/tree_helper_spec.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 spec/helpers/tree_helper_spec.rb diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb new file mode 100644 index 00000000000..ad3535a15e6 --- /dev/null +++ b/spec/helpers/tree_helper_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +describe TreeHelper do + describe 'flatten_tree' do + let(:project) { create(:project) } + + before { + @repository = project.repository + @commit = project.repository.commit + } + + context "on a directory containing more than one file/directory" do + let(:tree_item) { double(name: "files", path: "files") } + + it "should return the directory name" do + flatten_tree(tree_item).should match('files') + end + end + + context "on a directory containing only one directory" do + let(:tree_item) { double(name: "foo", path: "foo") } + + it "should return the flattened path" do + flatten_tree(tree_item).should match('foo/bar') + end + end + end +end -- cgit v1.2.3 From 32233d522f6b4cab90835643b8a3d2e2a890cb64 Mon Sep 17 00:00:00 2001 From: marmis85 Date: Sun, 11 Jan 2015 00:15:56 +0100 Subject: updated master to latests sha --- spec/support/test_env.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index e6db410fb1c..2b8f7a945d4 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -10,7 +10,7 @@ module TestEnv 'fix' => '12d65c8', 'improve/awesome' => '5937ac0', 'markdown' => '0ed8c6c', - 'master' => '5937ac0' + 'master' => 'e56497b' } # Test environment -- cgit v1.2.3 From 02adb9ccd605a10984f4af582fcd9b22bfab52d7 Mon Sep 17 00:00:00 2001 From: marmis85 Date: Sun, 11 Jan 2015 05:07:34 +0100 Subject: point to a specific branch in the test repo to avoid conflicts --- spec/helpers/tree_helper_spec.rb | 2 +- spec/support/test_env.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb index ad3535a15e6..8aa50c4c778 100644 --- a/spec/helpers/tree_helper_spec.rb +++ b/spec/helpers/tree_helper_spec.rb @@ -6,7 +6,7 @@ describe TreeHelper do before { @repository = project.repository - @commit = project.repository.commit + @commit = project.repository.commit("e56497bb") } context "on a directory containing more than one file/directory" do diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 2b8f7a945d4..e6db410fb1c 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -10,7 +10,7 @@ module TestEnv 'fix' => '12d65c8', 'improve/awesome' => '5937ac0', 'markdown' => '0ed8c6c', - 'master' => 'e56497b' + 'master' => '5937ac0' } # Test environment -- cgit v1.2.3