git_commands 3.0.5 → 3.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/git_commands/cli.rb +5 -1
- data/lib/git_commands/command.rb +40 -12
- data/lib/git_commands/prompt.rb +13 -19
- data/lib/git_commands/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2115eda28aa459f4ca512e8e734cd859702da356
|
4
|
+
data.tar.gz: 5950edb6f580c4c06f35cb763a3f75e746ed15d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c247805c7a0fb198f760c499f1f1bcfd12ea911adec58b8366e5b8b0058852ffd74bf0fc57afffd616ce6f13817f9aa7958e10a5638a7308f7f33036182a676a
|
7
|
+
data.tar.gz: d44b3d70b5b9ecbe9f3e22e4cfd9d327c26d5fff177228684793eae31fd097c4be37f0cab2e684fca30fbe4ea481726cfc4881ed1458d39bf8ac9454b44e8fbd
|
data/lib/git_commands/cli.rb
CHANGED
@@ -3,6 +3,8 @@ require "git_commands/command"
|
|
3
3
|
|
4
4
|
module GitCommands
|
5
5
|
class CLI
|
6
|
+
include Prompt
|
7
|
+
|
6
8
|
VALID_COMMANDS = %w[rebase aggregate purge]
|
7
9
|
|
8
10
|
class UnknownCommandError < ArgumentError; end
|
@@ -20,6 +22,8 @@ module GitCommands
|
|
20
22
|
parser.parse!(@args)
|
21
23
|
command = @command_klass.new(repo: @repo, branches: @branches)
|
22
24
|
command.send(@command_name)
|
25
|
+
rescue StandardError => e
|
26
|
+
error(e.message)
|
23
27
|
end
|
24
28
|
|
25
29
|
private def create_command
|
@@ -39,7 +43,7 @@ module GitCommands
|
|
39
43
|
@repo = repo
|
40
44
|
end
|
41
45
|
|
42
|
-
opts.on("-bBRANCHES", "--branches=BRANCHES", "The comma-separated list of branches or the path to a
|
46
|
+
opts.on("-bBRANCHES", "--branches=BRANCHES", "The comma-separated list of branches or the path to a file listing branches names on each line") do |branches|
|
43
47
|
@branches = branches
|
44
48
|
end
|
45
49
|
|
data/lib/git_commands/command.rb
CHANGED
@@ -20,21 +20,28 @@ module GitCommands
|
|
20
20
|
raise e, "There is no connection!"
|
21
21
|
end
|
22
22
|
|
23
|
+
def self.git_repo?(repo)
|
24
|
+
`git rev-parse --is-inside-work-tree 2> /dev/null`.strip == "true"
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.valid_branch?(branch)
|
28
|
+
`git rev-parse --verify origin/#{branch} 2> /dev/null`.match(/^[0-9a-z]+/)
|
29
|
+
end
|
30
|
+
|
23
31
|
attr_reader :out
|
24
32
|
|
25
33
|
def initialize(repo:, branches:, out: STDOUT)
|
26
34
|
self.class.check_connection
|
27
35
|
@out = out
|
28
36
|
@repo = fetch_repo(repo)
|
29
|
-
@branches = fetch_branches(branches)
|
37
|
+
@branches = fetch_branches(String(branches))
|
30
38
|
@timestamp = Time.new.strftime("%Y-%m-%d")
|
31
|
-
|
39
|
+
print_branches
|
32
40
|
end
|
33
41
|
|
34
42
|
def purge
|
35
43
|
enter_repo do
|
36
44
|
@branches.each do |branch|
|
37
|
-
error("Trying ro remove master!", GitError) if branch == "master"
|
38
45
|
warning("Removing branch: #{branch}")
|
39
46
|
confirm("Remove local branch") do
|
40
47
|
`git branch -D #{branch}`
|
@@ -77,6 +84,7 @@ module GitCommands
|
|
77
84
|
`git checkout #{aggregate}`
|
78
85
|
`git merge #{temp}`
|
79
86
|
`git branch -d #{temp}`
|
87
|
+
`git checkout master`
|
80
88
|
end
|
81
89
|
end
|
82
90
|
success "#{aggregate} branch created"
|
@@ -84,19 +92,36 @@ module GitCommands
|
|
84
92
|
end
|
85
93
|
|
86
94
|
private def fetch_repo(repo)
|
87
|
-
|
88
|
-
|
95
|
+
fail NoentRepositoryError, "'#{repo}' is not a valid GIT repository!" unless valid_repo?(repo)
|
96
|
+
Pathname::new(repo)
|
89
97
|
end
|
90
98
|
|
91
|
-
private def
|
92
|
-
|
93
|
-
|
99
|
+
private def valid_repo?(repo)
|
100
|
+
return false unless File.directory?(repo)
|
101
|
+
Dir.chdir(repo) do
|
102
|
+
self.class.git_repo?(repo)
|
103
|
+
end
|
94
104
|
end
|
95
105
|
|
96
|
-
private def fetch_branches(
|
106
|
+
private def fetch_branches(src)
|
97
107
|
warning("Loading branches file")
|
98
|
-
|
99
|
-
branches.
|
108
|
+
branches = File.foreach(src).map(&:strip) if valid_file?(src)
|
109
|
+
branches ||= src.split(",").map(&:strip)
|
110
|
+
branches.tap do |list|
|
111
|
+
fail(NoBranchesError, "No branches have been loaded!") if list.empty?
|
112
|
+
list.each { |branch| check_branch(branch) }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
private def check_branch(branch)
|
117
|
+
Dir.chdir(@repo) do
|
118
|
+
fail(GitError, "Master branch cannot be included into commands operations!") if branch == "master"
|
119
|
+
fail(GitError, "Branch '#{branch}' does not exist!") unless self.class.valid_branch?(branch)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
private def valid_file?(branches)
|
124
|
+
File.exist?(branches) && !File.directory?(branches)
|
100
125
|
end
|
101
126
|
|
102
127
|
private def print_branches
|
@@ -113,7 +138,10 @@ module GitCommands
|
|
113
138
|
|
114
139
|
private def rebase_with_master
|
115
140
|
`git rebase origin/master`
|
116
|
-
|
141
|
+
if unfinished_rebase?
|
142
|
+
`git rebase --abort`
|
143
|
+
fail(GitError, "Halting unfinished rebase!")
|
144
|
+
end
|
117
145
|
end
|
118
146
|
|
119
147
|
private def enter_repo
|
data/lib/git_commands/prompt.rb
CHANGED
@@ -5,23 +5,19 @@ module GitCommands
|
|
5
5
|
module Prompt
|
6
6
|
VALID_ANSWERS = %w[Y y N n]
|
7
7
|
|
8
|
+
class AbortError < StandardError; end
|
9
|
+
|
8
10
|
def out
|
9
11
|
@out ||= STDOUT
|
10
12
|
end
|
11
13
|
|
12
|
-
def warning(message
|
13
|
-
|
14
|
-
out.puts "\n", spacer, "#{char} #{message.to_s.yellow} #{char}", spacer, "\n"
|
15
|
-
end
|
16
|
-
|
17
|
-
def error(message, error = StandardError)
|
18
|
-
out.puts message.to_s.red
|
19
|
-
yield if block_given?
|
20
|
-
fail error, message
|
14
|
+
def warning(message)
|
15
|
+
out.puts "\n#{message}...".yellow
|
21
16
|
end
|
22
17
|
|
23
18
|
def success(message)
|
24
19
|
out.puts message.to_s.green
|
20
|
+
true
|
25
21
|
end
|
26
22
|
|
27
23
|
def confirm(message)
|
@@ -32,23 +28,21 @@ module GitCommands
|
|
32
28
|
when /y/i
|
33
29
|
yield
|
34
30
|
else
|
35
|
-
|
31
|
+
fail(AbortError, "Aborted operation!")
|
36
32
|
end
|
37
33
|
end
|
38
34
|
|
39
|
-
|
40
|
-
|
41
|
-
def ask(message)
|
42
|
-
out.print message.cyan
|
43
|
-
input
|
44
|
-
end
|
45
|
-
|
46
|
-
def abort!(message)
|
35
|
+
def error(message)
|
47
36
|
out.puts message.to_s.red
|
48
37
|
exit
|
49
38
|
end
|
50
39
|
|
51
|
-
def
|
40
|
+
private def ask(message)
|
41
|
+
out.print message.cyan
|
42
|
+
input
|
43
|
+
end
|
44
|
+
|
45
|
+
private def input
|
52
46
|
STDIN.gets.chomp
|
53
47
|
end
|
54
48
|
end
|
data/lib/git_commands/version.rb
CHANGED