plunger 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -0
- data/config/configure_options.yml +24 -0
- data/lib/plunger/changeset/git.rb +25 -2
- data/lib/plunger/command/configure.rb +17 -9
- data/lib/plunger/command/push.rb +29 -14
- data/lib/plunger/command/upgrade.rb +1 -1
- data/lib/plunger/command.rb +3 -3
- data/lib/plunger/config.rb +4 -0
- data/lib/plunger/runner.rb +9 -2
- data/lib/plunger/version.rb +1 -1
- metadata +4 -3
data/README.md
CHANGED
@@ -45,6 +45,12 @@ Synopsis:
|
|
45
45
|
|
46
46
|
plunger push
|
47
47
|
|
48
|
+
Push options:
|
49
|
+
--initial REVISION Initial changeset revision.
|
50
|
+
--final REVISION Final changeset revision.
|
51
|
+
--issue NUMBER Issue number to which to add. Defaults to new issue.
|
52
|
+
|
53
|
+
|
48
54
|
## Developer Flow
|
49
55
|
|
50
56
|
* Go to your VCS project and optionally switch to your working branch.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
- key: python_bin
|
3
|
+
value: python
|
4
|
+
description: Path to python v2 binary
|
5
|
+
|
6
|
+
- key: git_bin
|
7
|
+
value: git
|
8
|
+
description: Path to git binary
|
9
|
+
|
10
|
+
- key: server
|
11
|
+
value: coderev.railsware.com
|
12
|
+
description: Code review server
|
13
|
+
|
14
|
+
- key: domain
|
15
|
+
value: railsware.com
|
16
|
+
description: Google app domain
|
17
|
+
|
18
|
+
- key: username
|
19
|
+
value: vasya.pupkin
|
20
|
+
description: Google app username
|
21
|
+
|
22
|
+
- key: master_reviewer
|
23
|
+
value: product_manager
|
24
|
+
description: Master reviewer username
|
@@ -10,6 +10,10 @@ module Plunger
|
|
10
10
|
Config.data['git_bin'] || 'git'
|
11
11
|
end
|
12
12
|
|
13
|
+
def sync_repository(remote = 'origin')
|
14
|
+
system("#{self.command} fetch #{remote}")
|
15
|
+
end
|
16
|
+
|
13
17
|
def initial_revision
|
14
18
|
'origin/master'
|
15
19
|
end
|
@@ -21,10 +25,15 @@ module Plunger
|
|
21
25
|
end
|
22
26
|
|
23
27
|
def initialize(initial, final)
|
24
|
-
@
|
28
|
+
@initial = initial
|
29
|
+
@final = final
|
25
30
|
end
|
26
31
|
|
27
|
-
attr_reader :
|
32
|
+
attr_reader :initial, :final
|
33
|
+
|
34
|
+
def range
|
35
|
+
@range = "#{initial}..#{final}"
|
36
|
+
end
|
28
37
|
|
29
38
|
def repository_name
|
30
39
|
@repository_name ||= File.split(File.expand_path('.')).last
|
@@ -55,6 +64,20 @@ module Plunger
|
|
55
64
|
map { |email| email.strip }.
|
56
65
|
uniq
|
57
66
|
end
|
67
|
+
|
68
|
+
def initial_commits_count
|
69
|
+
@initial_commits_count ||=
|
70
|
+
Command.spawn_result("#{self.class.command} rev-list #{initial} ^#{final}").split("\n").
|
71
|
+
size.
|
72
|
+
to_i
|
73
|
+
end
|
74
|
+
|
75
|
+
def final_commits_count
|
76
|
+
@final_commits_count ||=
|
77
|
+
Command.spawn_result("#{self.class.command} rev-list ^#{initial} #{final}").split("\n").
|
78
|
+
size.
|
79
|
+
to_i
|
80
|
+
end
|
58
81
|
end
|
59
82
|
end
|
60
83
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
module Plunger
|
2
4
|
module Command
|
3
5
|
class Configure
|
@@ -15,17 +17,23 @@ module Plunger
|
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
18
|
-
def
|
20
|
+
def config_file
|
21
|
+
File.expand_path('../../../../config/configure_options.yml', __FILE__)
|
22
|
+
end
|
23
|
+
|
24
|
+
def configure_options
|
25
|
+
YAML.load_file(config_file)
|
26
|
+
end
|
27
|
+
|
28
|
+
def run(options)
|
19
29
|
Command.ui.say "Please configure plunger (enter nothing if you don't want to change option)"
|
20
30
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
].each do |args|
|
28
|
-
configure(*args)
|
31
|
+
configure_options.each do |option|
|
32
|
+
configure(
|
33
|
+
option['key'],
|
34
|
+
option['description'],
|
35
|
+
option['value']
|
36
|
+
)
|
29
37
|
end
|
30
38
|
|
31
39
|
Plunger::Config.save
|
data/lib/plunger/command/push.rb
CHANGED
@@ -15,17 +15,20 @@ module Plunger
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def run
|
18
|
+
def run(options)
|
19
19
|
unless changeset_class = Changeset.detect_class
|
20
20
|
Command.ui.say("Can't detect SCM")
|
21
21
|
return false
|
22
22
|
end
|
23
23
|
|
24
|
+
Command.ui.say("Synchronizing repository...")
|
25
|
+
changeset_class.sync_repository
|
26
|
+
|
24
27
|
revisions = [
|
25
|
-
[changeset_class.initial_revision,
|
26
|
-
[changeset_class.final_revision,
|
27
|
-
].map do |default,
|
28
|
-
revision = Command.ui.ask("Specify #{
|
28
|
+
[changeset_class.initial_revision, :initial ],
|
29
|
+
[changeset_class.final_revision, :final ]
|
30
|
+
].map do |default, type|
|
31
|
+
revision = options[type] || Command.ui.ask("Specify #{type} revision or reference (#{default}):")
|
29
32
|
revision.empty? ? default : revision
|
30
33
|
end
|
31
34
|
|
@@ -33,26 +36,38 @@ module Plunger
|
|
33
36
|
|
34
37
|
changeset.empty? and abort("Changeset #{changeset.range} is empty")
|
35
38
|
|
39
|
+
unless changeset.initial_commits_count.zero?
|
40
|
+
message = "Revision '#{changeset.initial}' contains #{changeset.initial_commits_count} commits that are NOT into '#{changeset.final}' revision! Continue (y/n)"
|
41
|
+
Command.ui.ask(message) == 'y' or abort
|
42
|
+
end
|
43
|
+
|
44
|
+
reviewers = normalize_reviewers(Config.data['master_reviewer'])
|
45
|
+
|
36
46
|
message = changeset.message
|
37
47
|
description = changeset.description
|
38
|
-
reviewers
|
48
|
+
reviewers += filter_reviewers(changeset.author_emails)
|
39
49
|
|
40
|
-
|
41
|
-
|
42
|
-
else
|
43
|
-
Command.ui.say("Found reviewers in the changeset:")
|
44
|
-
reviewers.each { |reviewer| Command.ui.say(reviewer) }
|
45
|
-
end
|
50
|
+
Command.ui.say("Next reviewers will be notified:")
|
51
|
+
reviewers.each { |reviewer| Command.ui.say(reviewer) }
|
46
52
|
|
47
53
|
reviewers += normalize_reviewers(
|
48
54
|
Command.ui.ask("Specify another reviewers (comma separated email addresses or just names):")
|
49
55
|
)
|
50
56
|
|
51
|
-
issue = Command.ui.ask("Issue number (omit to create new issue):")
|
57
|
+
issue = options[:issue] || Command.ui.ask("Issue number (omit to create new issue):")
|
58
|
+
|
59
|
+
confirmation = "Push changeset '#{message}' "
|
60
|
+
if issue.empty?
|
61
|
+
confirmation << "to NEW issue"
|
62
|
+
else
|
63
|
+
confirmation << "to issue##{issue}"
|
64
|
+
end
|
65
|
+
confirmation << " for code review? (y/n)"
|
66
|
+
Command.ui.ask(confirmation) == 'y' || abort
|
52
67
|
|
53
68
|
Uploader.new.run({
|
54
69
|
'server' => Config.data['server'],
|
55
|
-
'email' => Config.
|
70
|
+
'email' => Config.email,
|
56
71
|
'issue' => issue,
|
57
72
|
'send_mail' => true,
|
58
73
|
'message' => message,
|
data/lib/plunger/command.rb
CHANGED
@@ -13,12 +13,12 @@ module Plunger
|
|
13
13
|
|
14
14
|
def autorun
|
15
15
|
names.each do |name|
|
16
|
-
run(name) if command_class(name).autorun?
|
16
|
+
run(name, {}) if command_class(name).autorun?
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def run(name)
|
21
|
-
command_class(name).new.run
|
20
|
+
def run(name, options)
|
21
|
+
command_class(name).new.run(options)
|
22
22
|
end
|
23
23
|
|
24
24
|
def command_class(name)
|
data/lib/plunger/config.rb
CHANGED
data/lib/plunger/runner.rb
CHANGED
@@ -4,11 +4,12 @@ module Plunger
|
|
4
4
|
class Runner
|
5
5
|
def initialize(argv)
|
6
6
|
@argv = argv
|
7
|
+
@options = {}
|
7
8
|
end
|
8
9
|
|
9
10
|
def run!
|
10
11
|
@parser = OptionParser.new do |o|
|
11
|
-
o.banner = "Usage: plunger
|
12
|
+
o.banner = "Usage: plunger #{Command.names.join('|')} [options]"
|
12
13
|
|
13
14
|
o.separator ""
|
14
15
|
o.separator "Commands:"
|
@@ -18,6 +19,12 @@ module Plunger
|
|
18
19
|
o.separator " %-20s %s" % [klass.command, klass.description]
|
19
20
|
end
|
20
21
|
|
22
|
+
o.separator ""
|
23
|
+
o.separator "Push options:"
|
24
|
+
o.on("--initial REVISION", "Initial changeset revision.") { |v| @options[:initial] = v }
|
25
|
+
o.on("--final REVISION", "Final changeset revision.") { |v| @options[:final] = v }
|
26
|
+
o.on("--issue NUMBER", "Issue number to which to add. Defaults to new issue.") { |v| @options[:issue] = v }
|
27
|
+
|
21
28
|
o.separator ""
|
22
29
|
o.separator "Common options:"
|
23
30
|
o.on_tail("-h", "--help", "Show this message") { puts o; exit }
|
@@ -37,7 +44,7 @@ module Plunger
|
|
37
44
|
end
|
38
45
|
|
39
46
|
Command.autorun
|
40
|
-
Command.run(@command) or abort
|
47
|
+
Command.run(@command, @options) or abort
|
41
48
|
end
|
42
49
|
|
43
50
|
end
|
data/lib/plunger/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plunger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andriy Yanko
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- README.md
|
36
36
|
- Rakefile
|
37
37
|
- bin/plunger
|
38
|
+
- config/configure_options.yml
|
38
39
|
- lib/plunger.rb
|
39
40
|
- lib/plunger/changeset.rb
|
40
41
|
- lib/plunger/changeset/git.rb
|