git_cli 0.8.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.release_history.yml +4 -0
- data/.rspec +1 -0
- data/.version_history.yml +8 -0
- data/Gemfile +2 -0
- data/Rakefile +1 -1
- data/git_cli.gemspec +6 -4
- data/lib/git_cli/add_commit.rb +23 -5
- data/lib/git_cli/branch.rb +36 -17
- data/lib/git_cli/delta.rb +182 -40
- data/lib/git_cli/global.rb +4 -1
- data/lib/git_cli/ignore.rb +5 -2
- data/lib/git_cli/repos.rb +21 -10
- data/lib/git_cli/tags.rb +34 -16
- data/lib/git_cli/version.rb +1 -1
- data/lib/git_cli.rb +71 -6
- metadata +16 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77fb6b4308d34a185d9ba1355470893a53b15ee9710953ed0079c4847d8dc59d
|
4
|
+
data.tar.gz: 27d246f6554b2aa688738a38e21a2e985f8cbbb504d702f3ff0c0127ecd48949
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfb96c8d437b6df087b875be71c70a8cea9f6d92bf5aac59c4a7fd1eeb3c756bcaccc4850ff1f4caa8e83f4a26a9c24a536122f0b37841ce16613ee571f90f92
|
7
|
+
data.tar.gz: 1cbfb647558fd5d0bb1b0909fb29aa02fe3f668c5796b5097d6d29c3b5f7c72b802a50f0640475a7482e0af379d49240058a1ca1183315f60f3a57645bc31de3
|
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/git_cli.gemspec
CHANGED
@@ -27,10 +27,12 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
|
-
spec.add_dependency "tlogger"
|
31
|
-
spec.add_dependency
|
32
|
-
spec.add_dependency "
|
30
|
+
#spec.add_dependency "tlogger"
|
31
|
+
spec.add_dependency 'teLogger'
|
32
|
+
spec.add_dependency "toolrack"
|
33
|
+
spec.add_dependency "gvcs"
|
33
34
|
spec.add_dependency "ptools", "~> 1.4.0"
|
34
35
|
|
35
|
-
spec.add_development_dependency 'devops_helper'
|
36
|
+
#spec.add_development_dependency 'devops_helper' #, ">= 0.2.0"
|
37
|
+
spec.add_development_dependency 'devops_assist' #, ">= 0.2.0"
|
36
38
|
end
|
data/lib/git_cli/add_commit.rb
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
module GitCli
|
19
19
|
module AddCommit
|
20
20
|
|
21
|
+
class CommitError < StandardError; end
|
22
|
+
|
21
23
|
def add_to_staging(paths)
|
22
24
|
check_vcs
|
23
25
|
|
@@ -37,7 +39,13 @@ module GitCli
|
|
37
39
|
log_debug "Add : #{cmdln}"
|
38
40
|
|
39
41
|
os_exec(cmdln) do |st, res|
|
40
|
-
|
42
|
+
res.strip!
|
43
|
+
if not st.success?
|
44
|
+
raise CommitError, res
|
45
|
+
else
|
46
|
+
res
|
47
|
+
end
|
48
|
+
#[st.success?, res.strip]
|
41
49
|
end
|
42
50
|
end # add_to_staging
|
43
51
|
alias :add :add_to_staging
|
@@ -118,12 +126,17 @@ module GitCli
|
|
118
126
|
log_debug "Commit : #{cmdln}"
|
119
127
|
|
120
128
|
os_exec(cmdln) do |st, res|
|
121
|
-
|
129
|
+
res.strip!
|
130
|
+
if not st.success?
|
131
|
+
raise CommitError, res
|
132
|
+
else
|
133
|
+
res
|
134
|
+
end
|
122
135
|
end
|
123
136
|
|
124
137
|
end # commit
|
125
138
|
|
126
|
-
def commit_all(
|
139
|
+
def commit_all(message)
|
127
140
|
check_vcs
|
128
141
|
|
129
142
|
# have to escape the message for command line purposes
|
@@ -136,14 +149,19 @@ module GitCli
|
|
136
149
|
cmd << @vcs.exe_path
|
137
150
|
cmd << "commit"
|
138
151
|
cmd << "-am"
|
139
|
-
cmd << msg
|
152
|
+
cmd << "\"#{msg}\""
|
140
153
|
|
141
154
|
cmdln = cmd.join " "
|
142
155
|
|
143
156
|
log_debug "Commit All : #{cmdln}"
|
144
157
|
|
145
158
|
os_exec(cmdln) do |st, res|
|
146
|
-
|
159
|
+
res.strip!
|
160
|
+
if not st.success?
|
161
|
+
raise CommitError, res
|
162
|
+
else
|
163
|
+
res.strip
|
164
|
+
end
|
147
165
|
end
|
148
166
|
|
149
167
|
end # commit_all
|
data/lib/git_cli/branch.rb
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
|
19
19
|
module GitCli
|
20
20
|
module Branch
|
21
|
+
|
22
|
+
class BranchError < StandardError; end
|
21
23
|
|
22
24
|
def current_branch
|
23
25
|
|
@@ -50,9 +52,11 @@ module GitCli
|
|
50
52
|
# end
|
51
53
|
#end
|
52
54
|
|
53
|
-
|
55
|
+
res.strip
|
56
|
+
#[true, res.strip!]
|
54
57
|
else
|
55
|
-
|
58
|
+
raise BranchError, res.strip
|
59
|
+
#[false, res]
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
@@ -70,7 +74,8 @@ module GitCli
|
|
70
74
|
br.concat(rb)
|
71
75
|
end
|
72
76
|
|
73
|
-
|
77
|
+
br
|
78
|
+
#[true, br]
|
74
79
|
|
75
80
|
end # all_branches
|
76
81
|
|
@@ -95,9 +100,11 @@ module GitCli
|
|
95
100
|
res.each_line do |l|
|
96
101
|
b << l.strip
|
97
102
|
end
|
98
|
-
|
103
|
+
b
|
104
|
+
#[true, b]
|
99
105
|
else
|
100
|
-
|
106
|
+
raise BranchError, res.strip
|
107
|
+
#[false, res]
|
101
108
|
end
|
102
109
|
end
|
103
110
|
|
@@ -125,9 +132,11 @@ module GitCli
|
|
125
132
|
b << l.strip
|
126
133
|
end
|
127
134
|
|
128
|
-
[true, b]
|
135
|
+
#[true, b]
|
136
|
+
b
|
129
137
|
else
|
130
|
-
|
138
|
+
raise BranchError, res.strip
|
139
|
+
#[false, res]
|
131
140
|
end
|
132
141
|
end
|
133
142
|
|
@@ -151,9 +160,11 @@ module GitCli
|
|
151
160
|
log_debug "Switch branch : #{cmdln}"
|
152
161
|
res = os_exec(cmdln) do |st, res|
|
153
162
|
if st.success?
|
154
|
-
|
163
|
+
res.strip
|
164
|
+
#[true, res.strip]
|
155
165
|
else
|
156
|
-
|
166
|
+
raise BranchError, res.strip
|
167
|
+
#[false, res]
|
157
168
|
end
|
158
169
|
end
|
159
170
|
|
@@ -180,9 +191,11 @@ module GitCli
|
|
180
191
|
res = os_exec(cmdln) do |st, res|
|
181
192
|
|
182
193
|
if st.success?
|
183
|
-
|
194
|
+
res.strip
|
195
|
+
#[true, res.strip]
|
184
196
|
else
|
185
|
-
|
197
|
+
raise BranchError, res.strip
|
198
|
+
#[false, res]
|
186
199
|
end
|
187
200
|
end
|
188
201
|
|
@@ -205,9 +218,11 @@ module GitCli
|
|
205
218
|
res = os_exec(cmdln) do |st, res|
|
206
219
|
|
207
220
|
if st.success?
|
208
|
-
|
221
|
+
res.strip
|
222
|
+
#[true, res.strip]
|
209
223
|
else
|
210
|
-
|
224
|
+
raise BranchError, res.strip
|
225
|
+
#[false, res]
|
211
226
|
end
|
212
227
|
end
|
213
228
|
|
@@ -232,9 +247,11 @@ module GitCli
|
|
232
247
|
res = os_exec(cmdln) do |st, res|
|
233
248
|
|
234
249
|
if st.success?
|
235
|
-
|
250
|
+
res.strip
|
251
|
+
#[true, res.strip]
|
236
252
|
else
|
237
|
-
|
253
|
+
raise BranchError, res.strip
|
254
|
+
#[false, res]
|
238
255
|
end
|
239
256
|
end
|
240
257
|
|
@@ -260,9 +277,11 @@ module GitCli
|
|
260
277
|
res = os_exec(cmdln) do |st, res|
|
261
278
|
|
262
279
|
if st.success?
|
263
|
-
|
280
|
+
res.strip
|
281
|
+
#[true, res.strip]
|
264
282
|
else
|
265
|
-
|
283
|
+
raise BranchError, res.strip
|
284
|
+
#[false, res]
|
266
285
|
end
|
267
286
|
|
268
287
|
end
|
data/lib/git_cli/delta.rb
CHANGED
@@ -19,6 +19,102 @@
|
|
19
19
|
module GitCli
|
20
20
|
module Delta
|
21
21
|
|
22
|
+
class GitDeltaError < StandardError; end
|
23
|
+
class VCSItem
|
24
|
+
attr_reader :path, :full, :type
|
25
|
+
def initialize(type, path, full)
|
26
|
+
@type = type
|
27
|
+
@path = path
|
28
|
+
@full = full
|
29
|
+
end
|
30
|
+
|
31
|
+
# support sort
|
32
|
+
def <=>(val)
|
33
|
+
@path <=> val.path
|
34
|
+
end
|
35
|
+
end
|
36
|
+
class NewDir < VCSItem
|
37
|
+
def initialize(path, full)
|
38
|
+
super(:dir, path, full)
|
39
|
+
end
|
40
|
+
def to_s
|
41
|
+
"[N] #{@path}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
class NewFile < VCSItem
|
45
|
+
def initialize(path, full)
|
46
|
+
super(:file, path, full)
|
47
|
+
end
|
48
|
+
def to_s
|
49
|
+
"[N] #{@path}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
class ModifiedDir < VCSItem
|
53
|
+
def initialize(path, full)
|
54
|
+
super(:dir, path, full)
|
55
|
+
end
|
56
|
+
def to_s
|
57
|
+
"[M] #{@path}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
class ModifiedFile < VCSItem
|
61
|
+
def initialize(path, full)
|
62
|
+
super(:file, path, full)
|
63
|
+
end
|
64
|
+
def to_s
|
65
|
+
"[M] #{@path}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
class DeletedDir < VCSItem
|
69
|
+
def initialize(path, full)
|
70
|
+
super(:dir, path, full)
|
71
|
+
end
|
72
|
+
def to_s
|
73
|
+
"[D] #{@path}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
class DeletedFile < VCSItem
|
77
|
+
def initialize(path, full)
|
78
|
+
super(:file, path, full)
|
79
|
+
end
|
80
|
+
def to_s
|
81
|
+
"[D] #{@path}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
class StagedDir < VCSItem
|
85
|
+
def initialize(path, full)
|
86
|
+
super(:dir, path, full)
|
87
|
+
end
|
88
|
+
def to_s
|
89
|
+
"[S] #{@path}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
class StagedFile < VCSItem
|
93
|
+
def initialize(path, full)
|
94
|
+
super(:file, path, full)
|
95
|
+
end
|
96
|
+
def to_s
|
97
|
+
"[S] #{@path}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
class ConflictedDir < VCSItem
|
101
|
+
def initialize(path, full)
|
102
|
+
super(:dir, path, full)
|
103
|
+
end
|
104
|
+
def to_s
|
105
|
+
"[C] #{@path}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
class ConflictedFile < VCSItem
|
109
|
+
def initialize(path, full)
|
110
|
+
super(:file, path, full)
|
111
|
+
end
|
112
|
+
def to_s
|
113
|
+
"[C] #{@path}"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
|
22
118
|
def status
|
23
119
|
|
24
120
|
check_vcs
|
@@ -34,11 +130,16 @@ module GitCli
|
|
34
130
|
log_debug "Status : #{cmdln}"
|
35
131
|
res = os_exec(cmdln) do |st, res|
|
36
132
|
|
37
|
-
if st.success?
|
38
|
-
|
133
|
+
if not st.success?
|
134
|
+
raise GitDeltaError, res
|
39
135
|
else
|
40
|
-
|
136
|
+
res
|
41
137
|
end
|
138
|
+
#if st.success?
|
139
|
+
# [true, res]
|
140
|
+
#else
|
141
|
+
# [false, res]
|
142
|
+
#end
|
42
143
|
end
|
43
144
|
|
44
145
|
end # status
|
@@ -61,19 +162,21 @@ module GitCli
|
|
61
162
|
files = []
|
62
163
|
res = os_exec(cmdln) do |st, res|
|
63
164
|
|
64
|
-
if st.success?
|
165
|
+
if not st.success?
|
166
|
+
raise GitDeltaError, res
|
167
|
+
else
|
65
168
|
res.each_line do |l|
|
66
169
|
l.chomp!
|
67
|
-
|
68
|
-
|
170
|
+
full = File.join(@wsPath,l)
|
171
|
+
if File.directory?(full)
|
172
|
+
dirs << ModifiedDir.new(l,full)
|
69
173
|
else
|
70
|
-
files << l
|
174
|
+
files << ModifiedFile.new(l,full)
|
71
175
|
end
|
72
176
|
end
|
73
177
|
|
74
|
-
[true, dirs.sort, files.sort]
|
75
|
-
|
76
|
-
[false, [], []]
|
178
|
+
#[true, dirs.sort, files.sort]
|
179
|
+
[dirs.sort, files.sort]
|
77
180
|
end
|
78
181
|
|
79
182
|
end
|
@@ -96,19 +199,20 @@ module GitCli
|
|
96
199
|
files = []
|
97
200
|
res = os_exec(cmdln) do |st, res|
|
98
201
|
|
99
|
-
if st.success?
|
202
|
+
if not st.success?
|
203
|
+
raise GitDeltaError, res
|
204
|
+
else
|
100
205
|
res.each_line do |l|
|
101
206
|
l.chomp!
|
102
|
-
|
103
|
-
|
207
|
+
full = File.join(@wsPath,l)
|
208
|
+
if File.directory?(full)
|
209
|
+
dirs << ConflictedDir.new(l, full)
|
104
210
|
else
|
105
|
-
files << l
|
211
|
+
files << ConflictedFile.new(l, full)
|
106
212
|
end
|
107
213
|
end
|
108
214
|
|
109
|
-
[
|
110
|
-
else
|
111
|
-
[false, [], []]
|
215
|
+
[dirs.sort, files.sort]
|
112
216
|
end
|
113
217
|
|
114
218
|
end
|
@@ -131,19 +235,20 @@ module GitCli
|
|
131
235
|
files = []
|
132
236
|
res = os_exec(cmdln) do |st, res|
|
133
237
|
|
134
|
-
if st.success?
|
238
|
+
if not st.success?
|
239
|
+
raise GitDeltaError, res
|
240
|
+
else
|
135
241
|
res.each_line do |l|
|
136
242
|
l.chomp!
|
137
|
-
|
138
|
-
|
243
|
+
full = File.join(@wsPath,l)
|
244
|
+
if File.directory?(full)
|
245
|
+
dirs << NewDir.new(l,full)
|
139
246
|
else
|
140
|
-
files << l
|
247
|
+
files << NewFile.new(l,full)
|
141
248
|
end
|
142
249
|
end
|
143
250
|
|
144
|
-
[
|
145
|
-
else
|
146
|
-
[false, [], []]
|
251
|
+
[dirs.sort, files.sort]
|
147
252
|
end
|
148
253
|
end
|
149
254
|
|
@@ -166,19 +271,20 @@ module GitCli
|
|
166
271
|
files = []
|
167
272
|
res = os_exec(cmdln) do |st, res|
|
168
273
|
|
169
|
-
if st.success?
|
274
|
+
if not st.success?
|
275
|
+
raise GitDeltaError, res
|
276
|
+
else
|
170
277
|
res.each_line do |l|
|
171
278
|
l.chomp!
|
172
|
-
|
173
|
-
|
279
|
+
full = File.join(@wsPath,l)
|
280
|
+
if File.directory?(full)
|
281
|
+
dirs << DeletedDir.new(l,full)
|
174
282
|
else
|
175
|
-
files << l
|
283
|
+
files << DeletedFile.new(l,full)
|
176
284
|
end
|
177
285
|
end
|
178
286
|
|
179
|
-
[
|
180
|
-
else
|
181
|
-
[false, [], []]
|
287
|
+
[dirs.sort, files.sort]
|
182
288
|
end
|
183
289
|
end
|
184
290
|
|
@@ -196,24 +302,25 @@ module GitCli
|
|
196
302
|
cmd << "diff --name-only --cached"
|
197
303
|
|
198
304
|
cmdln = cmd.join(" ")
|
199
|
-
log_debug "
|
305
|
+
log_debug "Staged Files : #{cmdln}"
|
200
306
|
dirs = []
|
201
307
|
files = []
|
202
308
|
res = os_exec(cmdln) do |st, res|
|
203
309
|
|
204
|
-
if st.success?
|
310
|
+
if not st.success?
|
311
|
+
raise GitDeltaError, res
|
312
|
+
else
|
205
313
|
res.each_line do |l|
|
206
314
|
l.chomp!
|
207
|
-
|
208
|
-
|
315
|
+
full = File.join(@wsPath,l)
|
316
|
+
if File.directory?(full)
|
317
|
+
dirs << StagedDir.new(l,full)
|
209
318
|
else
|
210
|
-
files << l
|
319
|
+
files << StagedFile.new(l,full)
|
211
320
|
end
|
212
321
|
end
|
213
322
|
|
214
|
-
[
|
215
|
-
else
|
216
|
-
[false, [], []]
|
323
|
+
[dirs.sort, files.sort]
|
217
324
|
end
|
218
325
|
end
|
219
326
|
|
@@ -221,7 +328,7 @@ module GitCli
|
|
221
328
|
|
222
329
|
def reset_file_changes(path)
|
223
330
|
|
224
|
-
raise_if_empty(path, "Path cannot be empty for reset file changes operation",
|
331
|
+
raise_if_empty(path, "Path cannot be empty for reset file changes operation", GitDeltaError)
|
225
332
|
|
226
333
|
check_vcs
|
227
334
|
|
@@ -260,6 +367,41 @@ module GitCli
|
|
260
367
|
|
261
368
|
end # reset all changes
|
262
369
|
|
370
|
+
# If remote is ahead of local
|
371
|
+
# git rev-list HEAD..origin/main --count
|
372
|
+
#
|
373
|
+
# if local is ahead of remote
|
374
|
+
# git rev-list origin/main..HEAD --count
|
375
|
+
#
|
376
|
+
def calculate_distance(from, to)
|
377
|
+
|
378
|
+
check_vcs
|
379
|
+
|
380
|
+
cmd = []
|
381
|
+
cmd << "cd"
|
382
|
+
cmd << @wsPath
|
383
|
+
cmd << "&&"
|
384
|
+
cmd << @vcs.exe_path
|
385
|
+
cmd << "rev-list #{from}..#{to} --count"
|
386
|
+
|
387
|
+
cmdln = cmd.join(" ")
|
388
|
+
log_debug "Calculate distance between two repos : #{cmdln}"
|
389
|
+
res = os_exec(cmdln) do |st, res|
|
390
|
+
[st.success?, res]
|
391
|
+
end
|
392
|
+
|
393
|
+
end
|
394
|
+
|
395
|
+
def is_local_ahead_of_remote?(remote_name, branch = "main")
|
396
|
+
|
397
|
+
calculate_distance("#{remote_name}/#{branch}", "HEAD")
|
398
|
+
|
399
|
+
end
|
400
|
+
|
401
|
+
def is_remote_ahead_of_local?(remote_name, branch = "main")
|
402
|
+
|
403
|
+
calculate_distance("HEAD","#{remote_name}/#{branch}")
|
404
|
+
end
|
263
405
|
|
264
406
|
end
|
265
407
|
end
|
data/lib/git_cli/global.rb
CHANGED
@@ -15,9 +15,12 @@
|
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
16
|
|
17
17
|
|
18
|
-
require 'tlogger'
|
18
|
+
#require 'tlogger'
|
19
|
+
require 'teLogger'
|
19
20
|
require 'singleton'
|
20
21
|
|
22
|
+
include TeLogger
|
23
|
+
|
21
24
|
module GitCli
|
22
25
|
class Global
|
23
26
|
include Singleton
|
data/lib/git_cli/ignore.rb
CHANGED
@@ -19,9 +19,12 @@
|
|
19
19
|
module GitCli
|
20
20
|
module Ignore
|
21
21
|
|
22
|
-
def ignore(val)
|
22
|
+
def ignore(*val)
|
23
23
|
with_ignore_file do |f|
|
24
|
-
|
24
|
+
val.each do |v|
|
25
|
+
f.puts v
|
26
|
+
end
|
27
|
+
#f.puts val
|
25
28
|
end
|
26
29
|
log_debug ".gitignore file updated with line '#{val}'"
|
27
30
|
[true,".gitignore file updated"]
|
data/lib/git_cli/repos.rb
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
|
19
19
|
module GitCli
|
20
20
|
module Repos
|
21
|
+
class ReposError < StandardError; end
|
21
22
|
|
22
23
|
def remote_config
|
23
24
|
check_vcs
|
@@ -32,21 +33,26 @@ module GitCli
|
|
32
33
|
cmdln = cmd.join(" ")
|
33
34
|
log_debug "Remote config : #{cmdln}"
|
34
35
|
res = os_exec(cmdln) do |st, res|
|
35
|
-
|
36
|
+
|
36
37
|
if st.success?
|
37
38
|
|
38
39
|
remotes = { }
|
39
40
|
res.each_line do |l|
|
40
41
|
ls = l.split("\t")
|
41
42
|
lss = ls[1].split(" ")
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
|
44
|
+
remotes[ls[0]] = { } if is_empty?(remotes[ls[0]])
|
45
|
+
rem = remotes[ls[0]]
|
46
|
+
type = lss[-1]
|
47
|
+
type.gsub!("(","").gsub!(")","")
|
48
|
+
rem[type] = lss[0]
|
45
49
|
end
|
46
50
|
|
47
|
-
[true, remotes]
|
51
|
+
#[true, remotes]
|
52
|
+
remotes
|
48
53
|
else
|
49
|
-
|
54
|
+
raise ReposError, res.strip
|
55
|
+
#[false, res]
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
@@ -74,9 +80,11 @@ module GitCli
|
|
74
80
|
res = os_exec(cmdln) do |st, res|
|
75
81
|
|
76
82
|
if st.success?
|
77
|
-
[true, res.strip]
|
83
|
+
#[true, res.strip]
|
84
|
+
res.strip
|
78
85
|
else
|
79
|
-
|
86
|
+
raise ReposError, res.strip
|
87
|
+
#[false, res.strip]
|
80
88
|
end
|
81
89
|
end
|
82
90
|
|
@@ -103,13 +111,16 @@ module GitCli
|
|
103
111
|
res = os_exec(cmdln) do |st, res|
|
104
112
|
|
105
113
|
if st.success?
|
106
|
-
[true, res.strip]
|
114
|
+
#[true, res.strip]
|
115
|
+
res.strip
|
107
116
|
else
|
108
|
-
|
117
|
+
raise ReposError, res.strip
|
118
|
+
#[false, res.strip]
|
109
119
|
end
|
110
120
|
end
|
111
121
|
|
112
122
|
end # remove_remote
|
123
|
+
alias_method :remove_del, :remove_remote
|
113
124
|
|
114
125
|
|
115
126
|
|
data/lib/git_cli/tags.rb
CHANGED
@@ -19,6 +19,8 @@
|
|
19
19
|
module GitCli
|
20
20
|
module Tags
|
21
21
|
|
22
|
+
class TagError < StandardError; end
|
23
|
+
|
22
24
|
def all_tags
|
23
25
|
|
24
26
|
check_vcs
|
@@ -35,9 +37,11 @@ module GitCli
|
|
35
37
|
res = os_exec(cmdln) do |st, res|
|
36
38
|
|
37
39
|
if st.success?
|
38
|
-
|
40
|
+
res.strip
|
41
|
+
#[true, res.strip!]
|
39
42
|
else
|
40
|
-
|
43
|
+
raise TagError, res
|
44
|
+
#[false, res]
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
@@ -144,9 +148,11 @@ module GitCli
|
|
144
148
|
log_debug "New tag : #{cmdln}"
|
145
149
|
res = os_exec(cmdln) do |st, res|
|
146
150
|
if st.success?
|
147
|
-
[true, res.strip!]
|
151
|
+
#[true, res.strip!]
|
152
|
+
res.strip
|
148
153
|
else
|
149
|
-
|
154
|
+
raise TagError, res
|
155
|
+
#[false, res]
|
150
156
|
end
|
151
157
|
end
|
152
158
|
|
@@ -186,9 +192,11 @@ module GitCli
|
|
186
192
|
log_debug "New tag from commit ID : #{cmdln}"
|
187
193
|
res = os_exec(cmdln) do |st, res|
|
188
194
|
if st.success?
|
189
|
-
|
195
|
+
res.strip
|
196
|
+
#[true, res.strip!]
|
190
197
|
else
|
191
|
-
|
198
|
+
raise TagError, res
|
199
|
+
#[false, res]
|
192
200
|
end
|
193
201
|
end
|
194
202
|
|
@@ -211,9 +219,11 @@ module GitCli
|
|
211
219
|
res = os_exec(cmdln) do |st, res|
|
212
220
|
|
213
221
|
if st.success?
|
214
|
-
[true, res.strip!]
|
222
|
+
#[true, res.strip!]
|
223
|
+
res.strip
|
215
224
|
else
|
216
|
-
|
225
|
+
raise TagError, res
|
226
|
+
#[false, res]
|
217
227
|
end
|
218
228
|
end
|
219
229
|
|
@@ -241,9 +251,11 @@ module GitCli
|
|
241
251
|
log_debug "Show tag '#{tag}' #{not_empty?(format) ? "[#{format}]" : ""} : #{cmdln}"
|
242
252
|
res = os_exec(cmdln) do |st, res|
|
243
253
|
if st.success?
|
244
|
-
|
254
|
+
res.strip
|
255
|
+
#[true, res.strip!]
|
245
256
|
else
|
246
|
-
|
257
|
+
raise TagError, res
|
258
|
+
#[false, res]
|
247
259
|
end
|
248
260
|
end
|
249
261
|
|
@@ -266,9 +278,11 @@ module GitCli
|
|
266
278
|
log_debug "Delete tag '#{tag}' : #{cmdln}"
|
267
279
|
res = os_exec(cmdln) do |st, res|
|
268
280
|
if st.success?
|
269
|
-
|
281
|
+
res.strip
|
282
|
+
#[true, res.strip!]
|
270
283
|
else
|
271
|
-
|
284
|
+
raise TagError, res
|
285
|
+
#[false, res]
|
272
286
|
end
|
273
287
|
end
|
274
288
|
|
@@ -293,9 +307,11 @@ module GitCli
|
|
293
307
|
log_debug "Delete remote tag '#{tag}' at '#{repos}': #{cmdln}"
|
294
308
|
res = os_exec(cmdln) do |st, res|
|
295
309
|
if st.success?
|
296
|
-
|
310
|
+
res
|
311
|
+
#[true, res.strip!]
|
297
312
|
else
|
298
|
-
|
313
|
+
raise TagError, res
|
314
|
+
#[false, res]
|
299
315
|
end
|
300
316
|
end
|
301
317
|
|
@@ -321,9 +337,11 @@ module GitCli
|
|
321
337
|
log_debug "Checkout tag '#{tag}' into branch '#{branch}': #{cmdln}"
|
322
338
|
res = os_exec(cmdln) do |st, res|
|
323
339
|
if st.success?
|
324
|
-
|
340
|
+
res.strip
|
341
|
+
#[true, res.strip!]
|
325
342
|
else
|
326
|
-
|
343
|
+
raise TagError, res
|
344
|
+
#[false, res]
|
327
345
|
end
|
328
346
|
end
|
329
347
|
|
data/lib/git_cli/version.rb
CHANGED
data/lib/git_cli.rb
CHANGED
@@ -46,6 +46,9 @@ module GitCli
|
|
46
46
|
include Antrapol::ToolRack::ExceptionUtils
|
47
47
|
|
48
48
|
def os_exec(path, &block)
|
49
|
+
|
50
|
+
Gvcs::Config.instance.command_output.puts("Git command : #{path}") if Gvcs::Config.instance.is_show_vcs_command?
|
51
|
+
|
49
52
|
# redirect stderr to stdout
|
50
53
|
path = "#{path} 2>&1"
|
51
54
|
res = Antrapol::ToolRack::ProcessUtilsEngine.exec(path)
|
@@ -118,13 +121,21 @@ module GitCli
|
|
118
121
|
include GitCli::Repos
|
119
122
|
include GitCli::Stash
|
120
123
|
|
124
|
+
include TR::CondUtils
|
125
|
+
|
121
126
|
attr_accessor :repos
|
122
|
-
def initialize(
|
127
|
+
def initialize(path, vcs = nil)
|
123
128
|
|
124
|
-
raise_if_empty(vcs , "VCS cannot be empty", GitCliException)
|
129
|
+
#raise_if_empty(vcs , "VCS cannot be empty", GitCliException)
|
125
130
|
raise_if_empty(path, "Workspace path cannot be empty", GitCliException)
|
126
|
-
|
127
|
-
|
131
|
+
|
132
|
+
if is_empty?(vcs)
|
133
|
+
@vcs = Gvcs::Vcs.new
|
134
|
+
else
|
135
|
+
@vcs = vcs
|
136
|
+
end
|
137
|
+
|
138
|
+
#@vcs = vcs
|
128
139
|
@givenPath = path
|
129
140
|
|
130
141
|
@wsPath = File.expand_path(@givenPath)
|
@@ -151,6 +162,7 @@ module GitCli
|
|
151
162
|
|
152
163
|
def is_repos_exist?(name)
|
153
164
|
found = false
|
165
|
+
load_remote_to_repos
|
154
166
|
@repos.each do |re|
|
155
167
|
if re.name == name
|
156
168
|
found = true
|
@@ -161,8 +173,15 @@ module GitCli
|
|
161
173
|
end # is_repos_exist?
|
162
174
|
|
163
175
|
def is_workspace?
|
164
|
-
|
165
|
-
|
176
|
+
begin
|
177
|
+
status
|
178
|
+
true
|
179
|
+
rescue GitDeltaError => ex
|
180
|
+
log_debug ex.message
|
181
|
+
false
|
182
|
+
end
|
183
|
+
#st, res = status
|
184
|
+
#st
|
166
185
|
end
|
167
186
|
|
168
187
|
def workspace_root
|
@@ -195,6 +214,33 @@ module GitCli
|
|
195
214
|
|
196
215
|
end # workspace_root
|
197
216
|
|
217
|
+
def load_remote_to_repos
|
218
|
+
conf = remote_config
|
219
|
+
conf.each do |k,v|
|
220
|
+
repo = Gvcs::Repository.new(k, v.values.first)
|
221
|
+
repo.support_fetch if v.keys.include?("fetch")
|
222
|
+
repo.support_push if v.keys.include?("push")
|
223
|
+
add_repos(repo)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def repos
|
228
|
+
if @repos.nil? or @repos.empty?
|
229
|
+
load_remote_to_repos
|
230
|
+
end
|
231
|
+
@repos
|
232
|
+
end
|
233
|
+
|
234
|
+
def is_clean?
|
235
|
+
nd, nf = new_files
|
236
|
+
md, mf = modified_files
|
237
|
+
dd, df = deleted_files
|
238
|
+
sd, sf = staged_files
|
239
|
+
|
240
|
+
(nd.length == 0 and nf.length == 0 and md.length == 0 and mf.length == 0 and dd.length == 0 and df.length == 0 and sd.length == 0 and sf.length == 0)
|
241
|
+
end
|
242
|
+
alias_method :clean?, :is_clean?
|
243
|
+
|
198
244
|
end # Gvcs::Workspace
|
199
245
|
|
200
246
|
|
@@ -208,12 +254,31 @@ module GitCli
|
|
208
254
|
@url = url
|
209
255
|
#@branches = branches
|
210
256
|
@sslVerify = true
|
257
|
+
|
258
|
+
@fetch = false
|
259
|
+
@push = false
|
211
260
|
end
|
212
261
|
|
213
262
|
def ssl_verify(bool)
|
214
263
|
@sslVerify = bool
|
215
264
|
end
|
216
265
|
|
266
|
+
def support_fetch
|
267
|
+
@fetch = true
|
268
|
+
end
|
269
|
+
def is_fetch_supported?
|
270
|
+
@fetch
|
271
|
+
end
|
272
|
+
alias_method :can_fetch?, :is_fetch_supported?
|
273
|
+
|
274
|
+
def support_push
|
275
|
+
@push = true
|
276
|
+
end
|
277
|
+
def is_push_supported?
|
278
|
+
@push
|
279
|
+
end
|
280
|
+
alias_method :can_push?, :is_push_supported?
|
281
|
+
|
217
282
|
end # repository
|
218
283
|
|
219
284
|
end
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Liaw
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: teLogger
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: toolrack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: gvcs
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: ptools
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,19 +67,19 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.4.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: devops_assist
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
82
|
+
version: '0'
|
83
83
|
description: Interface to GIT via command line interface instead of some sor of library
|
84
84
|
email:
|
85
85
|
- chrisliaw@antrapol.com
|
@@ -88,7 +88,10 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
|
+
- ".release_history.yml"
|
92
|
+
- ".rspec"
|
91
93
|
- ".travis.yml"
|
94
|
+
- ".version_history.yml"
|
92
95
|
- CODE_OF_CONDUCT.md
|
93
96
|
- Gemfile
|
94
97
|
- LICENSE.txt
|
@@ -136,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
139
|
- !ruby/object:Gem::Version
|
137
140
|
version: '0'
|
138
141
|
requirements: []
|
139
|
-
rubygems_version: 3.
|
142
|
+
rubygems_version: 3.2.22
|
140
143
|
signing_key:
|
141
144
|
specification_version: 4
|
142
145
|
summary: GIT command line interface
|