gitlab 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -4
- data/lib/gitlab/cli.rb +6 -16
- data/lib/gitlab/cli_helpers.rb +34 -0
- data/lib/gitlab/client/projects.rb +15 -0
- data/lib/gitlab/client/repositories.rb +14 -0
- data/lib/gitlab/help.rb +44 -0
- data/lib/gitlab/shell.rb +49 -0
- data/lib/gitlab/version.rb +1 -1
- data/spec/fixtures/project_events.json +1 -0
- data/spec/fixtures/tag.json +1 -0
- data/spec/gitlab/client/issues_spec.rb +1 -1
- data/spec/gitlab/client/projects_spec.rb +20 -0
- data/spec/gitlab/client/repositories_spec.rb +16 -0
- data/spec/gitlab/objectified_hash_spec.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1eec826134f7f158d272a521a17b9c52462563b
|
4
|
+
data.tar.gz: ce91d8223ae73ab6194680ac023919beb6178286
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c64f4ef7633db83324ccd32a14ee073a437339b40e9cf8c58a0691a558dc09a4a9f8b24cf68cb86ef5b6b25a49d8d110113e9d32c8988bf2dbf2b6d4e09a047
|
7
|
+
data.tar.gz: 34d73c1a2b04ffb4339dbfb634d73f0a337a0d8919b851808d967d3c06dcb7327a93b82786dac59a64b8d6b99e0815c1ddf522f8272570d5535593e7513f333f
|
data/README.md
CHANGED
@@ -28,18 +28,22 @@ Configuration example:
|
|
28
28
|
|
29
29
|
```ruby
|
30
30
|
Gitlab.configure do |config|
|
31
|
-
config.endpoint = 'https://example.net/api/v3' # API endpoint URL
|
32
|
-
config.private_token = 'qEsq1pt6HJPaNciie3MG' # user's private token
|
33
|
-
|
31
|
+
config.endpoint = 'https://example.net/api/v3' # API endpoint URL, default: ENV['GITLAB_API_ENDPOINT']
|
32
|
+
config.private_token = 'qEsq1pt6HJPaNciie3MG' # user's private token, default: ENV['GITLAB_API_PRIVATE_TOKEN']
|
33
|
+
# Optional
|
34
|
+
# config.user_agent = 'Custom User Agent' # user agent, default: 'Gitlab Ruby Gem [version]'
|
35
|
+
# config.sudo = 'user' # username for sudo mode, default: nil
|
34
36
|
end
|
35
37
|
```
|
36
38
|
|
39
|
+
(Note: If you are using Gitlab.com's hosted service, your endpoint will be `https://gitlab.com/api/v3`)
|
40
|
+
|
37
41
|
Usage examples:
|
38
42
|
|
39
43
|
```ruby
|
40
44
|
# set an API endpoint
|
41
45
|
Gitlab.endpoint = 'http://example.net/api/v3'
|
42
|
-
# => "http://example.net/api/
|
46
|
+
# => "http://example.net/api/v3"
|
43
47
|
|
44
48
|
# set a user private token
|
45
49
|
Gitlab.private_token = 'qEsq1pt6HJPaNciie3MG'
|
@@ -92,6 +96,24 @@ gitlab user --only=id,username
|
|
92
96
|
gitlab user --except=email,bio
|
93
97
|
```
|
94
98
|
|
99
|
+
## CLI Shell
|
100
|
+
|
101
|
+
Usage examples:
|
102
|
+
|
103
|
+
```sh
|
104
|
+
# start shell session
|
105
|
+
gitlab shell
|
106
|
+
|
107
|
+
# list available commands
|
108
|
+
gitlab> help
|
109
|
+
|
110
|
+
# list groups
|
111
|
+
gitlab> groups
|
112
|
+
|
113
|
+
# protect a branch
|
114
|
+
gitlab> protect_branch 1 master
|
115
|
+
```
|
116
|
+
|
95
117
|
For more information, refer to [website](http://narkoz.github.io/gitlab).
|
96
118
|
|
97
119
|
## License
|
data/lib/gitlab/cli.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'gitlab'
|
2
2
|
require 'terminal-table/import'
|
3
3
|
require_relative 'cli_helpers'
|
4
|
+
require_relative 'shell'
|
4
5
|
|
5
6
|
class Gitlab::CLI
|
6
7
|
extend Helpers
|
@@ -23,8 +24,10 @@ class Gitlab::CLI
|
|
23
24
|
puts "Gitlab Ruby Gem #{Gitlab::VERSION}"
|
24
25
|
when '-v', '--version'
|
25
26
|
puts "Gitlab Ruby Gem #{Gitlab::VERSION}"
|
27
|
+
when 'shell'
|
28
|
+
Gitlab::Shell.start
|
26
29
|
else
|
27
|
-
unless
|
30
|
+
unless valid_command?(cmd)
|
28
31
|
puts "Unknown command. Run `gitlab help` for a list of available commands."
|
29
32
|
exit(1)
|
30
33
|
end
|
@@ -37,21 +40,8 @@ class Gitlab::CLI
|
|
37
40
|
|
38
41
|
confirm_command(cmd)
|
39
42
|
|
40
|
-
|
41
|
-
|
42
|
-
rescue => e
|
43
|
-
puts e.message
|
44
|
-
exit(1)
|
45
|
-
end
|
46
|
-
|
47
|
-
case data
|
48
|
-
when Gitlab::ObjectifiedHash
|
49
|
-
puts single_record_table(data, cmd, args)
|
50
|
-
when Array
|
51
|
-
puts multiple_record_table(data, cmd, args)
|
52
|
-
else
|
53
|
-
puts data.inspect
|
54
|
-
end
|
43
|
+
data = gitlab_helper(cmd, command_args) { exit(1) }
|
44
|
+
output_table(cmd, args, data)
|
55
45
|
end
|
56
46
|
end
|
57
47
|
end
|
data/lib/gitlab/cli_helpers.rb
CHANGED
@@ -25,6 +25,14 @@ class Gitlab::CLI
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
# Confirms command is valid.
|
29
|
+
#
|
30
|
+
# @return [Boolean]
|
31
|
+
def valid_command?(cmd)
|
32
|
+
command = cmd.is_a?(Symbol) ? cmd : cmd.to_sym
|
33
|
+
Gitlab.actions.include?(command)
|
34
|
+
end
|
35
|
+
|
28
36
|
# Confirms command with a desctructive action.
|
29
37
|
#
|
30
38
|
# @return [String]
|
@@ -77,6 +85,20 @@ class Gitlab::CLI
|
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
88
|
+
# Decides which table to use.
|
89
|
+
#
|
90
|
+
# @return [String]
|
91
|
+
def output_table(cmd, args, data)
|
92
|
+
case data
|
93
|
+
when Gitlab::ObjectifiedHash
|
94
|
+
puts single_record_table(data, cmd, args)
|
95
|
+
when Array
|
96
|
+
puts multiple_record_table(data, cmd, args)
|
97
|
+
else
|
98
|
+
puts data.inspect
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
80
102
|
# Table for a single record.
|
81
103
|
#
|
82
104
|
# @return [String]
|
@@ -137,5 +159,17 @@ class Gitlab::CLI
|
|
137
159
|
end
|
138
160
|
end
|
139
161
|
end
|
162
|
+
|
163
|
+
# Helper function to call Gitlab commands with args.
|
164
|
+
def gitlab_helper(cmd, args=[])
|
165
|
+
begin
|
166
|
+
data = args.any? ? Gitlab.send(cmd, *args) : Gitlab.send(cmd)
|
167
|
+
rescue => e
|
168
|
+
puts e.message
|
169
|
+
yield if block_given?
|
170
|
+
end
|
171
|
+
|
172
|
+
data
|
173
|
+
end
|
140
174
|
end
|
141
175
|
end
|
@@ -31,6 +31,21 @@ class Gitlab::Client
|
|
31
31
|
get("/projects/#{id}")
|
32
32
|
end
|
33
33
|
|
34
|
+
# Gets a list of project events.
|
35
|
+
#
|
36
|
+
# @example
|
37
|
+
# Gitlab.project_events(42)
|
38
|
+
# Gitlab.project_events('gitlab')
|
39
|
+
#
|
40
|
+
# @param [Integer, String] project The ID or name of a project.
|
41
|
+
# @param [Hash] options A customizable set of options.
|
42
|
+
# @option options [Integer] :page The page number.
|
43
|
+
# @option options [Integer] :per_page The number of results per page.
|
44
|
+
# @return [Array<Gitlab::ObjectifiedHash>]
|
45
|
+
def project_events(project, options={})
|
46
|
+
get("/projects/#{project}/events", :query => options)
|
47
|
+
end
|
48
|
+
|
34
49
|
# Creates a new project.
|
35
50
|
#
|
36
51
|
# @example
|
@@ -16,6 +16,20 @@ class Gitlab::Client
|
|
16
16
|
end
|
17
17
|
alias_method :repo_tags, :tags
|
18
18
|
|
19
|
+
# Creates a new project repository tag.
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# Gitlab.create_tag(42,'new_tag','master'))
|
23
|
+
#
|
24
|
+
# @param [Integer] project The ID of a project.
|
25
|
+
# @param [String] tag_name The name of the new tag.
|
26
|
+
# @param [String] ref The ref (commit sha, branch name, or another tag) the tag will point to.
|
27
|
+
# @return [Gitlab::ObjectifiedHash]
|
28
|
+
def create_tag(project, tag_name, ref)
|
29
|
+
post("/projects/#{project}/repository/tags", body: {tag_name: tag_name, ref: ref})
|
30
|
+
end
|
31
|
+
alias_method :repo_create_tag, :create_tag
|
32
|
+
|
19
33
|
# Gets a list of project commits.
|
20
34
|
#
|
21
35
|
# @example
|
data/lib/gitlab/help.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'gitlab'
|
2
|
+
require 'gitlab/cli_helpers'
|
3
|
+
|
4
|
+
module Gitlab::Help
|
5
|
+
extend Gitlab::CLI::Helpers
|
6
|
+
|
7
|
+
def self.get_help(methods,cmd=nil)
|
8
|
+
help = ''
|
9
|
+
|
10
|
+
if cmd.nil? || cmd == 'help'
|
11
|
+
help = actions_table
|
12
|
+
else
|
13
|
+
ri_cmd = `which ri`.chomp
|
14
|
+
|
15
|
+
if $? == 0
|
16
|
+
namespace = methods.select {|m| m[:name] === cmd }.map {|m| m[:owner]+'.'+m[:name] }.shift
|
17
|
+
|
18
|
+
if namespace
|
19
|
+
begin
|
20
|
+
ri_output = `#{ri_cmd} -T #{namespace} 2>&1`.chomp
|
21
|
+
|
22
|
+
if $? == 0
|
23
|
+
ri_output.gsub!(/#{cmd}\((.*)\)/, cmd+' \1')
|
24
|
+
ri_output.gsub!(/Gitlab\./, 'gitlab> ')
|
25
|
+
ri_output.gsub!(/Gitlab\..+$/, '')
|
26
|
+
ri_output.gsub!(/\,/, '')
|
27
|
+
help = ri_output
|
28
|
+
else
|
29
|
+
help = "Ri docs not found for #{namespace}, please install the docs to use 'help'"
|
30
|
+
end
|
31
|
+
rescue => e
|
32
|
+
puts e.message
|
33
|
+
end
|
34
|
+
else
|
35
|
+
help = "Unknown command: #{cmd}"
|
36
|
+
end
|
37
|
+
else
|
38
|
+
help = "'ri' tool not found in your PATH, please install it to use the help."
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
puts help
|
43
|
+
end
|
44
|
+
end
|
data/lib/gitlab/shell.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'gitlab'
|
2
|
+
require 'gitlab/help'
|
3
|
+
require 'gitlab/cli_helpers'
|
4
|
+
require 'readline'
|
5
|
+
|
6
|
+
class Gitlab::Shell
|
7
|
+
extend Gitlab::CLI::Helpers
|
8
|
+
|
9
|
+
def self.start
|
10
|
+
actions = Gitlab.actions
|
11
|
+
|
12
|
+
comp = proc { |s| actions.map(&:to_s).grep(/^#{Regexp.escape(s)}/) }
|
13
|
+
|
14
|
+
Readline.completion_proc = comp
|
15
|
+
Readline.completion_append_character = ' '
|
16
|
+
|
17
|
+
client = Gitlab::Client.new(endpoint: '')
|
18
|
+
|
19
|
+
while buf = Readline.readline("gitlab> ", true)
|
20
|
+
next if buf.nil? || buf.empty?
|
21
|
+
buf = buf.split.map(&:chomp)
|
22
|
+
cmd = buf.shift
|
23
|
+
args = buf.count > 0 ? buf : []
|
24
|
+
|
25
|
+
if cmd == 'help'
|
26
|
+
methods = []
|
27
|
+
|
28
|
+
actions.each do |action|
|
29
|
+
methods << {
|
30
|
+
name: action.to_s,
|
31
|
+
owner: client.method(action).owner.to_s
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
args[0].nil? ? Gitlab::Help.get_help(methods) : Gitlab::Help.get_help(methods, args[0])
|
36
|
+
next
|
37
|
+
end
|
38
|
+
|
39
|
+
data = if actions.include?(cmd.to_sym)
|
40
|
+
confirm_command(cmd)
|
41
|
+
gitlab_helper(cmd, args)
|
42
|
+
else
|
43
|
+
"'#{cmd}' is not a valid command. See the 'help' for a list of valid commands."
|
44
|
+
end
|
45
|
+
|
46
|
+
output_table(cmd, args, data)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/gitlab/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
[{"title":null,"project_id":2,"action_name":"opened","target_id":null,"target_type":null,"author_id":1,"data":{"before":"ac0c1aa3898d6dea54d7868ea6f9c45fd5e30c59","after":"66350dbb62a221bc619b665aef3e1e7d3b306747","ref":"refs/heads/master","user_id":1,"user_name":"Administrator","project_id":2,"repository":{"name":"gitlab-ci","url":"git@demo.gitlab.com:gitlab/gitlab-ci.git","description":"Continuous integration server for gitlabhq | Coordinator","homepage":"http://demo.gitlab.com/gitlab/gitlab-ci"},"commits":[{"id":"8cf469b039931bab37bbf025e6b69287ea3cfb0e","message":"Modify screenshot\n\nSigned-off-by: Dmitriy Zaporozhets \u003Cdummy@gmail.com\u003E","timestamp":"2014-05-20T10:34:27+00:00","url":"http://demo.gitlab.com/gitlab/gitlab-ci/commit/8cf469b039931bab37bbf025e6b69287ea3cfb0e","author":{"name":"Dummy","email":"dummy@gmail.com"}},{"id":"66350dbb62a221bc619b665aef3e1e7d3b306747","message":"Edit some code\n\nSigned-off-by: Dmitriy Zaporozhets \u003Cdummy@gmail.com\u003E","timestamp":"2014-05-20T10:35:15+00:00","url":"http://demo.gitlab.com/gitlab/gitlab-ci/commit/66350dbb62a221bc619b665aef3e1e7d3b306747","author":{"name":"Dummy","email":"dummy@gmail.com"}}],"total_commits_count":2},"target_title":null,"created_at":"2014-05-20T10:35:26.240Z"},{"title":null,"project_id":2,"action_name":"opened","target_id":2,"target_type":"MergeRequest","author_id":1,"data":null,"target_title":" Morbi et cursus leo. Sed eget vestibulum sapien","created_at":"2014-05-20T10:24:11.917Z"}]
|
@@ -0,0 +1 @@
|
|
1
|
+
{"name": "v1.0.0","commit": {"id": "2695effb5807a22ff3d138d593fd856244e155e7","parents": [],"message": "Initial commit","authored_date": "2012-05-28T04:42:42-07:00","author_name": "John Smith","author email": "john@example.com","committer_name": "Jack Smith","committed_date": "2012-05-28T04:42:42-07:00","committer_email": "jack@example.com"},"protected": false}
|
@@ -30,7 +30,7 @@ describe Gitlab::Client do
|
|
30
30
|
|
31
31
|
it "should return an array of user's issues" do
|
32
32
|
expect(@issues).to be_an Array
|
33
|
-
expect(@issues.first.closed).to
|
33
|
+
expect(@issues.first.closed).to be_falsey
|
34
34
|
expect(@issues.first.author.name).to eq("John Smith")
|
35
35
|
end
|
36
36
|
end
|
@@ -34,6 +34,26 @@ describe Gitlab::Client do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
describe ".project_events" do
|
38
|
+
before do
|
39
|
+
stub_get("/projects/2/events", "project_events")
|
40
|
+
@events = Gitlab.project_events(2)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should get the correct resource" do
|
44
|
+
expect(a_get("/projects/2/events")).to have_been_made
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return an array of events" do
|
48
|
+
expect(@events).to be_an Array
|
49
|
+
expect(@events.size).to eq(2)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should return the action name of the event" do
|
53
|
+
expect(@events.first.action_name).to eq("opened")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
37
57
|
describe ".create_project" do
|
38
58
|
before do
|
39
59
|
stub_post("/projects", "project")
|
@@ -2,6 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Gitlab::Client do
|
4
4
|
it { should respond_to :repo_tags }
|
5
|
+
it { should respond_to :repo_create_tag }
|
5
6
|
it { should respond_to :repo_branches }
|
6
7
|
it { should respond_to :repo_branch }
|
7
8
|
it { should respond_to :repo_commits }
|
@@ -24,6 +25,21 @@ describe Gitlab::Client do
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
28
|
+
describe ".create_tag" do
|
29
|
+
before do
|
30
|
+
stub_post("/projects/3/repository/tags", "tag")
|
31
|
+
@tag = Gitlab.create_tag(3, 'v1.0.0', '2695effb5807a22ff3d138d593fd856244e155e7')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should get the correct resource" do
|
35
|
+
expect(a_post("/projects/3/repository/tags")).to have_been_made
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return information about a new repository tag" do
|
39
|
+
expect(@tag.name).to eq("v1.0.0")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
27
43
|
describe ".commits" do
|
28
44
|
before do
|
29
45
|
stub_get("/projects/3/repository/commits", "project_commits").
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nihad Abbasov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -114,8 +114,10 @@ files:
|
|
114
114
|
- lib/gitlab/client/users.rb
|
115
115
|
- lib/gitlab/configuration.rb
|
116
116
|
- lib/gitlab/error.rb
|
117
|
+
- lib/gitlab/help.rb
|
117
118
|
- lib/gitlab/objectified_hash.rb
|
118
119
|
- lib/gitlab/request.rb
|
120
|
+
- lib/gitlab/shell.rb
|
119
121
|
- lib/gitlab/version.rb
|
120
122
|
- spec/fixtures/branch.json
|
121
123
|
- spec/fixtures/branches.json
|
@@ -145,6 +147,7 @@ files:
|
|
145
147
|
- spec/fixtures/project_commit_diff.json
|
146
148
|
- spec/fixtures/project_commits.json
|
147
149
|
- spec/fixtures/project_delete_key.json
|
150
|
+
- spec/fixtures/project_events.json
|
148
151
|
- spec/fixtures/project_for_user.json
|
149
152
|
- spec/fixtures/project_fork_link.json
|
150
153
|
- spec/fixtures/project_hook.json
|
@@ -161,6 +164,7 @@ files:
|
|
161
164
|
- spec/fixtures/system_hook.json
|
162
165
|
- spec/fixtures/system_hook_test.json
|
163
166
|
- spec/fixtures/system_hooks.json
|
167
|
+
- spec/fixtures/tag.json
|
164
168
|
- spec/fixtures/team_member.json
|
165
169
|
- spec/fixtures/team_members.json
|
166
170
|
- spec/fixtures/unprotect_branch.json
|
@@ -235,6 +239,7 @@ test_files:
|
|
235
239
|
- spec/fixtures/project_commit_diff.json
|
236
240
|
- spec/fixtures/project_commits.json
|
237
241
|
- spec/fixtures/project_delete_key.json
|
242
|
+
- spec/fixtures/project_events.json
|
238
243
|
- spec/fixtures/project_for_user.json
|
239
244
|
- spec/fixtures/project_fork_link.json
|
240
245
|
- spec/fixtures/project_hook.json
|
@@ -251,6 +256,7 @@ test_files:
|
|
251
256
|
- spec/fixtures/system_hook.json
|
252
257
|
- spec/fixtures/system_hook_test.json
|
253
258
|
- spec/fixtures/system_hooks.json
|
259
|
+
- spec/fixtures/tag.json
|
254
260
|
- spec/fixtures/team_member.json
|
255
261
|
- spec/fixtures/team_members.json
|
256
262
|
- spec/fixtures/unprotect_branch.json
|