NAME¶
Net::GitHub::V3::Repos - GitHub Repos API
SYNOPSIS¶
use Net::GitHub::V3;
my $gh = Net::GitHub::V3->new; # read L<Net::GitHub::V3> to set right authentication info
my $repos = $gh->repos;
# set :user/:repo for simple calls
$repos->set_default_user_repo('fayland', 'perl-net-github');
my @contributors = $repos->contributors; # don't need pass user and repos
DESCRIPTION¶
METHODS¶
Repos
<
http://developer.github.com/v3/repos/>
- list
- list_all
-
# All public repositories on Github
my @rp = $repos->list_all;
# starting at id 500
my @rp = $repos->list_all(500);
- list_user
- list_org
-
my @rp = $repos->list; # or my $rp = $repos->list;
my @rp = $repos->list({
type => 'private'
sort => 'updated'
});
my @rp = $repos->list_user('c9s');
my @rp = $repos->list_user('c9s', {
type => 'member'
});
my @rp = $repos->list_org('perlchina');
my @rp = $repos->list_org('perlchina', 'public');
- create
-
# create for yourself
my $rp = $repos->create( {
"name" => "Hello-World",
"description" => "This is your first repo",
"homepage" => "https://github.com"
} );
# create for organization
my $rp = $repos->create( {
"org" => "perlchina", ## the organization
"name" => "Hello-World",
"description" => "This is your first repo",
"homepage" => "https://github.com"
} );
- get
-
my $rp = $repos->get('fayland', 'perl-net-github');
To ease the keyboard, we provied two ways to call any method which starts
with :user/:repo
1. SET user/repos before call methods below
$gh->set_default_user_repo('fayland', 'perl-net-github'); # take effects for all $gh->
$repos->set_default_user_repo('fayland', 'perl-net-github'); # only take effect to $gh->repos
my @contributors = $repos->contributors;
2. If it is just for once, we can pass :user, :repo before any arguments
my @contributors = $repos->contributors($user, $repo);
- update
-
$repos->update({ homepage => 'https://metacpan.org/module/Net::GitHub' });
- delete
-
$repos->delete();
- contributors
- languages
- teams
- tags
- contributors
-
my @contributors = $repos->contributors;
my @languages = $repos->languages;
my @teams = $repos->teams;
my @tags = $repos->tags;
my @branches = $repos->branches;
my $branch = $repos->branch('master');
Repo Collaborators API
<
http://developer.github.com/v3/repos/collaborators/>
- collaborators
- is_collaborator
- add_collaborator
- delete_collaborator
-
my @collaborators = $repos->collaborators;
my $is = $repos->is_collaborator('fayland');
$repos->add_collaborator('fayland');
$repos->delete_collaborator('fayland');
Commits API
<
http://developer.github.com/v3/repos/commits/>
- commits
- commit
-
my @commits = $repos->commits;
my @commits = $repos->commits({
author => 'fayland'
});
my $commit = $repos->commit($sha);
- comments
- commit_comments
- create_comment
- comment
- update_comment
- delete_comment
-
my @comments = $repos->comments;
my @comments = $repos->commit_comments($sha);
my $comment = $repos->create_comment($sha, {
"body" => "Nice change",
"commit_id" => "6dcb09b5b57875f334f61aebed695e2e4193db5e",
"line" => 1,
"path" => "file1.txt",
"position" => 4
});
my $comment = $repos->comment($comment_id);
my $comment = $repos->update_comment($comment_id, {
"body" => "Nice change"
});
my $st = $repos->delete_comment($comment_id);
- compare_commits
-
my $diffs = $repos->compare_commits($base, $head);
Forks API
<
http://developer.github.com/v3/repos/forks/>
- forks
- create_fork
-
my @forks = $repos->forks;
my $fork = $repos->create_fork;
my $fork = $repos->create_fork($org);
Repos Deploy Keys API
<
http://developer.github.com/v3/repos/keys/>
- keys
- key
- create_key
- update_key
- delete_key
-
my @keys = $repos->keys;
my $key = $repos->key($key_id); # get key
$repos->create_key( {
title => 'title',
key => $key
} );
$repos->update_key($key_id, {
title => $title,
key => $key
});
$repos->delete_key($key_id);
Repo Watching API
<
http://developer.github.com/v3/repos/watching/>
- watchers
-
my @watchers = $repos->watchers;
- watched
-
my @repos = $repos->watched; # what I watched
my @repos = $repos->watched('c9s');
- is_watching
-
my $is_watching = $repos->is_watching;
my $is_watching = $repos->is_watching('fayland', 'perl-net-github');
- watch
- unwatch
-
my $st = $repos->watch();
my $st = $repos->watch('fayland', 'perl-net-github');
my $st = $repos->unwatch();
my $st = $repos->unwatch('fayland', 'perl-net-github');
Subscriptions
Github changed the ideas of Watchers (stars) and Subscriptions (new watchers).
https://github.com/blog/1204-notifications-stars
The Watchers code in this module predates the terminology change, so the new
Watcher methods use the GitHub 'subscription' terminology.
- subscribers
- Returns a list of subscriber data hashes.
- is_subscribed
- Returns true or false if you are subscribed
$repos->is_subscribed();
$repos->is_subscribed('fayland','perl-net-github');
- subscription
- Returns more information about your subscription to a repo. is_subscribed
is a shortcut to calling this and checking for subscribed => 1.
- subscribe
- Required argument telling github if you want to subscribe or if you want
to ignore mentions. If you want to change from subscribed to ignores you
need to unsubscribe first.
$repos->subscribe('fayland','perl-net-github', { subscribed => 1 })
$repos->subscribe('fayland','perl-net-github', { ignored => 1 })
- unsubscribe
-
$repos->unsubscribe('fayland','perl-net-github');
Hooks API
<
http://developer.github.com/v3/repos/hooks/>
- hooks
- hook
- create_hook
- update_hook
- test_hook
- delete_hook
-
my @hooks = $repos->hooks;
my $hook = $repos->hook($hook_id);
my $hook = $repos->create_hook($hook_hash);
my $hook = $repos->update_hook($hook_id, $new_hook_hash);
my $st = $repos->test_hook($hook_id);
my $st = $repos->delete_hook($hook_id);
Repo Merging API
<
http://developer.github.com/v3/repos/merging/>
- merges
-
my $status = $repos->merges( {
"base" => "master",
"head" => "cool_feature",
"commit_message" => "Shipped cool_feature!"
} );
Repo Statuses API
<
http://developer.github.com/v3/repos/statuses/>
- list_statuses
-
my @statuses = $repos->list_statuses($sha1);
- create_status
-
my $status = $repos->create_status( {
"state" => "success",
"target_url" => "https://example.com/build/status",
"description" => "The build succeeded!"
} );
Repo Releases API
<
http://developer.github.com/v3/repos/releases/>
- releases
-
my @releases = $repos->releases();
- release
-
my $release = $repos->release($release_id);
- create_release
-
my $release = $repos->create_release({
"tag_name" => "v1.0.0",
"target_commitish" => "master",
"name" => "v1.0.0",
"body" => "Description of the release",
"draft" => \1,
});
- update_release
-
my $release = $repos->update_release($release_id, {
"tag_name" => "v1.0.0",
"target_commitish" => "master",
"name" => "v1.0.0",
"body" => "Description of the release",
});
- delete_release
-
$repos->delete_release($release_id);
- release_assets
-
my @release_assets = $repos->release_assets($release_id);
- upload_asset
-
my $asset = $repos->upload_asset($release_id, $name, $content_type, $file_content);
Check examples/upload_asset.pl for a working example.
- release_asset
-
my $release_asset = $repos->release_asset($release_id, $asset_id);
- update_release_asset
-
my $release_asset = $repos->update_release_asset($release_id, $asset_id, {
name" => "foo-1.0.0-osx.zip",
"label" => "Mac binary"
});
- delete_release_asset
-
my $ok = $repos->delete_release_asset($release_id, $asset_id);
AUTHOR & COPYRIGHT & LICENSE¶
Refer Net::GitHub