git-process 1.1.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/CHANGELOG.md +14 -1
  2. data/LICENSE +193 -22
  3. data/README.md +212 -71
  4. data/man/git-process.1 +371 -0
  5. metadata +52 -140
  6. data/Gemfile +0 -20
  7. data/Gemfile.lock +0 -53
  8. data/Rakefile +0 -16
  9. data/bin/git-new-fb +0 -58
  10. data/bin/git-pull-request +0 -107
  11. data/bin/git-sync +0 -73
  12. data/bin/git-to-master +0 -133
  13. data/git-process.gemspec +0 -25
  14. data/lib/git-process/abstract_error_builder.rb +0 -53
  15. data/lib/git-process/changed_file_helper.rb +0 -115
  16. data/lib/git-process/git_abstract_merge_error_builder.rb +0 -146
  17. data/lib/git-process/git_branch.rb +0 -105
  18. data/lib/git-process/git_branches.rb +0 -73
  19. data/lib/git-process/git_config.rb +0 -153
  20. data/lib/git-process/git_lib.rb +0 -512
  21. data/lib/git-process/git_logger.rb +0 -84
  22. data/lib/git-process/git_merge_error.rb +0 -28
  23. data/lib/git-process/git_process.rb +0 -172
  24. data/lib/git-process/git_process_error.rb +0 -18
  25. data/lib/git-process/git_process_options.rb +0 -99
  26. data/lib/git-process/git_rebase_error.rb +0 -30
  27. data/lib/git-process/git_remote.rb +0 -256
  28. data/lib/git-process/git_status.rb +0 -108
  29. data/lib/git-process/github_configuration.rb +0 -298
  30. data/lib/git-process/github_pull_request.rb +0 -151
  31. data/lib/git-process/new_fb.rb +0 -50
  32. data/lib/git-process/parked_changes_error.rb +0 -41
  33. data/lib/git-process/pull_request.rb +0 -134
  34. data/lib/git-process/pull_request_error.rb +0 -25
  35. data/lib/git-process/rebase_to_master.rb +0 -148
  36. data/lib/git-process/sync.rb +0 -136
  37. data/lib/git-process/uncommitted_changes_error.rb +0 -23
  38. data/lib/git-process/version.rb +0 -22
  39. data/spec/FileHelpers.rb +0 -19
  40. data/spec/GitRepoHelper.rb +0 -123
  41. data/spec/changed_file_helper_spec.rb +0 -127
  42. data/spec/git_abstract_merge_error_builder_spec.rb +0 -126
  43. data/spec/git_branch_spec.rb +0 -123
  44. data/spec/git_config_spec.rb +0 -45
  45. data/spec/git_lib_spec.rb +0 -176
  46. data/spec/git_logger_spec.rb +0 -66
  47. data/spec/git_process_spec.rb +0 -208
  48. data/spec/git_remote_spec.rb +0 -227
  49. data/spec/git_status_spec.rb +0 -122
  50. data/spec/github_configuration_spec.rb +0 -152
  51. data/spec/github_pull_request_spec.rb +0 -96
  52. data/spec/github_test_helper.rb +0 -49
  53. data/spec/new_fb_spec.rb +0 -130
  54. data/spec/pull_request_helper.rb +0 -94
  55. data/spec/pull_request_spec.rb +0 -128
  56. data/spec/rebase_to_master_spec.rb +0 -429
  57. data/spec/spec_helper.rb +0 -21
  58. data/spec/sync_spec.rb +0 -304
