diff options
Diffstat (limited to 'app/helpers/tree_helper.rb')
-rw-r--r-- | app/helpers/tree_helper.rb | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index 03a49e119b8..2ad7c80dae0 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -46,12 +46,51 @@ module TreeHelper File.join(*args) end - def allowed_tree_edit?(project = nil, ref = nil) + def on_top_of_branch?(project = @project, ref = @ref) + project.repository.branch_names.include?(ref) + end + + def can_edit_tree?(project = nil, ref = nil) project ||= @project ref ||= @ref - return false unless project.repository.branch_names.include?(ref) - ::Gitlab::GitAccess.new(current_user, project).can_push_to_branch?(ref) + return false unless on_top_of_branch?(project, ref) + + can?(current_user, :push_code, project) || + (current_user && current_user.already_forked?(project)) + end + + 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_patch_branch + end + end + + 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 + + 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 + + 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 + + def commit_in_fork_help + "A new branch will be created in your fork and a new merge request will be started." end def tree_breadcrumbs(tree, max_links = 2) @@ -65,7 +104,7 @@ module TreeHelper part_path = File.join(part_path, part) unless part_path.empty? part_path = part if part_path.empty? - next unless parts.last(2).include?(part) if parts.count > max_links + next if parts.count > max_links && !parts.last(2).include?(part) yield(part, tree_join(@ref, part_path)) end end |