Module: TreeHelper

Included in:
Projects::FindFileController, Projects::RefsController
Defined in:
app/helpers/tree_helper.rb

Instance Method Summary collapse

Instance Method Details

#can_edit_tree?(project = nil, ref = nil) ⇒ Boolean

Returns:

  • (Boolean)

53
54
55
56
57
58
59
60
# File 'app/helpers/tree_helper.rb', line 53

def can_edit_tree?(project = nil, ref = nil)
  project ||= @project
  ref ||= @ref

  return false unless on_top_of_branch?(project, ref)

  can_collaborate_with_project?(project)
end

#commit_in_fork_helpObject


91
92
93
# File 'app/helpers/tree_helper.rb', line 91

def commit_in_fork_help
  "A new branch will be created in your fork and a new merge request will be started."
end

#edit_in_new_fork_noticeObject


86
87
88
89
# File 'app/helpers/tree_helper.rb', line 86

def edit_in_new_fork_notice
  "You're not allowed to make changes to this project directly." +
    " A fork of this project has been created that you can make changes in, so you can submit a merge request."
end

#edit_in_new_fork_notice_nowObject


81
82
83
84
# File 'app/helpers/tree_helper.rb', line 81

def edit_in_new_fork_notice_now
  "You're not allowed to make changes to this project directly." +
    " A fork of this project is being created that you can make changes in, so you can submit a merge request."
end

#flatten_tree(tree) ⇒ Object

returns the relative path of the first subdir that doesn't have only one directory descendant


118
119
120
121
122
123
124
125
# File 'app/helpers/tree_helper.rb', line 118

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

#on_top_of_branch?(project = @project, ref = @ref) ⇒ Boolean

Returns:

  • (Boolean)

49
50
51
# File 'app/helpers/tree_helper.rb', line 49

def on_top_of_branch?(project = @project, ref = @ref)
  project.repository.branch_names.include?(ref)
end

#render_readme(readme) ⇒ Object


27
28
29
# File 'app/helpers/tree_helper.rb', line 27

def render_readme(readme)
  render_markup(readme.name, readme.data)
end

#render_tree(tree) ⇒ Object

Sorts a repository's tree so that folders are before files and renders their corresponding partials

contents - A Grit::Tree object for the current tree


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/helpers/tree_helper.rb', line 6

def render_tree(tree)
  # Render Folders before Files/Submodules
  folders, files, submodules = tree.trees, tree.blobs, tree.submodules

  tree = ""

  # Render folders if we have any
  tree << render(partial: 'projects/tree/tree_item', collection: folders,
                 locals: { type: 'folder' }) if folders.present?

  # Render files if we have any
  tree << render(partial: 'projects/tree/blob_item', collection: files,
                 locals: { type: 'file' }) if files.present?

  # Render submodules if we have any
  tree << render(partial: 'projects/tree/submodule_item',
                 collection: submodules) if submodules.present?

  tree.html_safe
end

#tree_breadcrumbs(tree, max_links = 2) ⇒ Object


95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'app/helpers/tree_helper.rb', line 95

def tree_breadcrumbs(tree, max_links = 2)
  if @path.present?
    part_path = ""
    parts = @path.split('/')

    yield('..', nil) if parts.count > max_links

    parts.each do |part|
      part_path = File.join(part_path, part) unless part_path.empty?
      part_path = part if part_path.empty?

      next if parts.count > max_links && !parts.last(2).include?(part)
      yield(part, tree_join(@ref, part_path))
    end
  end
end

#tree_edit_branch(project = @project, ref = @ref) ⇒ Object


62
63
64
65
66
67
68
69
70
71
# File 'app/helpers/tree_helper.rb', line 62

def tree_edit_branch(project = @project, ref = @ref)
  return unless can_edit_tree?(project, ref)

  if can_push_branch?(project, ref)
    ref
  else
    project = tree_edit_project(project)
    project.repository.next_branch('patch')
  end
end

#tree_edit_project(project = @project) ⇒ Object


73
74
75
76
77
78
79
# File 'app/helpers/tree_helper.rb', line 73

def tree_edit_project(project = @project)
  if can?(current_user, :push_code, project)
    project
  elsif current_user && current_user.already_forked?(project)
    current_user.fork_of(project)
  end
end

#tree_hex_class(content) ⇒ Object


40
41
42
# File 'app/helpers/tree_helper.rb', line 40

def tree_hex_class(content)
  "file_#{hexdigest(content.name)}"
end

#tree_icon(type, mode, name) ⇒ Object

Return an image icon depending on the file type and mode

type - String type of the tree item; either 'folder' or 'file' mode - File unix mode name - File name


36
37
38
# File 'app/helpers/tree_helper.rb', line 36

def tree_icon(type, mode, name)
  icon("#{file_type_icon_class(type, mode, name)} fw")
end

#tree_join(*args) ⇒ Object

Simple shortcut to File.join


45
46
47
# File 'app/helpers/tree_helper.rb', line 45

def tree_join(*args)
  File.join(*args)
end

#up_dir_pathObject


112
113
114
115
# File 'app/helpers/tree_helper.rb', line 112

def up_dir_path
  file = File.join(@path, "..")
  tree_join(@ref, file)
end