#!/usr/local/bin/perl -w
###########################################
# gitmeta-update - Update distributed
#   git repositories
# Mike Schilli, 2010 (m@perlmeister.com)
###########################################
use strict;
use GitMeta::GMF;
use Sysadm::Install qw(:all);
use File::Basename;
use Getopt::Std;
use Log::Log4perl qw(:easy);

getopts("vn", \my %opts);

if($opts{v}) {
  Log::Log4perl->easy_init($DEBUG);
}

my($gmf_repo, $gmf_path, 
   $local_dir) = @ARGV;

die "usage: $0 gmf-repo gmf-path local-dir" 
  unless defined $local_dir;

main();

###########################################
sub main {
###########################################
  my $gm = GitMeta::GMF->new(
    repo => $gmf_repo,
    gmf_path => $gmf_path );
  
  my @urls = $gm->expand();
  
  if($opts{n}) {
    for my $url ( @urls ) {
      print "$url\n";
    }
    return 1;
  }

  cd $local_dir;

  for my $url ( @urls ) {
    my $repo_dir = basename $url;
    $repo_dir =~ s/\.git$//g;
    if(-d $repo_dir) {
      cd $repo_dir;
      tap "git", "fetch", "origin";
      cdback;
    } else {
      tap "git", "clone", $url;
    }
  }
  return 1;
}
