chiark / gitweb /
Dgit.pm: workarea_setup: Break out from dgit
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 10 Jul 2017 10:30:51 +0000 (11:30 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 18 Jul 2017 21:08:43 +0000 (22:08 +0100)
This subroutine needs a hash of the main tree's git config, so that
some of the config settings which affect the object store can be
properly honoured.

Purely code motion, except for the changed reference to $gitcfgs.
No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Debian/Dgit.pm
dgit

index 6977ed2..aef0112 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;
diff --git a/dgit b/dgit
index ef60873..89f496d 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -1705,22 +1705,7 @@ sub prep_ud (;$) {
 }
 
 sub mktree_in_ud_here () {
-    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 = $gitcfgs{local}{$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 $!;
+    workarea_setup $gitcfgs{local};
 }
 
 sub git_write_tree () {