Sha256: 7ced6a6a5eb91243f5ca395f5be94a88277894359a03c45be0bfa904ca9dccb8

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

module Webgit
  class GitController < ApplicationController
    before_action :set_repo_branch, except: [:index, :set_current_repo]
  
    def index
    
    end
  
    def set_current_repo
      session[:current_repo] = params[:repo_name]
      redirect_to webgit_tree_path(:master)
    end
  
    def tree
      @tree = find_object
    end  
  
    def blob
      @blob = find_object
      render formats: [:html]
    end
  
    def preview  
      @blob = find_object  
      content_type = Mime.fetch(params[:format]){|fallback| "text/html"}.to_s
      response.headers['Cache-Control'] = "public, max-age=#{12.hours.to_i}"
      response.headers['Content-Type'] = content_type
      response.headers['Content-Disposition'] = 'inline'
      render text: @blob.content, content_type: content_type
    end
  
    protected  
      def find_object
        obj = @branch.tree
        if ps = params[:path]
          ps = ps + "." + params[:format] if params[:format]
          ps.split('/').each do|p|
            obj = find_object_in_tree(obj, p)
            break unless obj
          end
        end
        obj
      end
      
      def find_object_in_tree(tree, name)
        tree.each do|obj|
          if name == obj[:name]
            oid = obj[:oid]
            return @repo.lookup(obj[:oid])
          end
        end if tree.respond_to?(:each)
      end
    
      def set_repo_branch
        if session[:current_repo] && (path = AppConfig::REPOS[session[:current_repo]]['path'])
          @repo = Rugged::Repository.new(path)
          @branch = @repo.rev_parse(params[:branch])
          @branches = Rugged::Branch.each_name(@repo).select{|item| !item.include?('/') && item != params[:branch]}
        else
          redirect_to webgit_path
        end
      end
    
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
webgit-0.0.1 app/controllers/webgit/git_controller.rb