Fixed git push pull of wiki repos
[gitorious:mainline.git] / app / models / site.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2009 Nokia Corporation 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 class Site < ActiveRecord::Base
19   has_many :projects
20    
21   validates_presence_of :title
22   HTTP_CLONING_SUBDOMAIN = 'git'
23   validates_exclusion_of :subdomain, :in => [HTTP_CLONING_SUBDOMAIN]
24
25   attr_protected :subdomain
26   attr_protected :wiki_git_path
27
28   def self.default
29     Site.find_or_create_by_title_and_subdomain(:title => GitoriousConfig["site_name"], :subdomain => nil)
30   end
31   
32   def after_create
33     init_wiki_git_path
34   end
35
36   def init_wiki_git_path
37     self.wiki_git_path = generate_wiki_git_path
38     self.save!
39   end
40
41   def generate_wiki_git_path
42     if(!self.id) then raise "Refusing to generate a git path without a site id" end
43     Repository.full_path_from_partial_path(wiki_repo_name)
44   end
45
46   def wiki_repo_name
47     "#{self.id}-#{self.title}-site-wiki.git"
48   end
49   
50   def wiki
51     if(!self.wiki_git_path) then init_wiki_git_path end
52     if(!File.exist? wiki_git_path)
53       FileUtils.mkdir_p(wiki_git_path, :mode => 0755)
54       repo_name = File.basename(wiki_git_path)
55       Repository.create_git_repository(repo_name)
56     end
57     Grit::Repo.new(wiki_git_path)
58   end
59   
60 end