Fixed Iconv#close to ignore multiple calls.
[rbx.git] / rakelib / git.rb
blobc12e3962b679cc0df946721569762f90483aa8a9
1 def git_branch
2   `git branch | grep "*"`.strip[2..-1]
3 end
5 def compare_git_ver
6   m = /git version (\d+).(\d+).(\d+)/.match(`git version`.strip)
7   return true  if m[1].to_i > 1
8   return false if m[1].to_i < 1
9   return true  if m[2].to_i > 5
10   return false if m[2].to_i < 5
11   return true  if m[3].to_i >= 3
12   return false
13 end
15 def check_git_ver
16   raise "Invalid git version, use at least 1.5.3" unless compare_git_ver
17 end
19 def git_update
20   check_git_ver
21   `git diff-files --quiet`
22   if $?.exitstatus == 1
23     stash = true
24     clear = `git stash list`.scan("\n").size == 0
25     puts "* Saving changes..."
26     `git stash save`
27   else
28     stash = false
29   end
31   branch = git_branch()
32   if branch != "master"
33     switch = true
34     `git checkout master`
35     puts "* Switching back to master..."
36   else
37     switch = false
38   end
40   puts "* Pulling in new commits..."
41   sh "git fetch"
42   sh "git rebase origin"
44   if switch
45     puts "* Porting changes into #{branch}..."
46     `git checkout #{branch}`
47     sh "git rebase master"
48   end
50   if stash
51     puts "* Applying changes..."
52     sh "git stash apply"
53     `git stash clear` if clear
54   end
55 end
57 def git_push
58   branch = git_branch()
59   if branch != "master"
60     `git diff-files --quiet`
61     if $?.exitstatus == 1
62       puts "You have outstanding changes. Please commit them first."
63       exit 1
64     end
66     puts "* Merging topic '#{branch}' back into master..."
67     `git checkout master`
68     sh "git merge #{branch}"
69     switch = true
70   else
71     switch = false
72   end
74   puts "* Pushing changes..."
75   sh "git push"
77   if switch
78     puts "* Switching back to #{branch}..."
79     `git checkout #{branch}`
80   end
81 end