]> git.xonotic.org Git - xonotic/div0-gittools.git/blobdiff - git-branch-manager
add a tool to identify the revision of current work tree or index by content
[xonotic/div0-gittools.git] / git-branch-manager
index 5e771ccd4e420740519e0e735122dc5709af0a78..42cea14ff012b56e9309e89b0ac1d27930f71e5d 100755 (executable)
@@ -137,7 +137,7 @@ sub reject_commit($)
                }
                open my $fh, '>', '.commitmsg'
                        or die ">.commitmsg: $!";
-               print $fh "REJECT\n$cmsg" . "::stable-branch::reject=$r\n"
+               print $fh "REJECT$cmsg" . "::stable-branch::reject=$r\n"
                        or die ">.commitmsg: $!";
                close $fh
                        or die ">.commitmsg: $!";
@@ -183,7 +183,7 @@ sub unreject_commit($)
                }
                open my $fh, '>', '.commitmsg'
                        or die ">.commitmsg: $!";
-               print $fh "UNREJECT\n$cmsg" . "::stable-branch::unreject=$r\n"
+               print $fh "UNREJECT$cmsg" . "::stable-branch::unreject=$r\n"
                        or die ">.commitmsg: $!";
                close $fh
                        or die ">.commitmsg: $!";
@@ -281,7 +281,7 @@ sub unmerge_commit($)
                }
                open my $fh, '>', '.commitmsg'
                        or die ">.commitmsg: $!";
-               print $fh "UNMERGE\n$cmsg" . "::stable-branch::unmerge=$r\n"
+               print $fh "UNMERGE$cmsg" . "::stable-branch::unmerge=$r\n"
                        or die ">.commitmsg: $!";
                close $fh
                        or die ">.commitmsg: $!";
@@ -416,27 +416,33 @@ sub parse_log()
                my $data = $logmsg{$_};
                if($data =~ /::stable-branch::unmerge=(\S+)/)
                {
+                       next if not defined $history{$1};
                        push @logdata, ['unmerge', $1];
                }
                elsif($data =~ /::stable-branch::merge=(\S+)/)
                {
+                       next if not defined $history{$1};
                        push @logdata, ['merge', $1];
                }
                elsif($data =~ /::stable-branch::reject=(\S+)/)
                {
+                       next if not defined $history{$1};
                        push @logdata, ['reject', $1];
                }
                elsif($data =~ /::stable-branch::unreject=(\S+)/)
                {
+                       next if not defined $history{$1};
                        push @logdata, ['unreject', $1];
                }
                elsif($data =~ /::stable-branch::reset=(\S+)/)
                {
+                       next if not defined $history{$1};
                        @logdata = ();
                        $base = $1;
                }
                elsif($data =~ /::stable-branch::rebase=(\S+)/)
                {
+                       next if not defined $history{$1};
                        $lastrebase->[0] = 'ignore'
                                if defined $lastrebase;
                        push @logdata, ($lastrebase = ['rebase', $1]);
@@ -648,13 +654,24 @@ sub opt_rebase($$)
        my $commit_id = $1;
        my $l = rebase_log $r, parse_log();
        local $pebkac = 0;
-       local $do_commit = 0;
        eval
        {
-               reset_to_commit $r;
-               run_script @{$l->{log}};
-               run 'git', 'commit', '--allow-empty', '-m', "::stable-branch::rebase=$r"
-                       or die "git-commit: $!";
+               if($cmd eq 'rebase')
+               {
+                       local $do_commit = 0;
+                       reset_to_commit $r;
+                       run_script @{$l->{log}};
+                       run 'git', 'commit', '--allow-empty', '-m', "::stable-branch::rebase=$r"
+                               or die "git-commit: $!";
+               }
+               elsif($cmd eq 'resetrebase')
+               {
+                       run_script ['reset', $r], @{$l->{log}};
+               }
+               elsif($cmd eq 'hardresetrebase')
+               {
+                       run_script ['hardreset', $r], @{$l->{log}};
+               }
                1;
        }
        or do
@@ -762,6 +779,8 @@ Usage:
        $0 {--reset|-R} revision-hash
        $0 {--hardreset|-H} revision-hash
        $0 {--rebase|-b} revision-hash
+       $0 {--resetrebase|-B} revision-hash
+       $0 {--hardresetrebase} revision-hash
 EOF
        exit 1;
 }
@@ -792,6 +811,8 @@ my $result = GetOptions(
        "log|l:s", handler \&opt_list,
        "outstanding|o:s", handler \&opt_list,
        "rebase|b=s", handler \&opt_rebase,
+       "resetrebase|B=s", handler \&opt_rebase,
+       "hardresetrebase=s", handler \&opt_rebase,
        "skip", handler \$skip,
        "merge|m=s{,}", handler sub { run_script ['merge', $_[1]]; },
        "unmerge|u=s{,}", handler sub { run_script ['unmerge', $_[1]]; },