Re-enable spec/library for full CI runs.
[rbx.git] / rakelib / git.rb
bloba841608e5df7110032c775f1c7d27226181ac2e4
2 MINIMUM_VERSION = [1, 5, 3]
4 def is_git_dir(dir)
5   File.directory?(dir) and File.directory?(File.join(dir, ".git"))
6 end
8 def git_branch
9   `git branch | grep "*"`.strip[2..-1]
10 end
12 def compare_git_ver
13   v = `git version`.scan(/version (\d+).(\d+).(\d+)/).flatten.map { |s| s.to_i }
14   m = [1, 5, 3]
16   (v <=> MINIMUM_VERSION) >= 0
17 end
19 def check_git_ver
20   raise "Invalid git version, use at least #{MINIMUM_VERSION.join(".")}" unless
21     compare_git_ver
22 end
24 def on_master
25   branch = git_branch()
26   switch = if branch != "master" then
27              `git checkout master`
28              puts "* Switching back to master..."
29              true
30            end
32   yield
34   if switch
35     puts "* Porting changes into #{branch}..."
36     `git checkout #{branch}`
37     sh "git rebase master"
38   end
39 end
41 def with_git_changes
42   `git diff-files --quiet`
43   if $?.exitstatus == 1 then
44     yield
45     true
46   end
47 end
49 def git_update
50   check_git_ver
52   clear = false
53   stash = with_git_changes do
54     clear = `git stash list`.scan("\n").size == 0
55     puts "* Saving changes..."
56     `git stash save`
57     true
58   end
60   on_master do
61     puts "* Pulling in new commits..."
62     sh "git fetch"
63     sh "git rebase origin"
64   end
66   if stash then
67     puts "* Applying changes..."
68     sh "git stash apply"
69     `git stash clear` if clear
70   end
71 end
73 def git_push
74   branch = git_branch
76   with_git_changes do
77     abort "You have outstanding changes. Please commit them first."
78   end if branch != "master"
80   on_master do
81     puts "* Merging topic '#{branch}' back into master..."
82     sh "git merge #{branch}"
83     puts "* Pushing changes..."
84     sh "git push"
85   end
86 end