diff options
Diffstat (limited to 'libpiny/lib/Piny/Repo.pm')
-rw-r--r-- | libpiny/lib/Piny/Repo.pm | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/libpiny/lib/Piny/Repo.pm b/libpiny/lib/Piny/Repo.pm index 134894c..cb3754f 100644 --- a/libpiny/lib/Piny/Repo.pm +++ b/libpiny/lib/Piny/Repo.pm @@ -382,7 +382,11 @@ sub all_repos { # Only sets up needed data; ->rebuild takes care of the rest. sub create { - my ( $class, $name, $description ) = @_; + my ( $class, $name, $description, $source ) = @_; + + if ( not defined $source) { + $source = Piny::Environment->config->piny_template; + }; my $user = Piny::Environment->instance->user; @@ -393,15 +397,15 @@ sub create { mkdir( $repo->path ) or die "The repo $name appears to already exist! ($!)"; - $ENV{"GIT_DIR"} = $repo->path; - system( "/usr/bin/git", "init", "--bare", "--quiet", "--shared" ) and die "Could not initialize git repo!"; - delete $ENV{"GIT_DIR"}; - -# if source repo is defined { -# $ENV{"GIT_DIR"} = $source; -# system( "/usr/bin/git", "push", "--mirror", $repo->path ) and die "Could not push refs to new repository!"; -# delete $ENV{"GIT_DIR"}; -# } + if ( defined $source ) { + $ENV{"GIT_DIR"} = $source; + system( "/usr/bin/git", "push", "--mirror", $repo->path ) and die "Could not push refs to new repository!"; + delete $ENV{"GIT_DIR"}; + } else { + $ENV{"GIT_DIR"} = $repo->path; + system( "/usr/bin/git", "init", "--bare", "--quiet", "--shared" ) and die "Could not initialize git repo!"; + delete $ENV{"GIT_DIR"}; + }; system( "/bin/chown", "-R", $user->name, $repo->path . "/objects" ) and die "Could not change ownership of $_ for repo: $!"; |