aharrison24-git-external 0.1.2 → 0.1.3
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 +47 -1
- metadata +2 -2
data/bin/git-external
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
2
3
|
|
3
4
|
$root_dir = `git rev-parse --show-toplevel`.chomp
|
4
5
|
$externals_file = "#{$root_dir}/.gitexternals"
|
@@ -7,10 +8,13 @@ $configurations = {}
|
|
7
8
|
|
8
9
|
def usage
|
9
10
|
puts "Usage: git external add <repository-url> <path> [<branch>]"
|
11
|
+
puts " or: git external rm <path>"
|
12
|
+
puts " or: git external status"
|
10
13
|
puts " or: git external init [--] [<path>...]"
|
11
14
|
puts " or: git external update [--] [<path>...]"
|
12
15
|
puts " or: git external cmd '<command>'"
|
13
16
|
puts " or: git external list"
|
17
|
+
puts " or: git external heads"
|
14
18
|
end
|
15
19
|
|
16
20
|
def load_configuration
|
@@ -18,7 +22,7 @@ def load_configuration
|
|
18
22
|
lines = `git config -l -f #{$externals_file}`.split(/\n/)
|
19
23
|
$configurations = {}
|
20
24
|
lines.each do |line|
|
21
|
-
if line =~ /^external\.([
|
25
|
+
if line =~ /^external\.([^$]+)\.([^=]+)=(.*)$/
|
22
26
|
$configurations[$1.chomp] ||= {}
|
23
27
|
$configurations[$1.chomp][$2.chomp] = $3.chomp
|
24
28
|
end
|
@@ -101,6 +105,47 @@ def get_default_head(path)
|
|
101
105
|
end
|
102
106
|
end
|
103
107
|
|
108
|
+
def execute(cmd)
|
109
|
+
values = []
|
110
|
+
IO.popen(cmd) do |f|
|
111
|
+
tmp = f.gets
|
112
|
+
values.push(tmp.gsub(/\r/, '').gsub(/\n/, '')) unless tmp.nil?
|
113
|
+
end
|
114
|
+
return $?.exitstatus, values
|
115
|
+
end
|
116
|
+
|
117
|
+
def command_status
|
118
|
+
ok = 0
|
119
|
+
broken = 0
|
120
|
+
$configurations.each do |name, config|
|
121
|
+
branch = config["branch"]
|
122
|
+
url = config["url"]
|
123
|
+
path = config["path"]
|
124
|
+
|
125
|
+
gitBranchExit, gitBranch = execute("cd #{path} && git config \"branch.$(git symbolic-ref HEAD --short).merge\" | sed \"s/refs\\/heads\\///g\"")
|
126
|
+
gitRemoteExit, gitRemote = execute("cd #{path} && git config \"remote.$(git config \"branch.$(git symbolic-ref HEAD --short).remote\").url\"");
|
127
|
+
|
128
|
+
if gitBranchExit != 0 && gitRemoteExit != 0
|
129
|
+
puts " ✗ #{path}: exit code #{gitBranchExit}, #{gitRemoteExit}"
|
130
|
+
broken += 1
|
131
|
+
else
|
132
|
+
if branch == gitBranch[0]
|
133
|
+
if url == gitRemote[0]
|
134
|
+
puts " ✓ #{path}"
|
135
|
+
ok += 1
|
136
|
+
else
|
137
|
+
puts " ✗ #{path} -- expected url '#{url}' but was '#{gitRemote[0]}'"
|
138
|
+
broken +=1
|
139
|
+
end
|
140
|
+
else
|
141
|
+
puts " ✗ #{path} -- expected branch '#{branch}' but was '#{gitBranch[0]}'"
|
142
|
+
broken +=1
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
puts "#{broken > 0 ? "✗" : "✓"} » #{ok} ok • #{broken} broken"
|
147
|
+
end
|
148
|
+
|
104
149
|
def command_add(url, path, branch='master')
|
105
150
|
command_rm(path)
|
106
151
|
`git config -f #{$externals_file} --add external.#{path}.path #{path}`
|
@@ -158,6 +203,7 @@ load_configuration
|
|
158
203
|
command=ARGV[0]
|
159
204
|
|
160
205
|
case command
|
206
|
+
when "status" then command_status
|
161
207
|
when "add" then command_add ARGV[1], ARGV[2], ARGV[3] || "master"
|
162
208
|
when "rm" then command_rm ARGV[1]
|
163
209
|
when "init" then command_init
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aharrison24-git-external
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
- Daniel Cestari, Alastair Harrison
|
8
|
+
- Daniel Cestari, Olivier Bazoud, Alastair Harrison
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|