# assert repo.owner.login == "nitlang"
# assert repo.default_branch == "master"
# ~~~
- fun get_repo(full_name: String): nullable Repo do
- return get("/repos/{full_name}").as(nullable Repo)
+ fun get_repo(repo_slug: String): nullable Repo do
+ return get("/repos/{repo_slug}").as(nullable Repo)
end
# List of repo branches.
# Pagination:
# * `page`: page to fetch (default: 1)
# * `per_page`: number of branches by page (default: 30)
- fun get_repo_branches(repo: Repo, page, per_page: nullable Int): Array[Branch] do
+ fun get_repo_branches(repo_slug: String, page, per_page: nullable Int): Array[Branch] do
return new GithubArray[Branch].from(get(
- "/repos/{repo.full_name}/branches?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/branches?{pagination(page, per_page)}"))
end
# List of issues associated with their ids.
- fun get_repo_issues(repo: Repo, page, per_page: nullable Int): Array[Issue] do
+ fun get_repo_issues(repo_slug: String, page, per_page: nullable Int): Array[Issue] do
return new GithubArray[Issue].from(get(
- "/repos/{repo.full_name}/issues?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/issues?{pagination(page, per_page)}"))
end
# Search issues in this repo form an advanced query.
# ~~~
#
# See <https://developer.github.com/v3/search/#search-issues>.
- fun search_repo_issues(repo: Repo, query: String, page, per_page: nullable Int): nullable SearchResults do
- return get("/search/issues?q={query} repo:{repo.full_name}&{pagination(page, per_page)}").as(nullable SearchResults)
+ fun search_repo_issues(repo_slug: String, query: String, page, per_page: nullable Int): nullable SearchResults do
+ return get("/search/issues?q={query} repo:{repo_slug}&{pagination(page, per_page)}").as(nullable SearchResults)
end
# List of labels associated with their names.
- fun get_repo_labels(repo: Repo, page, per_page: nullable Int): Array[Label] do
+ fun get_repo_labels(repo_slug: String, page, per_page: nullable Int): Array[Label] do
return new GithubArray[Label].from(get(
- "/repos/{repo.full_name}/labels?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/labels?{pagination(page, per_page)}"))
end
# List of milestones associated with their ids.
- fun get_repo_milestones(repo: Repo, page, per_page: nullable Int): Array[Milestone] do
+ fun get_repo_milestones(repo_slug: String, page, per_page: nullable Int): Array[Milestone] do
return new GithubArray[Milestone].from(get(
- "/repos/{repo.full_name}/milestones?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/milestones?{pagination(page, per_page)}"))
end
# List of pull-requests associated with their ids.
# Implementation notes: because PR numbers are not consecutive,
# PR are loaded from pages.
# See: https://developer.github.com/v3/pulls/#list-pull-requests
- fun get_repo_pulls(repo: Repo, page, per_page: nullable Int): Array[PullRequest] do
+ fun get_repo_pulls(repo_slug: String, page, per_page: nullable Int): Array[PullRequest] do
return new GithubArray[PullRequest].from(get(
- "/repos/{repo.full_name}/pulls?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/pulls?{pagination(page, per_page)}"))
end
# List of contributor related statistics.
- fun get_repo_contrib_stats(repo: Repo): Array[ContributorStats] do
- message(1, "Get contributor stats for {repo.full_name}")
+ fun get_repo_contrib_stats(repo_slug: String): Array[ContributorStats] do
+ message(1, "Get contributor stats for {repo_slug}")
var res = new Array[ContributorStats]
- var array = get("/repos/{repo.full_name}/stats/contributors")
+ var array = get("/repos/{repo_slug}/stats/contributors")
if not array isa JsonArray then return res
return deserialize(array.to_json).as(Array[ContributorStats])
end
# assert branch.name == "master"
# assert branch.commit isa Commit
# ~~~
- fun get_branch(repo: Repo, name: String): nullable Branch do
- return get("/repos/{repo.full_name}/branches/{name}").as(nullable Branch)
+ fun get_branch(repo_slug: String, name: String): nullable Branch do
+ return get("/repos/{repo_slug}/branches/{name}").as(nullable Branch)
end
# Get the Github commit with `sha`.
# var commit = api.get_commit(repo, "64ce1f")
# assert commit isa Commit
# ~~~
- fun get_commit(repo: Repo, sha: String): nullable Commit do
- return get("/repos/{repo.full_name}/commits/{sha}").as(nullable Commit)
+ fun get_commit(repo_slug: String, sha: String): nullable Commit do
+ return get("/repos/{repo_slug}/commits/{sha}").as(nullable Commit)
end
# Get the Github issue #`number`.
# var issue = api.get_issue(repo, 1)
# assert issue.title == "Doc"
# ~~~
- fun get_issue(repo: Repo, number: Int): nullable Issue do
- return get("/repos/{repo.full_name}/issues/{number}").as(nullable Issue)
+ fun get_issue(repo_slug: String, number: Int): nullable Issue do
+ return get("/repos/{repo_slug}/issues/{number}").as(nullable Issue)
end
# List of event on this issue.
- fun get_issue_comments(repo: Repo, issue: Issue, page, per_page: nullable Int): Array[IssueComment] do
+ fun get_issue_comments(repo_slug: String, issue_number: Int, page, per_page: nullable Int): Array[IssueComment] do
return new GithubArray[IssueComment].from(get(
- "/repos/{repo.full_name}/issues/{issue.number}/comments?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/issues/{issue_number}/comments?{pagination(page, per_page)}"))
end
# List of events on this issue.
- fun get_issue_events(repo: Repo, issue: Issue, page, per_page: nullable Int): Array[IssueEvent] do
+ fun get_issue_events(repo_slug: String, issue_number: Int, page, per_page: nullable Int): Array[IssueEvent] do
return new GithubArray[IssueEvent].from(get(
- "/repos/{repo.full_name}/issues/{issue.number}/events?{pagination(page, per_page)}"))
+ "/repos/{repo_slug}/issues/{issue_number}/events?{pagination(page, per_page)}"))
end
# Get the Github pull request #`number`.
# assert pull.title == "Doc"
# assert pull.user.login == "Morriar"
# ~~~
- fun get_pull(repo: Repo, number: Int): nullable PullRequest do
- return get("/repos/{repo.full_name}/pulls/{number}").as(nullable PullRequest)
+ fun get_pull(repo_slug: String, number: Int): nullable PullRequest do
+ return get("/repos/{repo_slug}/pulls/{number}").as(nullable PullRequest)
end
# Get the Github label with `name`.
# var labl = api.get_label(repo, "ok_will_merge")
# assert labl != null
# ~~~
- fun get_label(repo: Repo, name: String): nullable Label do
- return get("/repos/{repo.full_name}/labels/{name}").as(nullable Label)
+ fun get_label(repo_slug: String, name: String): nullable Label do
+ return get("/repos/{repo_slug}/labels/{name}").as(nullable Label)
end
# Get the Github milestone with `id`.
# var stone = api.get_milestone(repo, 4)
# assert stone.title == "v1.0prealpha"
# ~~~
- fun get_milestone(repo: Repo, id: Int): nullable Milestone do
- return get("/repos/{repo.full_name}/milestones/{id}").as(nullable Milestone)
+ fun get_milestone(repo_slug: String, id: Int): nullable Milestone do
+ return get("/repos/{repo_slug}/milestones/{id}").as(nullable Milestone)
end
# Get the Github issue event with `id`.
# assert event.labl isa Label
# assert event.labl.name == "need_review"
# ~~~
- fun get_issue_event(repo: Repo, id: Int): nullable IssueEvent do
- return get("/repos/{repo.full_name}/issues/events/{id}").as(nullable IssueEvent)
+ fun get_issue_event(repo_slug: String, id: Int): nullable IssueEvent do
+ return get("/repos/{repo_slug}/issues/events/{id}").as(nullable IssueEvent)
end
# Get the Github commit comment with `id`.
# assert comment.body == "For testing purposes...\n"
# assert comment.commit_id == "7eacb86d1e24b7e72bc9ac869bf7182c0300ceca"
# ~~~
- fun get_commit_comment(repo: Repo, id: Int): nullable CommitComment do
- return get("/repos/{repo.full_name}/comments/{id}").as(nullable CommitComment)
+ fun get_commit_comment(repo_slug: String, id: Int): nullable CommitComment do
+ return get("/repos/{repo_slug}/comments/{id}").as(nullable CommitComment)
end
# Get the Github issue comment with `id`.
# assert comment.created_at.to_s == "2012-05-30T20:16:54Z"
# assert comment.issue_number == 10
# ~~~
- fun get_issue_comment(repo: Repo, id: Int): nullable IssueComment do
- return get("/repos/{repo.full_name}/issues/comments/{id}").as(nullable IssueComment)
+ fun get_issue_comment(repo_slug: String, id: Int): nullable IssueComment do
+ return get("/repos/{repo_slug}/issues/comments/{id}").as(nullable IssueComment)
end
# Get the Github diff comment with `id`.
# assert comment.original_position == 26
# assert comment.pull_number == 945
# ~~~
- fun get_review_comment(repo: Repo, id: Int): nullable ReviewComment do
- return get("/repos/{repo.full_name}/pulls/comments/{id}").as(nullable ReviewComment)
+ fun get_review_comment(repo_slug: String, id: Int): nullable ReviewComment do
+ return get("/repos/{repo_slug}/pulls/comments/{id}").as(nullable ReviewComment)
end
private fun pagination(page, per_page: nullable Int): String do
return new IssueEventRepo(config.db.collection("issue_events"))
end
- fun start(repo_full_name: String) do
- var job = jobs.find_by_id(repo_full_name)
+ fun start(repo_slug: String) do
+ var job = jobs.find_by_id(repo_slug)
if job == null then
- log.info "Creating new job for `{repo_full_name}`"
- job = add_job(repo_full_name)
+ log.info "Creating new job for `{repo_slug}`"
+ job = add_job(repo_slug)
else
- log.info "Resuming pending job for `{repo_full_name}`"
+ log.info "Resuming pending job for `{repo_slug}`"
end
print "Load history for {job}..."
get_branches(job)
finish_job(job)
end
- fun remove(repo_full_name: String) do
- var job = jobs.find_by_id(repo_full_name)
+ fun remove(repo_slug: String) do
+ var job = jobs.find_by_id(repo_slug)
if job == null then
- log.info "No job found for `{repo_full_name}`"
+ log.info "No job found for `{repo_slug}`"
else
- jobs.remove_by_id(repo_full_name)
- log.info "Deleted job for `{repo_full_name}`"
+ jobs.remove_by_id(repo_slug)
+ log.info "Deleted job for `{repo_slug}`"
end
end
end
# Add a new job
- fun add_job(repo_full_name: String): LoaderJob do
- var repo = config.wallet.api.get_repo(repo_full_name)
+ fun add_job(repo_slug: String): LoaderJob do
+ var repo = config.wallet.api.get_repo(repo_slug)
assert repo != null else
- error "Repository `{repo_full_name}` not found"
+ error "Repository `{repo_slug}` not found"
end
repos.save repo
var job = new LoaderJob(repo, config.start_from_issue)
var api = config.wallet.api
var repo = job.repo
- for branch in api.get_repo_branches(repo) do
+ for branch in api.get_repo_branches(repo.full_name) do
branch.repo = repo
branches.save branch
get_commits(job, branch)
fun get_commit(job: LoaderJob, commit_sha: String) do
if commits.find_by_id(commit_sha) != null then return
var api = config.wallet.api
- var commit = api.get_commit(job.repo, commit_sha)
+ var commit = api.get_commit(job.repo.full_name, commit_sha)
# print commit or else "NULL"
if commit == null then return
var message = commit.message or else "no message"
if issues.find_by_id("{job.repo.mongo_id}/{issue_number}") != null then return
var api = config.wallet.api
- var issue = api.get_issue(job.repo, issue_number)
+ var issue = api.get_issue(job.repo.full_name, issue_number)
assert issue != null else
check_error(api, "Issue #{issue_number} not found")
end
private fun get_issue_comments(job: LoaderJob, issue: Issue) do
if config.no_comments then return
var api = config.wallet.api
- for comment in api.get_issue_comments(job.repo, issue) do
+ for comment in api.get_issue_comments(job.repo.full_name, issue.number) do
comment.repo = job.repo
issue_comments.save comment
end
if config.no_events then return
var api = config.wallet.api
- for event in api.get_issue_events(job.repo, issue) do
+ for event in api.get_issue_events(job.repo.full_name, issue.number) do
event.repo = job.repo
issue_events.save event
end
# Load a pull request or abort.
private fun get_pull(job: LoaderJob, issue: Issue): PullRequest do
var api = config.wallet.api
- var pr = api.get_pull(job.repo, issue.number)
+ var pr = api.get_pull(job.repo.full_name, issue.number)
assert pr != null else
check_error(api, "Pull request #{issue.number} not found")
end
if config.no_events then return
var api = config.wallet.api
- for event in api.get_issue_events(job.repo, pull) do
+ for event in api.get_issue_events(job.repo.full_name, pull.number) do
event.repo = job.repo
issue_events.save event
end
assert repo.default_branch == "master"
end
- private var repo: Repo is lazy do return api.get_repo("nitlang/nit").as(not null)
-
fun test_get_branches is test do
- var branches = api.get_repo_branches(repo, 1, 2)
+ var branches = api.get_repo_branches("nitlang/nit", 1, 2)
assert branches.length == 2
assert branches.first.name == "master"
assert branches.last.name == "next"
end
fun test_get_issues is test do
- var issues = api.get_repo_issues(repo, 1, 3)
+ var issues = api.get_repo_issues("nitlang/nit", 1, 3)
assert issues.length == 3
assert issues.first.title == "nitrpg: Move `nitrpg` to its own repository"
assert issues.last.title == "Mock Github API tests"
end
fun test_search_issues is test do
- var results = api.search_repo_issues(repo, "foo", 1, 3)
+ var results = api.search_repo_issues("nitlang/nit", "foo", 1, 3)
assert results isa SearchResults
assert results.items.length == 3
assert results.items.first.as(Issue).title == "Introduction of contracts in Nit"
end
fun test_get_labels is test do
- var labels = api.get_repo_labels(repo, 1, 3)
+ var labels = api.get_repo_labels("nitlang/nit", 1, 3)
assert labels.length == 3
assert labels.first.name == "API"
assert labels.last.name == "NEP"
end
fun test_get_milestones is test do
- var milestones = api.get_repo_milestones(repo, 1, 3)
+ var milestones = api.get_repo_milestones("nitlang/nit", 1, 3)
assert milestones.length == 3
assert milestones.first.title == "v1.0prealpha"
assert milestones.last.title == "nitdoc - Abstraction levels"
end
fun test_get_pulls is test do
- var pulls = api.get_repo_pulls(repo, 1, 3)
+ var pulls = api.get_repo_pulls("nitlang/nit", 1, 3)
assert pulls.length == 3
assert pulls.first.title == "nitrpg: Move `nitrpg` to its own repository"
assert pulls.last.title == "Mock Github API tests"
# TODO contrib_stats
fun test_get_branch is test do
- var branch = api.get_branch(repo, "master")
+ var branch = api.get_branch("nitlang/nit", "master")
assert branch isa Branch
assert branch.name == "master"
end
fun test_get_commit is test do
- var commit = api.get_commit(repo, "64ce1f")
+ var commit = api.get_commit("nitlang/nit", "64ce1f")
assert commit isa Commit
assert commit.sha == "64ce1f587209024f5de46d06c70526a569ff537f"
# TODO other fields
end
fun test_get_issue is test do
- var issue = api.get_issue(repo, 1000)
+ var issue = api.get_issue("nitlang/nit", 1000)
assert issue isa Issue
assert issue.number == 1000
assert issue.title == "Raise nitc from the dead"
end
fun test_get_issue_comments is test do
- var issue = api.get_issue(repo, 1000)
- assert issue isa Issue
- var comments = api.get_issue_comments(repo, issue, 1, 3)
+ var comments = api.get_issue_comments("nitlang/nit", 1000, 1, 3)
assert comments.length == 3
assert comments.first.user.login == "R4PaSs"
assert comments.last.user.login == "xymus"
end
fun test_get_issue_events is test do
- var issue = api.get_issue(repo, 1000)
- assert issue isa Issue
- var events = api.get_issue_events(repo, issue, 1, 3)
+ var events = api.get_issue_events("nitlang/nit", 1000, 1, 3)
assert events.length == 3
assert events.first.actor.login == "privat"
assert events.last.actor.login == "xymus"
end
fun test_get_pull is test do
- var pull = api.get_pull(repo, 1000)
+ var pull = api.get_pull("nitlang/nit", 1000)
assert pull isa Issue
assert pull.number == 1000
assert pull.title == "Raise nitc from the dead"
end
fun test_get_label is test do
- var labl = api.get_label(repo, "ok_will_merge")
+ var labl = api.get_label("nitlang/nit", "ok_will_merge")
assert labl isa Label
assert labl.name == "ok_will_merge"
end
fun test_get_milestone is test do
- var milestone = api.get_milestone(repo, 4)
+ var milestone = api.get_milestone("nitlang/nit", 4)
assert milestone isa Milestone
assert milestone.title == "v1.0prealpha"
# TODO other fields
end
fun test_get_issue_event is test do
- var event = api.get_issue_event(repo, 199674194)
+ var event = api.get_issue_event("nitlang/nit", 199674194)
assert event isa IssueEvent
assert event.actor.login == "privat"
assert event.event == "labeled"
end
fun test_get_issue_comment is test do
- var comment = api.get_issue_comment(repo, 6020149)
+ var comment = api.get_issue_comment("nitlang/nit", 6020149)
assert comment isa IssueComment
assert comment.user.login == "privat"
assert comment.created_at.to_s == "2012-05-30T20:16:54Z"
end
fun test_get_comment is test do
- var comment = api.get_commit_comment(repo, 8982707)
+ var comment = api.get_commit_comment("nitlang/nit", 8982707)
assert comment isa CommitComment
assert comment.user.login == "Morriar"
assert comment.body == "For testing purposes...\n"
end
fun test_get_review_comments is test do
- var comment = api.get_review_comment(repo, 21010363)
+ var comment = api.get_review_comment("nitlang/nit", 21010363)
assert comment isa ReviewComment
assert comment.path == "src/modelize/modelize_property.nit"
assert comment.original_position == 26