diff options
Diffstat (limited to 'Debian/Dgit.pm')
-rw-r--r-- | Debian/Dgit.pm | 26 |
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; |