From 38754aea954140ce4a0a4269ba57a1e9881033d4 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 17 Mar 2011 12:16:34 +0100 Subject: [PATCH 1/2] Return download ID in list_files Return the unique download ID in list_files as attribute "id" to allow for modifications on a single download. --- lib/Net/GitHub/Upload.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Net/GitHub/Upload.pm b/lib/Net/GitHub/Upload.pm index fceeda7..256288f 100644 --- a/lib/Net/GitHub/Upload.pm +++ b/lib/Net/GitHub/Upload.pm @@ -52,6 +52,8 @@ has download_scraper => ( date => '@title'; process '//p/strong', size => 'TEXT'; + process '//li/a', + id => '@href'; }; my $downloads = scraper { From ec23e640e0f42d6bff9b77b38887b7ff77912d46 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 17 Mar 2011 12:46:59 +0100 Subject: [PATCH 2/2] Implement delete method Implement a delete method for deleting previously uploaded files, either by name or by a HASH reference returned by list_files. --- lib/Net/GitHub/Upload.pm | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/lib/Net/GitHub/Upload.pm b/lib/Net/GitHub/Upload.pm index 256288f..9a9bb3f 100644 --- a/lib/Net/GitHub/Upload.pm +++ b/lib/Net/GitHub/Upload.pm @@ -105,6 +105,7 @@ sub upload { ); die qq[Failed to post file info: "@{[ $res->status_line ]}"] unless $res->is_success; +#" make vim happy my $upload_info = decode_json $res->content; @@ -140,6 +141,43 @@ sub upload { } } +sub delete { + my $self = shift; + my $info = @_ > 1 ? {@_} : $_[0]; + + die "required repository name" unless $info->{repos}; + $info->{repos} = $self->login . '/' . $info->{repos} unless $info->{repos} =~ m!/!; + + die qq[required 'name' or 'fileinfo' parameter to delete] + unless $info->{name} or $info->{fileinfo}; + + my $idpath = do { + if ($info->{fileinfo}) { + $info->{fileinfo}->{id} + } else { + my @ids = grep { $_->{name} eq $info->{name} } @{ $self->list_files( $info->{repos} ) || []}; + die qq[Multiple downloads matching "$info->{name}" found] if @ids > 1; + die qq[No download matching "$info->{name}" found] unless @ids; + ${ids[0]}->{id} + } + }; + + $idpath =~ s!^/!!; + + my $res = $self->ua->request( + POST "https://github.com/$idpath", + [ _method => "delete", + login => $self->login, + token => $self->token, + ], + ); + die qq[Failed to post file info: "@{[ $res->status_line ]}"] + unless $res->is_success || $res->is_redirect; +#" happy vim + + return 1; +} + sub list_files { my ($self, $repos) = @_; @@ -188,6 +226,13 @@ $github->upload( data => $data, ); + +# delete a previously uploaded file +$github->delete( + repos => 'username/repository', + name => 'filename', +); + =head1 DESCRIPTION Stub documentation for this module was created by ExtUtils::ModuleMaker.