gitlab 3.2.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +195 -0
- data/README.md +12 -0
- data/lib/gitlab.rb +5 -0
- data/lib/gitlab/cli.rb +6 -0
- data/lib/gitlab/cli_helpers.rb +40 -3
- data/lib/gitlab/client.rb +1 -0
- data/lib/gitlab/client/labels.rb +55 -0
- data/lib/gitlab/client/merge_requests.rb +20 -2
- data/lib/gitlab/client/projects.rb +18 -9
- data/lib/gitlab/client/repositories.rb +84 -4
- data/lib/gitlab/configuration.rb +1 -1
- data/lib/gitlab/help.rb +2 -2
- data/lib/gitlab/objectified_hash.rb +4 -0
- data/lib/gitlab/request.rb +18 -6
- data/lib/gitlab/shell.rb +42 -4
- data/lib/gitlab/shell_history.rb +61 -0
- data/lib/gitlab/version.rb +1 -1
- data/spec/fixtures/compare_merge_request_diff.json +31 -0
- data/spec/fixtures/label.json +1 -0
- data/spec/fixtures/labels.json +1 -0
- data/spec/fixtures/{comment_merge_request.json → merge_request_comment.json} +0 -0
- data/spec/fixtures/project_commit_comment.json +1 -0
- data/spec/fixtures/project_commit_comments.json +1 -0
- data/spec/fixtures/project_tag_annotated.json +1 -0
- data/spec/fixtures/project_tag_lightweight.json +1 -0
- data/spec/fixtures/raw_file.json +2 -0
- data/spec/fixtures/shell_history.json +2 -0
- data/spec/fixtures/tree.json +1 -0
- data/spec/gitlab/client/branches_spec.rb +12 -31
- data/spec/gitlab/client/labels_spec.rb +68 -0
- data/spec/gitlab/client/merge_requests_spec.rb +39 -17
- data/spec/gitlab/client/projects_spec.rb +1 -1
- data/spec/gitlab/client/repositories_spec.rb +110 -5
- data/spec/gitlab/client/system_hooks_spec.rb +3 -3
- data/spec/gitlab/objectified_hash_spec.rb +19 -1
- data/spec/gitlab/request_spec.rb +4 -3
- data/spec/gitlab/shell_history_spec.rb +53 -0
- data/spec/gitlab_spec.rb +21 -1
- metadata +32 -21
- data/spec/fixtures/create_branch.json +0 -1
- data/spec/fixtures/create_merge_request.json +0 -1
- data/spec/fixtures/project_delete_key.json +0 -8
- data/spec/fixtures/protect_branch.json +0 -1
- data/spec/fixtures/system_hook_test.json +0 -1
- data/spec/fixtures/tag.json +0 -1
- data/spec/fixtures/unprotect_branch.json +0 -1
- data/spec/fixtures/update_merge_request.json +0 -1
@@ -19,14 +19,15 @@ class Gitlab::Client
|
|
19
19
|
# Creates a new project repository tag.
|
20
20
|
#
|
21
21
|
# @example
|
22
|
-
# Gitlab.create_tag(42,'new_tag','master')
|
22
|
+
# Gitlab.create_tag(42,'new_tag','master')
|
23
23
|
#
|
24
24
|
# @param [Integer] project The ID of a project.
|
25
25
|
# @param [String] tag_name The name of the new tag.
|
26
26
|
# @param [String] ref The ref (commit sha, branch name, or another tag) the tag will point to.
|
27
|
+
# @param [String] message Optional message for tag, creates annotated tag if specified.
|
27
28
|
# @return [Gitlab::ObjectifiedHash]
|
28
|
-
def create_tag(project, tag_name, ref)
|
29
|
-
post("/projects/#{project}/repository/tags", body: {tag_name: tag_name, ref: ref})
|
29
|
+
def create_tag(project, tag_name, ref, message='')
|
30
|
+
post("/projects/#{project}/repository/tags", body: {tag_name: tag_name, ref: ref, message: message})
|
30
31
|
end
|
31
32
|
alias_method :repo_create_tag, :create_tag
|
32
33
|
|
@@ -71,8 +72,87 @@ class Gitlab::Client
|
|
71
72
|
# @param [String] sha The name of a repository branch or tag or if not given the default branch.
|
72
73
|
# @return [Gitlab::ObjectifiedHash]
|
73
74
|
def commit_diff(project, sha)
|
74
|
-
get("/projects/#{project}/repository/commits/#{sha}/diff")
|
75
|
+
get("/projects/#{project}/repository/commits/#{sha}/diff")
|
75
76
|
end
|
76
77
|
alias_method :repo_commit_diff, :commit_diff
|
78
|
+
|
79
|
+
# Get the contents of a file
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
# Gitlab.file_contents(42, 'Gemfile')
|
83
|
+
# Gitlab.repo_file_contents(3, 'Gemfile', 'ed899a2f4b50b4370feeea94676502b42383c746')
|
84
|
+
#
|
85
|
+
# @param [Integer] project The ID of a project.
|
86
|
+
# @param [String] filepath The relative path of the file in the repository
|
87
|
+
# @param [String] ref The name of a repository branch or tag or if not given the default branch.
|
88
|
+
# @return [String]
|
89
|
+
def file_contents(project, filepath, ref = 'master')
|
90
|
+
get "/projects/#{project}/repository/blobs/#{ref}?filepath=#{filepath}",
|
91
|
+
format: nil,
|
92
|
+
headers: { Accept: 'text/plain' },
|
93
|
+
parser: ::Gitlab::Request::Parser
|
94
|
+
end
|
95
|
+
alias_method :repo_file_contents, :file_contents
|
96
|
+
|
97
|
+
# Gets a list of comments for a commit.
|
98
|
+
#
|
99
|
+
# @example
|
100
|
+
# Gitlab.commit_comments(5, c9f9662a9b1116c838b523ed64c6abdb4aae4b8b)
|
101
|
+
#
|
102
|
+
# @param [Integer] project The ID of a project.
|
103
|
+
# @param [String] sha The commit hash or name of a repository branch or tag.
|
104
|
+
# @option options [Integer] :page The page number.
|
105
|
+
# @option options [Integer] :per_page The number of results per page.
|
106
|
+
# @return [Array<Gitlab::ObjectifiedHash>]
|
107
|
+
def commit_comments(project, commit, options={})
|
108
|
+
get("/projects/#{project}/repository/commits/#{commit}/comments", :query => options)
|
109
|
+
end
|
110
|
+
alias_method :repo_commit_comments, :commit_comments
|
111
|
+
|
112
|
+
# Creates a new comment for a commit.
|
113
|
+
#
|
114
|
+
# @param [Integer] project The ID of a project.
|
115
|
+
# @param [String] sha The commit hash or name of a repository branch or tag.
|
116
|
+
# @param [String] note The text of a comment.
|
117
|
+
# @param [Hash] options A customizable set of options.
|
118
|
+
# @option options [String] :path The file path.
|
119
|
+
# @option options [Integer] :line The line number.
|
120
|
+
# @option options [String] :line_type The line type (new or old).
|
121
|
+
# @return [Gitlab::ObjectifiedHash] Information about created comment.
|
122
|
+
def create_commit_comment(project, commit, note, options={})
|
123
|
+
post("/projects/#{project}/repository/commits/#{commit}/comments", :body => options.merge(:note => note))
|
124
|
+
end
|
125
|
+
alias_method :repo_create_commit_comment, :create_commit_comment
|
126
|
+
|
127
|
+
# Get file tree project (root level).
|
128
|
+
#
|
129
|
+
# @example
|
130
|
+
# Gitlab.tree(42)
|
131
|
+
# Gitlab.tree(42, path: "Gemfile")
|
132
|
+
#
|
133
|
+
# @param [Integer] project The ID of a project.
|
134
|
+
# @param [Hash] options A customizable set of options.
|
135
|
+
# @option options [String] :path The path inside repository.
|
136
|
+
# @option options [String] :ref_name The name of a repository branch or tag.
|
137
|
+
# @return [Gitlab::ObjectifiedHash]
|
138
|
+
def tree(project, options={})
|
139
|
+
get("/projects/#{project}/repository/tree", query: options)
|
140
|
+
end
|
141
|
+
alias_method :repo_tree, :tree
|
142
|
+
|
143
|
+
# Compares branches, tags or commits.
|
144
|
+
#
|
145
|
+
# @example
|
146
|
+
# Gitlab.compare(42, 'master', 'feature/branch')
|
147
|
+
# Gitlab.repo_compare(42, 'master', 'feature/branch')
|
148
|
+
#
|
149
|
+
# @param [Integer] project The ID of a project.
|
150
|
+
# @param [String] from The commit SHA or branch name of from branch.
|
151
|
+
# @param [String] to The commit SHA or branch name of to branch.
|
152
|
+
# @return [Gitlab::ObjectifiedHash]
|
153
|
+
def compare(project, from, to)
|
154
|
+
get("/projects/#{project}/repository/compare", :query => {:from => from, :to => to})
|
155
|
+
end
|
156
|
+
alias_method :repo_compare, :compare
|
77
157
|
end
|
78
158
|
end
|
data/lib/gitlab/configuration.rb
CHANGED
@@ -2,7 +2,7 @@ module Gitlab
|
|
2
2
|
# Defines constants and methods related to configuration.
|
3
3
|
module Configuration
|
4
4
|
# An array of valid keys in the options hash when configuring a Gitlab::API.
|
5
|
-
VALID_OPTIONS_KEYS = [:endpoint, :private_token, :user_agent, :sudo].freeze
|
5
|
+
VALID_OPTIONS_KEYS = [:endpoint, :private_token, :user_agent, :sudo, :httparty].freeze
|
6
6
|
|
7
7
|
# The user agent that will be sent to the API endpoint if none is set.
|
8
8
|
DEFAULT_USER_AGENT = "Gitlab Ruby Gem #{Gitlab::VERSION}".freeze
|
data/lib/gitlab/help.rb
CHANGED
@@ -20,10 +20,10 @@ module Gitlab::Help
|
|
20
20
|
ri_output = `#{ri_cmd} -T #{namespace} 2>&1`.chomp
|
21
21
|
|
22
22
|
if $? == 0
|
23
|
-
ri_output.gsub!(/#{cmd}\((
|
23
|
+
ri_output.gsub!(/#{cmd}\((.*?)\)/m, cmd+' \1')
|
24
24
|
ri_output.gsub!(/Gitlab\./, 'gitlab> ')
|
25
25
|
ri_output.gsub!(/Gitlab\..+$/, '')
|
26
|
-
ri_output.gsub!(
|
26
|
+
ri_output.gsub!(/\,[\s]*/, ' ')
|
27
27
|
help = ri_output
|
28
28
|
else
|
29
29
|
help = "Ri docs not found for #{namespace}, please install the docs to use 'help'"
|
data/lib/gitlab/request.rb
CHANGED
@@ -9,7 +9,7 @@ module Gitlab
|
|
9
9
|
headers 'Accept' => 'application/json'
|
10
10
|
parser Proc.new { |body, _| parse(body) }
|
11
11
|
|
12
|
-
attr_accessor :private_token
|
12
|
+
attr_accessor :private_token, :endpoint
|
13
13
|
|
14
14
|
# Converts the response body to an ObjectifiedHash.
|
15
15
|
def self.parse(body)
|
@@ -34,23 +34,27 @@ module Gitlab
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def get(path, options={})
|
37
|
+
set_httparty_config(options)
|
37
38
|
set_private_token_header(options)
|
38
|
-
validate self.class.get(path, options)
|
39
|
+
validate self.class.get(@endpoint + path, options)
|
39
40
|
end
|
40
41
|
|
41
42
|
def post(path, options={})
|
43
|
+
set_httparty_config(options)
|
42
44
|
set_private_token_header(options, path)
|
43
|
-
validate self.class.post(path, options)
|
45
|
+
validate self.class.post(@endpoint + path, options)
|
44
46
|
end
|
45
47
|
|
46
48
|
def put(path, options={})
|
49
|
+
set_httparty_config(options)
|
47
50
|
set_private_token_header(options)
|
48
|
-
validate self.class.put(path, options)
|
51
|
+
validate self.class.put(@endpoint + path, options)
|
49
52
|
end
|
50
53
|
|
51
54
|
def delete(path, options={})
|
55
|
+
set_httparty_config(options)
|
52
56
|
set_private_token_header(options)
|
53
|
-
validate self.class.delete(path, options)
|
57
|
+
validate self.class.delete(@endpoint + path, options)
|
54
58
|
end
|
55
59
|
|
56
60
|
# Checks the response code for common errors.
|
@@ -76,8 +80,8 @@ module Gitlab
|
|
76
80
|
def set_request_defaults(endpoint, private_token, sudo=nil)
|
77
81
|
raise Error::MissingCredentials.new("Please set an endpoint to API") unless endpoint
|
78
82
|
@private_token = private_token
|
83
|
+
@endpoint = endpoint
|
79
84
|
|
80
|
-
self.class.base_uri endpoint
|
81
85
|
self.class.default_params :sudo => sudo
|
82
86
|
self.class.default_params.delete(:sudo) if sudo.nil?
|
83
87
|
end
|
@@ -93,6 +97,14 @@ module Gitlab
|
|
93
97
|
end
|
94
98
|
end
|
95
99
|
|
100
|
+
# Set HTTParty configuration
|
101
|
+
# @see https://github.com/jnunemaker/httparty
|
102
|
+
def set_httparty_config(options)
|
103
|
+
if self.httparty
|
104
|
+
options.merge!(self.httparty)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
96
108
|
def error_message(response)
|
97
109
|
"Server responded with code #{response.code}, message: #{response.parsed_response.message}. " \
|
98
110
|
"Request URI: #{response.request.base_uri}#{response.request.path}"
|
data/lib/gitlab/shell.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
require 'gitlab'
|
2
2
|
require 'gitlab/help'
|
3
3
|
require 'gitlab/cli_helpers'
|
4
|
+
require 'gitlab/shell_history'
|
4
5
|
require 'readline'
|
6
|
+
require 'shellwords'
|
5
7
|
|
6
8
|
class Gitlab::Shell
|
7
9
|
extend Gitlab::CLI::Helpers
|
8
10
|
|
11
|
+
# Start gitlab shell and run infinite loop waiting for user input
|
9
12
|
def self.start
|
13
|
+
history.load
|
10
14
|
actions = Gitlab.actions
|
11
15
|
|
12
16
|
comp = proc { |s| actions.map(&:to_s).grep(/^#{Regexp.escape(s)}/) }
|
@@ -16,9 +20,21 @@ class Gitlab::Shell
|
|
16
20
|
|
17
21
|
client = Gitlab::Client.new(endpoint: '')
|
18
22
|
|
19
|
-
while buf = Readline.readline(
|
23
|
+
while buf = Readline.readline('gitlab> ')
|
24
|
+
trap('INT') { quit_shell } # capture ctrl-c
|
25
|
+
|
20
26
|
next if buf.nil? || buf.empty?
|
21
|
-
buf
|
27
|
+
quit_shell if buf == 'exit'
|
28
|
+
|
29
|
+
history << buf
|
30
|
+
|
31
|
+
begin
|
32
|
+
buf = Shellwords.shellwords(buf)
|
33
|
+
rescue ArgumentError => e
|
34
|
+
puts e.message
|
35
|
+
next
|
36
|
+
end
|
37
|
+
|
22
38
|
cmd = buf.shift
|
23
39
|
args = buf.count > 0 ? buf : []
|
24
40
|
|
@@ -32,18 +48,40 @@ class Gitlab::Shell
|
|
32
48
|
}
|
33
49
|
end
|
34
50
|
|
35
|
-
args[0].nil? ? Gitlab::Help.get_help(methods) :
|
51
|
+
args[0].nil? ? Gitlab::Help.get_help(methods) :
|
52
|
+
Gitlab::Help.get_help(methods, args[0])
|
36
53
|
next
|
37
54
|
end
|
38
55
|
|
56
|
+
syntax_errors = false
|
57
|
+
|
58
|
+
begin
|
59
|
+
yaml_load_and_symbolize_hash!(args)
|
60
|
+
rescue
|
61
|
+
syntax_errors = true
|
62
|
+
end
|
63
|
+
|
64
|
+
# errors have been displayed, return to the prompt
|
65
|
+
next if syntax_errors
|
66
|
+
|
39
67
|
data = if actions.include?(cmd.to_sym)
|
40
68
|
confirm_command(cmd)
|
41
69
|
gitlab_helper(cmd, args)
|
42
70
|
else
|
43
|
-
"'#{cmd}' is not a valid command.
|
71
|
+
"'#{cmd}' is not a valid command. " +
|
72
|
+
"See the 'help' for a list of valid commands."
|
44
73
|
end
|
45
74
|
|
46
75
|
output_table(cmd, args, data)
|
47
76
|
end
|
48
77
|
end
|
78
|
+
|
79
|
+
def self.quit_shell
|
80
|
+
history.save
|
81
|
+
exit
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.history
|
85
|
+
@history ||= History.new
|
86
|
+
end
|
49
87
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class Gitlab::Shell
|
2
|
+
class History
|
3
|
+
DEFAULT_HISTFILESIZE = 200
|
4
|
+
DEFAULT_FILE_PATH = File.join(Dir.home, '.gitlab_shell_history')
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
@file_path = options[:file_path] || DEFAULT_FILE_PATH
|
8
|
+
Readline::HISTORY.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
def load
|
12
|
+
read_from_file { |line| Readline::HISTORY << line.chomp }
|
13
|
+
end
|
14
|
+
|
15
|
+
def save
|
16
|
+
lines.each { |line| history_file.puts line if history_file }
|
17
|
+
end
|
18
|
+
|
19
|
+
def push(line)
|
20
|
+
Readline::HISTORY << line
|
21
|
+
end
|
22
|
+
alias_method :<<, :push
|
23
|
+
|
24
|
+
def lines
|
25
|
+
Readline::HISTORY.to_a.last(max_lines)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def history_file
|
31
|
+
if defined?(@history_file)
|
32
|
+
@history_file
|
33
|
+
else
|
34
|
+
@history_file = File.open(history_file_path, 'w', 0600).tap do |file|
|
35
|
+
file.sync = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
rescue Errno::EACCES
|
39
|
+
warn 'History not saved; unable to open your history file for writing.'
|
40
|
+
@history_file = false
|
41
|
+
end
|
42
|
+
|
43
|
+
def history_file_path
|
44
|
+
File.expand_path(@file_path)
|
45
|
+
end
|
46
|
+
|
47
|
+
def read_from_file
|
48
|
+
path = history_file_path
|
49
|
+
|
50
|
+
if File.exist?(path)
|
51
|
+
File.foreach(path) { |line| yield(line) }
|
52
|
+
end
|
53
|
+
rescue => error
|
54
|
+
warn "History file not loaded: #{error.message}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def max_lines
|
58
|
+
(ENV['GITLAB_HISTFILESIZE']|| DEFAULT_HISTFILESIZE).to_i
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/gitlab/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
{
|
3
|
+
"commit": {
|
4
|
+
"id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
|
5
|
+
"short_id": "12d65c8dd2b",
|
6
|
+
"title": "JS fix",
|
7
|
+
"author_name": "Dmitriy Zaporozhets",
|
8
|
+
"author_email": "dmitriy.zaporozhets@gmail.com",
|
9
|
+
"created_at": "2014-02-27T10:27:00+02:00"
|
10
|
+
},
|
11
|
+
"commits": [{
|
12
|
+
"id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
|
13
|
+
"short_id": "12d65c8dd2b",
|
14
|
+
"title": "JS fix",
|
15
|
+
"author_name": "Dmitriy Zaporozhets",
|
16
|
+
"author_email": "dmitriy.zaporozhets@gmail.com",
|
17
|
+
"created_at": "2014-02-27T10:27:00+02:00"
|
18
|
+
}],
|
19
|
+
"diffs": [{
|
20
|
+
"old_path": "files/js/application.js",
|
21
|
+
"new_path": "files/js/application.js",
|
22
|
+
"a_mode": null,
|
23
|
+
"b_mode": "100644",
|
24
|
+
"diff": "--- a/files/js/application.js\n+++ b/files/js/application.js\n@@ -24,8 +24,10 @@\n //= require g.raphael-min\n //= require g.bar-min\n //= require branch-graph\n-//= require highlightjs.min\n-//= require ace/ace\n //= require_tree .\n //= require d3\n //= require underscore\n+\n+function fix() { \n+ alert(\"Fixed\")\n+}",
|
25
|
+
"new_file": false,
|
26
|
+
"renamed_file": false,
|
27
|
+
"deleted_file": false
|
28
|
+
}],
|
29
|
+
"compare_timeout": false,
|
30
|
+
"compare_same_ref": false
|
31
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"name": "Backlog", "color": "#DD10AA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"name": "Backlog", "color": "#DD10AA"},{"name": "Documentation", "color": "#1E80DD"}]
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"note":"Nice code!","author":{"id":1,"username":"jsmith","email":"john@example.com","name":"John Smith","blocked":false,"created_at":"2012-07-11T01:32:18Z"}}
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"note":"this is the 1st comment on commit 6104942438c14ec7bd21c6cd5bd995272b3faff6","author":{"id":11,"username":"admin","email":"admin@example.com","name":"A User","state":"active","created_at":"2014-03-06T08:17:35.000Z"}},{"note":"another discussion point on commit 6104942438c14ec7bd21c6cd5bd995272b3faff6","author":{"id":12,"username":"admin","email":"admin@example.com","name":"A User","state":"active","created_at":"2014-03-06T08:17:35.000Z"}}]
|
@@ -0,0 +1 @@
|
|
1
|
+
{"name": "v1.1.0","message": "Release 1.1.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"}}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"name": "v1.0.0","message": null,"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"}}
|
@@ -0,0 +1 @@
|
|
1
|
+
[{"id":"a2cc3b0ffc1c7d06fab5642eb99ea387b57f22f8","name":"app","type":"tree","mode":"040000"},{"id":"63164bdfbc11b69f1032fbe35da0f1e9c18af2fd","name":"bin","type":"tree","mode":"040000"},{"id":"2cf682191722f20f00a371d7da58f6a35701c11d","name":"config","type":"tree","mode":"040000"},{"id":"2e76c8c1bbc46bcc762788a432d802d65a534a28","name":"db","type":"tree","mode":"040000"},{"id":"767cfc8360b50c50bb5bdde288b96a84e3efa66e","name":"doc","type":"tree","mode":"040000"},{"id":"3fa0d1024f5e372bf9e43d1dac47bd1e95ab0858","name":"lib","type":"tree","mode":"040000"},{"id":"4e79d0ac6225844602a1b9273b26d8996f777bf2","name":"log","type":"tree","mode":"040000"},{"id":"7cb7f593c6914d20fa6cc4ab5a7c34337a50e97c","name":"public","type":"tree","mode":"040000"},{"id":"d97169eef778f3cd1d4d94cbe3415b3166d15c71","name":"spec","type":"tree","mode":"040000"},{"id":"97c97da29fa97e2158cfdcdcb042af9da0bc3de4","name":"vendor","type":"tree","mode":"040000"},{"id":"d316760e4746059c117007507594a1d75b47df38","name":".gitignore","type":"blob","mode":"100644"},{"id":"f2e7cd477536f18d8e939faf452930b59a27063d","name":".travis.yml","type":"blob","mode":"100644"},{"id":"d5c68bda5f0fe703a80906f66cfe537ca807a5a6","name":"Capfile","type":"blob","mode":"100644"},{"id":"8f46eac03c6cd7ce03cda7ec3d78afdc6971e4c0","name":"Gemfile","type":"blob","mode":"100644"},{"id":"5e260573173b51eaa073661d7914fb0e935ee27f","name":"Gemfile.lock","type":"blob","mode":"100644"},{"id":"e57032f682b69f14243c09d66a0892a03b4c6045","name":"Procfile","type":"blob","mode":"100644"},{"id":"905e96da839dad683dfcf4e202bf1e030390b964","name":"README.md","type":"blob","mode":"100644"},{"id":"24a16769fd94926350a59f7b1cbd78e9e2674c57","name":"Rakefile","type":"blob","mode":"100644"},{"id":"b384d6d57c6a775a9b6bc35d79ad7f03e673a233","name":"config.ru","type":"blob","mode":"100644"}]
|
@@ -39,7 +39,7 @@ describe Gitlab::Client do
|
|
39
39
|
|
40
40
|
describe ".protect_branch" do
|
41
41
|
before do
|
42
|
-
stub_put("/projects/3/repository/branches/api/protect", "
|
42
|
+
stub_put("/projects/3/repository/branches/api/protect", "branch")
|
43
43
|
@branch = Gitlab.protect_branch(3, "api")
|
44
44
|
end
|
45
45
|
|
@@ -49,13 +49,12 @@ describe Gitlab::Client do
|
|
49
49
|
|
50
50
|
it "should return information about a protected repository branch" do
|
51
51
|
expect(@branch.name).to eq("api")
|
52
|
-
expect(@branch.protected).to eq(true)
|
53
52
|
end
|
54
53
|
end
|
55
54
|
|
56
55
|
describe ".unprotect_branch" do
|
57
56
|
before do
|
58
|
-
stub_put("/projects/3/repository/branches/api/unprotect", "
|
57
|
+
stub_put("/projects/3/repository/branches/api/unprotect", "branch")
|
59
58
|
@branch = Gitlab.unprotect_branch(3, "api")
|
60
59
|
end
|
61
60
|
|
@@ -65,39 +64,21 @@ describe Gitlab::Client do
|
|
65
64
|
|
66
65
|
it "should return information about an unprotected repository branch" do
|
67
66
|
expect(@branch.name).to eq("api")
|
68
|
-
expect(@branch.protected).to eq(false)
|
69
67
|
end
|
70
68
|
end
|
71
69
|
|
72
70
|
describe ".create_branch" do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
@branch = Gitlab.create_branch(3, "api","master")
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should get the correct resource" do
|
80
|
-
expect(a_post("/projects/3/repository/branches")).to have_been_made
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should return information about a new repository branch" do
|
84
|
-
expect(@branch.name).to eq("api")
|
85
|
-
end
|
71
|
+
before do
|
72
|
+
stub_post("/projects/3/repository/branches", "branch")
|
73
|
+
@branch = Gitlab.create_branch(3, "api", "master")
|
86
74
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
@branch = Gitlab.create_branch(3, "api","949b1df930bedace1dbd755aaa4a82e8c451a616")
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should get the correct resource" do
|
94
|
-
expect(a_post("/projects/3/repository/branches")).to have_been_made
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should return information about a new repository branch" do
|
98
|
-
expect(@branch.name).to eq("api")
|
99
|
-
end
|
75
|
+
|
76
|
+
it "should get the correct resource" do
|
77
|
+
expect(a_post("/projects/3/repository/branches")).to have_been_made
|
100
78
|
end
|
101
|
-
end
|
102
79
|
|
80
|
+
it "should return information about a new repository branch" do
|
81
|
+
expect(@branch.name).to eq("api")
|
82
|
+
end
|
83
|
+
end
|
103
84
|
end
|