aharrison24-git-external 0.1.1 → 0.1.2
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 +68 -15
- metadata +3 -3
data/bin/git-external
CHANGED
@@ -6,9 +6,10 @@ $ignore_file = "#{$root_dir}/.gitignore"
|
|
6
6
|
$configurations = {}
|
7
7
|
|
8
8
|
def usage
|
9
|
-
puts "Usage: git external add <repository-url> <path>"
|
9
|
+
puts "Usage: git external add <repository-url> <path> [<branch>]"
|
10
10
|
puts " or: git external init [--] [<path>...]"
|
11
11
|
puts " or: git external update [--] [<path>...]"
|
12
|
+
puts " or: git external cmd '<command>'"
|
12
13
|
puts " or: git external list"
|
13
14
|
end
|
14
15
|
|
@@ -38,8 +39,10 @@ def normalize_url(url)
|
|
38
39
|
if url =~ /^\./
|
39
40
|
origin_url = `git config --get remote.origin.url`.chomp
|
40
41
|
|
42
|
+
# If url has no protocol...
|
41
43
|
unless origin_url =~ /^\w+:\/\//
|
42
44
|
if origin_url =~ /^([^:\/]+):([^:]+)/
|
45
|
+
# ... then assume it's ssh
|
43
46
|
origin_url = "ssh://#{$1}/#{$2}"
|
44
47
|
end
|
45
48
|
end
|
@@ -53,48 +56,96 @@ def normalize_url(url)
|
|
53
56
|
end
|
54
57
|
end
|
55
58
|
|
56
|
-
|
59
|
+
# Check if a branch exists
|
60
|
+
def branch_exists(path, branch)
|
61
|
+
branches = `cd #{path}; git branch`
|
62
|
+
regex = Regexp.new('[\\n\\s\\*]+' + Regexp.escape(branch.to_s) + '\\n')
|
63
|
+
result = ((branches =~ regex) ? true : false)
|
64
|
+
return result
|
65
|
+
end
|
66
|
+
|
67
|
+
def init_external(url, path, branch='master')
|
57
68
|
require 'fileutils'
|
58
|
-
|
69
|
+
if File.directory? "#{path}/.git"
|
70
|
+
puts "- Repository already exists"
|
71
|
+
else
|
59
72
|
FileUtils.makedirs File.dirname(path)
|
60
73
|
url = normalize_url url
|
61
74
|
system "git clone #{url} #{path}"
|
75
|
+
|
76
|
+
# Create a local tracking branch if it doesn't exist already
|
77
|
+
unless branch_exists(path, branch)
|
78
|
+
puts "- Creating local tracking branch: #{branch} -> origin/#{branch}"
|
79
|
+
system "cd #{path}; git branch checkout --track #{branch} origin/#{branch}"
|
80
|
+
end
|
81
|
+
|
82
|
+
# Check out the local branch
|
83
|
+
puts "- Checkout local branch: #{branch}"
|
84
|
+
system "cd #{path}; git checkout #{branch}"
|
62
85
|
end
|
63
86
|
end
|
64
87
|
|
65
|
-
def update_external(url, path)
|
88
|
+
def update_external(url, path, branch='master')
|
66
89
|
require 'fileutils'
|
67
90
|
if File.directory? "#{path}/.git"
|
68
|
-
|
91
|
+
`cd #{path}; git pull origin #{branch}`
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def get_default_head(path)
|
96
|
+
origin_head = `cd #{path}; git symbolic-ref refs/remotes/origin/HEAD`
|
97
|
+
if origin_head =~ /refs\/remotes\/origin\/(.*)/
|
98
|
+
$1
|
99
|
+
else
|
100
|
+
raise "#{path}: Can't determine default HEAD for origin remote"
|
69
101
|
end
|
70
102
|
end
|
71
103
|
|
72
|
-
def command_add(url, path)
|
104
|
+
def command_add(url, path, branch='master')
|
105
|
+
command_rm(path)
|
73
106
|
`git config -f #{$externals_file} --add external.#{path}.path #{path}`
|
74
107
|
`git config -f #{$externals_file} --add external.#{path}.url #{url}`
|
108
|
+
`git config -f #{$externals_file} --add external.#{path}.branch #{branch}`
|
75
109
|
`echo "#{path}" >> #{$ignore_file}`
|
76
110
|
end
|
77
111
|
|
78
112
|
def command_rm(path)
|
79
|
-
|
80
|
-
|
81
|
-
|
113
|
+
if File.file? $externals_file
|
114
|
+
`git config -f #{$externals_file} --unset external.#{path}.path`
|
115
|
+
`git config -f #{$externals_file} --unset external.#{path}.url`
|
116
|
+
`git config -f #{$externals_file} --unset external.#{path}.branch`
|
117
|
+
`git config -f #{$externals_file} --remove-section external.#{path} > /dev/null 2>&1`
|
118
|
+
File.delete $externals_file if `wc -l #{$externals_file}`.chomp.to_i == 0
|
119
|
+
end
|
120
|
+
if File.file? $ignore_file
|
121
|
+
# Remove entry from .gitignore file
|
122
|
+
`perl -pi -e 's/\\Q#{path.gsub(/\//, '\/')}\\E\n//g' #{$ignore_file}`
|
123
|
+
end
|
124
|
+
end
|
82
125
|
|
83
|
-
|
84
|
-
|
85
|
-
|
126
|
+
def command_list_default_heads
|
127
|
+
$configurations.each do |name, config|
|
128
|
+
puts "#{name}: #{get_default_head(config["path"])}"
|
129
|
+
end
|
86
130
|
end
|
87
131
|
|
88
132
|
def command_init
|
89
133
|
$configurations.each do |name, config|
|
90
134
|
puts name
|
91
|
-
init_external config["url"], config["path"]
|
135
|
+
init_external config["url"], config["path"], config["branch"]
|
92
136
|
end
|
93
137
|
end
|
94
138
|
|
95
139
|
def command_update
|
96
140
|
$configurations.each do |name, config|
|
97
|
-
update_external config["url"], config["path"]
|
141
|
+
update_external config["url"], config["path"], config["branch"]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def command_cmd(cmd)
|
146
|
+
$configurations.each do |name, config|
|
147
|
+
path = config['path']
|
148
|
+
system("echo #{path}; cd #{path}; #{cmd}")
|
98
149
|
end
|
99
150
|
end
|
100
151
|
|
@@ -107,11 +158,13 @@ load_configuration
|
|
107
158
|
command=ARGV[0]
|
108
159
|
|
109
160
|
case command
|
110
|
-
when "add" then command_add ARGV[1], ARGV[2]
|
161
|
+
when "add" then command_add ARGV[1], ARGV[2], ARGV[3] || "master"
|
111
162
|
when "rm" then command_rm ARGV[1]
|
112
163
|
when "init" then command_init
|
113
164
|
when "update" then command_update
|
165
|
+
when "cmd" then command_cmd ARGV[1]
|
114
166
|
when "list" then command_list
|
167
|
+
when "heads" then command_list_default_heads
|
115
168
|
else usage
|
116
169
|
end
|
117
170
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
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.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
- Daniel Cestari
|
8
|
+
- Daniel Cestari, Alastair Harrison
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-08 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Extension for git which adds a command providing similar functionality
|
15
15
|
to git submodules but without attaching each module to a single version
|