App-RepoSync

 view release on metacpan or  search on metacpan

lib/App/RepoSync/Command/Export.pm  view on Meta::CPAN


    my ($export_file,@dirs) = @args;

    my $cwd = getcwd();

    $export_file ||= 'repos.yml';
    @dirs = getcwd() unless @dirs;

    my @data = ();
    for( @dirs ) {
        say "scanning $_";
        chdir $cwd;
        my @repos = App::RepoSync::Export->run( $_ );
        push @data, @repos;
    }

    chdir $cwd;

    say "writing $export_file...";
    YAML::DumpFile( $export_file , {
        version => 0.1,
        repos => \@data,
    });

    say "done. @{[ scalar @data ]} repositories exported.";
}



1;

lib/App/RepoSync/Export.pm  view on Meta::CPAN

use File::Find::Rule;
use File::Basename;
use Config::Tiny;
use App::RepoSync::SystemUtil qw(system_or_die chdir_qx);
use Term::ANSIColor;

sub parse_svn_info {
    my $cmd = shift || 'svn info';
    my $info;
    unless( $info = qx(LC_ALL=C $cmd 2> /dev/null ) ) {
        say 'svn: info failed: ' . getcwd;

        # if uprade is needed,
        my $ret = qx(LC_ALL=C $cmd 2>&1);
        if ($cmd eq 'svn info' && $ret =~ /svn upgrade/) {
            say "svn: try upgrading: " . getcwd;
            system_or_die('svn upgrade 2>&1 > /dev/null');
        }
    }

    unless( $info = qx(LC_ALL=C $cmd 2> /dev/null ) ) {
        say "svn: info still failed: " . getcwd;
        return;
    }

    my ($url) = ($info =~ m{URL: (\S+)});
    my ($revision) = ($info =~ m{Revision: (\S+)});
    return { 
        url      => $url,
        revision => $revision,
    };
}



( run in 0.574 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )