parallel_sftp 0.3.0 → 0.4.0
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/CHANGELOG.md +15 -0
- data/lib/parallel_sftp/client.rb +7 -2
- data/lib/parallel_sftp/download.rb +8 -1
- data/lib/parallel_sftp/lftp_command.rb +2 -1
- data/lib/parallel_sftp/version.rb +1 -1
- data/lib/parallel_sftp.rb +2 -1
- data/parallel_sftp.gemspec +4 -0
- metadata +41 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0a657d1c03cf2c2cab3dc64d29b1fbe4667a18d35ecf936c1508b55bf3640602
|
|
4
|
+
data.tar.gz: f11b5a058313b8d588fe5e92d9bbe627e8770cc0f89ec19756a71d27d250c891
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cbb88481f950b81974dcf9b8327297ea845db25f7c29b1bd409883cb108e7876b217502e7c63bd767945b699ca8814fc021ea73e90d25bde6da2b0785770d241
|
|
7
|
+
data.tar.gz: f43b354fcd285d2a07d7ae34bebfa80a234a0c319d13805c118c66c9e0c662ffe59ce7cd06d3b699664dcb71824cd3ed5d0ce6f5360eda802fa6997e888eb06a
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2026-02-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `verbose` option for debugging lftp output - prints command and lftp messages to stderr
|
|
14
|
+
- `xfer:clobber on` setting to allow overwriting existing files
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Resume now works correctly on first download attempt (previously always disabled)
|
|
18
|
+
- First attempt respects user's `resume` setting; only retries after corruption use fresh download
|
|
19
|
+
|
|
20
|
+
## [0.3.1] - 2026-02-05
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- Runtime dependencies `ed25519` and `bcrypt_pbkdf` for net-ssh Ed25519 key support
|
|
24
|
+
|
|
10
25
|
## [0.3.0] - 2026-02-05
|
|
11
26
|
|
|
12
27
|
### Added
|
data/lib/parallel_sftp/client.rb
CHANGED
|
@@ -51,10 +51,14 @@ module ParallelSftp
|
|
|
51
51
|
def download_with_retry(remote_path, local_path, options, segments, parallel_retries)
|
|
52
52
|
current_segments = segments
|
|
53
53
|
retries_at_current_segments = 0
|
|
54
|
+
first_attempt = true
|
|
54
55
|
|
|
55
56
|
loop do
|
|
56
57
|
begin
|
|
57
|
-
|
|
58
|
+
# First attempt: respect user's resume setting; retries: always fresh download
|
|
59
|
+
use_resume = first_attempt ? options.fetch(:resume, true) : false
|
|
60
|
+
first_attempt = false
|
|
61
|
+
return execute_download(remote_path, local_path, options.merge(segments: current_segments, resume: use_resume))
|
|
58
62
|
rescue ZipIntegrityError => e
|
|
59
63
|
cleanup_corrupted_download(local_path)
|
|
60
64
|
|
|
@@ -100,7 +104,8 @@ module ParallelSftp
|
|
|
100
104
|
download = Download.new(
|
|
101
105
|
lftp_command,
|
|
102
106
|
on_progress: options[:on_progress],
|
|
103
|
-
on_segment_progress: options[:on_segment_progress]
|
|
107
|
+
on_segment_progress: options[:on_segment_progress],
|
|
108
|
+
verbose: options[:verbose]
|
|
104
109
|
)
|
|
105
110
|
download.execute
|
|
106
111
|
end
|
|
@@ -11,10 +11,11 @@ module ParallelSftp
|
|
|
11
11
|
# Default interval for polling the status file (in seconds)
|
|
12
12
|
DEFAULT_POLL_INTERVAL = 1
|
|
13
13
|
|
|
14
|
-
def initialize(lftp_command, on_progress: nil, on_segment_progress: nil)
|
|
14
|
+
def initialize(lftp_command, on_progress: nil, on_segment_progress: nil, verbose: false)
|
|
15
15
|
@lftp_command = lftp_command
|
|
16
16
|
@on_progress = on_progress
|
|
17
17
|
@on_segment_progress = on_segment_progress
|
|
18
|
+
@verbose = verbose
|
|
18
19
|
@output_buffer = []
|
|
19
20
|
@progress_parser = ProgressParser.new
|
|
20
21
|
@segment_parser = SegmentProgressParser.new
|
|
@@ -41,6 +42,11 @@ module ParallelSftp
|
|
|
41
42
|
exit_status = nil
|
|
42
43
|
status_file = status_file_path
|
|
43
44
|
|
|
45
|
+
if @verbose
|
|
46
|
+
$stderr.puts "[lftp] Command: lftp -c '...'"
|
|
47
|
+
$stderr.puts "[lftp] Status file: #{status_file}"
|
|
48
|
+
end
|
|
49
|
+
|
|
44
50
|
Open3.popen2e(*lftp_command.to_command) do |stdin, stdout_stderr, wait_thr|
|
|
45
51
|
stdin.close
|
|
46
52
|
|
|
@@ -49,6 +55,7 @@ module ParallelSftp
|
|
|
49
55
|
|
|
50
56
|
stdout_stderr.each_line do |line|
|
|
51
57
|
@output_buffer << line
|
|
58
|
+
$stderr.puts "[lftp] #{line}" if @verbose
|
|
52
59
|
process_output_line(line)
|
|
53
60
|
end
|
|
54
61
|
|
|
@@ -30,7 +30,8 @@ module ParallelSftp
|
|
|
30
30
|
"set net:max-retries #{max_retries}",
|
|
31
31
|
"set net:reconnect-interval-base #{reconnect_interval}",
|
|
32
32
|
"set sftp:auto-confirm yes",
|
|
33
|
-
"set ssl:verify-certificate no"
|
|
33
|
+
"set ssl:verify-certificate no",
|
|
34
|
+
"set xfer:clobber on"
|
|
34
35
|
]
|
|
35
36
|
|
|
36
37
|
# Add custom SSH connect program if configured (for legacy host key algorithms)
|
data/lib/parallel_sftp.rb
CHANGED
|
@@ -121,7 +121,8 @@ module ParallelSftp
|
|
|
121
121
|
reconnect_interval: options[:reconnect_interval],
|
|
122
122
|
sftp_connect_program: options[:sftp_connect_program],
|
|
123
123
|
on_progress: options[:on_progress],
|
|
124
|
-
on_segment_progress: options[:on_segment_progress]
|
|
124
|
+
on_segment_progress: options[:on_segment_progress],
|
|
125
|
+
verbose: options[:verbose]
|
|
125
126
|
)
|
|
126
127
|
end
|
|
127
128
|
end
|
data/parallel_sftp.gemspec
CHANGED
|
@@ -29,6 +29,10 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
30
30
|
spec.require_paths = ["lib"]
|
|
31
31
|
|
|
32
|
+
# Runtime dependencies for net-ssh Ed25519 key support
|
|
33
|
+
spec.add_runtime_dependency "ed25519", ">= 1.2", "< 2.0"
|
|
34
|
+
spec.add_runtime_dependency "bcrypt_pbkdf", ">= 1.0", "< 2.0"
|
|
35
|
+
|
|
32
36
|
spec.add_development_dependency "bundler", ">= 1.17"
|
|
33
37
|
spec.add_development_dependency "rake", ">= 12.0"
|
|
34
38
|
spec.add_development_dependency "rspec", "~> 3.0"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: parallel_sftp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nestor G Pestelos Jr
|
|
@@ -9,6 +9,46 @@ bindir: exe
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-01 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: ed25519
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '1.2'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '2.0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '1.2'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '2.0'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: bcrypt_pbkdf
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '1.0'
|
|
39
|
+
- - "<"
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '2.0'
|
|
42
|
+
type: :runtime
|
|
43
|
+
prerelease: false
|
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '1.0'
|
|
49
|
+
- - "<"
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '2.0'
|
|
12
52
|
- !ruby/object:Gem::Dependency
|
|
13
53
|
name: bundler
|
|
14
54
|
requirement: !ruby/object:Gem::Requirement
|