chiark / gitweb /
Dgit.pm: workarea_setup: Break out from dgit
[dgit.git] / Debian / Dgit.pm
index 6977ed21d36781d1246e83617f9921cf20d18787..aef0112aebb975ce49cca55699808fbe6cf99922 100644 (file)
@@ -29,6 +29,7 @@ use Config;
 use Digest::SHA;
 use Data::Dumper;
 use IPC::Open2;
+use File::Path;
 
 BEGIN {
     use Exporter   ();
@@ -56,7 +57,8 @@ BEGIN {
                       printdebug debugcmd
                       $debugprefix *debuglevel *DEBUG
                       shellquote printcmd messagequote
-                      $negate_harmful_gitattrs);
+                      $negate_harmful_gitattrs
+                      workarea_setup);
     # implicitly uses $main::us
     %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO NOCOMMITCHECK)] );
     @EXPORT_OK   = @{ $EXPORT_TAGS{policyflags} };
@@ -415,4 +417,26 @@ sub is_fast_fwd ($$) {
     }
 }
 
+sub workarea_setup ($) {
+    # for use in the workarea
+    my ($t_local_git_cfg) = @_;
+    # should be run in a directory .git/FOO/BAR of a working tree
+    runcmd qw(git init -q);
+    runcmd qw(git config gc.auto 0);
+    foreach my $copy (qw(user.email user.name user.useConfigOnly
+                         core.sharedRepository
+                         core.compression core.looseCompression
+                         core.bigFileThreshold core.fsyncObjectFiles)) {
+       my $v = $t_local_git_cfg->{$copy};
+       next unless $v;
+       runcmd qw(git config), $copy, $_ foreach @$v;
+    }
+    rmtree('.git/objects');
+    symlink '../../../../objects','.git/objects' or die $!;
+    ensuredir '.git/info';
+    open GA, "> .git/info/attributes" or die $!;
+    print GA "* $negate_harmful_gitattrs\n" or die $!;
+    close GA or die $!;
+}
+
 1;