-
-
Notifications
You must be signed in to change notification settings - Fork 924
/
Copy pathgit.rake
60 lines (52 loc) · 1.72 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
def git_repo_exists?(dir)
File.exists? File.join(dir, ".git")
end
def git_shallow_clone(label, git_repository, local_directory)
git_clone(label, git_repository, local_directory, true)
end
def git_clone(label, git_repository, local_directory, shallow = false)
puts "No #{label} repo found: cloning to #{local_directory}"
rm_rf local_directory # Something there, but not a git repo. Destroy!
cmd = "git clone #{git_repository} #{local_directory}"
cmd << " --depth 1" if shallow
sh cmd
Dir.chdir(local_directory) { yield } if block_given?
end
def git_simple_command(command, label, local_directory, ignore_error = false)
puts "#{label} repo found: `git #{command}` repo at #{local_directory}"
Dir.chdir(local_directory) do
begin
sh "git #{command}"
rescue Exception => e
unless ignore_error
raise e
else
puts "git #{command} failed, but ignored: #{e.message}"
end
end
yield if block_given?
end
end
def git_pull(label, local_directory, ignore_error = false)
git_simple_command("pull", label, local_directory, ignore_error)
end
def git_fetch(label, local_directory, ignore_error = false)
git_simple_command("fetch", label, local_directory, ignore_error)
end
def git_checkout(label, tag, local_directory)
git_simple_command("checkout -q #{tag}", label, local_directory)
end
def git_move_to_head_detached(label, tag, local_directory)
git_simple_command('checkout -q `git rev-parse HEAD`', label, local_directory)
end
def git_submodule_update(path, ignore_error = false)
begin
sh "git submodule update --init #{path}"
rescue Exception => e
unless ignore_error
raise e
else
puts "git #{command} failed, but ignored: #{e.message}"
end
end
end