octodoggy 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/CONTRIBUTING.md +22 -0
  4. data/LICENSE.md +20 -0
  5. data/README.md +714 -0
  6. data/Rakefile +22 -0
  7. data/lib/ext/sawyer/relation.rb +10 -0
  8. data/lib/octokit.rb +59 -0
  9. data/lib/octokit/arguments.rb +14 -0
  10. data/lib/octokit/authentication.rb +82 -0
  11. data/lib/octokit/client.rb +238 -0
  12. data/lib/octokit/client/authorizations.rb +244 -0
  13. data/lib/octokit/client/commit_comments.rb +95 -0
  14. data/lib/octokit/client/commits.rb +239 -0
  15. data/lib/octokit/client/contents.rb +162 -0
  16. data/lib/octokit/client/deployments.rb +62 -0
  17. data/lib/octokit/client/downloads.rb +50 -0
  18. data/lib/octokit/client/emojis.rb +18 -0
  19. data/lib/octokit/client/events.rb +151 -0
  20. data/lib/octokit/client/feeds.rb +33 -0
  21. data/lib/octokit/client/gists.rb +233 -0
  22. data/lib/octokit/client/gitignore.rb +43 -0
  23. data/lib/octokit/client/hooks.rb +297 -0
  24. data/lib/octokit/client/integrations.rb +77 -0
  25. data/lib/octokit/client/issues.rb +321 -0
  26. data/lib/octokit/client/labels.rb +156 -0
  27. data/lib/octokit/client/legacy_search.rb +42 -0
  28. data/lib/octokit/client/licenses.rb +45 -0
  29. data/lib/octokit/client/markdown.rb +27 -0
  30. data/lib/octokit/client/meta.rb +21 -0
  31. data/lib/octokit/client/milestones.rb +87 -0
  32. data/lib/octokit/client/notifications.rb +171 -0
  33. data/lib/octokit/client/objects.rb +141 -0
  34. data/lib/octokit/client/organizations.rb +768 -0
  35. data/lib/octokit/client/pages.rb +63 -0
  36. data/lib/octokit/client/projects.rb +314 -0
  37. data/lib/octokit/client/pub_sub_hubbub.rb +111 -0
  38. data/lib/octokit/client/pull_requests.rb +301 -0
  39. data/lib/octokit/client/rate_limit.rb +54 -0
  40. data/lib/octokit/client/reactions.rb +158 -0
  41. data/lib/octokit/client/refs.rb +118 -0
  42. data/lib/octokit/client/releases.rb +163 -0
  43. data/lib/octokit/client/repositories.rb +654 -0
  44. data/lib/octokit/client/repository_invitations.rb +103 -0
  45. data/lib/octokit/client/reviews.rb +174 -0
  46. data/lib/octokit/client/say.rb +19 -0
  47. data/lib/octokit/client/search.rb +76 -0
  48. data/lib/octokit/client/service_status.rb +38 -0
  49. data/lib/octokit/client/source_import.rb +161 -0
  50. data/lib/octokit/client/stats.rb +105 -0
  51. data/lib/octokit/client/statuses.rb +47 -0
  52. data/lib/octokit/client/traffic.rb +69 -0
  53. data/lib/octokit/client/users.rb +354 -0
  54. data/lib/octokit/configurable.rb +147 -0
  55. data/lib/octokit/connection.rb +199 -0
  56. data/lib/octokit/default.rb +166 -0
  57. data/lib/octokit/enterprise_admin_client.rb +40 -0
  58. data/lib/octokit/enterprise_admin_client/admin_stats.rb +120 -0
  59. data/lib/octokit/enterprise_admin_client/license.rb +18 -0
  60. data/lib/octokit/enterprise_admin_client/orgs.rb +27 -0
  61. data/lib/octokit/enterprise_admin_client/search_indexing.rb +83 -0
  62. data/lib/octokit/enterprise_admin_client/users.rb +128 -0
  63. data/lib/octokit/enterprise_management_console_client.rb +50 -0
  64. data/lib/octokit/enterprise_management_console_client/management_console.rb +176 -0
  65. data/lib/octokit/error.rb +286 -0
  66. data/lib/octokit/gist.rb +36 -0
  67. data/lib/octokit/middleware/follow_redirects.rb +131 -0
  68. data/lib/octokit/organization.rb +17 -0
  69. data/lib/octokit/preview.rb +38 -0
  70. data/lib/octokit/rate_limit.rb +33 -0
  71. data/lib/octokit/repo_arguments.rb +19 -0
  72. data/lib/octokit/repository.rb +93 -0
  73. data/lib/octokit/response/feed_parser.rb +21 -0
  74. data/lib/octokit/response/raise_error.rb +21 -0
  75. data/lib/octokit/user.rb +19 -0
  76. data/lib/octokit/version.rb +17 -0
  77. data/lib/octokit/warnable.rb +17 -0
  78. data/octokit.gemspec +22 -0
  79. metadata +160 -0
