rfusefs 1.0.2.RC1 → 1.1.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 +7 -0
- data/.yardopts +2 -0
- data/CHANGES.md +40 -0
- data/LICENSE +24 -0
- data/README.md +83 -0
- data/TODO.md +7 -0
- data/lib/rfusefs.rb +20 -48
- metadata +38 -81
- data/.gitignore +0 -9
- data/.travis.yml +0 -8
- data/Gemfile +0 -4
- data/History.rdoc +0 -28
- data/README.rdoc +0 -106
- data/Rakefile +0 -22
- data/TODO.txt +0 -6
- data/lib/fuse/fusedir.rb +0 -313
- data/lib/fuse/rfusefs-fuse.rb +0 -506
- data/lib/fusefs/dirlink.rb +0 -46
- data/lib/fusefs/metadir.rb +0 -287
- data/lib/fusefs/pathmapper.rb +0 -436
- data/lib/fusefs/sqlitemapper.rb +0 -115
- data/lib/rfusefs/version.rb +0 -3
- data/rfusefs.gemspec +0 -31
- data/samples/demo.rb +0 -57
- data/samples/dictfs.rb +0 -74
- data/samples/hello.rb +0 -20
- data/samples/openurifs.rb +0 -53
- data/samples/railsfs.rb +0 -77
- data/samples/sqlfs.rb +0 -134
- data/samples/yamlfs.rb +0 -168
- data/spec-fusefs/fusefs_spec.rb +0 -12
- data/spec/metadir_spec.rb +0 -364
- data/spec/mount_unmount_spec.rb +0 -21
- data/spec/pathmapper_spec.rb +0 -417
- data/spec/rfusefs_spec.rb +0 -477
- data/spec/sample_spec.rb +0 -30
- data/spec/spec_helper.rb +0 -42
- data/spec/sqlitemapper_spec.rb +0 -135
data/.gitignore
DELETED
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/History.rdoc
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
=== 1.0.1 / 2013-12-19
|
2
|
-
|
3
|
-
* Add FuseFS.main to create pretty usage messages
|
4
|
-
|
5
|
-
* Support extended attributes in filesystems
|
6
|
-
|
7
|
-
* Updates and cleanup of PathMapperFS
|
8
|
-
|
9
|
-
* Provide SqliteMapperFS
|
10
|
-
|
11
|
-
=== 1.0.0 / 2012-08-07
|
12
|
-
|
13
|
-
* Depend on new rfuse 1.0.0, Ruby 1.9
|
14
|
-
|
15
|
-
* API breaking changes
|
16
|
-
|
17
|
-
* order of arguments to {FuseFS.mount}, {FuseFS.start} changed
|
18
|
-
to account for better option handling in RFuse
|
19
|
-
|
20
|
-
=== 0.8.0 / 2011-02-19
|
21
|
-
|
22
|
-
* Initial port from fusefs
|
23
|
-
|
24
|
-
* Improved raw methods
|
25
|
-
* new "times" api for including atime,mtime,ctime in stat results
|
26
|
-
* metadir allow mv directories
|
27
|
-
* includes PathMapperFS
|
28
|
-
|
data/README.rdoc
DELETED
@@ -1,106 +0,0 @@
|
|
1
|
-
= rfusefs
|
2
|
-
|
3
|
-
* https://rubygems.org/gems/rfusefs
|
4
|
-
* https://github.com/lwoggardner/rfusefs
|
5
|
-
|
6
|
-
== DESCRIPTION
|
7
|
-
|
8
|
-
RFuseFS is a port of the FuseFS[http://rubygems.org/gems/fusefs/]
|
9
|
-
library aimed at allowing Ruby programmers to quickly and easily create
|
10
|
-
virtual filesystems with little more than a few lines of code.
|
11
|
-
|
12
|
-
RFuseFS is api compatible with FuseFS (0.7.0)
|
13
|
-
|
14
|
-
== SYNOPSIS
|
15
|
-
|
16
|
-
FuseFS provides a layer of abstraction to a programmer who wants to create a
|
17
|
-
virtual filesystem via FUSE.
|
18
|
-
|
19
|
-
First define a virtual directory by subclassing {FuseFS::FuseDir}
|
20
|
-
|
21
|
-
See samples under /samples and also the following starter classes
|
22
|
-
|
23
|
-
* {FuseFS::FuseDir}
|
24
|
-
* {FuseFS::MetaDir}
|
25
|
-
* {FuseFS::DirLink}
|
26
|
-
* {FuseFS::PathMapperFS}
|
27
|
-
* {FuseFS::SqliteMapperFS}
|
28
|
-
|
29
|
-
Then start your filesystem with
|
30
|
-
|
31
|
-
* {FuseFS.start}
|
32
|
-
* {FuseFS.main}
|
33
|
-
|
34
|
-
Finally to use the filesystem open up your favourite file browser/terminal and
|
35
|
-
explore the contents under <mountpoint>
|
36
|
-
|
37
|
-
Happy Filesystem Hacking!
|
38
|
-
|
39
|
-
=== the hello world filesystem in 14 LOC
|
40
|
-
|
41
|
-
require 'rfusefs'
|
42
|
-
|
43
|
-
class HelloDir
|
44
|
-
|
45
|
-
def contents(path)
|
46
|
-
['hello.txt']
|
47
|
-
end
|
48
|
-
|
49
|
-
def file?(path)
|
50
|
-
path == '/hello.txt'
|
51
|
-
end
|
52
|
-
|
53
|
-
def read_file(path)
|
54
|
-
"Hello, World!\n"
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
# Usage: #{$0} mountpoint [mount_options]
|
60
|
-
FuseFS.main() { |options| HelloDir.new }
|
61
|
-
|
62
|
-
== REQUIREMENTS:
|
63
|
-
|
64
|
-
* FUSE (http://fuse.sourceforge.org)
|
65
|
-
* Ruby (>=1.9)
|
66
|
-
* rfuse (~> 1.0)
|
67
|
-
|
68
|
-
== INSTALL:
|
69
|
-
|
70
|
-
* gem install rfusefs
|
71
|
-
|
72
|
-
== DEVELOPERS:
|
73
|
-
|
74
|
-
After checking out the source, run:
|
75
|
-
|
76
|
-
$ bundle install # install dependencies
|
77
|
-
$ rake spec # run tests
|
78
|
-
$ rake yard # generate docs
|
79
|
-
|
80
|
-
|
81
|
-
== LICENSE:
|
82
|
-
|
83
|
-
(The MIT License)
|
84
|
-
|
85
|
-
* Copyright (c) 2005 Greg Millam. (FuseFS)
|
86
|
-
* Copyright (c) 2009 Kyle Maxwell. (FuseFS)
|
87
|
-
* Copyright (c) 2012 Grant Gardner. (RFuseFS)
|
88
|
-
|
89
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
90
|
-
a copy of this software and associated documentation files (the
|
91
|
-
'Software'), to deal in the Software without restriction, including
|
92
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
93
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
94
|
-
permit persons to whom the Software is furnished to do so, subject to
|
95
|
-
the following conditions:
|
96
|
-
|
97
|
-
The above copyright notice and this permission notice shall be
|
98
|
-
included in all copies or substantial portions of the Software.
|
99
|
-
|
100
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
101
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
102
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
103
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
104
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
105
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
106
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
require "bundler/gem_tasks"
|
3
|
-
require 'yard'
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
require 'rake/clean'
|
6
|
-
|
7
|
-
CLOBBER.include [ "pkg/","doc/" ]
|
8
|
-
|
9
|
-
YARD::Rake::YardocTask.new do |t|
|
10
|
-
# Need this because YardocTask does not read the gemspec
|
11
|
-
t.files = ['lib/**/*.rb', '-','History.rdoc'] # optional
|
12
|
-
end
|
13
|
-
|
14
|
-
RSpec::Core::RakeTask.new(:spec)
|
15
|
-
|
16
|
-
desc "FuseFS compatibility specs"
|
17
|
-
RSpec::Core::RakeTask.new("spec:fusefs") do |t|
|
18
|
-
t.pattern = 'spec-fusefs/**/*_spec.rb'
|
19
|
-
end
|
20
|
-
|
21
|
-
task :default => ["spec","spec:fusefs"]
|
22
|
-
# vim: syntax=ruby
|
data/lib/fuse/fusedir.rb
DELETED
@@ -1,313 +0,0 @@
|
|
1
|
-
module FuseFS
|
2
|
-
|
3
|
-
# Helper for filesystem accounting
|
4
|
-
class StatsHelper
|
5
|
-
|
6
|
-
# @return [Integer] size of filesystem in bytes
|
7
|
-
attr_accessor :max_space
|
8
|
-
# @return [Integer] maximum number of (virtual) inodes
|
9
|
-
attr_accessor :max_nodes
|
10
|
-
|
11
|
-
# If set true, adjustments that cause space/nodes to exceed
|
12
|
-
# the maximums will raise ENOSPC (no space left on device)
|
13
|
-
# @return [Boolean]
|
14
|
-
attr_accessor :strict
|
15
|
-
|
16
|
-
# @return [Integer] used space in bytes
|
17
|
-
attr_reader :space
|
18
|
-
|
19
|
-
# @return [Integer] used inodes (typically count of files and directories)
|
20
|
-
attr_reader :nodes
|
21
|
-
|
22
|
-
#
|
23
|
-
# @param [Integer] max_space
|
24
|
-
# @param [Integer] max_nodes
|
25
|
-
# @param [Booleanr] strict
|
26
|
-
def initialize(max_space=nil,max_nodes=nil,strict=false)
|
27
|
-
@nodes = 0
|
28
|
-
@space = 0
|
29
|
-
@max_space = max_space
|
30
|
-
@max_nodes = max_nodes
|
31
|
-
@strict = strict
|
32
|
-
end
|
33
|
-
|
34
|
-
# Adjust accumlated statistics
|
35
|
-
# @param [Integer] delta_space change in {#space} usage
|
36
|
-
# @param [Integer] delta_nodes change in {#nodes} usage
|
37
|
-
#
|
38
|
-
# @return [void]
|
39
|
-
# @raise [Errno::ENOSPC] if {#strict} and adjusted {#space}/{#nodes} would exceed {#max_space} or {#max_nodes}
|
40
|
-
def adjust(delta_space,delta_nodes=0)
|
41
|
-
@nodes += delta_nodes
|
42
|
-
@space += delta_space
|
43
|
-
raise Errno::ENOSPC if @strict && ( @nodes > @max_nodes || @space > @max_space )
|
44
|
-
end
|
45
|
-
|
46
|
-
# @overload to_statistics()
|
47
|
-
# @return [Array<Integer>] in format expected by {FuseDir#statistics}
|
48
|
-
# @overload to_statistics(free_space,free_nodes)
|
49
|
-
# Calculate total space so that free space remains fixed
|
50
|
-
# @param [Integer] free_space available space in bytes
|
51
|
-
# @param [Integer] free_nodes available (virtual) inodes
|
52
|
-
# @return [Array<Integer>] in format expected by {FuseDir#statistics}
|
53
|
-
def to_statistics(free_space=nil,free_nodes=nil)
|
54
|
-
total_space = free_space ? space + free_space : max_space
|
55
|
-
total_nodes = free_nodes ? nodes + free_nodes : max_nodes
|
56
|
-
[ @space, @nodes, total_space, total_nodes ]
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# This class is equivalent to using Object.new() as the virtual directory
|
61
|
-
# for target for {FuseFS.start}. It exists primarily to document the API
|
62
|
-
# but can also be used as a superclass for your filesystem providing sensible defaults
|
63
|
-
#
|
64
|
-
# == Method call sequences
|
65
|
-
#
|
66
|
-
# === Stat (getattr)
|
67
|
-
#
|
68
|
-
# FUSE itself will generally stat referenced files and validate the results
|
69
|
-
# before performing any file/directory operations so this sequence is called
|
70
|
-
# very often
|
71
|
-
#
|
72
|
-
# 1. {#directory?} is checked first
|
73
|
-
# * {#can_write?} OR {#can_mkdir?} with .\_rfusefs_check\_ to determine write permissions
|
74
|
-
# * {#times} is called to determine atime,mtime,ctime info for the directory
|
75
|
-
#
|
76
|
-
# 2. {#file?} is checked next
|
77
|
-
# * {#can_write?}, {#executable?}, {#size}, {#times} are called to fill out the details
|
78
|
-
#
|
79
|
-
# 3. otherwise we tell FUSE that the path does not exist
|
80
|
-
#
|
81
|
-
# === List directory
|
82
|
-
#
|
83
|
-
# FUSE confirms the path is a directory (via stat above) before we call {#contents}
|
84
|
-
#
|
85
|
-
# FUSE will generally go on to stat each directory entry in the results
|
86
|
-
#
|
87
|
-
# === Reading files
|
88
|
-
#
|
89
|
-
# FUSE confirms path is a file before we call {#read_file}
|
90
|
-
#
|
91
|
-
# For fine control of file access see {#raw_open}, {#raw_read}, {#raw_close}
|
92
|
-
#
|
93
|
-
# === Writing files
|
94
|
-
#
|
95
|
-
# FUSE confirms path for the new file is a directory
|
96
|
-
#
|
97
|
-
# * {#can_write?} is checked at file open
|
98
|
-
# * {#write_to} is called when the file is synced, flushed or closed
|
99
|
-
#
|
100
|
-
# See also {#raw_open}, {#raw_truncate}, {#raw_write}, {#raw_sync}, {#raw_close}
|
101
|
-
#
|
102
|
-
# === Deleting files
|
103
|
-
#
|
104
|
-
# FUSE confirms path is a file before we call {#can_delete?} then {#delete}
|
105
|
-
#
|
106
|
-
# === Creating directories
|
107
|
-
#
|
108
|
-
# FUSE confirms parent is a directory before we call {#can_mkdir?} then {#mkdir}
|
109
|
-
#
|
110
|
-
# === Deleting directories
|
111
|
-
#
|
112
|
-
# FUSE confirms path is a directory before we call {#can_rmdir?} then {#rmdir}
|
113
|
-
#
|
114
|
-
# === Renaming files and directories
|
115
|
-
#
|
116
|
-
# FUSE confirms the rename is valid (eg. not renaming a directory to a file)
|
117
|
-
#
|
118
|
-
# * Try {#rename} to see if the virtual directory wants to handle this itself
|
119
|
-
# * If rename returns false/nil then we try to copy/delete (files only) ie.
|
120
|
-
# * {#file?}(from), {#can_write?}(to), {#can_delete?}(from) and if all true
|
121
|
-
# * {#read_file}(from), {#write_to}(to), {#delete}(from)
|
122
|
-
# * otherwise reject the rename
|
123
|
-
class FuseDir
|
124
|
-
INIT_TIMES = Array.new(3,0)
|
125
|
-
|
126
|
-
# base,rest = split_path(path)
|
127
|
-
# @return [Array<String,String>] base,rest. base is the first directory in
|
128
|
-
# path, and rest is nil> or the remaining path.
|
129
|
-
# Typically if rest is not nil? you should
|
130
|
-
# recurse the paths
|
131
|
-
def split_path(path)
|
132
|
-
cur, *rest = path.scan(/[^\/]+/)
|
133
|
-
if rest.empty?
|
134
|
-
[ cur, nil ]
|
135
|
-
else
|
136
|
-
[ cur, File::SEPARATOR + File.join(rest) ]
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# base,*rest = scan_path(path)
|
141
|
-
# @return [Array<String>] all directory and file elements in path. Useful
|
142
|
-
# when encapsulating an entire fs into one object
|
143
|
-
def scan_path(path)
|
144
|
-
path.scan(/[^\/]+/)
|
145
|
-
end
|
146
|
-
|
147
|
-
# @abstract FuseFS api
|
148
|
-
# @return [Boolean] true if path is a directory
|
149
|
-
def directory?(path);return false;end
|
150
|
-
|
151
|
-
# @abstract FuseFS api
|
152
|
-
# @return [Boolean] true if path is a file
|
153
|
-
def file?(path);end
|
154
|
-
|
155
|
-
# @abstract FuseFS api
|
156
|
-
# @return [Array<String>] array of file and directory names within path
|
157
|
-
def contents(path);return [];end
|
158
|
-
|
159
|
-
# @abstract FuseFS api
|
160
|
-
# @return [Boolean] true if path is an executable file
|
161
|
-
def executable?(path);return false;end
|
162
|
-
|
163
|
-
# File size
|
164
|
-
# @abstract FuseFS api
|
165
|
-
# @return [Integer] the size in byte of a file (lots of applications rely on this being accurate )
|
166
|
-
def size(path); read_file(path).length ;end
|
167
|
-
|
168
|
-
# File time information. RFuseFS extension.
|
169
|
-
# @abstract FuseFS api
|
170
|
-
# @return [Array<Integer, Time>] a 3 element array [ atime, mtime. ctime ] (good for rsync etc)
|
171
|
-
def times(path);return INIT_TIMES;end
|
172
|
-
|
173
|
-
# @abstract FuseFS api
|
174
|
-
# @return [String] the contents of the file at path
|
175
|
-
def read_file(path);return "";end
|
176
|
-
|
177
|
-
# @abstract FuseFS api
|
178
|
-
# @return [Boolean] true if the user can write to file at path
|
179
|
-
def can_write?(path);return false;end
|
180
|
-
|
181
|
-
# Write the contents of str to file at path
|
182
|
-
# @abstract FuseFS api
|
183
|
-
# @return [void]
|
184
|
-
def write_to(path,str);end
|
185
|
-
|
186
|
-
# @abstract FuseFS api
|
187
|
-
# @return [Boolean] true if the user can delete the file at path
|
188
|
-
def can_delete?(path);return false;end
|
189
|
-
|
190
|
-
# Delete the file at path
|
191
|
-
# @abstract FuseFS api
|
192
|
-
# @return [void]
|
193
|
-
def delete(path);end
|
194
|
-
|
195
|
-
# @abstract FuseFS api
|
196
|
-
# @return [Boolean] true if user can make a directory at path
|
197
|
-
def can_mkdir?(path);return false;end
|
198
|
-
|
199
|
-
# Make a directory at path
|
200
|
-
# @abstract FuseFS api
|
201
|
-
# @return [void]
|
202
|
-
def mkdir(path);end
|
203
|
-
|
204
|
-
# @abstract FuseFS api
|
205
|
-
# @return [Boolean] true if user can remove a directory at path
|
206
|
-
def can_rmdir?(path);return false;end
|
207
|
-
|
208
|
-
# Remove the directory at path
|
209
|
-
# @abstract FuseFS api
|
210
|
-
# @return [void]
|
211
|
-
def rmdir(path);end
|
212
|
-
|
213
|
-
# Neat toy. Called when a file is touched or has its timestamp explicitly modified
|
214
|
-
# @abstract FuseFS api
|
215
|
-
# @return [void]
|
216
|
-
def touch(path,modtime);end
|
217
|
-
|
218
|
-
# Move a file or directory.
|
219
|
-
# @abstract FuseFS api
|
220
|
-
# @return [Boolean] true to indicate the rename has been handled,
|
221
|
-
# otherwise will fallback to copy/delete
|
222
|
-
def rename(from_path,to_path);end
|
223
|
-
|
224
|
-
# Raw file access
|
225
|
-
# @abstract FuseFS api
|
226
|
-
# @param mode [String] "r","w" or "rw", with "a" if file is opened for append
|
227
|
-
# @param rfusefs [Boolean] will be "true" if RFuseFS extensions are available
|
228
|
-
# @return [nil] to indicate raw operations are not implemented
|
229
|
-
# @return [Object] a filehandle
|
230
|
-
# Under RFuseFS this object will be passed back in to the other raw
|
231
|
-
# methods as the optional parameter _raw_
|
232
|
-
#
|
233
|
-
def raw_open(path,mode,rfusefs = nil);end
|
234
|
-
|
235
|
-
# RFuseFS extension.
|
236
|
-
# @abstract FuseFS api
|
237
|
-
#
|
238
|
-
# @overload raw_truncate(path,offset,raw)
|
239
|
-
# Truncate an open file to offset bytes
|
240
|
-
# @param [String] path
|
241
|
-
# @param [Integer] offset
|
242
|
-
# @param [Object] raw the filehandle returned from {#raw_open}
|
243
|
-
# @return [void]
|
244
|
-
#
|
245
|
-
# @overload raw_truncate(path,offset)
|
246
|
-
# Optionally truncate a file to offset bytes directly
|
247
|
-
# @param [String] path
|
248
|
-
# @param [Integer] offset
|
249
|
-
# @return [Boolean]
|
250
|
-
# if truncate has been performed, otherwise the truncation will be performed with {#read_file} and {#write_to}
|
251
|
-
#
|
252
|
-
def raw_truncate(path,offset,raw=nil);end
|
253
|
-
|
254
|
-
# Read _sz_ bytes from file at path (or filehandle raw) starting at offset off
|
255
|
-
#
|
256
|
-
# @param [String] path
|
257
|
-
# @param [Integer] offset
|
258
|
-
# @param [Integer] size
|
259
|
-
# @param [Object] raw the filehandle returned by {#raw_open}
|
260
|
-
# @abstract FuseFS api
|
261
|
-
# @return [void]
|
262
|
-
def raw_read(path,offset,size,raw=nil);end
|
263
|
-
|
264
|
-
# Write _sz_ bytes from file at path (or filehandle raw) starting at offset off
|
265
|
-
# @abstract FuseFS api
|
266
|
-
# @return [void]
|
267
|
-
def raw_write(path,off,sz,buf,raw=nil);end
|
268
|
-
|
269
|
-
|
270
|
-
# Sync buffered data to your filesystem
|
271
|
-
# @param [String] path
|
272
|
-
# @param [Boolena] datasync only sync user data, not metadata
|
273
|
-
# @param [Object] raw the filehandle return by {#raw_open}
|
274
|
-
def raw_sync(path,datasync,raw=nil);end
|
275
|
-
|
276
|
-
# Close the file previously opened at path (or filehandle raw)
|
277
|
-
# @abstract FuseFS api
|
278
|
-
# @return [void]
|
279
|
-
def raw_close(path,raw=nil);end
|
280
|
-
|
281
|
-
# RFuseFS extension.
|
282
|
-
# Extended attributes.
|
283
|
-
# @param [String] path
|
284
|
-
# @return [Hash] extended attributes for this path.
|
285
|
-
# The returned object will be manipulated directly using :[] :[]=,, :keys and :delete
|
286
|
-
# so the default (a new empty hash on every call) will not retain attributes that are set
|
287
|
-
# @abstract FuseFS api
|
288
|
-
def xattr(path); {} ; end
|
289
|
-
|
290
|
-
# RFuseFS extensions.
|
291
|
-
# File system statistics
|
292
|
-
# @param [String] path
|
293
|
-
# @return [Array<Integer>] the statistics
|
294
|
-
# used_space (in bytes), used_files, max_space, max_files
|
295
|
-
# See {StatsHelper}
|
296
|
-
# @return [RFuse::StatVfs] or raw statistics
|
297
|
-
# @abstract FuseFS api
|
298
|
-
def statistics(path); [0,0,0,0]; end
|
299
|
-
|
300
|
-
# RFuseFS extension.
|
301
|
-
# Called when the filesystem is mounted
|
302
|
-
# @return [void]
|
303
|
-
def mounted();end
|
304
|
-
|
305
|
-
# RFuseFS extension.
|
306
|
-
# Called when the filesystem is unmounted
|
307
|
-
# @return [void]
|
308
|
-
def unmounted();end
|
309
|
-
|
310
|
-
end
|
311
|
-
|
312
|
-
DEFAULT_FS = FuseDir.new()
|
313
|
-
end
|