git-fastclone 1.2.0 → 1.2.1
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.
- checksums.yaml +4 -4
- data/lib/git-fastclone.rb +19 -1
- data/lib/git-fastclone/version.rb +1 -1
- data/spec/git_fastclone_runner_spec.rb +26 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b66c5e0946f4cfae0ecb36ac298f9b6e76e85a829ee17fd8a3425c92468e3c8d
|
4
|
+
data.tar.gz: 3364449b9348575acf9ec4dfd2f73883e19e634340d35a0aa8df9ffe4f9c3aaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04a9315f022dba1cdb0ac34dd4daa768d9c19a1cbdb7eea3767098e8bc120e1a5ad2676c0e9791dc964f0b4fabd373b8d807faecbd9a4dde243ab1e97f927f5b
|
7
|
+
data.tar.gz: 96ea39ac905ac8f512322a03c3556acdd8d13174d9b5ad8591ab8ee73ea12f679c7481817e099d3300ccfea714977b9b72e93efd9148f7a878035dd8c68f4b6f
|
data/lib/git-fastclone.rb
CHANGED
@@ -346,7 +346,25 @@ module GitFastClone
|
|
346
346
|
# ended up doing the update is done with its housekeeping.
|
347
347
|
# This makes sure we have control and unlock when the block returns:
|
348
348
|
with_reference_repo_lock(url) do
|
349
|
-
|
349
|
+
dir = reference_repo_dir(url, reference_dir, using_local_repo)
|
350
|
+
retries_left = 1
|
351
|
+
|
352
|
+
begin
|
353
|
+
yield dir
|
354
|
+
rescue Terrapin::ExitStatusError => e
|
355
|
+
if e.to_s =~ /^STDERR:\n.+^fatal: (missing blob object|remote did not send all necessary objects)/m
|
356
|
+
# To avoid corruption of the cache, if we failed to update or check out we remove
|
357
|
+
# the cache directory entirely. This may cause the current clone to fail, but if the
|
358
|
+
# underlying error from git is transient it will not affect future clones.
|
359
|
+
FileUtils.remove_entry_secure(dir, force: true)
|
360
|
+
if retries_left > 0
|
361
|
+
retries_left -= 1
|
362
|
+
retry
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
raise
|
367
|
+
end
|
350
368
|
end
|
351
369
|
end
|
352
370
|
|
@@ -279,5 +279,31 @@ describe GitFastClone::Runner do
|
|
279
279
|
|
280
280
|
expect(yielded).to eq([test_url_valid])
|
281
281
|
end
|
282
|
+
|
283
|
+
it 'should retry when the cache looks corrupted' do
|
284
|
+
allow(subject).to receive(:update_reference_repo) {}
|
285
|
+
expect(subject).to receive(:reference_repo_dir)
|
286
|
+
expect(subject).to receive(:reference_repo_lock_file).and_return(lockfile)
|
287
|
+
|
288
|
+
responses = [
|
289
|
+
lambda { |_url|
|
290
|
+
raise Terrapin::ExitStatusError, <<-ERROR.gsub(/^ {12}/, '')
|
291
|
+
STDOUT:
|
292
|
+
|
293
|
+
STDERR:
|
294
|
+
|
295
|
+
fatal: bad object ee35b1e14e7c3a53dcc14d82606e5b872f6a05a7
|
296
|
+
fatal: remote did not send all necessary objects
|
297
|
+
ERROR
|
298
|
+
},
|
299
|
+
->(url) { url }
|
300
|
+
]
|
301
|
+
subject.with_git_mirror(test_url_valid) do
|
302
|
+
yielded << responses.shift.call(test_url_valid)
|
303
|
+
end
|
304
|
+
|
305
|
+
expect(responses).to be_empty
|
306
|
+
expect(yielded).to eq([test_url_valid])
|
307
|
+
end
|
282
308
|
end
|
283
309
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-fastclone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Tauraso
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colorize
|
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
77
|
- !ruby/object:Gem::Version
|
78
78
|
version: '0'
|
79
79
|
requirements: []
|
80
|
-
rubygems_version: 3.0.
|
80
|
+
rubygems_version: 3.0.1
|
81
81
|
signing_key:
|
82
82
|
specification_version: 4
|
83
83
|
summary: git-clone --recursive on steroids!
|