%EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO NOCOMMITCHECK)],
playground => [qw(record_maindir $maindir $local_git_cfg
$maindir_gitdir $maindir_gitcommon
- fresh_playground $playground
+ fresh_playground
ensure_a_playground)]);
@EXPORT_OK = ( @{ $EXPORT_TAGS{policyflags} },
@{ $EXPORT_TAGS{playground} } );
# terminology:
#
# $maindir user's git working tree
-# $playground area in .git/ where we can make files, unpack, etc. etc.
+# playground area in .git/ where we can make files, unpack, etc. etc.
# playtree git working tree sharing object store with the user's
# inside playground, or identical to it
#
#
# fresh_playground SUBDIR_PATH_COMPONENTS
# e.g fresh_playground 'dgit/unpack' ('.git/' is implied)
-# default SUBDIR_PATH_COMPONENTS is $playground_subdir
+# default SUBDIR_PATH_COMPONENTS is playground_subdir
# calls record_maindir
# sets up a new playground (destroying any old one)
-# assigns to $playground and returns the same pathname
+# returns playground pathname
# caller may call multiple times with different subdir paths
-# createing different playgrounds; but $playground global can
-# refer only to one, obv.
+# createing different playgrounds
#
# ensure_a_playground SUBDIR_PATH_COMPONENTS
# like fresh_playground except:
# merely ensures the directory exists; does not delete an existing one
-# never sets global $playground
#
# then can use
#
-# changedir $playground
+# changedir playground
# changedir $maindir
#
# playtree_setup $local_git_cfg
-# # ^ call in some (perhaps trivial) subdir of $playground
+# # ^ call in some (perhaps trivial) subdir of playground
#
-# rmtree $playground
+# rmtree playground
# ----- maindir -----
# ----- playgrounds -----
-our $playground;
-
sub ensure_a_playground_parent ($) {
my ($spc) = @_;
record_maindir();
my ($spc) = @_;
$spc = ensure_a_playground_parent $spc;
rmtree $spc;
- mkdir $spc or die "$spc $!";
- return $playground = $spc;
+ mkdir $spc or fail "failed to mkdir the playground $spc: $!";
+ return $spc;
}
# ----- playtrees -----
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/.git/objects",'.git/objects' or die $!;
+ symlink "$maindir_gitcommon/objects",'.git/objects' or die $!;
ensuredir '.git/info';
open GA, "> .git/info/attributes" or die $!;
print GA "* $negate_harmful_gitattrs\n" or die $!;