-
Notifications
You must be signed in to change notification settings - Fork 1
/
git.rake
109 lines (96 loc) · 3.19 KB
/
git.rake
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
namespace :app_helpers do
desc 'Copies git assets to app'
task :git => [ 'app_helpers:git:ignore', 'app_helpers:git:plugins', 'app_helpers:git:plugins:install' ]
namespace :git do
desc 'Copies .gitignore to app'
task :ignore do
unless File.exists?('.gitignore')
app_helper_resource 'git/ignore', '.gitignore'
end
end
desc 'Copy config/plugins.rb to app'
task :plugins do
app_helper_resource 'git/plugins.rb', 'config/plugins.rb', false, false
end
desc 'Removes files from rake app_helpers:git'
task :remove do
`rm .gitignore`
`rm config/plugins.rb`
end
namespace :plugins do
desc 'Adds plugins defined in config/plugins.rb'
task :install do
puts "Review config/plugins.rb. Install plugins now? (y/n)"
if STDIN.gets.upcase.strip == 'Y'
eval(File.read('config/plugins.rb')).each do |plugin|
install_plugin plugin
end
end
end
desc 'Updates plugins defined in config/plugins.rb'
task :update do
eval(File.read('config/plugins.rb')).each do |plugin|
path = install_path plugin
if File.exists?(path)
next if plugin == 'haml'
Dir.chdir path do
git_fetch_and_checkout plugin
end
else
install_plugin plugin
end
end
end
desc 'Removes plugins defined in config/plugins.rb'
task :remove do
eval(File.read('config/plugins.rb')).each do |plugin|
remove_plugin plugin
end
end
def install_path(plugin)
plugin[:to] || "vendor/plugins/#{plugin == 'haml' ? 'haml' : File.basename(plugin[:repo], '.git')}"
end
def install_plugin(plugin)
if plugin[:repo] && plugin[:repo].include?('app_helpers')
puts "Skipping #{plugin[:repo]}"
return
end
path = remove_plugin plugin
if plugin == 'haml'
puts 'Installing haml'
`haml --rails .`
else
puts "Installing #{plugin[:repo]}"
path = mkdir_p path
Dir.chdir path do
`git init`
`git remote add origin #{plugin[:repo]}`
git_fetch_and_checkout plugin
end
end
end
def remove_plugin(plugin)
path = install_path plugin
return path unless File.exists?(path)
puts "Removing #{path}"
rm_rf path
end
def git_fetch_and_checkout(plugin)
if plugin[:tag] || plugin[:branch]
puts "Fetching #{plugin[:repo]}"
`git fetch #{plugin[:depth] ? "--depth #{plugin[:depth]} " : ''}#{plugin[:tag] ? '-t ' : ''}-q`
else
puts "Pulling #{plugin[:repo]}"
`git pull #{plugin[:depth] ? "--depth #{plugin[:depth]} " : ''}-q origin master`
end
puts "Checking out #{git_head(plugin)}"
`git checkout #{git_head(plugin)} -q`
end
def git_head(plugin)
return "tags/#{plugin[:tag]}" if plugin[:tag]
return "origin/#{plugin[:branch]}" if plugin[:branch]
return 'master'
end
end
end
end