bdsync 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1aeb789488a7670229fa4a2934989b606fa2ef25434ff47e43f3ac3e427dfd8a
4
- data.tar.gz: e9ddef916d834bb0bd04b2bb390eba73563ba9e54780100bddf060a04b610650
3
+ metadata.gz: 6fa64e8243c110577ac96c4266d21f3d7f2f1a2035644d83e52fc6e61db86ac3
4
+ data.tar.gz: bbd68644aa5817c438992b5e70ba0ab5622e3f8dc2cfa5c0ef3e9a0572d030fc
5
5
  SHA512:
6
- metadata.gz: fc8b863ee0ad9ef4ba5f5a6e84e1fe5ee4d9aaf807448a25c7cad0d74450a201fdeb10676a325810b6550b1dfd4b8cd95e925a6f982ba75b2fad1e1d8eada2a0
7
- data.tar.gz: 141a974e6ad5187e5509f769a7f5bd2b644b0bb908748cde83cb3e492a83bafab02d1d8ea746ff9d2692f9ebbbb8be1d84f5c197f37ed7fa77ac4e3abaec568d
6
+ metadata.gz: db7bc9a4be128150de8920f014c12cbc3533fdafb1d978945b058e0c9816edc04bf0eabcbaa7f85d412275fcf4958ffc333f22a939955eb792c3514e7c9dbe7c
7
+ data.tar.gz: f4550efd06ec82dc092345711e5310bf3b03f8c9271df6c31c43b6c060fc13f0f3608ab32f34c9ab63dcc29e6250959dedfe6afd105f0a98fda1b529f97cffa6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bdsync (2.2.0)
4
+ bdsync (2.3.0)
5
5
  colorize (~> 0.8)
6
6
  net-sftp (~> 2.1)
7
7
 
data/lib/bdsync/core.rb CHANGED
@@ -28,20 +28,18 @@ module Bdsync
28
28
  @old_data = load_data
29
29
  @data = {}
30
30
 
31
- start_session {
32
- remote_ensure_dir @remote_root_path
33
- local_ensure_dir @local_root_path
31
+ remote_ensure_dir @remote_root_path
32
+ local_ensure_dir @local_root_path
34
33
 
35
- puts "\n==== traverse_remote_path ===="
36
- traverse_remote_path @remote_root_path
34
+ puts "\n==== traverse_remote_path ===="
35
+ traverse_remote_path @remote_root_path
37
36
 
38
- # merge @data to @old_data, and clear @data
39
- @old_data.merge! @data
40
- @data = {}
37
+ # merge @data to @old_data, and clear @data
38
+ @old_data.merge! @data
39
+ @data = {}
41
40
 
42
- puts "\n==== traverse_local_path ===="
43
- traverse_local_path @local_root_path
44
- }
41
+ puts "\n==== traverse_local_path ===="
42
+ traverse_local_path @local_root_path
45
43
 
46
44
  save_data @data
47
45
 
@@ -52,10 +50,6 @@ module Bdsync
52
50
  }
53
51
  end
54
52
 
55
- def start_session &block
56
- fail NotImplementedError, "A subclass class must be able to #{__method__}!"
57
- end
58
-
59
53
  def load_data
60
54
  puts "\nload #{@data_path}"
61
55
  YAML.load_file @data_path
data/lib/bdsync/lfs.rb CHANGED
@@ -11,10 +11,6 @@ module Bdsync
11
11
  Core.options
12
12
  end
13
13
 
14
- def start_session &block
15
- yield
16
- end
17
-
18
14
  # yield object like this
19
15
  # {
20
16
  # name:
@@ -93,5 +89,10 @@ module Bdsync
93
89
  def get_remote_file_md5 path
94
90
  Utils.file_md5 path
95
91
  end
92
+
93
+ # for test
94
+ def create_remote_file remote_path, content
95
+ File.write remote_path, content
96
+ end
96
97
  end
97
98
  end
data/lib/bdsync/sftp.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  require "bdsync/core"
2
2
  require "net/sftp"
3
+ require "tempfile"
3
4
 
4
5
  module Bdsync
5
6
  class Sftp < Core
6
7
  def initialize params
7
8
  @site = params["site"]
8
9
  @user = params["user"]
10
+ @sftp = Net::SFTP.start(@site, @user)
9
11
 
10
12
  super params, "sftp"
11
13
  end
@@ -14,19 +16,17 @@ module Bdsync
14
16
  Core.options + ["site:", "user:"]
15
17
  end
16
18
 
17
- def start_session &block
18
- Net::SFTP.start(@site, @user) { |sftp|
19
- @sftp = sftp
20
- yield
21
- }
22
- end
23
-
24
19
  def remote_dir_foreach remote_path
25
20
  @sftp.dir.foreach(remote_path) { |entry|
26
21
  yield entry
27
22
  }
28
23
  end
29
24
 
25
+ # Return
26
+ # OpenStruct.new(
27
+ # directory?:
28
+ # mtime:
29
+ # )
30
30
  def remote_get_object remote_path
31
31
  @sftp.lstat! remote_path
32
32
  rescue Net::SFTP::StatusException
@@ -61,8 +61,25 @@ module Bdsync
61
61
  end
62
62
 
63
63
  def remote_remove_dir remote_path
64
- puts "#{Utils.caller_info 1} sftp.session.exec! rm -rf #{remote_path}".white
65
- @sftp.session.exec! "rm -rf #{remote_path}"
64
+ puts "#{Utils.caller_info 1} remote_remove_dir #{remote_path}".white
65
+
66
+ remote = remote_get_object remote_path
67
+ return if !remote || !remote.directory?
68
+
69
+ remote_dir_foreach(remote_path) { |entry|
70
+ next if [".", ".."].include? entry.name
71
+
72
+ path = "#{remote_path}/#{entry.name}"
73
+ remote = entry.attributes
74
+
75
+ if remote.directory?
76
+ remote_remove_dir path
77
+ else
78
+ remote_remove_file path
79
+ end
80
+ }
81
+
82
+ @sftp.rmdir! remote_path
66
83
  end
67
84
 
68
85
  def remote_rename remote_path, new_remote_path
@@ -88,5 +105,20 @@ module Bdsync
88
105
  res = @sftp.session.exec! "md5sum #{remote_path}"
89
106
  res.split[0]
90
107
  end
108
+
109
+ # for test
110
+ def create_remote_file remote_path, content
111
+ tmpfile = Tempfile.new 'sftp.rb-create_remote_file-'
112
+
113
+ begin
114
+ tmpfile.write content
115
+ tmpfile.flush
116
+
117
+ @sftp.upload! tmpfile.path, remote_path
118
+ ensure
119
+ tmpfile.close
120
+ tmpfile.unlink # deletes the temp file
121
+ end
122
+ end
91
123
  end
92
124
  end
@@ -1,3 +1,3 @@
1
1
  module Bdsync
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bdsync
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xia Xiongjun
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2020-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize