Index: Dev/github/GitHubBackup.pm
===================================================================
--- Dev/github/GitHubBackup.pm	(revision 6a2e5f186386b86e8823b156904d459c03fd1ddc)
+++ Dev/github/GitHubBackup.pm	(revision 19233f5160338c3b319363f09f759ce8b9e7605c)
@@ -22,4 +22,5 @@
 }
 
+
 package GitHubBackup;
 use base qw(Class::Accessor::Fast);
@@ -42,4 +43,8 @@
     
     my $args = (ref $_[0] eq 'HASH') ? $_[0] : {@_};
+    if (! $args->{directory}) {
+        $args->{directory} = ".";
+    }
+    
     return $class->SUPER::new($args);
 }
@@ -47,11 +52,13 @@
 sub repos {
     my $self = shift;
+    return $self->{repos} if ($self->{repos});
     
     my $account = $self->account or croak "account is not set";
     if (my $repository = $self->repository) {
         $self->{repos} = [
-            GitHubBackup::Repository->new(
-                {full_name => "$account/$repository"}
-            )
+            GitHubBackup::Repository->new({
+                __super   => $self,
+                full_name => "$account/$repository",
+            })
         ];
         
@@ -75,4 +82,5 @@
         push @{$self->{repos}},
             GitHubBackup::Repository->new({
+                __super   => $self,
                 full_name => $repos->{full_name},
                 clone_url => $repos->{clone_url},
@@ -92,4 +100,46 @@
 use utf8;
 use Carp qw(croak);
+use Git::Repository;
+use File::chdir;
+
+sub new {
+    my $class = shift;
+    my $args  = shift;
+    
+    if (! exists $args->{clone_url}) {
+        my $result = utils::json_api('/repos/' . $args->{full_name});
+        $args->{clone_url} = $result->{clone_url};
+    }
+    
+    return $class->SUPER::new($args);
+}
+
+sub clone_git {
+    my $self = shift;
+    
+    my $dir = $self->{__super}->directory .'/'. $self->{full_name};
+    if (-d "$dir") {
+        local $CWD = $dir;
+        print "fetch ", $self->{full_name}, "\n";
+        Git::Repository->run(fetch => '--all');
+        return $self;
+    }
+    
+    print "clone ", $self->{full_name}, "\n";
+    Git::Repository->run(clone => '--mirror' => $self->{clone_url} => $dir);
+    return $self;
+}
+
+sub set_forks {
+    my $self = shift;
+}
+
+sub clone_wiki {
+    my $self = shift;
+}
+
+sub save_issues {
+    my $self = shift;
+}
 
 
