X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=git-debrebase;h=592dd292f4fe7ecdfa77a5b53a5b1dbbc50fa1e1;hp=47a5712e35125ef3040387236854c1fa6ea9d518;hb=a865af47e6e6dc6160812fa0cdfbcb4d57f38723;hpb=8618ddfd0724f66e260e50f0b4dc39a8d85be220 diff --git a/git-debrebase b/git-debrebase index 47a5712e..592dd292 100755 --- a/git-debrebase +++ b/git-debrebase @@ -100,7 +100,7 @@ sub badusage ($) { sub cfg ($;$) { my ($k, $optional) = @_; - $/ = "\0"; + local $/ = "\0"; my @cmd = qw(git config -z); push @cmd, qw(--get-all) if wantarray; push @cmd, $k; @@ -795,7 +795,10 @@ sub walk ($;$$) { return @r } -sub get_head () { return git_rev_parse qw(HEAD); } +sub get_head () { + git_check_unmodified(); + return git_rev_parse qw(HEAD); +} sub update_head ($$$) { my ($old, $new, $mrest) = @_; @@ -831,7 +834,6 @@ sub defaultcmd_rebase () { my $old = get_head(); my ($tip,$breakwater) = walk $old; update_head_postlaunder $old, $tip, 'launder for rebase'; - @ARGV = qw(-i) unless @ARGV; # make configurable runcmd @git, qw(rebase), @ARGV, $breakwater; } @@ -842,12 +844,26 @@ sub cmd_analyse () { if (defined $old) { $old = git_rev_parse $old; } else { - $old = get_head(); + $old = git_rev_parse 'HEAD'; } my ($dummy,$breakwater) = walk $old, 1,*STDOUT; STDOUT->error and die $!; } +sub ffq_prev_branchinfo () { + # => ('status', "message", [$current, $ffq_prev]) + # 'status' may be + # branch message is undef + # weird-symref } no $current, + # notbranch } no $ffq_prev + my $current = git_get_symref(); + return ('detached', 'detached HEAD') unless defined $current; + return ('weird-symref', 'HEAD symref is not to refs/') + unless $current =~ m{^refs/}; + my $ffq_prev = "refs/$ffq_refprefix/$'"; + return ('branch', undef, $current, $ffq_prev); +} + sub record_ffq_prev () { # => ('status', "message") # 'status' may be @@ -859,11 +875,8 @@ sub record_ffq_prev () { # if not ff from some branch we should be ff from, is an fproblem # if "written", will have printed something about that to stdout, # and also some messages about ff checks - my $current = git_get_symref(); - return ('detached', 'detached HEAD') unless defined $current; - return ('weird-symref', 'HEAD symref is not to refs/') - unless $current =~ m{^refs/}; - my $ffq_prev = "refs/$ffq_refprefix/$'"; + my ($status, $message, $current, $ffq_prev) = ffq_prev_branchinfo(); + return ($status, $message) unless $status eq 'branch'; my $currentval = get_head(); @@ -929,7 +942,6 @@ sub record_ffq_prev () { } sub cmd_new_upstream_v0 () { - # tree should be clean and this is not checked # automatically and unconditionally launders before rebasing # if rebase --abort is used, laundering has still been done @@ -1180,7 +1192,7 @@ sub cmd_gbp2debrebase () { # rebase the patch queue onto the new breakwater runcmd @git, qw(reset --quiet --hard patch-queue/gdr-internal); runcmd @git, qw(rebase --quiet --onto), $work, qw(gdr-internal); - $work = get_head(); + $work = git_rev_parse 'HEAD'; }; update_head_checkout $old_head, $work, 'gbp2debrebase';