TMP: Start working on repo browser
[gitorious:mainline.git] / app / racks / repository_browser.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2012 Gitorious AS and/or its subsidiary(-ies)
4 #
5 #   This program is free software: you can redistribute it and/or modify
6 #   it under the terms of the GNU Affero General Public License as published by
7 #   the Free Software Foundation, either version 3 of the License, or
8 #   (at your option) any later version.
9 #
10 #   This program is distributed in the hope that it will be useful,
11 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #   GNU Affero General Public License for more details.
14 #
15 #   You should have received a copy of the GNU Affero General Public License
16 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #++
18 require "dolt/sinatra/base"
19 require "libdolt/view/multi_repository"
20 require "libdolt/view/blob"
21 require "libdolt/view/tree"
22
23 module Gitorious
24   class RepositoryBrowser < Dolt::Sinatra::Base
25     include Dolt::View::MultiRepository
26     include Dolt::View::Blob
27     include Dolt::View::Tree
28
29     def self.instance; @instance; end
30     def self.instance=(instance); @instance = instance; end
31
32     # def self.not_found(err)
33     #   puts "NOT FOUND #{err}"
34     #   @f404 ||= File.read(Rails.root + "public/404.html")
35     #   body([404, { "Content-Type" => "text/html" }, @f404])
36     # end
37
38     # def self.handle_error(err)
39     #   puts "Error #{err}"
40     #   @f500 ||= File.read(Rails.root + "public/500.html")
41     #   body([500, { "Content-Type" => "text/html" }, @f500])
42     # end
43
44     # def self.aget(route, &block)
45     #   get(route) do
46     #     begin
47     #       self.instance_eval(&block)
48     #       [-1]
49     #     rescue ActiveRecord::Base => err
50     #       not_found(err)
51     #     rescue Exception => err
52     #       handle_error(err)
53     #     end
54     #   end
55     # end
56
57     aget "/*/source/*:*" do
58       repo, ref, path = params[:splat]
59       tree(repo, ref, path)
60     end
61
62     # aget "/*/tree/*" do
63     #   force_ref(params[:splat], "tree", "master")
64     # end
65
66     # aget "/*/blob/*:*" do
67     #   repo, ref, path = params[:splat]
68     #   blob(repo, ref, path)
69     # end
70
71     # aget "/*/blob/*" do
72     #   force_ref(params[:splat], "blob", "master")
73     # end
74
75     # aget "/*/raw/*:*" do
76     #   repo, ref, path = params[:splat]
77     #   raw(repo, ref, path)
78     # end
79
80     # aget "/*/raw/*" do
81     #   force_ref(params[:splat], "raw", "master")
82     # end
83
84     # aget "/*/blame/*:*" do
85     #   repo, ref, path = params[:splat]
86     #   blame(repo, ref, path)
87     # end
88
89     # aget "/*/blame/*" do
90     #   force_ref(params[:splat], "blame", "master")
91     # end
92
93     # aget "/*/history/*:*" do
94     #   repo, ref, path = params[:splat]
95     #   history(repo, ref, path, (params[:commit_count] || 20).to_i)
96     # end
97
98     # aget "/*/history/*" do
99     #   force_ref(params[:splat], "history", "master")
100     # end
101
102     # aget "/*/refs" do
103     #   refs(params[:splat].first)
104     # end
105
106     # aget "/*/tree_history/*:*" do
107     #   repo, ref, path = params[:splat]
108     #   tree_history(repo, ref, path)
109     # end
110
111     private
112     def force_ref(args, action, ref)
113       redirect(args.shift + "/#{action}/#{ref}:" + args.join)
114     end
115   end
116 end