rake_commit 1.2.0 → 1.3.0
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.
- checksums.yaml +4 -4
- data/lib/rake_commit/commit.rb +10 -2
- data/lib/rake_commit/commit_message.rb +48 -4
- data/lib/rake_commit/git.rb +9 -5
- data/lib/rake_commit/git_svn.rb +1 -1
- data/lib/rake_commit/prompt_line.rb +24 -15
- data/lib/rake_commit/svn.rb +1 -1
- metadata +74 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dab391ea20c75c033c4428c8cc93c3a46925831b
|
4
|
+
data.tar.gz: d33a3fa4b68229d9382b9a0660e0a9707eedc369
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cb506b14ed438f93e4a9fe3968555006be3f7bf5768e6a64f276c4d6cda0559cd37fde3cbac3933b6ddd2357a46c799b917eb7e3ae27a43dd57f644c505a99f
|
7
|
+
data.tar.gz: cfa603c49218a9c05cc4e87f711df28c9404465bb3461709d6d23588e2d421343857f7a8b4d356b130250f0f82b2a1bc55b3e26a126ce5271adf3163b4fcd7bd
|
data/lib/rake_commit/commit.rb
CHANGED
@@ -19,7 +19,9 @@ module RakeCommit
|
|
19
19
|
:collapse_commits => true,
|
20
20
|
:incremental => false,
|
21
21
|
:prompt_exclusions => [],
|
22
|
-
:build_command => "rake"
|
22
|
+
:build_command => "rake",
|
23
|
+
:commit_message_wrap => nil, # integer or nil
|
24
|
+
:commit_message_type => CommitMessage::MessageType::MESSAGE
|
23
25
|
}
|
24
26
|
|
25
27
|
if File.exists?(".rake_commit")
|
@@ -31,7 +33,7 @@ module RakeCommit
|
|
31
33
|
if git_svn?
|
32
34
|
RakeCommit::GitSvn.new(options[:prompt_exclusions]).commit
|
33
35
|
elsif git?
|
34
|
-
RakeCommit::Git.new(options[:build_command], options[:collapse_commits], options[:rebase_only], options[:incremental], options[:prompt_exclusions], options[:precommit]).commit
|
36
|
+
RakeCommit::Git.new(options[:build_command], options[:collapse_commits], options[:rebase_only], options[:incremental], options[:prompt_exclusions], options[:precommit], options[:commit_message_wrap], options[:commit_message_type]).commit
|
35
37
|
else
|
36
38
|
RakeCommit::Svn.new(options[:prompt_exclusions]).commit
|
37
39
|
end
|
@@ -63,6 +65,12 @@ module RakeCommit
|
|
63
65
|
opts.on("-b", "--build-command SCRIPT", "the command that verifies the commit, defaults to rake") do |command|
|
64
66
|
options[:build_command] = command
|
65
67
|
end
|
68
|
+
opts.on("--word-wrap [80]", "word wrap the commit message (default no wrap)") do |commit_message_wrap|
|
69
|
+
options[:commit_message_wrap] = commit_message_wrap.to_i
|
70
|
+
end
|
71
|
+
opts.on("-m", "--message-type [MESSAGE|WHATWHY]", "the type of commit message to prompt for (only works on Git)") do |commit_message_type|
|
72
|
+
options[:commit_message_type] = commit_message_type.downcase
|
73
|
+
end
|
66
74
|
end
|
67
75
|
|
68
76
|
parser.parse(args)
|
@@ -1,16 +1,60 @@
|
|
1
|
+
require 'word_wrap'
|
2
|
+
|
1
3
|
module RakeCommit
|
2
4
|
class CommitMessage
|
5
|
+
module MessageType
|
6
|
+
MESSAGE = "message"
|
7
|
+
WHAT_AND_WHY = "whatwhy"
|
8
|
+
end
|
9
|
+
|
10
|
+
SUBJECT_MAX_LENGTH = 50
|
3
11
|
|
4
12
|
attr_reader :author, :feature, :message
|
5
13
|
|
6
|
-
def initialize(prompt_exclusions = [])
|
14
|
+
def initialize(prompt_exclusions = [], type = MessageType::MESSAGE)
|
7
15
|
@author = RakeCommit::PromptLine.new("author", prompt_exclusions).prompt
|
8
16
|
@feature = RakeCommit::PromptLine.new("feature", prompt_exclusions).prompt
|
9
|
-
@message =
|
17
|
+
@message = case type
|
18
|
+
when MessageType::MESSAGE
|
19
|
+
RakeCommit::PromptLine.new("message", prompt_exclusions).prompt
|
20
|
+
when MessageType::WHAT_AND_WHY
|
21
|
+
what = RakeCommit::PromptLine.new("what", prompt_exclusions).prompt
|
22
|
+
why = RakeCommit::PromptLine.new("why", prompt_exclusions).prompt
|
23
|
+
|
24
|
+
subject_space_remaining = SUBJECT_MAX_LENGTH - @feature.length
|
25
|
+
truncated_what = what[0...subject_space_remaining]
|
26
|
+
subject = RakeCommit::PromptLine.new("subject", prompt_exclusions, truncated_what).prompt
|
27
|
+
|
28
|
+
create_message_with_subject_what_and_why(subject, what, why)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def joined_message(wrap = nil)
|
33
|
+
message = [@feature, @message].compact.join(' - ')
|
34
|
+
message = WordWrap.ww(message, wrap) if wrap
|
35
|
+
message
|
36
|
+
end
|
37
|
+
|
38
|
+
def joined_message_with_author(wrap = nil)
|
39
|
+
message = [@author, @feature, @message].compact.join(' - ')
|
40
|
+
message = WordWrap.ww(message, wrap) if wrap
|
41
|
+
message
|
10
42
|
end
|
11
43
|
|
12
|
-
|
13
|
-
|
44
|
+
private
|
45
|
+
|
46
|
+
def create_message_with_subject_what_and_why(subject, what, why)
|
47
|
+
<<-EOS
|
48
|
+
#{subject}
|
49
|
+
|
50
|
+
What
|
51
|
+
===
|
52
|
+
#{what}
|
53
|
+
|
54
|
+
Why
|
55
|
+
===
|
56
|
+
#{why}
|
57
|
+
EOS
|
14
58
|
end
|
15
59
|
end
|
16
60
|
end
|
data/lib/rake_commit/git.rb
CHANGED
@@ -3,13 +3,15 @@ require 'shellwords'
|
|
3
3
|
module RakeCommit
|
4
4
|
class Git
|
5
5
|
|
6
|
-
def initialize(build_command, collapse_commits = true, rebase_only = false, incremental = false, prompt_exclusions = [], precommit = nil)
|
6
|
+
def initialize(build_command, collapse_commits = true, rebase_only = false, incremental = false, prompt_exclusions = [], precommit = nil, commit_message_wrap = nil, commit_message_type = MessageType::MESSAGE)
|
7
7
|
@build_command = build_command
|
8
8
|
@collapse_commits = collapse_commits
|
9
9
|
@rebase_only = rebase_only
|
10
10
|
@incremental = incremental
|
11
11
|
@prompt_exclusions = prompt_exclusions
|
12
12
|
@precommit = precommit
|
13
|
+
@commit_message_wrap = commit_message_wrap
|
14
|
+
@commit_message_type = commit_message_type
|
13
15
|
end
|
14
16
|
|
15
17
|
def commit
|
@@ -23,8 +25,10 @@ module RakeCommit
|
|
23
25
|
if collapse_git_commits?
|
24
26
|
return unless collapse_git_commits
|
25
27
|
elsif rebase_only?
|
26
|
-
|
27
|
-
|
28
|
+
unless nothing_to_commit?
|
29
|
+
puts "You have uncommitted changes. Please amend, stash, or clean and retry."
|
30
|
+
exit 1
|
31
|
+
end
|
28
32
|
pull_rebase rescue return false
|
29
33
|
end
|
30
34
|
RakeCommit::Shell.system(@build_command)
|
@@ -73,11 +77,11 @@ module RakeCommit
|
|
73
77
|
end
|
74
78
|
|
75
79
|
def incremental_commit
|
76
|
-
commit_message = RakeCommit::CommitMessage.new(@prompt_exclusions)
|
80
|
+
commit_message = RakeCommit::CommitMessage.new(@prompt_exclusions, @commit_message_type)
|
77
81
|
unless commit_message.author.nil?
|
78
82
|
RakeCommit::Shell.system("git config user.name #{Shellwords.shellescape(commit_message.author)}")
|
79
83
|
end
|
80
|
-
message =
|
84
|
+
message = commit_message.joined_message(@commit_message_wrap)
|
81
85
|
RakeCommit::Shell.system("git commit -m #{Shellwords.shellescape(message)}")
|
82
86
|
end
|
83
87
|
|
data/lib/rake_commit/git_svn.rb
CHANGED
@@ -17,7 +17,7 @@ module RakeCommit
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def git_svn_commit_with_message
|
20
|
-
message = RakeCommit::CommitMessage.new(@prompt_exclusions).
|
20
|
+
message = RakeCommit::CommitMessage.new(@prompt_exclusions).joined_message_with_author
|
21
21
|
RakeCommit::Shell.system "git commit -m #{message.inspect}"
|
22
22
|
end
|
23
23
|
|
@@ -5,21 +5,29 @@ module RakeCommit
|
|
5
5
|
class PromptLine
|
6
6
|
include Readline
|
7
7
|
|
8
|
-
def initialize(attribute, prompt_exclusions = [])
|
8
|
+
def initialize(attribute, prompt_exclusions = [], default_value = nil)
|
9
9
|
@attribute = attribute
|
10
10
|
@prompt_exclusions = prompt_exclusions
|
11
|
+
@default_value = default_value
|
11
12
|
end
|
12
13
|
|
13
14
|
def prompt
|
14
15
|
return nil if @prompt_exclusions.include?(@attribute)
|
16
|
+
|
17
|
+
puts "\n"
|
18
|
+
puts "previous #{@attribute}: #{previous_input}" if previous_input
|
19
|
+
|
20
|
+
set_readline_default_input(@default_value) if @default_value
|
21
|
+
set_readline_history
|
22
|
+
|
15
23
|
input = nil
|
16
24
|
loop do
|
17
|
-
input = readline(
|
25
|
+
input = readline("#{@attribute}: ").chomp
|
18
26
|
break unless (input.empty? && !previous_input)
|
19
27
|
end
|
20
28
|
|
21
29
|
unless input.empty?
|
22
|
-
|
30
|
+
append_history(input)
|
23
31
|
return input
|
24
32
|
end
|
25
33
|
|
@@ -27,18 +35,20 @@ module RakeCommit
|
|
27
35
|
return previous_input
|
28
36
|
end
|
29
37
|
|
30
|
-
|
31
|
-
previous_message = "\n"
|
32
|
-
previous_message += "previous #{@attribute}: #{previous_input}\n" if previous_input
|
33
|
-
puts previous_message
|
34
|
-
"#{@attribute}: "
|
35
|
-
end
|
38
|
+
private
|
36
39
|
|
37
|
-
def
|
40
|
+
def append_history(input)
|
38
41
|
File.open(history_file, "a") { |f| f.puts(input) }
|
39
42
|
end
|
40
43
|
|
41
|
-
|
44
|
+
def set_readline_default_input(default_input)
|
45
|
+
Readline.pre_input_hook = lambda do
|
46
|
+
Readline.insert_text(default_input)
|
47
|
+
Readline.redisplay
|
48
|
+
Readline.pre_input_hook = nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
42
52
|
def previous_input
|
43
53
|
@previous_input ||= history.last
|
44
54
|
end
|
@@ -47,13 +57,12 @@ module RakeCommit
|
|
47
57
|
@history ||= load_history
|
48
58
|
end
|
49
59
|
|
50
|
-
def
|
60
|
+
def set_readline_history
|
51
61
|
HISTORY.pop until HISTORY.empty?
|
52
|
-
HISTORY.push(*
|
53
|
-
HISTORY.to_a
|
62
|
+
HISTORY.push(*history)
|
54
63
|
end
|
55
64
|
|
56
|
-
def
|
65
|
+
def load_history
|
57
66
|
File.exists?(history_file) ? File.read(history_file).split("\n") : []
|
58
67
|
end
|
59
68
|
|
data/lib/rake_commit/svn.rb
CHANGED
@@ -10,7 +10,7 @@ module RakeCommit
|
|
10
10
|
|
11
11
|
def commit
|
12
12
|
if files_to_check_in?
|
13
|
-
message = RakeCommit::CommitMessage.new(@prompt_exclusions).
|
13
|
+
message = RakeCommit::CommitMessage.new(@prompt_exclusions).joined_message_with_author
|
14
14
|
RakeCommit::Shell.system(@precommit) unless @precommit.nil?
|
15
15
|
add
|
16
16
|
delete
|
metadata
CHANGED
@@ -1,15 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake_commit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Gross
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2016-04-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.2.2
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '11'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.2.2
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '11'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: word_wrap
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: mocha
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.12
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - '='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.9.12
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: test-unit
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.1'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 3.1.5
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.1'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 3.1.5
|
13
81
|
description: See http://github.com/pgr0ss/rake_commit
|
14
82
|
email: pgross@gmail.com
|
15
83
|
executables:
|
@@ -39,17 +107,17 @@ require_paths:
|
|
39
107
|
- lib
|
40
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
109
|
requirements:
|
42
|
-
- -
|
110
|
+
- - ">="
|
43
111
|
- !ruby/object:Gem::Version
|
44
112
|
version: '0'
|
45
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
114
|
requirements:
|
47
|
-
- -
|
115
|
+
- - ">="
|
48
116
|
- !ruby/object:Gem::Version
|
49
117
|
version: '0'
|
50
118
|
requirements: []
|
51
119
|
rubyforge_project: rake_commit
|
52
|
-
rubygems_version: 2.4.
|
120
|
+
rubygems_version: 2.4.5.1
|
53
121
|
signing_key:
|
54
122
|
specification_version: 4
|
55
123
|
summary: A gem which helps with checking in code
|