chiark / gitweb /
fixes, including reflog
[topbloke.git] / Topbloke.pm
index b6de69022bd325306cdc6109394888c3507bebf6..215ae6bb0c631b218e096cbb16c34129b1c96ca9 100644 (file)
@@ -1,13 +1,15 @@
 # -*- perl -*-
 
+package Topbloke;
+
 use strict;
 use warnings;
 
 use POSIX;
 use IO::File;
 use IPC::Open2;
-
-package Topbloke;
+use File::Path qw(make_path remove_tree);
+use File::Basename;
 
 BEGIN {
     use Exporter   ();
@@ -18,7 +20,7 @@ BEGIN {
     @EXPORT      = qw(debug
                      run_git run_git_1line run_git_check_nooutput
                      run_git_test_anyoutput git_get_object
-                     git_config git_dir chdir_toplevel
+                     git_config git_dir chdir_toplevel enable_reflog
                      current_branch parse_patch_spec parse_patch_name
                      setup_config check_no_unwanted_metadata
                      patch_matches_spec
@@ -95,8 +97,7 @@ sub git_get_object ($) {
     my ($objname) = @_;
     our ($gro_pid, $gro_out, $gro_in);
     if (!$gro_pid) {
-       $gro_pid = IPC::Open2::open2($gro_out, $gro_in,
-                                    $git_command, qw(cat-file --batch))
+       $gro_pid = open2($gro_out, $gro_in, $git_command, qw(cat-file --batch))
            or die $!;
     }
     #debug("git_get_object $objname");
@@ -155,6 +156,16 @@ sub chdir_toplevel () {
     chdir $toplevel or die "chdir toplevel $toplevel: $!\n";
 }
 
+sub enable_reflog ($) {
+    my ($branchref) = @_;
+    $branchref =~ m#^refs/# or die;
+    my $logsdir = git_dir().'/logs/';
+    my $dirname = $logsdir.dirname($branchref);
+    make_path($dirname) or die "$dirname $!";
+    open REFLOG, '>>', $logsdir.$branchref or die "$logsdir$branchref $!";
+    close REFLOG or die $!;
+}    
+
 sub current_branch () {
     open R, git_dir().'/HEAD' or die "open HEAD $!";
     my $ref = <R>;  defined $ref or die $!;