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 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;
diff --git a/dgit b/dgit
index ef608732f162de8b2a197446e4ce7e87807809ca..89f496d7e72f8a698a6d8bdbd7b817ad354edf4f 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 () {