em-fs 0.1.0 → 0.1.1
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 +15 -0
- data/lib/em-fs/dir/glob.rb +22 -3
- data/lib/em-fs/file/stat.rb +64 -38
- data/lib/em-fs/fs/command.rb +2 -6
- data/lib/em-fs/version.rb +1 -1
- data/spec/dir/glob_spec.rb +93 -83
- data/spec/file/stat_spec.rb +3 -3
- data/spec/fileutils_spec.rb +4 -4
- data/spec/fs/rsync_command_spec.rb +4 -4
- data/spec/spec_helper.rb +2 -0
- metadata +5 -25
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZGQzZDIyMzlkZGEzZGVjZjUwNzEyM2IyMmU2N2Y4YTJkMjZlNGIwOQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YjE3MmY1NTI3YTc0NTE3MGIwM2VmY2M0YTZmZmUxYTY4ZTUwYWU4Yg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YjdjYjdkZjQ0ZGJjMzUzM2MwMjRkOWEyOGM5OGUzZWM2NzBjOGE5Y2Q4NGFh
|
10
|
+
NjFlYTA4OThkNTFlYTExY2NmMmQ2OWE2MjdjOWJjMDllNzU2NGNmOTVkYTE2
|
11
|
+
ZDRmYjZjOTJkNDJlYzM2Y2RhYTUwNjk3MDlkODM3ODk2NTZmN2M=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MThhMjNjYTc0NTI2OWI3MjQyZGQ3ZmY4ODc0YWQ5NThlYjExZmYyY2Q1OWQy
|
14
|
+
MTRhNTUzMzE0ZTc4ZDg1NDc1ZDVhZWMzZDk4ODJjOTAyNjYwNTdjNmUwZDEz
|
15
|
+
MjI0NWJmNmQ0ZjlkNDRmZThlYzEyZjMzNzJiMjU4Y2Q3NDIwYTI=
|
data/lib/em-fs/dir/glob.rb
CHANGED
@@ -6,9 +6,15 @@ module EventMachine
|
|
6
6
|
|
7
7
|
def initialize pattern
|
8
8
|
@weight = nil
|
9
|
+
@type = nil
|
10
|
+
@finished_callbacks = []
|
9
11
|
parse pattern
|
10
12
|
end
|
11
13
|
|
14
|
+
def finish &block
|
15
|
+
@finished_callbacks << block
|
16
|
+
end
|
17
|
+
|
12
18
|
def parse pattern
|
13
19
|
root = []
|
14
20
|
|
@@ -34,13 +40,24 @@ module EventMachine
|
|
34
40
|
|
35
41
|
def each options = {}, &block
|
36
42
|
options = {
|
37
|
-
depth: :inf
|
43
|
+
depth: :inf,
|
44
|
+
type: :all
|
38
45
|
}.merge options
|
46
|
+
|
39
47
|
EM::SystemCommand.execute find_command(options) do |on|
|
48
|
+
stats = []
|
40
49
|
on.stdout.line do |line|
|
41
|
-
|
50
|
+
stat = File::Stat.parse(line)
|
51
|
+
stats << stat
|
52
|
+
block.call(stat) if block
|
53
|
+
end
|
54
|
+
on.success do
|
55
|
+
@finished_callbacks.each do |callback|
|
56
|
+
callback.call(stats)
|
57
|
+
end
|
42
58
|
end
|
43
59
|
end
|
60
|
+
self
|
44
61
|
end
|
45
62
|
|
46
63
|
def each_entry options = {}, &block
|
@@ -64,7 +81,8 @@ module EventMachine
|
|
64
81
|
private
|
65
82
|
def find_command options = {}
|
66
83
|
options = {
|
67
|
-
depth: (@weight || :inf)
|
84
|
+
depth: (@weight || :inf),
|
85
|
+
type: (@type || :all)
|
68
86
|
}.merge options
|
69
87
|
|
70
88
|
builder = EM::SystemCommand::Builder.new 'find'
|
@@ -72,6 +90,7 @@ module EventMachine
|
|
72
90
|
builder << [ :path, @path ] unless @path == "*" or @path == ''
|
73
91
|
builder << [ :name, @name ] unless @name == "*"
|
74
92
|
builder << [ :maxdepth, options[:depth] ] unless options[:depth] == :inf
|
93
|
+
builder << [ :type, options[:type] ] unless options[:type] == :all
|
75
94
|
builder << [ :printf, FORMAT ]
|
76
95
|
builder.to_s.gsub(/-+(\w)/, "-\\1")
|
77
96
|
end
|
data/lib/em-fs/file/stat.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module EventMachine
|
2
2
|
class File
|
3
3
|
class Stat
|
4
|
-
|
5
4
|
STAT_REGEX = /(\d+) (\d+) '([\w\/ ]+)' (\d+) (\d+) (\d+) '(.+)' (\d+) (\d+) ([\d.]+) ([\d.]+) ([\d.]+)/.freeze
|
6
5
|
|
7
6
|
# access rights octal
|
@@ -36,6 +35,15 @@ module EventMachine
|
|
36
35
|
S_IFREG = 0b00100000 # regular file
|
37
36
|
S_IFSOCK = 0b01000000 # socket
|
38
37
|
S_UNKNOWN = 0b10000000 # unknown
|
38
|
+
TYPE_MAPPING = {
|
39
|
+
'block device' => S_IFBLK,
|
40
|
+
'character device' => S_IFCHR,
|
41
|
+
'directory' => S_IFDIR,
|
42
|
+
'FIFO/pipe' => S_IFIFO,
|
43
|
+
'symlink' => S_IFLNK,
|
44
|
+
'regular file' => S_IFREG,
|
45
|
+
'socket' => S_IFSOCK
|
46
|
+
}
|
39
47
|
|
40
48
|
# Mode Flags
|
41
49
|
S_IRUSR = 0b100000000
|
@@ -57,22 +65,11 @@ module EventMachine
|
|
57
65
|
# @return [EM::File::Stat] The file stat object.
|
58
66
|
def parse str
|
59
67
|
if m = str.match(STAT_REGEX)
|
60
|
-
ftype = case m[3]
|
61
|
-
when 'block device' then S_IFBLK
|
62
|
-
when 'character device' then S_IFCHR
|
63
|
-
when 'directory' then S_IFDIR
|
64
|
-
when 'FIFO/pipe' then S_IFIFO
|
65
|
-
when 'symlink' then S_IFLNK
|
66
|
-
when 'regular file' then S_IFREG
|
67
|
-
when 'socket' then S_IFSOCK
|
68
|
-
else
|
69
|
-
S_UNKNOWN
|
70
|
-
end
|
71
68
|
EM::File::Stat.new path: m[7],
|
72
69
|
atime: Time.at(Integer(m[10].split('.')[0], 10)),
|
73
70
|
ctime: Time.at(Integer(m[12].split('.')[0], 10)),
|
74
71
|
dev: Integer(m[2], 10),
|
75
|
-
ftype:
|
72
|
+
ftype: (TYPE_MAPPING[m[3]] || S_UNKNOWN),
|
76
73
|
gid: Integer(m[4], 10),
|
77
74
|
ino: Integer(m[6], 10),
|
78
75
|
mode: Integer(m[1], 8),
|
@@ -117,17 +114,27 @@ module EventMachine
|
|
117
114
|
end
|
118
115
|
|
119
116
|
def executable?
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
117
|
+
if Process::UID.rid == 0
|
118
|
+
true
|
119
|
+
elsif rowned?
|
120
|
+
@mode & S_IXUSR != 0
|
121
|
+
elsif rgrpowned?
|
122
|
+
@mode & S_IXGRP != 0
|
123
|
+
else
|
124
|
+
@mode & S_IXOTH != 0
|
125
|
+
end
|
124
126
|
end
|
125
127
|
|
126
128
|
def executable_real?
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
129
|
+
if Process::UID.rid == 0
|
130
|
+
true
|
131
|
+
elsif rowned?
|
132
|
+
@mode & S_IXUSR != 0
|
133
|
+
elsif rgrpowned?
|
134
|
+
@mode & S_IXGRP != 0
|
135
|
+
else
|
136
|
+
@mode & S_IXOTH != 0
|
137
|
+
end
|
131
138
|
end
|
132
139
|
|
133
140
|
def file?
|
@@ -159,17 +166,27 @@ module EventMachine
|
|
159
166
|
end
|
160
167
|
|
161
168
|
def readable?
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
169
|
+
if Process::UID.eid == 0
|
170
|
+
return true
|
171
|
+
elsif owned?
|
172
|
+
return @mode & S_IRUSR != 0
|
173
|
+
elsif grpowned?
|
174
|
+
return @mode & S_IRGRP != 0
|
175
|
+
else
|
176
|
+
@mode & S_IROTH != 0
|
177
|
+
end
|
166
178
|
end
|
167
179
|
|
168
180
|
def readable_real?
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
181
|
+
if Process::UID.rid == 0
|
182
|
+
true
|
183
|
+
elsif rowned?
|
184
|
+
@mode & S_IRUSR != 0
|
185
|
+
elsif rgrpowned?
|
186
|
+
@mode & S_IRGRP != 0
|
187
|
+
else
|
188
|
+
@mode & S_IROTH != 0
|
189
|
+
end
|
173
190
|
end
|
174
191
|
|
175
192
|
def socket?
|
@@ -189,23 +206,32 @@ module EventMachine
|
|
189
206
|
end
|
190
207
|
|
191
208
|
def writable?
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
209
|
+
if Process::UID.rid == 0
|
210
|
+
true
|
211
|
+
elsif owned?
|
212
|
+
@mode & S_IWUSR != 0
|
213
|
+
elsif grpowned?
|
214
|
+
@mode & S_IWGRP != 0
|
215
|
+
else
|
216
|
+
@mode & S_IWOTH != 0
|
217
|
+
end
|
196
218
|
end
|
197
219
|
|
198
220
|
def writable_real?
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
221
|
+
if Process::UID.rid == 0
|
222
|
+
true
|
223
|
+
elsif rowned?
|
224
|
+
@mode & S_IWUSR != 0
|
225
|
+
elsif rgrpowned?
|
226
|
+
@mode & S_IWGRP != 0
|
227
|
+
else
|
228
|
+
@mode & S_IWOTH != 0
|
229
|
+
end
|
203
230
|
end
|
204
231
|
|
205
232
|
def zero?
|
206
233
|
@size == 0
|
207
234
|
end
|
208
|
-
|
209
235
|
end
|
210
236
|
end
|
211
237
|
end
|
data/lib/em-fs/fs/command.rb
CHANGED
@@ -3,7 +3,7 @@ module EventMachine
|
|
3
3
|
class FS
|
4
4
|
class Command < EM::SystemCommand
|
5
5
|
|
6
|
-
PROGRESS_REGEXP = /([A-Za-z0-9
|
6
|
+
PROGRESS_REGEXP = /([A-Za-z0-9\.,\-\/]+)\n[ ]+([^ ]+)/.freeze
|
7
7
|
|
8
8
|
##
|
9
9
|
# Invokes `#execute` of super-class and adds a progress matcher.
|
@@ -11,7 +11,7 @@ module EventMachine
|
|
11
11
|
super &block
|
12
12
|
|
13
13
|
stdout.match PROGRESS_REGEXP, match: :last, in: :output do |file, bytes|
|
14
|
-
receive_progress file, bytes.to_i
|
14
|
+
receive_progress file, bytes.gsub(/[^\d]/,'').to_i
|
15
15
|
end
|
16
16
|
|
17
17
|
self
|
@@ -49,10 +49,6 @@ module EventMachine
|
|
49
49
|
def progress_callbacks
|
50
50
|
@progress_callbacks ||= []
|
51
51
|
end
|
52
|
-
|
53
|
-
def progress_regexp
|
54
|
-
@progress_regexp ||= /([A-Za-z0-9\.\-\/]+)\n[ ]+(\d+)/.freeze
|
55
|
-
end
|
56
52
|
end
|
57
53
|
end
|
58
54
|
end
|
data/lib/em-fs/version.rb
CHANGED
data/spec/dir/glob_spec.rb
CHANGED
@@ -2,17 +2,6 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe EM::Dir::Glob do
|
5
|
-
before :all do
|
6
|
-
dirs = [ 'a', 'b/a', 'b/b', 'c/a/a', 'c/a/b' ].map { |p|
|
7
|
-
File.join(SPEC_ROOT, 'data', p)
|
8
|
-
}
|
9
|
-
files = [ 'a/x', 'b/x', 'b/a/x', 'b/a/y', 'b/a/z' ].map { |p|
|
10
|
-
File.join(SPEC_ROOT, 'data', p)
|
11
|
-
}
|
12
|
-
FileUtils.touch files
|
13
|
-
FileUtils.mkdir_p dirs
|
14
|
-
end
|
15
|
-
|
16
5
|
describe '#find_command' do
|
17
6
|
it 'should parse relative pattern' do
|
18
7
|
cmd = EM::Dir['./*.rb'].send :find_command
|
@@ -25,6 +14,32 @@ describe EM::Dir::Glob do
|
|
25
14
|
end
|
26
15
|
end
|
27
16
|
|
17
|
+
describe '#finish' do
|
18
|
+
it 'is called with an array of the matched file stat' do
|
19
|
+
@testEntries = []
|
20
|
+
pattern = File.join(SPEC_ROOT, 'data', '**', '*')
|
21
|
+
EM.run do
|
22
|
+
cmd = EM::Dir[pattern].each(depth: 1)
|
23
|
+
cmd.finish do |entries|
|
24
|
+
@testEntries = entries
|
25
|
+
EM.stop_event_loop
|
26
|
+
end
|
27
|
+
end
|
28
|
+
@testEntries.each do |stat|
|
29
|
+
stat.should be_a EM::File::Stat
|
30
|
+
end
|
31
|
+
@testEntries.map(&:path).should =~ [
|
32
|
+
'data',
|
33
|
+
'data/b',
|
34
|
+
'data/c',
|
35
|
+
'data/test2',
|
36
|
+
'data/test',
|
37
|
+
'data/a',
|
38
|
+
'data/test3'
|
39
|
+
].map {|e| File.join(SPEC_ROOT, e)}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
28
43
|
describe '#each' do
|
29
44
|
context 'with depth = 0' do
|
30
45
|
before :all do
|
@@ -34,23 +49,22 @@ describe EM::Dir::Glob do
|
|
34
49
|
cmd = EM::Dir[pattern].each depth: 1 do |entry|
|
35
50
|
@entries << entry.path
|
36
51
|
end
|
37
|
-
|
38
|
-
cmd.exit do
|
52
|
+
cmd.finish do
|
39
53
|
EM.stop_event_loop
|
40
54
|
end
|
41
55
|
end
|
42
56
|
end
|
43
57
|
|
44
58
|
it 'should execute the block for each entry' do
|
45
|
-
@entries.should
|
46
|
-
"
|
47
|
-
"
|
48
|
-
"
|
49
|
-
"
|
50
|
-
"
|
51
|
-
"
|
52
|
-
"
|
53
|
-
]
|
59
|
+
@entries.should =~ [
|
60
|
+
"data",
|
61
|
+
"data/b",
|
62
|
+
"data/c",
|
63
|
+
"data/test2",
|
64
|
+
"data/test",
|
65
|
+
"data/a",
|
66
|
+
"data/test3"
|
67
|
+
].map {|e| File.join(SPEC_ROOT, e)}
|
54
68
|
end
|
55
69
|
end
|
56
70
|
|
@@ -62,28 +76,27 @@ describe EM::Dir::Glob do
|
|
62
76
|
cmd = EM::Dir[pattern].each depth: 2 do |entry|
|
63
77
|
@entries << entry.path
|
64
78
|
end
|
65
|
-
|
66
|
-
cmd.exit do
|
79
|
+
cmd.finish do
|
67
80
|
EM.stop_event_loop
|
68
81
|
end
|
69
82
|
end
|
70
83
|
end
|
71
84
|
|
72
85
|
it 'should execute the block for each entry and directory´s entry' do
|
73
|
-
@entries.should
|
74
|
-
"
|
75
|
-
"
|
76
|
-
"
|
77
|
-
"
|
78
|
-
"
|
79
|
-
"
|
80
|
-
"
|
81
|
-
"
|
82
|
-
"
|
83
|
-
"
|
84
|
-
"
|
85
|
-
"
|
86
|
-
]
|
86
|
+
@entries.should =~ [
|
87
|
+
"data",
|
88
|
+
"data/b",
|
89
|
+
"data/b/b",
|
90
|
+
"data/b/x",
|
91
|
+
"data/b/a",
|
92
|
+
"data/c",
|
93
|
+
"data/c/a",
|
94
|
+
"data/test2",
|
95
|
+
"data/test",
|
96
|
+
"data/a",
|
97
|
+
"data/a/x",
|
98
|
+
"data/test3"
|
99
|
+
].map {|e| File.join(SPEC_ROOT, e)}
|
87
100
|
end
|
88
101
|
end
|
89
102
|
|
@@ -95,33 +108,32 @@ describe EM::Dir::Glob do
|
|
95
108
|
cmd = EM::Dir[pattern].each depth: :inf do |entry|
|
96
109
|
@entries << entry.path
|
97
110
|
end
|
98
|
-
|
99
|
-
cmd.exit do
|
111
|
+
cmd.finish do
|
100
112
|
EM.stop_event_loop
|
101
113
|
end
|
102
114
|
end
|
103
115
|
end
|
104
116
|
|
105
117
|
it 'should execute the block for each entry in tree' do
|
106
|
-
@entries.should
|
107
|
-
"
|
108
|
-
"
|
109
|
-
"
|
110
|
-
"
|
111
|
-
"
|
112
|
-
"
|
113
|
-
"
|
114
|
-
"
|
115
|
-
"
|
116
|
-
"
|
117
|
-
"
|
118
|
-
"
|
119
|
-
"
|
120
|
-
"
|
121
|
-
"
|
122
|
-
"
|
123
|
-
"
|
124
|
-
]
|
118
|
+
@entries.should =~ [
|
119
|
+
"data",
|
120
|
+
"data/b",
|
121
|
+
"data/b/b",
|
122
|
+
"data/b/x",
|
123
|
+
"data/b/a",
|
124
|
+
"data/b/a/x",
|
125
|
+
"data/b/a/z",
|
126
|
+
"data/b/a/y",
|
127
|
+
"data/c",
|
128
|
+
"data/c/a",
|
129
|
+
"data/c/a/b",
|
130
|
+
"data/c/a/a",
|
131
|
+
"data/test2",
|
132
|
+
"data/test",
|
133
|
+
"data/a",
|
134
|
+
"data/a/x",
|
135
|
+
"data/test3"
|
136
|
+
].map {|e| File.join(SPEC_ROOT, e)}
|
125
137
|
end
|
126
138
|
end
|
127
139
|
end
|
@@ -134,15 +146,14 @@ describe EM::Dir::Glob do
|
|
134
146
|
cmd = EM::Dir[pattern].each_entry do |entry|
|
135
147
|
@entries << entry
|
136
148
|
end
|
137
|
-
|
138
|
-
cmd.exit do
|
149
|
+
cmd.finish do
|
139
150
|
EM.stop_event_loop
|
140
151
|
end
|
141
152
|
end
|
142
153
|
end
|
143
154
|
|
144
155
|
it 'should execute a block with file name for each entry' do
|
145
|
-
@entries.should
|
156
|
+
@entries.should =~ [ "data", "b", "c", "test2", "test", "a", "test3" ]
|
146
157
|
end
|
147
158
|
end
|
148
159
|
|
@@ -154,33 +165,32 @@ describe EM::Dir::Glob do
|
|
154
165
|
cmd = EM::Dir[pattern].each_path do |path|
|
155
166
|
@entries << path
|
156
167
|
end
|
157
|
-
|
158
|
-
cmd.exit do
|
168
|
+
cmd.finish do
|
159
169
|
EM.stop_event_loop
|
160
170
|
end
|
161
171
|
end
|
162
172
|
end
|
163
173
|
|
164
174
|
it 'should execute a block with full path for each entry' do
|
165
|
-
@entries.should
|
166
|
-
"
|
167
|
-
"
|
168
|
-
"
|
169
|
-
"
|
170
|
-
"
|
171
|
-
"
|
172
|
-
"
|
173
|
-
"
|
174
|
-
"
|
175
|
-
"
|
176
|
-
"
|
177
|
-
"
|
178
|
-
"
|
179
|
-
"
|
180
|
-
"
|
181
|
-
"
|
182
|
-
"
|
183
|
-
]
|
175
|
+
@entries.should =~ [
|
176
|
+
"data",
|
177
|
+
"data/b",
|
178
|
+
"data/b/b",
|
179
|
+
"data/b/x",
|
180
|
+
"data/b/a",
|
181
|
+
"data/b/a/x",
|
182
|
+
"data/b/a/z",
|
183
|
+
"data/b/a/y",
|
184
|
+
"data/c",
|
185
|
+
"data/c/a",
|
186
|
+
"data/c/a/b",
|
187
|
+
"data/c/a/a",
|
188
|
+
"data/test2",
|
189
|
+
"data/test",
|
190
|
+
"data/a",
|
191
|
+
"data/a/x",
|
192
|
+
"data/test3"
|
193
|
+
].map {|e| File.join(SPEC_ROOT, e)}
|
184
194
|
end
|
185
195
|
end
|
186
196
|
end
|
data/spec/file/stat_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe EM::File::Stat do
|
|
4
4
|
describe '.parse' do
|
5
5
|
context 'parsed stat' do
|
6
6
|
subject do
|
7
|
-
EM::File::Stat.parse "644 2050 'regular file'
|
7
|
+
EM::File::Stat.parse "644 2050 'regular file' #{Process::GID.eid} 1 2623327 '/home/arthur/test' 218759168 #{Process::UID.eid} 1340357826 1340357846 1340357846"
|
8
8
|
end
|
9
9
|
|
10
10
|
its(:atime) { should == Time.at(1340357826) }
|
@@ -17,7 +17,7 @@ describe EM::File::Stat do
|
|
17
17
|
its(:executable_real?) { should == false }
|
18
18
|
its(:file?) { should == true }
|
19
19
|
its(:ftype) { should == EM::File::Stat::S_IFREG }
|
20
|
-
its(:gid) { should ==
|
20
|
+
its(:gid) { should == Process::GID.eid }
|
21
21
|
its(:grpowned?) { should == true }
|
22
22
|
its(:ino) { should == 2623327 }
|
23
23
|
its(:mode) { should == '644' }
|
@@ -30,7 +30,7 @@ describe EM::File::Stat do
|
|
30
30
|
its(:size) { should == 218759168 }
|
31
31
|
its(:socket?) { should == false }
|
32
32
|
its(:symlink?) { should == false }
|
33
|
-
its(:uid) { should ==
|
33
|
+
its(:uid) { should == Process::UID.eid }
|
34
34
|
its(:world_readable?) { should == 420 }
|
35
35
|
its(:world_writable?) { should == nil }
|
36
36
|
its(:writable?) { should == true }
|
data/spec/fileutils_spec.rb
CHANGED
@@ -401,8 +401,8 @@ describe EM::FileUtils do
|
|
401
401
|
it 'should invoke `chown`' do
|
402
402
|
EM.run do
|
403
403
|
@dir = File.join(SPEC_ROOT, 'data', 'test')
|
404
|
-
cmd = EM::FileUtils.chown '
|
405
|
-
cmd.command.should == 'chown
|
404
|
+
cmd = EM::FileUtils.chown 'nobody', 'users', '/usr/bin/test'
|
405
|
+
cmd.command.should == 'chown nobody:users /usr/bin/test'
|
406
406
|
EM.stop_event_loop
|
407
407
|
end
|
408
408
|
end
|
@@ -412,8 +412,8 @@ describe EM::FileUtils do
|
|
412
412
|
it 'should invoke `chown -r`' do
|
413
413
|
EM.run do
|
414
414
|
@dir = File.join(SPEC_ROOT, 'data', 'test')
|
415
|
-
cmd = EM::FileUtils.chown_R '
|
416
|
-
cmd.command.should == 'chown -R
|
415
|
+
cmd = EM::FileUtils.chown_R 'nobody', 'users', '/usr/bin/test'
|
416
|
+
cmd.command.should == 'chown -R nobody:users /usr/bin/test'
|
417
417
|
EM.stop_event_loop
|
418
418
|
end
|
419
419
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe EM::FS::RsyncCommand do
|
4
4
|
context 'copying one file' do
|
5
|
-
before :
|
5
|
+
before :each do
|
6
6
|
@source = File.join SPEC_ROOT, 'data', 'test'
|
7
7
|
@target = File.join SPEC_ROOT, 'data', 'test.copy'
|
8
8
|
@progress_updates = {}
|
@@ -20,7 +20,7 @@ describe EM::FS::RsyncCommand do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
after :
|
23
|
+
after :each do
|
24
24
|
FileUtils.rm_rf @target
|
25
25
|
end
|
26
26
|
|
@@ -35,7 +35,7 @@ describe EM::FS::RsyncCommand do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
context 'copying multiple files' do
|
38
|
-
before :
|
38
|
+
before :each do
|
39
39
|
@source1 = File.join SPEC_ROOT, 'data', 'test'
|
40
40
|
@source2 = File.join SPEC_ROOT, 'data', 'test2'
|
41
41
|
@source3 = File.join SPEC_ROOT, 'data', 'test3'
|
@@ -55,7 +55,7 @@ describe EM::FS::RsyncCommand do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
after :
|
58
|
+
after :each do
|
59
59
|
FileUtils.rm_rf @target
|
60
60
|
end
|
61
61
|
|
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,8 @@ EventMachine.instance_eval do
|
|
12
12
|
end
|
13
13
|
end unless EM.respond_to?(:assertions)
|
14
14
|
|
15
|
+
system("cd #{SPEC_ROOT}/data; mkdir -p a b/a b/b c/a/{a,b}")
|
16
|
+
system("cd #{SPEC_ROOT}/data; touch {a,b}/x b/a/{x,y,z}")
|
15
17
|
unless File.exists?(File.join(SPEC_ROOT, 'data', 'test')) and
|
16
18
|
File.exists?(File.join(SPEC_ROOT, 'data', 'test2')) and
|
17
19
|
File.exists?(File.join(SPEC_ROOT, 'data', 'test3'))
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-fs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Arthur Leonard Andersen
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: guard
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: guard-rspec
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: eventmachine
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: em-systemcommand
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ! '>='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ! '>='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -145,33 +132,26 @@ files:
|
|
145
132
|
- spec/spec_helper.rb
|
146
133
|
homepage: http://github.com/leoc/em-fs
|
147
134
|
licenses: []
|
135
|
+
metadata: {}
|
148
136
|
post_install_message:
|
149
137
|
rdoc_options: []
|
150
138
|
require_paths:
|
151
139
|
- lib
|
152
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
141
|
requirements:
|
155
142
|
- - ! '>='
|
156
143
|
- !ruby/object:Gem::Version
|
157
144
|
version: '0'
|
158
|
-
segments:
|
159
|
-
- 0
|
160
|
-
hash: 4225417122368326630
|
161
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
146
|
requirements:
|
164
147
|
- - ! '>='
|
165
148
|
- !ruby/object:Gem::Version
|
166
149
|
version: '0'
|
167
|
-
segments:
|
168
|
-
- 0
|
169
|
-
hash: 4225417122368326630
|
170
150
|
requirements: []
|
171
151
|
rubyforge_project:
|
172
|
-
rubygems_version:
|
152
|
+
rubygems_version: 2.2.2
|
173
153
|
signing_key:
|
174
|
-
specification_version:
|
154
|
+
specification_version: 4
|
175
155
|
summary: Invoke filesystem calls without blocking.
|
176
156
|
test_files:
|
177
157
|
- spec/dir/glob_spec.rb
|