aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MGA/Git.pm
diff options
context:
space:
mode:
authorNicolas Vigier <boklm@mars-attacks.org>2013-07-15 18:18:33 +0200
committerNicolas Vigier <boklm@mars-attacks.org>2013-07-15 18:18:33 +0200
commit852b1688fbf5129d0e365586b6d87a59fe31ba29 (patch)
tree8084da4d1af3a09cdce5d28dd8c8f8efd811d78d /lib/MGA/Git.pm
parent510d51e76a470039c11f9a20b8a2e4ae3dce1bb5 (diff)
downloadmgagit-852b1688fbf5129d0e365586b6d87a59fe31ba29.tar
mgagit-852b1688fbf5129d0e365586b6d87a59fe31ba29.tar.gz
mgagit-852b1688fbf5129d0e365586b6d87a59fe31ba29.tar.bz2
mgagit-852b1688fbf5129d0e365586b6d87a59fe31ba29.tar.xz
mgagit-852b1688fbf5129d0e365586b6d87a59fe31ba29.zip
In repos_config, allow giving a git_url instead of a directory path
The git url will be cloned automatically (if target directory does not exist), or pulled automatically.
Diffstat (limited to 'lib/MGA/Git.pm')
-rw-r--r--lib/MGA/Git.pm19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/MGA/Git.pm b/lib/MGA/Git.pm
index e051bb9..e518189 100644
--- a/lib/MGA/Git.pm
+++ b/lib/MGA/Git.pm
@@ -1,9 +1,11 @@
package MGA::Git;
use strict;
+use Git;
use YAML qw(LoadFile);
use Template;
use File::Slurp;
+use File::Basename;
use Net::LDAP;
use feature 'state';
use Data::Dump qw/dd/;
@@ -16,6 +18,19 @@ my $etc_config = LoadFile($etc_config_file);
sub load_gitrepos_dir {
my ($repos, $infos) = @_;
+ if (!$infos->{include_dir}) {
+ my ($dir) = fileparse($infos->{git_url});
+ $dir =~ s/\.git$//;
+ $infos->{include_dir} = "$config->{repodef_dir}/$dir";
+ if (-d $infos->{include_dir}) {
+ my $repo = Git->repository(Directory => $infos->{include_dir});
+ $repo->command('pull');
+ } else {
+ Git::command('clone', $infos->{git_url}, $infos->{include_dir});
+ my $repo = Git->repository(Directory => $infos->{include_dir});
+ $repo->command('remote', 'add', 'origin', $infos->{git_url});
+ }
+ }
opendir(my $dh, $infos->{include_dir})
|| die "Error opening $infos->{include_dir}: $!";
while (my $file = readdir($dh)) {
@@ -40,7 +55,9 @@ sub load_gitrepos {
my ($r) = @_;
$r->{repos} = {};
foreach my $repodef (@{$config->{repos_config}}) {
- load_gitrepos_dir($r->{repos}, $repodef) if $repodef->{include_dir};
+ if ($repodef->{include_dir} || $repodef->{git_url}) {
+ load_gitrepos_dir($r->{repos}, $repodef);
+ }
foreach my $repo ($repodef->{repos} ? @{$repodef->{repos}} : ()) {
my $name = "$repodef->{prefix}/$repo->{name}";
$r->{repos}{$name} = $repo;