chiark / gitweb /
git-playtree-setup: Rewrite in shell and call it from Perl
[dgit.git] / Debian / Dgit.pm
index 3f1d1b7bee630ddaca0d5dd52522e52f2b8f828b..9d4e78e18c2907ea47433cdd83982cedac5c3750 100644 (file)
@@ -1051,23 +1051,25 @@ sub playtree_setup (;$) {
     $t_local_git_cfg //= $local_git_cfg;
     # for use in the playtree
     # $maindir must be set, eg by calling record_maindir or fresh_playground
-    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;
-    }
     # this is confusing: we have
     #   .                   playtree, not a worktree, has .git/, our cwd
     #   $maindir            might be a worktree so
     #   $maindir_gitdir     contains our main working "dgit", HEAD, etc.
     #   $maindir_gitcommon  the shared stuff, including .objects
-    rmtree('.git/objects');
-    symlink "$maindir_gitcommon/objects",'.git/objects' or confess "$!";
+
+    # we need to invoke git-playtree-create via git because
+    # there may be config options it needs which are only available
+    # to us, sensibly, in @git
+
+    # And, we look for it in @INC too.  This is a bit perverse.
+    # We do this because in the Debian packages we want to have
+    # a copy of this script in each binary package, rather than
+    # making yet another .deb or tangling the dependencies.
+    # @INC is conveniently available.
+    my $newpath = join ':', +(grep { !m/:/ } @INC),
+                 '/usr/share/dgit', $ENV{PATH};
+    runcmd qw(env), "PATH=$newpath", @git, qw(playtree-create .);
+
     ensuredir '.git/info';
     open GA, "> .git/info/attributes" or confess "$!";
     print GA "* $negate_harmful_gitattrs\n" or confess "$!";