Changeset 19233f5 in lab.git for Dev


Ignore:
Timestamp:
Aug 18, 2013 3:21:49 AM (11 years ago)
Author:
Ken-ichi Mito <mitty@…>
Branches:
master
Children:
b8d7413
Parents:
6a2e5f1
Message:

GitHubBackup module for backup github project

  • work in progress
  • done with GitHubBackup::Repository->clone_git()
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Dev/github/GitHubBackup.pm

    r6a2e5f1 r19233f5  
    2222} 
    2323 
     24 
    2425package GitHubBackup; 
    2526use base qw(Class::Accessor::Fast); 
     
    4243     
    4344    my $args = (ref $_[0] eq 'HASH') ? $_[0] : {@_}; 
     45    if (! $args->{directory}) { 
     46        $args->{directory} = "."; 
     47    } 
     48     
    4449    return $class->SUPER::new($args); 
    4550} 
     
    4752sub repos { 
    4853    my $self = shift; 
     54    return $self->{repos} if ($self->{repos}); 
    4955     
    5056    my $account = $self->account or croak "account is not set"; 
    5157    if (my $repository = $self->repository) { 
    5258        $self->{repos} = [ 
    53             GitHubBackup::Repository->new( 
    54                 {full_name => "$account/$repository"} 
    55             ) 
     59            GitHubBackup::Repository->new({ 
     60                __super   => $self, 
     61                full_name => "$account/$repository", 
     62            }) 
    5663        ]; 
    5764         
     
    7582        push @{$self->{repos}}, 
    7683            GitHubBackup::Repository->new({ 
     84                __super   => $self, 
    7785                full_name => $repos->{full_name}, 
    7886                clone_url => $repos->{clone_url}, 
     
    92100use utf8; 
    93101use Carp qw(croak); 
     102use Git::Repository; 
     103use File::chdir; 
     104 
     105sub new { 
     106    my $class = shift; 
     107    my $args  = shift; 
     108     
     109    if (! exists $args->{clone_url}) { 
     110        my $result = utils::json_api('/repos/' . $args->{full_name}); 
     111        $args->{clone_url} = $result->{clone_url}; 
     112    } 
     113     
     114    return $class->SUPER::new($args); 
     115} 
     116 
     117sub clone_git { 
     118    my $self = shift; 
     119     
     120    my $dir = $self->{__super}->directory .'/'. $self->{full_name}; 
     121    if (-d "$dir") { 
     122        local $CWD = $dir; 
     123        print "fetch ", $self->{full_name}, "\n"; 
     124        Git::Repository->run(fetch => '--all'); 
     125        return $self; 
     126    } 
     127     
     128    print "clone ", $self->{full_name}, "\n"; 
     129    Git::Repository->run(clone => '--mirror' => $self->{clone_url} => $dir); 
     130    return $self; 
     131} 
     132 
     133sub set_forks { 
     134    my $self = shift; 
     135} 
     136 
     137sub clone_wiki { 
     138    my $self = shift; 
     139} 
     140 
     141sub save_issues { 
     142    my $self = shift; 
     143} 
    94144 
    95145 
Note: See TracChangeset for help on using the changeset viewer.