dcp 0.1.1 → 0.2.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/Gemfile.lock +7 -1
- data/dcp.gemspec +1 -0
- data/exe/dcp +75 -6
- data/lib/dcp/dropbox.rb +18 -0
- data/lib/dcp/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ae9bca889c34738a0c2ea78783c973b8d325280251def8ecd31c6fad8aaa16e
|
4
|
+
data.tar.gz: ee80f7c7f1eea995da97a767ed200ec40612c05b7d41d64500728cff0faab1b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c629121e4db91bf98395c7b22a889c538be69d169194e252714ce6f470871b13c81865d8ff065ebbdc0011605c23fff6cd68be1f312feaf1cb80a5aebbcd632
|
7
|
+
data.tar.gz: ba481ad8eed77700f4701fb5aad056d9ad6d2696904c956d25e2bf43495fac4d1c08014b878a9916581eb84ea3724b8ad4d406e5a26c2e23352c4672b19f927e
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dcp (0.
|
4
|
+
dcp (0.2.0)
|
5
5
|
dropbox_api
|
6
6
|
pit
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
+
coderay (1.1.2)
|
11
12
|
diff-lcs (1.3)
|
12
13
|
dropbox_api (0.1.10)
|
13
14
|
faraday (~> 0.9, ~> 0.8)
|
@@ -15,6 +16,7 @@ GEM
|
|
15
16
|
faraday (0.12.2)
|
16
17
|
multipart-post (>= 1.2, < 3)
|
17
18
|
jwt (1.5.6)
|
19
|
+
method_source (0.9.0)
|
18
20
|
multi_json (1.12.2)
|
19
21
|
multi_xml (0.6.0)
|
20
22
|
multipart-post (2.0.0)
|
@@ -25,6 +27,9 @@ GEM
|
|
25
27
|
multi_xml (~> 0.5)
|
26
28
|
rack (>= 1.2, < 3)
|
27
29
|
pit (0.0.7)
|
30
|
+
pry (0.11.3)
|
31
|
+
coderay (~> 1.1.0)
|
32
|
+
method_source (~> 0.9.0)
|
28
33
|
rack (2.0.3)
|
29
34
|
rake (10.5.0)
|
30
35
|
rspec (3.7.0)
|
@@ -47,6 +52,7 @@ PLATFORMS
|
|
47
52
|
DEPENDENCIES
|
48
53
|
bundler (~> 1.16.a)
|
49
54
|
dcp!
|
55
|
+
pry
|
50
56
|
rake (~> 10.0)
|
51
57
|
rspec (~> 3.0)
|
52
58
|
|
data/dcp.gemspec
CHANGED
data/exe/dcp
CHANGED
@@ -10,38 +10,68 @@ require 'optparse'
|
|
10
10
|
require 'pit'
|
11
11
|
|
12
12
|
module DCP
|
13
|
+
class MultiError < StandardError
|
14
|
+
attr_reader :messages
|
15
|
+
def initialize(messages)
|
16
|
+
@messages = messages
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
13
20
|
class CLI
|
14
21
|
def run
|
15
22
|
opts, args = parse_options
|
16
23
|
dst = args.pop
|
17
24
|
begin
|
25
|
+
precheck(args, dst)
|
26
|
+
rescue MultiError => e
|
27
|
+
e.messages.each{|m| error m}
|
28
|
+
exit 1
|
29
|
+
rescue => e
|
30
|
+
error e.message
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
begin
|
34
|
+
dst = dst.chop if dst =~ /\/\z/ # root directory => ''
|
18
35
|
args.each do |src|
|
19
36
|
open(src, 'r') do |r|
|
20
|
-
|
21
|
-
|
37
|
+
d = directory?(dst) ? "#{dst}/#{File.basename(src)}" : dst
|
38
|
+
open(d, 'w') do |w|
|
39
|
+
while data = r.read(10_000_000) do
|
40
|
+
w.write(data)
|
41
|
+
print '.' unless opts[:quiet]
|
42
|
+
end
|
22
43
|
end
|
44
|
+
puts unless opts[:quiet]
|
23
45
|
end
|
24
46
|
end
|
25
47
|
rescue => e
|
26
|
-
usage e.message
|
48
|
+
usage "#{e.message} (#{e.class})"
|
27
49
|
end
|
28
50
|
end
|
29
51
|
|
30
52
|
private
|
53
|
+
def error(msg)
|
54
|
+
$stderr.puts "dcp: #{msg}"
|
55
|
+
end
|
56
|
+
|
31
57
|
def parse_options(argv = ARGV)
|
32
58
|
op = OptionParser.new
|
33
59
|
|
34
60
|
self.class.module_eval do
|
35
61
|
define_method(:usage) do |msg = nil|
|
36
62
|
puts op.to_s
|
37
|
-
|
63
|
+
error msg if msg
|
38
64
|
exit 1
|
39
65
|
end
|
40
66
|
end
|
41
67
|
|
42
68
|
opts = {
|
69
|
+
quiet: false
|
43
70
|
}
|
44
71
|
|
72
|
+
op.on('-q', '--quiet', "quiet mode") do
|
73
|
+
opts[:quiet] = true
|
74
|
+
end
|
45
75
|
op.on('-h', '--help', "print this messages") do
|
46
76
|
usage
|
47
77
|
end
|
@@ -85,14 +115,53 @@ module DCP
|
|
85
115
|
path =~ /\A(db|dropbox):/
|
86
116
|
end
|
87
117
|
|
118
|
+
def dropbox_path(file)
|
119
|
+
raise StandardError.new("not a dropbox path: #{file}") unless dropbox_path?(file)
|
120
|
+
file.split(/:/, 2)[1]
|
121
|
+
end
|
122
|
+
|
123
|
+
def precheck(srcs, dst)
|
124
|
+
errors = []
|
125
|
+
srcs.each do |src|
|
126
|
+
begin
|
127
|
+
if dropbox_path?(src)
|
128
|
+
errors << "cannot copy from dropbox: #{src}"
|
129
|
+
else
|
130
|
+
if directory?(src)
|
131
|
+
errors << "cannot copy from directory: #{src}"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
rescue Errno::ENOENT
|
135
|
+
errors << "file not found: #{src}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
begin
|
140
|
+
if directory?(dst) && srcs.size > 1
|
141
|
+
errors << "cannot copy multiple files into a file: #{dst}"
|
142
|
+
end
|
143
|
+
rescue Errno::ENOENT
|
144
|
+
errors << "file not found: #{dst}"
|
145
|
+
end
|
146
|
+
|
147
|
+
raise MultiError.new(errors) unless errors.empty?
|
148
|
+
end
|
149
|
+
|
88
150
|
def open(file, opts)
|
89
151
|
if dropbox_path?(file)
|
90
|
-
|
91
|
-
dropbox.open(path, opts){|f| yield f}
|
152
|
+
dropbox.open(dropbox_path(file), opts){|f| yield f}
|
92
153
|
else
|
93
154
|
File.open(file, opts){|f| yield f}
|
94
155
|
end
|
95
156
|
end
|
157
|
+
|
158
|
+
def directory?(file)
|
159
|
+
if dropbox_path?(file)
|
160
|
+
dropbox.directory?(dropbox_path(file))
|
161
|
+
else
|
162
|
+
File.stat(file).directory?
|
163
|
+
end
|
164
|
+
end
|
96
165
|
end
|
97
166
|
end
|
98
167
|
|
data/lib/dcp/dropbox.rb
CHANGED
@@ -21,5 +21,23 @@ module DCP
|
|
21
21
|
raise StandardError.new('read from dropbox does not implement.')
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
def file?(path)
|
26
|
+
return false if path.empty? || path == '/'
|
27
|
+
begin
|
28
|
+
@client.get_metadata(path).class == DropboxApi::Metadata::File
|
29
|
+
rescue ::DropboxApi::Errors::NotFoundError
|
30
|
+
raise Errno::ENOENT.new('file not found on dropbox')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def directory?(path)
|
35
|
+
return true if path.empty? || path == '/'
|
36
|
+
begin
|
37
|
+
@client.get_metadata(path).class == DropboxApi::Metadata::Folder
|
38
|
+
rescue ::DropboxApi::Errors::NotFoundError
|
39
|
+
raise Errno::ENOENT.new('file not found on dropbox')
|
40
|
+
end
|
41
|
+
end
|
24
42
|
end
|
25
43
|
end
|
data/lib/dcp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dcp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TADA Tadashi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pit
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: copy files to/from Dropbox like scp command
|
84
98
|
email:
|
85
99
|
- t@tdtds.jp
|