@@ -0,0 +1,103 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Repository Invitations API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/invitations/
7
+ module RepositoryInvitations
8
+
9
+ # Invite a user to a repository
10
+ #
11
+ # Requires authenticated client
12
+ #
13
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
14
+ # @param user [String] User GitHub username to add
15
+ # @return [Sawyer::Resource] The repository invitation
16
+ # @see https://developer.github.com/v3/repos/invitations/#invite-a-user-to-a-repository
17
+ def invite_user_to_repository(repo, user, options = {})
18
+ options = ensure_api_media_type(:repository_invitations, options)
19
+ put "#{Repository.path repo}/collaborators/#{user}", options
20
+ end
21
+ alias invite_user_to_repo invite_user_to_repository
22
+
23
+ # List all invitations for a repository
24
+ #
25
+ # Requires authenticated client
26
+ #
27
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
28
+ # @return [Array<Sawyer::Resource>] A list of invitations
29
+ # @see https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository
30
+ def repository_invitations(repo, options = {})
31
+ options = ensure_api_media_type(:repository_invitations, options)
32
+ paginate "#{Repository.path repo}/invitations", options
33
+ end
34
+ alias repo_invitations repository_invitations
35
+
36
+ # Delete an invitation for a repository
37
+ #
38
+ # Requires authenticated client
39
+ #
40
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
41
+ # @param invitation_id [Integer] The id of the invitation
42
+ # @return [Boolean] True if the invitation was successfully deleted
43
+ # @see https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation
44
+ def delete_repository_invitation(repo, invitation_id, options = {})
45
+ options = ensure_api_media_type(:repository_invitations, options)
46
+ boolean_from_response :delete, "#{Repository.path repo}/invitations/#{invitation_id}", options
47
+ end
48
+ alias delete_repo_invitation delete_repository_invitation
49
+
50
+ # Update an invitation for a repository
51
+ #
52
+ # Requires authenticated client
53
+ #
54
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
55
+ # @param invitation_id [Integer] The id of the invitation
56
+ # @return [Sawyer::Resource] The updated repository invitation
57
+ # @see https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation
58
+ def update_repository_invitation(repo, invitation_id, options = {})
59
+ options = ensure_api_media_type(:repository_invitations, options)
60
+ patch "#{Repository.path repo}/invitations/#{invitation_id}", options
61
+ end
62
+ alias update_repo_invitation update_repository_invitation
63
+
64
+ # List all repository invitations for the user
65
+ #
66
+ # Requires authenticated client
67
+ #
68
+ # @return [Array<Sawyer::Resource>] The users repository invitations
69
+ # @see https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations
70
+ def user_repository_invitations(options = {})
71
+ options = ensure_api_media_type(:repository_invitations, options)
72
+ paginate "/user/repository_invitations", options
73
+ end
74
+ alias user_repo_invitations user_repository_invitations
75
+
76
+ # Accept a repository invitation
77
+ #
78
+ # Requires authenticated client
79
+ #
80
+ # @param invitation_id [Integer] The id of the invitation
81
+ # @return [Boolean] True if the acceptance of the invitation was successful
82
+ # @see https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation
83
+ def accept_repository_invitation(invitation_id, options = {})
84
+ options = ensure_api_media_type(:repository_invitations, options)
85
+ patch "/user/repository_invitations/#{invitation_id}", options
86
+ end
87
+ alias accept_repo_invitation accept_repository_invitation
88
+
89
+ # Decline a repository invitation
90
+ #
91
+ # Requires authenticated client
92
+ #
93
+ # @param invitation_id [Integer] The id of the invitation
94
+ # @return [Boolean] True if the acceptance of the invitation was successful
95
+ # @see https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation
96
+ def decline_repository_invitation(invitation_id, options = {})
97
+ options = ensure_api_media_type(:repository_invitations, options)
98
+ boolean_from_response :delete, "/user/repository_invitations/#{invitation_id}", options
99
+ end
100
+ alias decline_invitation decline_repository_invitation
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,174 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Reviews API
5
+ #
6
+ # @see https://developer.github.com/v3/reviews/
7
+ module Reviews
8
+
9
+ # List reviews on a pull request
10
+ #
11
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
12
+ # @param id [Integer] The id of the pull request
13
+ # @see https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
14
+ #
15
+ # @example
16
+ # @client.pull_request_reviews('octokit/octokit.rb', 2)
17
+ #
18
+ # @return [Array<Sawyer::Resource>] Array of Hashes representing the reviews
19
+ def pull_request_reviews(repo, id, options = {})
20
+ options = ensure_api_media_type(:reviews, options)
21
+ get "#{Repository.path repo}/pulls/#{id}/reviews", options
22
+ end
23
+
24
+ # Get a single review
25
+ #
26
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
27
+ # @param number [Integer] The id of the pull request
28
+ # @param review [Integer] The id of the review
29
+ # @see https://developer.github.com/v3/pulls/reviews/#get-a-single-review
30
+ #
31
+ # @example
32
+ # @client.pull_request_review('octokit/octokit.rb', 825, 6505518)
33
+ #
34
+ # @return [Sawyer::Resource] Hash representing the review
35
+ def pull_request_review(repo, number, review, options = {})
36
+ options = ensure_api_media_type(:reviews, options)
37
+ get "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options
38
+ end
39
+
40
+ # Delete a pending review
41
+ #
42
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
43
+ # @param number [Integer] The id of the pull request
44
+ # @param review [Integer] The id of the review
45
+ # @see https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review
46
+ #
47
+ # @example
48
+ # @client.delete_pull_request_review('octokit/octokit.rb', 825, 6505518)
49
+ #
50
+ # @return [Sawyer::Resource] Hash representing the deleted review
51
+ def delete_pull_request_review(repo, number, review, options = {})
52
+ options = ensure_api_media_type(:reviews, options)
53
+ delete "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options
54
+ end
55
+
56
+ # Get comments for a single review
57
+ #
58
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
59
+ # @param number [Integer] The id of the pull request
60
+ # @param review [Integer] The id of the review
61
+ # @see https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
62
+ #
63
+ # @example
64
+ # @client.pull_request_review_comments('octokit/octokit.rb', 825, 6505518)
65
+ #
66
+ # @return [Array<Sawyer::Resource>] Array of Hashes representing the review comments
67
+ def pull_request_review_comments(repo, number, review, options = {})
68
+ options = ensure_api_media_type(:reviews, options)
69
+ get "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/comments", options
70
+ end
71
+
72
+ # Create a pull request review
73
+ #
74
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
75
+ # @param id [Integer] The id of the pull request
76
+ # @param options [Hash] Method options
77
+ # @option options [String] :event The review action (event) to perform;
78
+ # can be one of APPROVE, REQUEST_CHANGES, or COMMENT.
79
+ # If left blank, the review is left PENDING.
80
+ # @option options [String] :body The body text of the pull request review
81
+ # @option options [Array<Hash>] :comments Comments part of the review
82
+ # @option comments [String] :path The path to the file being commented on
83
+ # @option comments [Integer] :position The position in the file to be commented on
84
+ # @option comments [String] :body Body of the comment
85
+ # @see https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review
86
+ #
87
+ # @example
88
+ # comments = [
89
+ # { path: '.travis.yml', position: 10, body: 'ruby-head is under development that is not stable.' },
90
+ # { path: '.travis.yml', position: 32, body: 'ruby-head is also required in thervm section.' },
91
+ # ]
92
+ # options = { event: 'REQUEST_CHANGES', comments: comments }
93
+ # @client.create_pull_request_review('octokit/octokit.rb', 844, options)
94
+ #
95
+ # @return [Sawyer::Resource>] Hash respresenting the review
96
+ def create_pull_request_review(repo, id, options = {})
97
+ options = ensure_api_media_type(:reviews, options)
98
+ post "#{Repository.path repo}/pulls/#{id}/reviews", options
99
+ end
100
+
101
+ # Submit a pull request review
102
+ #
103
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
104
+ # @param number [Integer] The id of the pull request
105
+ # @param review [Integer] The id of the review
106
+ # @param event [String] The review action (event) to perform; can be one of
107
+ # APPROVE, REQUEST_CHANGES, or COMMENT.
108
+ # @param options [Hash] Method options
109
+ # @option options [String] :body The body text of the pull request review
110
+ # @see https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review
111
+ #
112
+ # @example
113
+ # @client.submit_pull_request_review('octokit/octokit.rb', 825, 6505518,
114
+ # 'APPROVE', body: 'LGTM!')
115
+ #
116
+ # @return [Sawyer::Resource] Hash respresenting the review
117
+ def submit_pull_request_review(repo, number, review, event, options = {})
118
+ options = options.merge(event: event)
119
+ options = ensure_api_media_type(:reviews, options)
120
+ post "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/events", options
121
+ end
122
+
123
+ # Dismiss a pull request review
124
+ #
125
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
126
+ # @param number [Integer] The id of the pull request
127
+ # @param review [Integer] The id of the review
128
+ # @param message [String] The message for the pull request review dismissal
129
+ # @see https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review
130
+ #
131
+ # @example
132
+ # @client.dismiss_pull_request_review('octokit/octokit.rb', 825, 6505518)
133
+ #
134
+ # @return [Sawyer::Resource] Hash representing the dismissed review
135
+ def dismiss_pull_request_review(repo, number, review, message, options = {})
136
+ options = options.merge(message: message)
137
+ options = ensure_api_media_type(:reviews, options)
138
+ put "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/dismissals", options
139
+ end
140
+
141
+ # List review requests
142
+ #
143
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
144
+ # @param id [Integer] The id of the pull request
145
+ # @see https://developer.github.com/v3/pulls/review_requests/#list-review-requests
146
+ #
147
+ # @example
148
+ # @client.pull_request_review_requests('octokit/octokit.rb', 2)
149
+ #
150
+ # @return [Array<Sawyer::Resource>] Array of Hashes representing the review requests
151
+ def pull_request_review_requests(repo, id, options = {})
152
+ options = ensure_api_media_type(:reviews, options)
153
+ get "#{Repository.path repo}/pulls/#{id}/requested_reviewers", options
154
+ end
155
+
156
+ # Create a review request
157
+ #
158
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
159
+ # @param id [Integer] The id of the pull request
160
+ # @param reviewers [Array<String>] An array of user logins that will be requested
161
+ # @see https://developer.github.com/v3/pulls/review_requests/#create-a-review-request
162
+ #
163
+ # @example
164
+ # @client.request_pull_request_review('octokit/octokit.rb', 2, ['soudy'])
165
+ #
166
+ # @return [Sawyer::Resource>] Hash respresenting the pull request
167
+ def request_pull_request_review(repo, id, reviewers, options = {})
168
+ options = options.merge(reviewers: reviewers)
169
+ options = ensure_api_media_type(:reviews, options)
170
+ post "#{Repository.path repo}/pulls/#{id}/requested_reviewers", options
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,19 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the unpublished Octocat API
5
+ module Say
6
+
7
+ # Return a nifty ASCII Octocat with GitHub wisdom
8
+ # or your own
9
+ #
10
+ # @return [String]
11
+ def say(text = nil, options = {})
12
+ options[:s] = text if text
13
+ get "octocat", options
14
+ end
15
+ alias :octocat :say
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,76 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Search API
5
+ #
6
+ # @see https://developer.github.com/v3/search/
7
+ module Search
8
+
9
+ # Search code
10
+ #
11
+ # @param query [String] Search term and qualifiers
12
+ # @param options [Hash] Sort and pagination options
13
+ # @option options [String] :sort Sort field
14
+ # @option options [String] :order Sort order (asc or desc)
15
+ # @option options [Integer] :page Page of paginated results
16
+ # @option options [Integer] :per_page Number of items per page
17
+ # @return [Sawyer::Resource] Search results object
18
+ # @see https://developer.github.com/v3/search/#search-code
19
+ def search_code(query, options = {})
20
+ search "search/code", query, options
21
+ end
22
+
23
+ # Search issues
24
+ #
25
+ # @param query [String] Search term and qualifiers
26
+ # @param options [Hash] Sort and pagination options
27
+ # @option options [String] :sort Sort field
28
+ # @option options [String] :order Sort order (asc or desc)
29
+ # @option options [Integer] :page Page of paginated results
30
+ # @option options [Integer] :per_page Number of items per page
31
+ # @return [Sawyer::Resource] Search results object
32
+ # @see https://developer.github.com/v3/search/#search-issues
33
+ def search_issues(query, options = {})
34
+ search "search/issues", query, options
35
+ end
36
+
37
+ # Search repositories
38
+ #
39
+ # @param query [String] Search term and qualifiers
40
+ # @param options [Hash] Sort and pagination options
41
+ # @option options [String] :sort Sort field
42
+ # @option options [String] :order Sort order (asc or desc)
43
+ # @option options [Integer] :page Page of paginated results
44
+ # @option options [Integer] :per_page Number of items per page
45
+ # @return [Sawyer::Resource] Search results object
46
+ # @see https://developer.github.com/v3/search/#search-repositories
47
+ def search_repositories(query, options = {})
48
+ search "search/repositories", query, options
49
+ end
50
+ alias :search_repos :search_repositories
51
+
52
+ # Search users
53
+ #
54
+ # @param query [String] Search term and qualifiers
55
+ # @param options [Hash] Sort and pagination options
56
+ # @option options [String] :sort Sort field
57
+ # @option options [String] :order Sort order (asc or desc)
58
+ # @option options [Integer] :page Page of paginated results
59
+ # @option options [Integer] :per_page Number of items per page
60
+ # @return [Sawyer::Resource] Search results object
61
+ # @see https://developer.github.com/v3/search/#search-users
62
+ def search_users(query, options = {})
63
+ search "search/users", query, options
64
+ end
65
+
66
+ private
67
+
68
+ def search(path, query, options = {})
69
+ opts = options.merge(:q => query)
70
+ paginate(path, opts) do |data, last_response|
71
+ data.items.concat last_response.data.items
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,38 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the GitHub Status API
5
+ #
6
+ # @see https://status.github.com/api
7
+ module ServiceStatus
8
+
9
+ # Root for status API
10
+ # @private
11
+ STATUS_ROOT = 'https://status.github.com/api.json'
12
+
13
+ # Returns the current system status
14
+ #
15
+ # @return [Sawyer::Resource] GitHub status
16
+ # @see https://status.github.com/api#api-current-status
17
+ def github_status
18
+ get(STATUS_ROOT).rels[:status].get.data
19
+ end
20
+
21
+ # Returns the last human communication, status, and timestamp.
22
+ #
23
+ # @return [Sawyer::Resource] GitHub status last message
24
+ # @see https://status.github.com/api#api-last-message
25
+ def github_status_last_message
26
+ get(STATUS_ROOT).rels[:last_message].get.data
27
+ end
28
+
29
+ # Returns the most recent human communications with status and timestamp.
30
+ #
31
+ # @return [Array<Sawyer::Resource>] GitHub status messages
32
+ # @see https://status.github.com/api#api-recent-messages
33
+ def github_status_messages
34
+ get(STATUS_ROOT).rels[:messages].get.data
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,161 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Source Import API
5
+ #
6
+ # @see https://developer.github.com/v3/migration/source_imports
7
+ module SourceImport
8
+
9
+ # Start a source import to a GitHub repository using GitHub Importer.
10
+ #
11
+ # @overload start_source_import(repo, vcs, vcs_url, options = {})
12
+ # @deprecated
13
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
14
+ # @param vcs [String] The originating VCS type. Can be one of "subversion", "git", "mercurial", or "tfvc".
15
+ # @param vcs_url [String] The URL of the originating repository.
16
+ # @param options [Hash]
17
+ # @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url.
18
+ # @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url.
19
+ # @option options [String] :tfvc_project For a tfvc import, the name of the project that is being imported.
20
+ # @overload start_source_import(repo, vcs_url, options = {})
21
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
22
+ # @param vcs_url [String] The URL of the originating repository.
23
+ # @param options [Hash]
24
+ # @param options [String] :vcs The originating VCS type. Can be one of "subversion", "git", "mercurial", or "tfvc".
25
+ # @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url.
26
+ # @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url.
27
+ # @option options [String] :tfvc_project For a tfvc import, the name of the project that is being imported.
28
+ # @return [Sawyer::Resource] Hash representing the repository import
29
+ # @see https://developer.github.com/v3/migration/source_imports/#start-an-import
30
+ #
31
+ # @example
32
+ # @client.start_source_import("octokit/octokit.rb", "http://svn.mycompany.com/svn/myproject", {
33
+ # :vcs => "subversion",
34
+ # :vcs_username" => "octocat",
35
+ # :vcs_password => "secret"
36
+ # })
37
+ def start_source_import(*args)
38
+ arguments = Octokit::RepoArguments.new(args)
39
+ vcs_url = arguments.pop
40
+ vcs = arguments.pop
41
+ if vcs
42
+ octokit_warn "Octokit#start_source_import vcs parameter is now an option, please update your call before the next major Octokit version update."
43
+ arguments.options.merge!(:vcs => vcs)
44
+ end
45
+ options = ensure_api_media_type(:source_imports, arguments.options.merge(:vcs_url => vcs_url))
46
+ put "#{Repository.path arguments.repo}/import", options
47
+ end
48
+
49
+ # View the progress of an import.
50
+ #
51
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
52
+ # @return [Sawyer::Resource] Hash representing the progress of the import
53
+ # @see https://developer.github.com/v3/migration/source_imports/#get-import-progress
54
+ #
55
+ # @example
56
+ # @client.source_import_progress("octokit/octokit.rb")
57
+ def source_import_progress(repo, options = {})
58
+ options = ensure_api_media_type(:source_imports, options)
59
+ get "#{Repository.path repo}/import", options
60
+ end
61
+
62
+ # Update source import with authentication or project choice
63
+ # Restart source import if no options are passed
64
+ #
65
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
66
+ # @return [Sawyer::Resource] Hash representing the repository import
67
+ # @see https://developer.github.com/v3/migration/source_imports/#update-existing-import
68
+ # @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url.
69
+ # @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url.
70
+ # @option options [String] To update project choice, please refer to the project_choice array from the progress return hash for the exact attributes.
71
+ # https://developer.github.com/v3/migration/source_imports/#update-existing-import
72
+ #
73
+ # @example
74
+ # @client.update_source_import("octokit/octokit.rb", {
75
+ # :vcs_username" => "octocat",
76
+ # :vcs_password => "secret"
77
+ # })
78
+ def update_source_import(repo, options = {})
79
+ options = ensure_api_media_type(:source_imports, options)
80
+ patch "#{Repository.path repo}/import", options
81
+ end
82
+
83
+ # List source import commit authors
84
+ #
85
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
86
+ # @param options [Hash]
87
+ # @option options [String] :since Only authors found after this id are returned.
88
+ # @return [Array<Sawyer::Resource>] Array of hashes representing commit_authors.
89
+ # @see https://developer.github.com/v3/migration/source_imports/#get-commit-authors
90
+ #
91
+ # @example
92
+ # @client.source_import_commit_authors("octokit/octokit.rb")
93
+ def source_import_commit_authors(repo, options = {})
94
+ options = ensure_api_media_type(:source_imports, options)
95
+ get "#{Repository.path repo}/import/authors", options
96
+ end
97
+
98
+ # Update an author's identity for the import.
99
+ #
100
+ # @param author_url [String] The source import API url for the commit author
101
+ # @param values [Hash] The updated author attributes
102
+ # @option values [String] :email The new Git author email.
103
+ # @option values [String] :name The new Git author name.
104
+ # @return [Sawyer::Resource] Hash representing the updated commit author
105
+ # @see https://developer.github.com/v3/migration/source_imports/#map-a-commit-author
106
+ #
107
+ # @example
108
+ # author_url = "https://api.github.com/repos/octokit/octokit.rb/import/authors/1"
109
+ # @client.map_source_import_commit_author(author_url, {
110
+ # :email => "hubot@github.com",
111
+ # :name => "Hubot the Robot"
112
+ # })
113
+ def map_source_import_commit_author(author_url, values, options = {})
114
+ options = ensure_api_media_type(:source_imports, options.merge(values))
115
+ patch author_url, options
116
+ end
117
+
118
+ # Stop an import for a repository.
119
+ #
120
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
121
+ # @return [Boolean] True if the import has been cancelled, false otherwise.
122
+ # @see https://developer.github.com/v3/migration/source_imports/#cancel-an-import
123
+ #
124
+ # @example
125
+ # @client.cancel_source_import("octokit/octokit.rb")
126
+ def cancel_source_import(repo, options = {})
127
+ options = ensure_api_media_type(:source_imports, options)
128
+ boolean_from_response :delete, "#{Repository.path repo}/import", options
129
+ end
130
+
131
+ # List source import large files
132
+ #
133
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
134
+ # @param options [Hash]
135
+ # @option options [Integer] :page Page of paginated results
136
+ # @return [Array<Sawyer::Resource>] Array of hashes representing files over 100MB.
137
+ # @see https://developer.github.com/v3/migration/source_imports/#get-large-files
138
+ #
139
+ # @example
140
+ # @client.source_import_large_files("octokit/octokit.rb")
141
+ def source_import_large_files(repo, options = {})
142
+ options = ensure_api_media_type(:source_imports, options)
143
+ get "#{Repository.path repo}/import/large_files", options
144
+ end
145
+
146
+ # Set preference for using Git LFS to import files over 100MB
147
+ #
148
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
149
+ # @param use_lfs [String] Preference for using Git LFS to import large files. Can be one of "opt_in" or "opt_out"
150
+ # @return [Sawyer::Resource] Hash representing the repository import
151
+ # @see https://developer.github.com/v3/migration/source_imports/#set-git-lfs-preference
152
+ #
153
+ # @example
154
+ # @client.opt_in_source_import_lfs("octokit/octokit.rb", "opt_in")
155
+ def set_source_import_lfs_preference(repo, use_lfs, options = {})
156
+ options = ensure_api_media_type(:source_imports, options.merge(:use_lfs => use_lfs))
157
+ patch "#{Repository.path repo}/import/lfs", options
158
+ end
159
+ end
160
+ end
161
+ end