sys-filesystem 1.1.2 → 1.1.3
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/CHANGES +6 -0
- data/lib/unix/sys/filesystem.rb +1 -1
- data/lib/windows/sys/filesystem.rb +36 -22
- data/sys-filesystem.gemspec +3 -3
- data/test/test_sys_filesystem_unix.rb +1 -1
- data/test/test_sys_filesystem_windows.rb +11 -3
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4f18d48f15b2e167689efcba3383011e4d8ee3f
|
4
|
+
data.tar.gz: 83007b80b704891feba089e82b7d2d46e1a63ff9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7fec893f3575ce639210de2089e8897236af7f84ac48fd8f9db39ed7649491b2792dcd5dc02f62bde79368ee6cfb3bb40f0bc01f52ae8b8c1c2a0cb31ae86f7
|
7
|
+
data.tar.gz: 28a988104582d8e4d1c61f3a4f7c3d46a6230ce45e88c2aecdb92aaf1cd05aeb9b5ae95a9f322354991e4f9b9c8c56f7627fa04816d8fcfcaf4598d30e26bb81
|
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 1.1.3 - 1-Oct-2014
|
2
|
+
* Now ignores EPERM errors when trying to find the mount point for a path.
|
3
|
+
Thanks go to petersen for the patch.
|
4
|
+
* The Filesystem.stat method now defaults to using the root path on Windows
|
5
|
+
for volume information.
|
6
|
+
|
1
7
|
== 1.1.2 - 9-May-2014
|
2
8
|
* Added the percent_used, bytes_total, bytes_free and bytes_used methods
|
3
9
|
to the Filesystem::Stat class. Thanks go to xanview for the suggestion.
|
data/lib/unix/sys/filesystem.rb
CHANGED
@@ -19,7 +19,7 @@ module Sys
|
|
19
19
|
class Error < StandardError; end
|
20
20
|
|
21
21
|
# The version of the sys-filesystem library.
|
22
|
-
VERSION = '1.1.
|
22
|
+
VERSION = '1.1.3'
|
23
23
|
|
24
24
|
class Mount
|
25
25
|
# The name of the volume. This is the device mapping.
|
@@ -255,20 +255,23 @@ module Sys
|
|
255
255
|
end
|
256
256
|
|
257
257
|
# Returns a Filesystem::Stat object that contains information about the
|
258
|
-
# +path+ file system.
|
258
|
+
# +path+ file system. On Windows this will default to using the root
|
259
|
+
# path for volume information.
|
259
260
|
#
|
260
261
|
# Examples:
|
261
262
|
#
|
262
|
-
#
|
263
|
-
#
|
263
|
+
# Sys::Filesystem.stat("C:\\")
|
264
|
+
# Sys::Filesystem.stat("C:\\Documents and Settings\\some_user")
|
264
265
|
#
|
265
266
|
def self.stat(path)
|
266
267
|
bytes_avail = FFI::MemoryPointer.new(:ulong_long)
|
267
268
|
bytes_free = FFI::MemoryPointer.new(:ulong_long)
|
268
269
|
total_bytes = FFI::MemoryPointer.new(:ulong_long)
|
269
270
|
|
270
|
-
|
271
|
+
mpoint = mount_point(path)
|
272
|
+
wpath = path.wincode
|
271
273
|
|
274
|
+
# We need this call for the 64 bit support
|
272
275
|
unless GetDiskFreeSpaceExW(wpath, bytes_avail, total_bytes, bytes_free)
|
273
276
|
raise SystemCallError.new('GetDiskFreeSpaceEx', FFI.errno)
|
274
277
|
end
|
@@ -282,6 +285,7 @@ module Sys
|
|
282
285
|
free = FFI::MemoryPointer.new(:ulong_long)
|
283
286
|
total = FFI::MemoryPointer.new(:ulong_long)
|
284
287
|
|
288
|
+
# We need this call for the total/cluster info, which is not in the Ex call.
|
285
289
|
unless GetDiskFreeSpaceW(wpath, sectors, bytes, free, total)
|
286
290
|
raise SystemCallError.new('GetDiskFreeSpace', FFI.errno)
|
287
291
|
end
|
@@ -295,31 +299,37 @@ module Sys
|
|
295
299
|
blocks_avail = total_bytes / block_size
|
296
300
|
blocks_free = bytes_free / block_size
|
297
301
|
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
302
|
+
vol_name_ptr = FFI::MemoryPointer.new(:char, MAXPATH)
|
303
|
+
base_type_ptr = FFI::MemoryPointer.new(:char, MAXPATH)
|
304
|
+
vol_serial_ptr = FFI::MemoryPointer.new(:ulong)
|
305
|
+
name_max_ptr = FFI::MemoryPointer.new(:ulong)
|
306
|
+
flags_ptr = FFI::MemoryPointer.new(:ulong)
|
303
307
|
|
304
308
|
bool = GetVolumeInformationW(
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
309
|
+
mpoint.wincode,
|
310
|
+
vol_name_ptr,
|
311
|
+
vol_name_ptr.size,
|
312
|
+
vol_serial_ptr,
|
313
|
+
name_max_ptr,
|
314
|
+
flags_ptr,
|
315
|
+
base_type_ptr,
|
316
|
+
base_type_ptr.size
|
313
317
|
)
|
314
318
|
|
315
319
|
unless bool
|
316
320
|
raise SystemCallError.new('GetVolumInformation', FFI.errno)
|
317
321
|
end
|
318
322
|
|
319
|
-
vol_serial =
|
320
|
-
name_max =
|
321
|
-
flags =
|
322
|
-
base_type =
|
323
|
+
vol_serial = vol_serial_ptr.read_ulong
|
324
|
+
name_max = name_max_ptr.read_ulong
|
325
|
+
flags = flags_ptr.read_ulong
|
326
|
+
base_type = base_type_ptr.read_string(base_type_ptr.size).tr(0.chr, '')
|
327
|
+
|
328
|
+
vol_name_ptr.free
|
329
|
+
vol_serial_ptr.free
|
330
|
+
name_max_ptr.free
|
331
|
+
flags_ptr.free
|
332
|
+
base_type_ptr.free
|
323
333
|
|
324
334
|
stat_obj = Stat.new
|
325
335
|
stat_obj.instance_variable_set(:@path, path)
|
@@ -419,3 +429,7 @@ class Numeric
|
|
419
429
|
self / 1099511627776
|
420
430
|
end
|
421
431
|
end
|
432
|
+
|
433
|
+
if $0 == __FILE__
|
434
|
+
p Sys::Filesystem.stat("C:/Users/djberge")
|
435
|
+
end
|
data/sys-filesystem.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'sys-filesystem'
|
5
|
-
spec.version = '1.1.
|
5
|
+
spec.version = '1.1.3'
|
6
6
|
spec.author = 'Daniel J. Berger'
|
7
7
|
spec.email = 'djberg96@gmail.com'
|
8
8
|
spec.homepage = 'https://github.com/djberg96/sys-filesystem'
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_development_dependency('rake')
|
20
20
|
|
21
21
|
spec.description = <<-EOF
|
22
|
-
The sys-filesystem library provides
|
23
|
-
information, such as disk space and mount point data.
|
22
|
+
The sys-filesystem library provides a cross-platform interface for
|
23
|
+
gathering filesystem information, such as disk space and mount point data.
|
24
24
|
EOF
|
25
25
|
end
|
@@ -11,7 +11,7 @@ include Sys
|
|
11
11
|
|
12
12
|
class TC_Sys_Filesystem_Windows < Test::Unit::TestCase
|
13
13
|
def setup
|
14
|
-
@dir = '
|
14
|
+
@dir = 'C:/'
|
15
15
|
@stat = Filesystem.stat(@dir)
|
16
16
|
@mount = Filesystem.mounts[0]
|
17
17
|
@size = 58720256
|
@@ -19,12 +19,12 @@ class TC_Sys_Filesystem_Windows < Test::Unit::TestCase
|
|
19
19
|
end
|
20
20
|
|
21
21
|
test "version number is set to the expected value" do
|
22
|
-
assert_equal('1.1.
|
22
|
+
assert_equal('1.1.3', Filesystem::VERSION)
|
23
23
|
end
|
24
24
|
|
25
25
|
test "stat path works as expected" do
|
26
26
|
assert_respond_to(@stat, :path)
|
27
|
-
assert_equal("
|
27
|
+
assert_equal("C:/", @stat.path)
|
28
28
|
end
|
29
29
|
|
30
30
|
test "stat block_size works as expected" do
|
@@ -147,11 +147,19 @@ class TC_Sys_Filesystem_Windows < Test::Unit::TestCase
|
|
147
147
|
assert_not_nil(Filesystem::READ_ONLY_VOLUME)
|
148
148
|
end
|
149
149
|
|
150
|
+
test "stat singleton method defaults to root path if proviced" do
|
151
|
+
assert_nothing_raised{ Filesystem.stat("C://Program Files") }
|
152
|
+
end
|
153
|
+
|
150
154
|
test "stat singleton method requires a single argument" do
|
151
155
|
assert_raise(ArgumentError){ Filesystem.stat }
|
152
156
|
assert_raise(ArgumentError){ Filesystem.stat(Dir.pwd, Dir.pwd) }
|
153
157
|
end
|
154
158
|
|
159
|
+
test "stat singleton method raises an error if path is not found" do
|
160
|
+
assert_raise(Errno::ESRCH){ Filesystem.stat("C://Bogus//Dir") }
|
161
|
+
end
|
162
|
+
|
155
163
|
# Filesystem.mounts
|
156
164
|
|
157
165
|
test "mounts singleton method basic functionality" do
|
metadata
CHANGED
@@ -1,60 +1,60 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-filesystem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: test-unit
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.5.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.5.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: |2
|
56
|
-
The sys-filesystem library provides
|
57
|
-
information, such as disk space and mount point data.
|
56
|
+
The sys-filesystem library provides a cross-platform interface for
|
57
|
+
gathering filesystem information, such as disk space and mount point data.
|
58
58
|
email: djberg96@gmail.com
|
59
59
|
executables: []
|
60
60
|
extensions: []
|
@@ -89,17 +89,17 @@ require_paths:
|
|
89
89
|
- lib
|
90
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - '>='
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - '>='
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
requirements: []
|
101
101
|
rubyforge_project: sysutils
|
102
|
-
rubygems_version: 2.
|
102
|
+
rubygems_version: 2.4.1
|
103
103
|
signing_key:
|
104
104
|
specification_version: 4
|
105
105
|
summary: A Ruby interface for getting file system information.
|