merged cont.
[opensuse:yast-rest-service.git] / webyast-tasks / lib / tasks / git_check.rake
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 require 'rake'
20
21 desc "Check if the local repository has changes to be committed or pushed or merged with remote"
22 task :git_check do
23     puts "* Checking GIT repository status..."
24     puts "* Executing 'git fetch'..."
25     sh "git fetch"
26
27     # STEP 1: check the local changes
28     # run 'git status' command to get the current status of the repository
29     out = `git status`
30
31     # check changes in the index
32     if out =~ /new file:/
33         puts "ERROR: there is a new uncommited file"
34         puts "\nUse 'git commit' and 'git push' to commit the changes to the remote server.\n"
35         fail
36     end
37
38     if out =~ /modified:/
39         puts "ERROR: there is an uncommited change"
40         puts out
41         puts "\nUse 'git commit' and 'git push' to commit the changes to the remote server.\n"
42         fail
43     end
44
45     # Check the unpushed changes
46     if out =~ /Your branch is ahead of '.*' by .* commit/
47         puts "ERROR: The local repository has these changes:\n\n"
48         puts `git log origin..HEAD`
49         puts "\nUse 'git push' to push the local changes to the remote repository.\n"
50         fail
51     end
52
53     if out =~ /Your branch is behind '.*' by .* commit/
54         puts "ERROR: The remote repository has some changes.\n"
55         puts "\nUse 'git pull' to include newest changes into the local repository.\n"
56         fail
57     end
58
59     if out =~ /Your branch and '.*' have diverged/
60         puts "ERROR: Both local and remote repository have some changes.\n"
61         puts "\nUse 'git pull --rebase' to include newest changes into the local repository.\n"
62         fail
63     end
64 end