Further repo browser/Dolt integration work
[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     aget "/*/source/*:*" do
33       repo, ref, path = params[:splat]
34       tree_entry(repo, ref, path)
35       ActiveRecord::Base.clear_reloadable_connections!
36     end
37
38     aget "/*/source/*" do
39       force_ref(params[:splat], "source", "master")
40     end
41
42     aget "/*/raw/*:*" do
43       repo, ref, path = params[:splat]
44       raw(repo, ref, path)
45     end
46
47     aget "/*/raw/*" do
48       force_ref(params[:splat], "raw", "master")
49     end
50
51     aget "/*/blame/*:*" do
52       repo, ref, path = params[:splat]
53       blame(repo, ref, path)
54     end
55
56     aget "/*/blame/*" do
57       force_ref(params[:splat], "blame", "master")
58     end
59
60     aget "/*/history/*:*" do
61       repo, ref, path = params[:splat]
62       history(repo, ref, path, (params[:commit_count] || 20).to_i)
63     end
64
65     aget "/*/history/*" do
66       force_ref(params[:splat], "history", "master")
67     end
68
69     aget "/*/refs" do
70       refs(params[:splat].first)
71     end
72
73     aget "/*/tree_history/*:*" do
74       repo, ref, path = params[:splat]
75       tree_history(repo, ref, path)
76       # response["Content-Type"] = "application/json"
77       # body("[]")
78     end
79
80     private
81     def force_ref(args, action, ref)
82       redirect(args.shift + "/#{action}/#{ref}:" + args.join)
83     end
84   end
85 end