git-fastclone 0.0.1 → 0.0.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.
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
|