blob: 3aebd03099a023068155f4abf22dfe571687ec32 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
require "fileutils"
class GitBackend
class << self
# Creates a new bare Git repository at +path+
# sets git-daemon-export-ok if +set_export_ok+ is true (default)
def create(repos_path, set_export_ok = true)
FileUtils.mkdir_p(repos_path, :mode => 0750)
Dir.chdir(repos_path) do |path|
template = File.expand_path(File.join(File.dirname(__FILE__), "../data/git-template"))
git = Grit::Git.new(path)
git.init({}, "--template=#{template}")
post_create(path) if set_export_ok
end
end
# Clones a new bare Git repository at +target-path+ from +source_path+
# sets git-daemon-export-ok if +set_export_ok+ is true (default)
def clone(target_path, source_path, set_export_ok = true)
Git.clone(source_path, target_path, :bare => true)
post_create(target_path) if set_export_ok
end
def delete!(repos_path)
if repos_path.index(GitoriousConfig["repository_base_path"]) == 0
FileUtils.rm_rf(repos_path)
else
raise "bad path"
end
end
def repository_has_commits?(repos_path)
Dir[File.join(repos_path, "refs/heads/*")].size > 0
end
protected
def post_create(path)
FileUtils.touch(File.join(path, "git-daemon-export-ok"))
execute_command(%Q{chmod +x #{File.join(path, "hooks/post-update")}})
execute_command(%Q{GIT_DIR="#{path}" git-update-server-info})
end
def execute_command(command)
system(command)
end
end
end
|