loft-harmony 1.3.0 → 1.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/bin/harmony +95 -3
- 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: da2f7c4085dda85b1769c604bc1e17777a7dbca8
|
4
|
+
data.tar.gz: da5c724aea1fd7e80ecdb5e1ce750d22995636c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4346d7331a6f37f6eaddd0e6ef6d48ed25cb2c203d928accdfd151824020393de86e41551cb749a119fdc53262bbb722464e32637d73ad72d9c8e5b03cd7af0d
|
7
|
+
data.tar.gz: 4dfefa76e263737a95901c8e7f8ae0891f0025a3704a22b18519f40e9ff000b9c0ad78d0b6a611e2243dacc1890a04f3b87d03b8efd38c41a2f96357bd1bbe34
|
data/bin/harmony
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'net/ftp'
|
3
|
+
require 'net/sftp'
|
3
4
|
require 'terrun'
|
4
5
|
require 'timeout'
|
5
6
|
require 'fileutils'
|
7
|
+
require 'byebug'
|
6
8
|
|
7
9
|
class Harmony < TerminalRunner
|
8
10
|
name "Harmony"
|
@@ -21,6 +23,7 @@ class Harmony < TerminalRunner
|
|
21
23
|
option "--passive", 0, "", "Use FTP in passive mode."
|
22
24
|
option "--vanilla_ftp", 0, "", "Use Vanilla ruby Net::FTP. Disables automatica directory creation."
|
23
25
|
option "--local", 0, "", "Use a local copy instead of an FTP transfer."
|
26
|
+
option "--sftp", 1, "port", "Use SFTP instead of standard FTP"
|
24
27
|
|
25
28
|
help ""
|
26
29
|
|
@@ -42,6 +45,8 @@ class Harmony < TerminalRunner
|
|
42
45
|
@compile_coffeescript = @@options.include?("--coffee") ? @@options["--coffee"][0] : nil
|
43
46
|
@passive_mode = @@options.include?("--passive")
|
44
47
|
@use_vanilla_ftp = @@options.include?("--vanilla_ftp")
|
48
|
+
@use_sftp = @@options.include?("--sftp")
|
49
|
+
@sftp_port = @@options["--sftp"][0]
|
45
50
|
@use_local = @@options.include?("--local")
|
46
51
|
@ignored = []
|
47
52
|
|
@@ -92,8 +97,9 @@ class Harmony < TerminalRunner
|
|
92
97
|
break if self.get_command
|
93
98
|
end
|
94
99
|
rescue => e
|
95
|
-
puts e.to_s.red
|
96
100
|
puts " ## FATAL ERROR OCCURRED. SHUTTING DOWN.".red
|
101
|
+
puts "#{e.class.name}: #{e.to_s} (#{e.message})".red
|
102
|
+
puts e.backtrace
|
97
103
|
end
|
98
104
|
@thread.kill if @thread
|
99
105
|
self.close_connection
|
@@ -181,7 +187,7 @@ class Harmony < TerminalRunner
|
|
181
187
|
rescue Timeout::Error
|
182
188
|
failed = true
|
183
189
|
puts " ## [ FAIL ] #{file} timed out while syncing".red
|
184
|
-
rescue Net::FTPError => e
|
190
|
+
rescue Net::FTPError, Net::SFTP::Exception, Net::SSH::Exception => e
|
185
191
|
failed = true
|
186
192
|
puts " ## [ FAIL ] #{file} failed to sync".red
|
187
193
|
puts e.message
|
@@ -234,7 +240,7 @@ class Harmony < TerminalRunner
|
|
234
240
|
if @ftp
|
235
241
|
begin
|
236
242
|
@ftp.list
|
237
|
-
rescue Net::FTPError
|
243
|
+
rescue Net::FTPError, Net::SFTP::Exception, Net::SSH::Exception
|
238
244
|
puts " ## Connection was closed by server".pink
|
239
245
|
@ftp.close
|
240
246
|
end
|
@@ -248,7 +254,11 @@ class Harmony < TerminalRunner
|
|
248
254
|
elsif @use_local
|
249
255
|
puts "(Using Local non-FTP)".pink
|
250
256
|
@ftp = LocalCopyFTP.new
|
257
|
+
elsif @use_sftp
|
258
|
+
puts "(Using SFTP)".pink
|
259
|
+
@ftp = SFTP.new(@server, @user, @password, @sftp_port)
|
251
260
|
else
|
261
|
+
puts "(Using FTP)".pink
|
252
262
|
@ftp = BetterFTP.new(@server, @user, @password)
|
253
263
|
end
|
254
264
|
@ftp.passive = @passive_mode
|
@@ -299,6 +309,88 @@ class String
|
|
299
309
|
end
|
300
310
|
end
|
301
311
|
|
312
|
+
# Wrapper interface for SFTP to make it confirm to the same API
|
313
|
+
class SFTP
|
314
|
+
@dir = '/'
|
315
|
+
|
316
|
+
def initialize(server, user, password, port)
|
317
|
+
@server = server
|
318
|
+
@user = user
|
319
|
+
@password = password
|
320
|
+
@port = port
|
321
|
+
@netsftp = Net::SFTP.start(@server, @user, password: @password, port: @port)
|
322
|
+
@closed = false
|
323
|
+
@created_paths_cache = []
|
324
|
+
end
|
325
|
+
|
326
|
+
def chdir(path)
|
327
|
+
@dir = path
|
328
|
+
end
|
329
|
+
|
330
|
+
def puttextfile(file)
|
331
|
+
@netsftp.upload!(file, @dir + '/' + file.split('/').last)
|
332
|
+
end
|
333
|
+
|
334
|
+
def putbinaryfile(file)
|
335
|
+
puttextfile(file)
|
336
|
+
end
|
337
|
+
|
338
|
+
def list
|
339
|
+
l = []
|
340
|
+
@netsftp.dir.foreach(@dir) { |e| l << e }
|
341
|
+
l
|
342
|
+
end
|
343
|
+
|
344
|
+
def closed?
|
345
|
+
@netsftp.closed? || @closed
|
346
|
+
end
|
347
|
+
|
348
|
+
def close
|
349
|
+
@netsftp.close_channel
|
350
|
+
rescue Net::SSH::Exception
|
351
|
+
ensure
|
352
|
+
@closed = true
|
353
|
+
end
|
354
|
+
|
355
|
+
def mkdir_p(dir)
|
356
|
+
made_path = false
|
357
|
+
|
358
|
+
parts = dir.split("/")
|
359
|
+
if parts.first == "~"
|
360
|
+
growing_path = ""
|
361
|
+
else
|
362
|
+
growing_path = "/"
|
363
|
+
end
|
364
|
+
for part in parts
|
365
|
+
next if part == ""
|
366
|
+
if growing_path == ""
|
367
|
+
growing_path = part
|
368
|
+
else
|
369
|
+
growing_path = File.join(growing_path, part)
|
370
|
+
end
|
371
|
+
unless @created_paths_cache.include?(growing_path)
|
372
|
+
begin
|
373
|
+
mkdir(growing_path)
|
374
|
+
chdir(growing_path)
|
375
|
+
made_path = true
|
376
|
+
rescue Net::SFTP::StatusException
|
377
|
+
end
|
378
|
+
@created_paths_cache << growing_path
|
379
|
+
else
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
made_path
|
384
|
+
end
|
385
|
+
|
386
|
+
def mkdir(path)
|
387
|
+
@netsftp.mkdir!(path)
|
388
|
+
end
|
389
|
+
|
390
|
+
def passive=(_)
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
302
394
|
# Only performs a local copy, instead of using an FTP connection
|
303
395
|
class LocalCopyFTP
|
304
396
|
@dir = '/'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loft-harmony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caleb Simpson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Watches a directory for changes to upload to a server via FTP
|
14
14
|
email: caleb@simpson.center
|