gerrit 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/gerrit/cli.rb +2 -20
- data/lib/gerrit/command/base.rb +27 -0
- data/lib/gerrit/command/clone.rb +71 -0
- data/lib/gerrit/command/list.rb +10 -5
- data/lib/gerrit/command/submit.rb +42 -0
- data/lib/gerrit/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3eefb2813d2ee8ef4a5483b89e24452b8be748e
|
4
|
+
data.tar.gz: 4931198fab15caed1fed6611833a054c3090a3ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c11d9e7fdb707dc9008c2b1391a16afc7f4c02c64159b34a7dd718b7b3b9f00cfce99a953c9a34a65d16c4ed5c1acbdae983b2a7ed22579649670edbd59a916
|
7
|
+
data.tar.gz: 964136850e519b217c5e4f25c240832b24e123b1edea216f824d73569de591653b9a4e0ab64400c4145eb0c32fb8142319682f89fb36af418bf5ea8404aa8049
|
data/lib/gerrit/cli.rb
CHANGED
@@ -47,26 +47,8 @@ module Gerrit
|
|
47
47
|
# Display all open changes by default
|
48
48
|
arguments = ['list'] if arguments.empty?
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
# Finds the {Command} corresponding to the given set of arguments.
|
55
|
-
#
|
56
|
-
# @param [Array<String>] arguments
|
57
|
-
# @return [Class]
|
58
|
-
def find_command(arguments)
|
59
|
-
cmd = arguments.first
|
60
|
-
|
61
|
-
begin
|
62
|
-
require 'gerrit/command/base'
|
63
|
-
require "gerrit/command/#{Utils.snake_case(cmd)}"
|
64
|
-
rescue LoadError => ex
|
65
|
-
raise Errors::CommandInvalidError,
|
66
|
-
"`gerrit #{cmd}` is not a valid command"
|
67
|
-
end
|
68
|
-
|
69
|
-
Command.const_get(Utils.camel_case(cmd))
|
50
|
+
require 'gerrit/command/base'
|
51
|
+
Command::Base.from_arguments(config, @ui, arguments).run
|
70
52
|
end
|
71
53
|
end
|
72
54
|
end
|
data/lib/gerrit/command/base.rb
CHANGED
@@ -7,6 +7,26 @@ module Gerrit::Command
|
|
7
7
|
class Base
|
8
8
|
include Gerrit::Utils
|
9
9
|
|
10
|
+
# Create a command from a list of arguments.
|
11
|
+
#
|
12
|
+
# @param config [Gerrit::Configuration]
|
13
|
+
# @param ui [Gerrit::UI]
|
14
|
+
# @param arguments [Array<String>]
|
15
|
+
# @return [Gerrit::Command::Base] appropriate command for the given
|
16
|
+
# arguments
|
17
|
+
def self.from_arguments(config, ui, arguments)
|
18
|
+
cmd = arguments.first
|
19
|
+
|
20
|
+
begin
|
21
|
+
require "gerrit/command/#{Gerrit::Utils.snake_case(cmd)}"
|
22
|
+
rescue LoadError => ex
|
23
|
+
raise Gerrit::Errors::CommandInvalidError,
|
24
|
+
"`gerrit #{cmd}` is not a valid command"
|
25
|
+
end
|
26
|
+
|
27
|
+
Gerrit::Command.const_get(Gerrit::Utils.camel_case(cmd)).new(config, ui, arguments)
|
28
|
+
end
|
29
|
+
|
10
30
|
# @param config [Gerrit::Configuration]
|
11
31
|
# @param ui [Gerrit::UI]
|
12
32
|
# @param arguments [Array<String>]
|
@@ -28,6 +48,13 @@ module Gerrit::Command
|
|
28
48
|
raise NotImplementedError, 'Define `execute` in Command subclass'
|
29
49
|
end
|
30
50
|
|
51
|
+
# Executes another command from the same context as this command.
|
52
|
+
#
|
53
|
+
# @param command_arguments [Array<String>]
|
54
|
+
def execute_command(command_arguments)
|
55
|
+
self.class.from_arguments(config, ui, command_arguments).execute
|
56
|
+
end
|
57
|
+
|
31
58
|
private
|
32
59
|
|
33
60
|
# @return [Array<String>]
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Gerrit::Command
|
2
|
+
# Clone a Gerrit project and set up its remotes to push/pull from Gerrit.
|
3
|
+
class Clone < Base
|
4
|
+
def execute
|
5
|
+
unless config[:push_remote]
|
6
|
+
raise ConfigurationInvalidError,
|
7
|
+
'Missing `push_remote` option in your configuration'
|
8
|
+
end
|
9
|
+
|
10
|
+
unless config[:remotes]
|
11
|
+
raise ConfigurationInvalidError,
|
12
|
+
'Missing `remotes` option in your configuration'
|
13
|
+
end
|
14
|
+
|
15
|
+
unless config[:remotes][config[:push_remote]]
|
16
|
+
raise ConfigurationInvalidError,
|
17
|
+
"Missing `#{config[:push_remote]}` remote in your `remotes` configuration"
|
18
|
+
end
|
19
|
+
|
20
|
+
project_name = project
|
21
|
+
|
22
|
+
remote_url = config[:remotes][config[:push_remote]]['url'] % {
|
23
|
+
user: config[:user],
|
24
|
+
host: config[:host],
|
25
|
+
port: config[:port],
|
26
|
+
project: project_name,
|
27
|
+
}
|
28
|
+
|
29
|
+
clone(remote_url, project_name)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def clone(remote_url, project)
|
35
|
+
p = Pastel.new
|
36
|
+
|
37
|
+
result =
|
38
|
+
ui.spinner("Cloning #{p.magenta(project)} from #{p.cyan(remote_url)}...") do
|
39
|
+
spawn(%W[git clone #{remote_url}])
|
40
|
+
end
|
41
|
+
|
42
|
+
project_dir = File.join(Dir.pwd, project)
|
43
|
+
|
44
|
+
if result.success?
|
45
|
+
ui.success("#{project} successfully cloned into #{project_dir}")
|
46
|
+
ui.newline
|
47
|
+
setup_remotes(project_dir)
|
48
|
+
else
|
49
|
+
ui.error(result.stdout + result.stderr)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def project
|
54
|
+
if arguments[1]
|
55
|
+
arguments[1]
|
56
|
+
else
|
57
|
+
ui.ask('Enter name of the Gerrit project would you like to clone: ')
|
58
|
+
.argument(:required)
|
59
|
+
.read_string
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def setup_remotes(repo_directory)
|
64
|
+
Dir.chdir(repo_directory) do
|
65
|
+
# Remove default remote so we can set up Gerrit remotes
|
66
|
+
`git remote rm origin`
|
67
|
+
execute_command(%w[setup])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/gerrit/command/list.rb
CHANGED
@@ -2,11 +2,7 @@ module Gerrit::Command
|
|
2
2
|
# Show a list of changes matching a specified query.
|
3
3
|
class List < Base
|
4
4
|
def execute
|
5
|
-
|
6
|
-
changes =
|
7
|
-
ui.spinner('Loading ') do
|
8
|
-
client.query_changes(query).sort_by { |change| -change['lastUpdated'] }
|
9
|
-
end
|
5
|
+
changes = ui.spinner('Loading ') { self.class.find_changes(client, query) }
|
10
6
|
|
11
7
|
# Display changes in reverse order so that the newest are at the bottom of
|
12
8
|
# the table (i.e. the part that will be visible in a console when there is
|
@@ -30,6 +26,15 @@ module Gerrit::Command
|
|
30
26
|
end
|
31
27
|
end
|
32
28
|
|
29
|
+
# HACK: We cache the results of this since we may want to reuse the result
|
30
|
+
# of the query in other commands (see Command::Submit for an example).
|
31
|
+
# We also make this a public class method so other commands can call it.
|
32
|
+
def self.find_changes(client, search_query)
|
33
|
+
@matching_changes ||= {}
|
34
|
+
@matching_changes[search_query] =
|
35
|
+
client.query_changes(search_query).sort_by { |change| -change['lastUpdated'] }
|
36
|
+
end
|
37
|
+
|
33
38
|
private
|
34
39
|
|
35
40
|
def query
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Gerrit::Command
|
2
|
+
# Display a list of submittable changes and ask the user which to submit.
|
3
|
+
class Submit < Base
|
4
|
+
# Default search query that assumes a change is submittable if there is at
|
5
|
+
# least one +1 for both Code-Review and Verified labels and no -1s.
|
6
|
+
DEFAULT_SEARCH_QUERY = %w[
|
7
|
+
is:open
|
8
|
+
label:Code-Review+1
|
9
|
+
label:Verified+1
|
10
|
+
NOT label:Code-Review-1
|
11
|
+
NOT label:Verified-1
|
12
|
+
].join(' ')
|
13
|
+
|
14
|
+
def execute
|
15
|
+
list_query = config.fetch('submittable_changes', DEFAULT_SEARCH_QUERY)
|
16
|
+
execute_command(['list', list_query])
|
17
|
+
|
18
|
+
# This will return a cached result from Command::List
|
19
|
+
changes = Gerrit::Command::List.find_changes(client, list_query)
|
20
|
+
|
21
|
+
index = 0
|
22
|
+
while index < 1 || index > changes.size
|
23
|
+
range = changes.size == 1 ? '' : "(1 - #{changes.size})"
|
24
|
+
index = ui.ask("Which change would you like to submit? #{range} ")
|
25
|
+
.argument(:required)
|
26
|
+
.read_int
|
27
|
+
end
|
28
|
+
|
29
|
+
submit_change(changes[index - 1])
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def submit_change(change)
|
35
|
+
p = Pastel.new
|
36
|
+
description = p.cyan("#{change['subject']}") + p.green(" (##{change['number']})")
|
37
|
+
ui.spinner("Submitting #{description}...") do
|
38
|
+
ui.print(client.execute(%W[review change:#{change['number']} --submit]))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/gerrit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gerrit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane da Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: childprocess
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- lib/gerrit/client.rb
|
81
81
|
- lib/gerrit/command/base.rb
|
82
82
|
- lib/gerrit/command/checkout.rb
|
83
|
+
- lib/gerrit/command/clone.rb
|
83
84
|
- lib/gerrit/command/console.rb
|
84
85
|
- lib/gerrit/command/groups.rb
|
85
86
|
- lib/gerrit/command/help.rb
|
@@ -88,6 +89,7 @@ files:
|
|
88
89
|
- lib/gerrit/command/projects.rb
|
89
90
|
- lib/gerrit/command/push.rb
|
90
91
|
- lib/gerrit/command/setup.rb
|
92
|
+
- lib/gerrit/command/submit.rb
|
91
93
|
- lib/gerrit/command/version.rb
|
92
94
|
- lib/gerrit/configuration.rb
|
93
95
|
- lib/gerrit/constants.rb
|