12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- # Do some git-status checking for the current dir and (optionally)
- # the patches dir.
- sub check_git_state
- {
- my($master_branch, $fatal_unless_clean, $check_patches_dir) = @_;
- my($cur_branch) = check_git_status($fatal_unless_clean);
- if ($cur_branch ne $master_branch) {
- print "The checkout is not on the $master_branch branch.\n";
- exit 1 if $master_branch ne 'master';
- print "Do you want me to continue with --branch=$cur_branch? [n] ";
- $_ = <STDIN>;
- exit 1 unless /^y/i;
- $_[0] = $master_branch = $cur_branch; # Updates caller's $master_branch too.
- }
- if ($check_patches_dir && -d 'patches/.git') {
- ($cur_branch) = check_git_status($fatal_unless_clean, 'patches');
- if ($cur_branch ne $master_branch) {
- print "The *patches* checkout is on branch $cur_branch, not branch $master_branch.\n";
- print "Do you want to change it to branch $master_branch? [n] ";
- $_ = <STDIN>;
- exit 1 unless /^y/i;
- system "cd patches && git checkout '$master_branch'";
- }
- }
- }
- sub check_git_status
- {
- my($fatal_unless_clean, $subdir) = @_;
- $subdir = '.' unless defined $subdir;
- my $status = `cd '$subdir' && git status`;
- my $is_clean = $status =~ /\nnothing to commit \(working directory clean\)/;
- my($cur_branch) = $status =~ /^# On branch (.+)\n/;
- if ($fatal_unless_clean && !$is_clean) {
- if ($subdir eq '.') {
- $subdir = '';
- } else {
- $subdir = " *$subdir*";
- }
- die "The$subdir checkout is not clean:\n", $status;
- }
- ($cur_branch, $is_clean, $status);
- }
- 1;
|