data/git-process.gemspec DELETED
@@ -1,25 +0,0 @@
1
- require File.expand_path('../lib/git-process/version', __FILE__)
2
-
3
- Gem::Specification.new do |gem|
4
- gem.authors = ["Jim Moore"]
5
- gem.email = %w(moore.jim@gmail.com)
6
- gem.description = %q{A set of scripts to make working with git easier and more consistent}
7
- gem.summary = %q{A set of scripts for a good git process}
8
- gem.homepage = "http://jdigger.github.com/git-process/"
9
- gem.license = 'ASL2'
10
-
11
- gem.add_dependency "octokit", "~> 1.24" # GitHub API
12
- gem.add_dependency "json", "~> 1.7.3"
13
- gem.add_dependency "trollop", "~> 1.16.2" # CLI options parser
14
- gem.add_dependency "highline", "1.6.13" # user CLI interaction. There is a bug in 1.6.14
15
- gem.add_dependency "addressable", "~> 2.3.4" # URI processing
16
-
17
- gem.files = `git ls-files`.split($\).delete_if { |f| f =~ /^\./ }
18
- gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
19
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
- gem.name = "git-process"
21
- gem.require_paths = %w(lib)
22
- gem.version = GitProc::Version::STRING
23
- gem.platform = Gem::Platform::RUBY
24
- gem.required_ruby_version = '>= 1.8.7'
25
- end
@@ -1,53 +0,0 @@
1
- # Licensed under the Apache License, Version 2.0 (the "License");
2
- # you may not use this file except in compliance with the License.
3
- # You may obtain a copy of the License at
4
- #
5
- # http://www.apache.org/licenses/LICENSE-2.0
6
- #
7
- # Unless required by applicable law or agreed to in writing, software
8
- # distributed under the License is distributed on an "AS IS" BASIS,
9
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
- # See the License for the specific language governing permissions and
11
- # limitations under the License.
12
-
13
- require 'shellwords'
14
-
15
- module GitProc
16
-
17
- module AbstractErrorBuilder
18
-
19
- def commands
20
- @commands ||= build_commands
21
- end
22
-
23
-
24
- def build_message
25
- msg = human_message
26
-
27
- msg << append_commands
28
- end
29
-
30
-
31
- def append_commands
32
- commands.empty? ? '' : "\n\nCommands:\n\n #{commands.join("\n ")}"
33
- end
34
-
35
-
36
- def human_message
37
- ''
38
- end
39
-
40
-
41
- def build_commands
42
- []
43
- end
44
-
45
-
46
- def shell_escaped_files(files)
47
- shell_escaped_files = files.map { |f| f.shellescape }
48
- shell_escaped_files.join(' ')
49
- end
50
-
51
- end
52
-
53
- end
@@ -1,115 +0,0 @@
1
- # Licensed under the Apache License, Version 2.0 (the "License");
2
- # you may not use this file except in compliance with the License.
3
- # You may obtain a copy of the License at
4
- #
5
- # http://www.apache.org/licenses/LICENSE-2.0
6
- #
7
- # Unless required by applicable law or agreed to in writing, software
8
- # distributed under the License is distributed on an "AS IS" BASIS,
9
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
- # See the License for the specific language governing permissions and
11
- # limitations under the License.
12
-
13
- require 'git-process/git_lib'
14
- require 'highline/import'
15
-
16
-
17
- module GitProc
18
-
19
- #
20
- # Provides support for prompting the user when the dir/index is dirty.
21
- #
22
- #noinspection RubyControlFlowConversionInspection,RubyClassMethodNamingConvention,RubyInstanceMethodNamingConvention
23
- class ChangeFileHelper
24
-
25
- # @param [GitLib] gitlib
26
- def initialize(gitlib)
27
- @gitlib = gitlib
28
- end
29
-
30
-
31
- def offer_to_help_uncommitted_changes
32
- stat = gitlib.status
33
-
34
- if stat.unmerged.empty?
35
- handle_unknown_files(stat)
36
- handle_changed_files(gitlib.status) # refresh status in case it changed earlier
37
- else
38
- gitlib.logger.info { "Can not offer to auto-add unmerged files: #{stat.unmerged.inspect}" }
39
- raise UncommittedChangesError.new
40
- end
41
- end
42
-
43
-
44
- #noinspection RubyControlFlowConversionInspection
45
- def handle_unknown_files(stat)
46
- if not stat.unknown.empty?
47
- resp = ChangeFileHelper.ask_how_to_handle_unknown_files(stat)
48
- if resp == :add
49
- gitlib.add(stat.unknown)
50
- end
51
- end
52
- end
53
-
54
-
55
- def handle_changed_files(stat)
56
- if not stat.modified.empty? or not stat.added.empty? or not stat.deleted.empty?
57
- resp = ChangeFileHelper.ask_how_to_handle_changed_files(stat)
58
- if resp == :commit
59
- changed_files = (stat.added + stat.modified - stat.deleted).sort.uniq
60
-
61
- gitlib.add(changed_files) unless changed_files.empty?
62
- gitlib.remove(stat.deleted) unless stat.deleted.empty?
63
-
64
- gitlib.commit(nil)
65
- else
66
- gitlib.stash_save
67
- end
68
- end
69
- end
70
-
71
-
72
- def self.ask_how_to_handle_unknown_files(stat)
73
- show_changes(:unknown, stat)
74
- resp = ask('Would you like to (a)dd them or (i)gnore them? ') do |q|
75
- q.responses[:not_valid] = 'Please respond with either (a)dd or (i)gnore. (Ctl-C to abort.) '
76
- q.case = :down
77
- q.validate = /a|i/i
78
- end
79
-
80
- resp == 'a' ? :add : :ignore
81
- end
82
-
83
-
84
- def self.show_changes(type, stat)
85
- files = stat.send(type)
86
-
87
- if type != :deleted
88
- files -= stat.deleted
89
- end
90
-
91
- if not files.empty?
92
- say("You have <%= color('#{type}', [:underline]) %> files:\n <%= color('#{files.join("\n ")}', [:bold]) %>")
93
- end
94
- end
95
-
96
-
97
- def self.ask_how_to_handle_changed_files(stat)
98
- [:added, :modified, :deleted].each { |t| show_changes(t, stat) }
99
- resp = ask('Would you like to (c)ommit them or (s)tash them? ') do |q|
100
- q.responses[:not_valid] = 'Please respond with either (c)ommit or (s)tash. (Ctl-C to abort.) '
101
- q.case = :down
102
- q.validate = /c|s/i
103
- end
104
-
105
- resp == 'c' ? :commit : :stash
106
- end
107
-
108
-
109
- def gitlib
110
- @gitlib
111
- end
112
-
113
- end
114
-
115
- end
@@ -1,146 +0,0 @@
1
- # Licensed under the Apache License, Version 2.0 (the "License");
2
- # you may not use this file except in compliance with the License.
3
- # You may obtain a copy of the License at
4
- #
5
- # http://www.apache.org/licenses/LICENSE-2.0
6
- #
7
- # Unless required by applicable law or agreed to in writing, software
8
- # distributed under the License is distributed on an "AS IS" BASIS,
9
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
- # See the License for the specific language governing permissions and
11
- # limitations under the License.
12
-
13
- require 'git-process/abstract_error_builder'
14
- require 'shellwords'
15
-
16
- module GitProc
17
-
18
- #noinspection RubyTooManyInstanceVariablesInspection
19
- class AbstractMergeErrorBuilder
20
- include GitProc::AbstractErrorBuilder
21
-
22
- attr_reader :gitlib, :error_message, :continue_command
23
-
24
-
25
- def initialize(gitlib, error_message, continue_command)
26
- @gitlib = gitlib
27
- @error_message = error_message
28
- @continue_command = continue_command
29
- end
30
-
31
-
32
- def resolved_files
33
- @resolved_files ||= find_resolved_files
34
- end
35
-
36
-
37
- def unresolved_files
38
- @unresolved_files ||= (unmerged - resolved_files)
39
- end
40
-
41
-
42
- def find_resolved_files
43
- resolved_files = []
44
-
45
- unmerged.each do |file|
46
- resolved_file = (/Resolved '#{file}' using previous resolution./m =~ error_message)
47
- resolved_files << file if resolved_file
48
- end
49
-
50
- resolved_files.sort
51
- end
52
-
53
-
54
- def human_message
55
- msg = 'There was a problem merging.'
56
-
57
- resolved_files.each do |file|
58
- if modified.include? file
59
- msg << "\n'#{file}' was modified in both branches, and 'rerere' automatically resolved it."
60
- end
61
- end
62
-
63
- unless config.rerere_enabled?
64
- msg << "\n\nConsider turning on 'rerere'.\nSee http://git-scm.com/2010/03/08/rerere.html for more information."
65
- end
66
-
67
- unresolved_files.each do |file|
68
- if modified.include? file
69
- msg << "\n'#{file}' was modified in both branches."
70
- end
71
- end
72
-
73
- msg
74
- end
75
-
76
-
77
- def build_commands
78
- commands = []
79
-
80
- commands << 'git config --global rerere.enabled true' unless config.rerere_enabled?
81
-
82
- resolved_files.each do |file|
83
- commands << "# Verify that 'rerere' did the right thing for '#{file}'."
84
- end
85
-
86
- unless resolved_files.empty? or config.rerere_autoupdate?
87
- escaped_files = shell_escaped_files(resolved_files)
88
- commands << "git add #{escaped_files}"
89
- end
90
-
91
- unless unresolved_files.empty?
92
- mergeable = unresolved_files & modified
93
- commands << "git mergetool #{shell_escaped_files(mergeable)}" unless mergeable.empty?
94
- mergeable.each do |f|
95
- commands << "# Verify '#{f}' merged correctly."
96
- end
97
- (unresolved_files & added).each do |f|
98
- commands << "# '#{f}' was added in both branches; Fix the conflict."
99
- end
100
- commands << "git add #{shell_escaped_files(unresolved_files)}"
101
- end
102
-
103
- commands << continue_command if continue_command
104
-
105
- commands
106
- end
107
-
108
-
109
- attr_writer :unmerged, :added, :deleted, :modified
110
-
111
-
112
- def unmerged
113
- @unmerged ||= status.unmerged
114
- end
115
-
116
-
117
- def added
118
- @added ||= status.added
119
- end
120
-
121
-
122
- def deleted
123
- @deleted ||= status.deleted
124
- end
125
-
126
-
127
- def modified
128
- @modified ||= status.modified
129
- end
130
-
131
-
132
- private
133
-
134
-
135
- def config
136
- gitlib.config
137
- end
138
-
139
-
140
- def status
141
- @status ||= gitlib.status
142
- end
143
-
144
- end
145
-
146
- end
@@ -1,105 +0,0 @@
1
- # Licensed under the Apache License, Version 2.0 (the "License");
2
- # you may not use this file except in compliance with the License.
3
- # You may obtain a copy of the License at
4
- #
5
- # http://www.apache.org/licenses/LICENSE-2.0
6
- #
7
- # Unless required by applicable law or agreed to in writing, software
8
- # distributed under the License is distributed on an "AS IS" BASIS,
9
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
- # See the License for the specific language governing permissions and
11
- # limitations under the License.
12
-
13
- module GitProc
14
-
15
- class GitBranch
16
- include Comparable
17
-
18
- attr_reader :name
19
-
20
-
21
- def initialize(name, current, lib)
22
- if /^remotes\// =~ name
23
- @name = name[8..-1]
24
- @remote = true
25
- else
26
- @name = name
27
- @remote = false
28
- end
29
- @current = current
30
- @lib = lib
31
- end
32
-
33
-
34
- def current?
35
- @current
36
- end
37
-
38
-
39
- def remote?
40
- @remote
41
- end
42
-
43
-
44
- def local?
45
- !@remote
46
- end
47
-
48
-
49
- def to_s
50
- name
51
- end
52
-
53
-
54
- def logger
55
- @lib.logger
56
- end
57
-
58
-
59
- def sha
60
- @sha ||= @lib.sha(name)
61
- end
62
-
63
-
64
- def <=>(other)
65
- self.name <=> other.name
66
- end
67
-
68
-
69
- def is_ahead_of(base_branch_name)
70
- contains_all_of(base_branch_name) and
71
- (@lib.rev_list(base_branch_name, @name, :oneline => true, :num_revs => 1) != '')
72
- end
73
-
74
-
75
- def delete!(force = false)
76
- if local?
77
- @lib.branch(@name, :force => force, :delete => true)
78
- else
79
- @lib.push(Process.server_name, nil, nil, :delete => @name)
80
- end
81
- end
82
-
83
-
84
- def rename(new_name)
85
- @lib.branch(@name, :rename => new_name)
86
- end
87
-
88
-
89
- def upstream(upstream_name)
90
- @lib.branch(@name, :upstream => upstream_name)
91
- end
92
-
93
-
94
- def contains_all_of(branch_name)
95
- @lib.rev_list(@name, branch_name, :oneline => true, :num_revs => 1) == ''
96
- end
97
-
98
-
99
- def checkout_to_new(new_branch, opts = {})
100
- @lib.checkout(new_branch, :new_branch => @name, :no_track => opts[:no_track])
101
- end
102
-
103
- end
104
-
105
- end