fig 0.1.28 → 0.1.29
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/fig/os.rb +36 -7
- metadata +2 -2
data/lib/fig/os.rb
CHANGED
@@ -34,6 +34,7 @@ module Fig
|
|
34
34
|
else
|
35
35
|
ftp.login()
|
36
36
|
end
|
37
|
+
ftp.passive = true
|
37
38
|
end
|
38
39
|
|
39
40
|
def list(dir)
|
@@ -72,13 +73,10 @@ module Fig
|
|
72
73
|
ftp = Net::FTP.new(uri.host)
|
73
74
|
ftp_login(ftp)
|
74
75
|
ftp.chdir(uri.path)
|
75
|
-
|
76
|
-
ftp.retrlines('LIST -R .') do |line|
|
77
|
-
parts = line.gsub(/\\/, '/').sub(/^\.\//, '').sub(/:$/, '').split('/')
|
78
|
-
packages << parts.join('/') if parts.size == 2
|
79
|
-
end
|
76
|
+
dirs = ftp.nlst
|
80
77
|
ftp.close
|
81
|
-
|
78
|
+
|
79
|
+
download_ftp_list(uri, dirs)
|
82
80
|
when "ssh"
|
83
81
|
packages = []
|
84
82
|
Net::SSH.start(uri.host, uri.user) do |ssh|
|
@@ -97,7 +95,38 @@ module Fig
|
|
97
95
|
exit 10
|
98
96
|
end
|
99
97
|
end
|
100
|
-
|
98
|
+
|
99
|
+
def download_ftp_list(uri, dirs)
|
100
|
+
# Run a bunch of these in parallel since they're slow as hell
|
101
|
+
num_threads = 16
|
102
|
+
threads = []
|
103
|
+
all_packages = []
|
104
|
+
(0..num_threads-1).each { |num| all_packages[num] = [] }
|
105
|
+
(0..num_threads-1).each do |num|
|
106
|
+
threads << Thread.new do
|
107
|
+
packages = all_packages[num]
|
108
|
+
ftp = Net::FTP.new(uri.host)
|
109
|
+
ftp_login(ftp)
|
110
|
+
ftp.chdir(uri.path)
|
111
|
+
pos = num
|
112
|
+
while pos < dirs.length
|
113
|
+
pkg = dirs[pos]
|
114
|
+
begin
|
115
|
+
ftp.nlst(dirs[pos]).each do |ver|
|
116
|
+
packages << pkg + '/' + ver
|
117
|
+
end
|
118
|
+
rescue => e
|
119
|
+
packages << pkg + ' (' + e + ')'
|
120
|
+
end
|
121
|
+
pos += num_threads
|
122
|
+
end
|
123
|
+
ftp.close
|
124
|
+
end
|
125
|
+
end
|
126
|
+
threads.each { |thread| thread.join }
|
127
|
+
all_packages.flatten.sort
|
128
|
+
end
|
129
|
+
|
101
130
|
def download(url, path)
|
102
131
|
FileUtils.mkdir_p(File.dirname(path))
|
103
132
|
uri = URI.parse(url)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Foemmel
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2011-05-
|
12
|
+
date: 2011-05-26 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|