summaryrefslogtreecommitdiff
path: root/Debian
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-07-10 11:30:51 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2017-07-18 22:08:43 +0100
commit0b0c7e0ce2f0f17cacef7eb3159fc9de1850bf37 (patch)
treef89d4891a5a0d75eca999004e9fcf588722fba9f /Debian
parentc697bd52ce3b595cc38bc8385e8a457082c20b8c (diff)
Dgit.pm: workarea_setup: Break out from dgit
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>
Diffstat (limited to 'Debian')
-rw-r--r--Debian/Dgit.pm26
1 files changed, 25 insertions, 1 deletions
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm
index 6977ed2..aef0112 100644
--- a/Debian/Dgit.pm
+++ b/Debian/Dgit.pm
@@ -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;