git-fastclone 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of git-fastclone might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/git-fastclone.rb +16 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 153c297d291e6ad8edcb66333438e70a4babfcfe
|
4
|
+
data.tar.gz: a3df048e6e1ab5e900e341513cb20248d996896d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f31a2cdd9cb886b3af613a639dc5992eb5653c69b116e506e701053a037a0e25223cee0a6d7241220d9138c71b4351db54afc91215b5dce3ad3a9f364bb1acf
|
7
|
+
data.tar.gz: bf0c7a716e84db621438ee3b5ef58df7f46349a92c7a1d875d8aa3b32b5f0e2239c63220d3df8bed84b8ba03d7c2b26c2882496effc71006315be0e5ae8673aa
|
data/lib/git-fastclone.rb
CHANGED
@@ -26,26 +26,26 @@ class GitFastClone
|
|
26
26
|
# One option --branch=<branch> We're not as brittle as clone. That branch can be a sha or tag and we're still okay.
|
27
27
|
@options = {}
|
28
28
|
OptionParser.new do |opts|
|
29
|
+
opts.banner = "Usage: git fastclone [options] <git-url> [path]"
|
29
30
|
@options[:branch] = nil
|
30
31
|
opts.on("-b", "--branch BRANCH", "Checkout this branch rather than the default") do |branch|
|
31
32
|
@options[:branch] = branch
|
32
33
|
end
|
33
|
-
# TODO: Add help text.
|
34
34
|
end.parse!
|
35
35
|
|
36
|
-
puts ARGV
|
37
|
-
|
38
36
|
# Remaining two positional args are url and optional path
|
39
37
|
url = ARGV[0]
|
40
38
|
path = ARGV[1] || path_from_git_url(url)
|
41
39
|
|
40
|
+
puts "Cloning #{url} to #{path}"
|
41
|
+
|
42
42
|
# Do a checkout with reference repositories for main and submodules
|
43
|
-
clone(url, @options[:branch],
|
43
|
+
clone(url, @options[:branch], path)
|
44
44
|
end
|
45
45
|
|
46
46
|
def path_from_git_url(url)
|
47
47
|
# Get the checkout path from tail-end of the url.
|
48
|
-
|
48
|
+
url.match(/([^\/]*)\.git$/)[1]
|
49
49
|
end
|
50
50
|
|
51
51
|
# Checkout to SOURCE_DIR. Update all submodules recursively. Use reference repos everywhere for speed.
|
@@ -53,12 +53,12 @@ class GitFastClone
|
|
53
53
|
initial_time = Time.now()
|
54
54
|
|
55
55
|
with_git_mirror(url) do |mirror|
|
56
|
-
fail_on_error("git", "clone", "--reference", mirror, url, src_dir)
|
56
|
+
fail_on_error("git", "clone", "--quiet", "--reference", mirror, url, src_dir)
|
57
57
|
end
|
58
58
|
|
59
59
|
# Only checkout if we're changing branches to a non-default branch
|
60
60
|
unless rev.nil? then
|
61
|
-
fail_on_error("git", "checkout", rev, :chdir=>src_dir)
|
61
|
+
fail_on_error("git", "checkout", "--quiet", rev, :chdir=>src_dir)
|
62
62
|
end
|
63
63
|
|
64
64
|
update_submodules(src_dir, url)
|
@@ -82,7 +82,7 @@ class GitFastClone
|
|
82
82
|
# Parse its output directly to save time.
|
83
83
|
fail_on_error("git", "submodule", "init", :chdir=>pwd).split("\n").each do |line|
|
84
84
|
# Submodule path (not name) is in between single quotes '' at the end of the line
|
85
|
-
submodule_path =
|
85
|
+
submodule_path = line.strip.match(/'([^']*)'$/)[1]
|
86
86
|
# URL is in between parentheses ()
|
87
87
|
submodule_url = line.strip.match(/\(([^)]*)\)/)[1]
|
88
88
|
submodule_url_list << submodule_url
|
@@ -90,10 +90,10 @@ class GitFastClone
|
|
90
90
|
# Each update happens on a separate thread for speed.
|
91
91
|
threads << Thread.new do
|
92
92
|
with_git_mirror(submodule_url) do |mirror|
|
93
|
-
fail_on_error("git", "submodule", "update", "--reference", mirror, submodule_path, :chdir=>pwd)
|
93
|
+
fail_on_error("git", "submodule", "update", "--quiet", "--reference", mirror, submodule_path, :chdir=>pwd)
|
94
94
|
end
|
95
95
|
# Recurse into the submodule directory
|
96
|
-
update_submodules(submodule_path, submodule_url)
|
96
|
+
update_submodules(File.join(pwd,submodule_path), submodule_url)
|
97
97
|
end
|
98
98
|
end
|
99
99
|
update_submodule_reference(url, submodule_url_list)
|
@@ -174,7 +174,11 @@ class GitFastClone
|
|
174
174
|
def with_git_mirror(url)
|
175
175
|
update_reference_repo(url)
|
176
176
|
|
177
|
-
#
|
178
|
-
|
177
|
+
# Sometimes remote updates involve re-packing objects on a different thread
|
178
|
+
# We grab the reference repo lock here just to make sure whatever thread
|
179
|
+
# ended up doing the update is done with its housekeeping.
|
180
|
+
with_reference_repo_lock(url) do
|
181
|
+
yield reference_repo_dir(url)
|
182
|
+
end
|
179
183
|
end
|
180
184
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-fastclone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Tauraso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A git command that uses reference repositories and threading to quickly
|
14
14
|
and recursively clone repositories with many nested submodules
|