X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/2b2a47383124f9b62834778f61d2ccb1e55f6a0d..a01e3b490eb36ccf9e704840e1b6683dab867550:/packaging/git-status.pl?ds=sidebyside diff --git a/packaging/git-status.pl b/packaging/git-status.pl new file mode 100644 index 00000000..295018c9 --- /dev/null +++ b/packaging/git-status.pl @@ -0,0 +1,48 @@ +# 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] "; + $_ = ; + 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] "; + $_ = ; + 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;