obazoud-git-external 0.3.1 → 0.4.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.
- data/bin/git-external +45 -21
- metadata +5 -5
data/bin/git-external
CHANGED
@@ -70,7 +70,7 @@ def load_configuration(file)
|
|
70
70
|
linesExit, lines = execute('git config', ['--list', '--file', file])
|
71
71
|
lines.each do |line|
|
72
72
|
if line =~ /^external\.([^$]+)\.([^=]+)=(.*)$/
|
73
|
-
$configurations[$1.chomp] ||= {}
|
73
|
+
$configurations[$1.chomp] ||= {'revision' => false}
|
74
74
|
$configurations[$1.chomp][$2.chomp] = $3.chomp
|
75
75
|
end
|
76
76
|
end
|
@@ -100,35 +100,47 @@ def branch_exists(path, branch)
|
|
100
100
|
return result
|
101
101
|
end
|
102
102
|
|
103
|
-
def init_external(url, path, branch='master')
|
103
|
+
def init_external(url, path, branch='origin/master', revision=nil)
|
104
104
|
require 'fileutils'
|
105
105
|
if File.directory? "#{path}/.git"
|
106
106
|
puts "- Repository already exists"
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
107
|
+
|
108
|
+
return
|
109
|
+
end
|
110
|
+
|
111
|
+
url = normalize_url url
|
112
|
+
execute('git clone', ["#{url}", path], Dir.getwd, '')
|
113
|
+
|
114
|
+
if not revision
|
115
|
+
remoteName, remoteBranch = branch.split('/')
|
111
116
|
|
112
117
|
# Create a local tracking branch if it doesn't exist already
|
113
118
|
unless branch_exists(path, branch)
|
114
|
-
puts "- Creating local tracking branch: #{branch} ->
|
115
|
-
execute('git branch', ['checkout', '--track', "#{
|
119
|
+
puts "- Creating local tracking branch: #{branch} -> #{remoteBranch}"
|
120
|
+
execute('git branch', ['checkout', '--track', "#{remoteBranch}", "#{branch}"], path)
|
116
121
|
end
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
|
123
|
+
update_external(url, path, branch, revision)
|
124
|
+
|
125
|
+
else
|
126
|
+
puts "- Dealing with a tag/sha1: #{branch}"
|
127
|
+
update_external(url, path, branch, revision)
|
121
128
|
end
|
129
|
+
|
122
130
|
end
|
123
131
|
|
124
|
-
def update_external(url, path, branch='master')
|
132
|
+
def update_external(url, path, branch='origin/master', revision=nil)
|
125
133
|
require 'fileutils'
|
126
134
|
puts "- Updating #{path}"
|
127
135
|
if File.directory? "#{path}/.git"
|
128
136
|
if uncommitted_changes?(path)
|
129
137
|
puts "#{path} - uncommitted changes detected, can not update repository"
|
138
|
+
elsif revision
|
139
|
+
puts "#{path} - updating to revision:#{revision}"
|
140
|
+
execute('git checkout', [revision], path, '')
|
130
141
|
else
|
131
|
-
|
142
|
+
puts "#{path} - updating branch #{branch}"
|
143
|
+
execute('git pull', ['--rebase'], path, '')
|
132
144
|
end
|
133
145
|
end
|
134
146
|
end
|
@@ -136,11 +148,19 @@ end
|
|
136
148
|
def command_status
|
137
149
|
ok = 0
|
138
150
|
broken = 0
|
151
|
+
unknown = 0
|
139
152
|
$configurations.each do |name, config|
|
140
153
|
branch = config["branch"]
|
141
154
|
url = config["url"]
|
142
155
|
path = config["path"]
|
156
|
+
revision = config["revision"]
|
143
157
|
|
158
|
+
# not implemented yet
|
159
|
+
if revision
|
160
|
+
unknown += 1
|
161
|
+
next
|
162
|
+
end
|
163
|
+
|
144
164
|
symbolicExit, symbolic = execute('git symbolic-ref', ['HEAD', '--short'], path)
|
145
165
|
gitBranchExit, gitBranch = execute('git config', ["branch.#{symbolic}.merge"], path)
|
146
166
|
gitBranch = gitBranch.gsub('refs/heads/', '')
|
@@ -153,11 +173,13 @@ def command_status
|
|
153
173
|
changesString = ""
|
154
174
|
end
|
155
175
|
|
176
|
+
remoteBranch = remote + "/" + gitBranch
|
177
|
+
|
156
178
|
if gitBranchExit != 0 && gitBranchExit != 1 && gitRemoteExit != 0 && gitRemoteExit != 1
|
157
179
|
puts " ✗ #{path} -- exit code #{gitBranchExit}, #{gitRemoteExit}"
|
158
180
|
broken += 1
|
159
181
|
else
|
160
|
-
if branch ==
|
182
|
+
if branch == remoteBranch
|
161
183
|
if url == gitRemote
|
162
184
|
puts " ✓ #{path} #{changesString}"
|
163
185
|
ok += 1
|
@@ -166,15 +188,16 @@ def command_status
|
|
166
188
|
broken +=1
|
167
189
|
end
|
168
190
|
else
|
169
|
-
puts "
|
191
|
+
puts " ✗ #{path} #{changesString} -- expected branch '#{branch}' but was '#{remoteBranch}'"
|
170
192
|
broken +=1
|
171
193
|
end
|
172
194
|
end
|
173
195
|
end
|
174
|
-
|
196
|
+
|
197
|
+
puts "#{broken > 0 ? "✗" : "✓"} » #{ok} ok • #{broken} broken - #{unknown} unknown"
|
175
198
|
end
|
176
199
|
|
177
|
-
def command_add(url, path, branch='master')
|
200
|
+
def command_add(url, path, branch='origin/master')
|
178
201
|
command_rm(path)
|
179
202
|
execute('git config', ['--file', $externals_file, '--add', "external.#{path}.path", "#{path}"])
|
180
203
|
execute('git config', ['--file', $externals_file, '--add', "external.#{path}.url", "#{url}"])
|
@@ -190,6 +213,7 @@ def command_rm(path)
|
|
190
213
|
execute('git config', ['--file', $externals_file, '--unset', "external.#{path}.path"])
|
191
214
|
execute('git config', ['--file', $externals_file, '--unset', "external.#{path}.url"])
|
192
215
|
execute('git config', ['--file', $externals_file, '--unset', "external.#{path}.branch"])
|
216
|
+
execute('git config', ['--file', $externals_file, '--unset', "external.#{path}.revision"])
|
193
217
|
execute('git config', ['--file', $externals_file, '--remove-section', "external.#{path}"])
|
194
218
|
|
195
219
|
if File.file? $ignore_file
|
@@ -207,13 +231,13 @@ end
|
|
207
231
|
def command_init
|
208
232
|
$configurations.each do |name, config|
|
209
233
|
puts name
|
210
|
-
init_external config["url"], config["path"], config["branch"]
|
234
|
+
init_external config["url"], config["path"], config["branch"], config['revision']
|
211
235
|
end
|
212
236
|
end
|
213
237
|
|
214
238
|
def command_update
|
215
239
|
$configurations.each do |name, config|
|
216
|
-
update_external config["url"], config["path"], config["branch"]
|
240
|
+
update_external config["url"], config["path"], config["branch"], config['revision']
|
217
241
|
end
|
218
242
|
end
|
219
243
|
|
@@ -268,7 +292,7 @@ command=ARGV[0]
|
|
268
292
|
|
269
293
|
case command
|
270
294
|
when "status" then command_status
|
271
|
-
when "add" then command_add ARGV[1], ARGV[2], ARGV[3] || "master"
|
295
|
+
when "add" then command_add ARGV[1], ARGV[2], ARGV[3] || "origin/master"
|
272
296
|
when "rm" then command_rm ARGV[1]
|
273
297
|
when "init" then command_init
|
274
298
|
when "update" then command_update
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obazoud-git-external
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel Cestari
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2012-
|
20
|
+
date: 2012-11-02 00:00:00 Z
|
21
21
|
dependencies: []
|
22
22
|
|
23
23
|
description: Extension for git which adds a command providing similar functionality to git submodules but without attaching each module to a single version
|