# Controller for viewing a repository's file structure
class TreeController < ProjectResourceController
  include ExtractsPath

  # Authorize
  before_filter :authorize_read_project!
  before_filter :authorize_code_access!
  before_filter :require_non_empty_project

  before_filter :assign_ref_vars

  def show
    @hex_path  = Digest::SHA1.hexdigest(@path)
    @logs_path = logs_file_project_ref_path(@project, @ref, @path)

    respond_to do |format|
      format.html
      # Disable cache so browser history works
      format.js { no_cache_headers }
    end
  end

  def edit
    @last_commit = @project.last_commit_for(@ref, @path).sha
  end

  def update
    file_editor = Gitlab::FileEditor.new(current_user, @project, @ref)
    update_status = file_editor.update(
      @path,
      params[:content],
      params[:commit_message],
      params[:last_commit]
    )

    if update_status
      redirect_to project_tree_path(@project, @id), :notice => "File has been successfully changed"
    else
      flash[:notice] = "You can't save file because it has been changed"
      render :edit
    end
  end
end