Commit | Line | Data |
---|---|---|
a01e3b49 WD |
1 | # Do some git-status checking for the current dir and (optionally) |
2 | # the patches dir. | |
3 | ||
4 | sub check_git_state | |
5 | { | |
6 | my($master_branch, $fatal_unless_clean, $check_patches_dir) = @_; | |
7 | ||
8 | my($cur_branch) = check_git_status($fatal_unless_clean); | |
016ce715 WD |
9 | (my $branch = $cur_branch) =~ s{^patch/([^/]+)/[^/]+$}{$1}; # change patch/BRANCH/PATCH_NAME into BRANCH |
10 | if ($branch ne $master_branch) { | |
a01e3b49 WD |
11 | print "The checkout is not on the $master_branch branch.\n"; |
12 | exit 1 if $master_branch ne 'master'; | |
016ce715 | 13 | print "Do you want me to continue with --branch=$branch? [n] "; |
a01e3b49 WD |
14 | $_ = <STDIN>; |
15 | exit 1 unless /^y/i; | |
016ce715 | 16 | $_[0] = $master_branch = $branch; # Updates caller's $master_branch too. |
a01e3b49 WD |
17 | } |
18 | ||
19 | if ($check_patches_dir && -d 'patches/.git') { | |
016ce715 WD |
20 | ($branch) = check_git_status($fatal_unless_clean, 'patches'); |
21 | if ($branch ne $master_branch) { | |
22 | print "The *patches* checkout is on branch $branch, not branch $master_branch.\n"; | |
a01e3b49 WD |
23 | print "Do you want to change it to branch $master_branch? [n] "; |
24 | $_ = <STDIN>; | |
25 | exit 1 unless /^y/i; | |
26 | system "cd patches && git checkout '$master_branch'"; | |
27 | } | |
28 | } | |
016ce715 WD |
29 | |
30 | return $cur_branch; | |
a01e3b49 WD |
31 | } |
32 | ||
33 | sub check_git_status | |
34 | { | |
35 | my($fatal_unless_clean, $subdir) = @_; | |
36 | $subdir = '.' unless defined $subdir; | |
37 | my $status = `cd '$subdir' && git status`; | |
38 | my $is_clean = $status =~ /\nnothing to commit \(working directory clean\)/; | |
39 | my($cur_branch) = $status =~ /^# On branch (.+)\n/; | |
40 | if ($fatal_unless_clean && !$is_clean) { | |
41 | if ($subdir eq '.') { | |
42 | $subdir = ''; | |
43 | } else { | |
44 | $subdir = " *$subdir*"; | |
45 | } | |
46 | die "The$subdir checkout is not clean:\n", $status; | |
47 | } | |
48 | ($cur_branch, $is_clean, $status); | |
49 | } | |
50 | ||
51 | 1; |