+my @INIT_FILES = ('HEAD' => "ref: refs/heads/master\n",
+ 'description' => <<EOD,
+Unnamed repository; edit this file 'description' to name the repository.
+EOD
+ 'config' => <<EOC);
+[core]
+ repositoryFormatVersion = 0
+ filemode = true
+ bare = true
+[repack]
+ writeBitmaps = true
+EOC
+
+sub init_bare {
+ my ($dir) = @_; # or self
+ $dir = $dir->{git}->{git_dir} if ref($dir);
+ require File::Path;
+ File::Path::mkpath([ map { "$dir/$_" } qw(objects/info refs/heads) ]);
+ for (my $i = 0; $i < @INIT_FILES; $i++) {
+ my $f = $dir.'/'.$INIT_FILES[$i++];
+ next if -f $f;
+ open my $fh, '>', $f or die "open $f: $!";
+ print $fh $INIT_FILES[$i] or die "print $f: $!";
+ close $fh or die "close $f: $!";
+ }
+}
+