wishdev-rio 0.4.3.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.
- data/COPYING +341 -0
- data/README +81 -0
- data/Rakefile +281 -0
- data/build_doc.rb +94 -0
- data/doc/ANNOUNCE +159 -0
- data/doc/RELEASE_NOTES +308 -0
- data/doc/RIOIS +215 -0
- data/doc/generators/template/html/rio.css +428 -0
- data/doc/generators/template/html/rio.rb +523 -0
- data/doc/generators/template/html/ugly.rb +132 -0
- data/doc/pkg_def.rb +60 -0
- data/doc/rfc1738.txt +1403 -0
- data/doc/rfc959.txt +3933 -0
- data/ex/catcsv.rb +64 -0
- data/ex/colx.rb +8 -0
- data/ex/findinruby +15 -0
- data/ex/findruby +14 -0
- data/ex/passwd_report.rb +8 -0
- data/ex/prompt.rb +25 -0
- data/ex/rgb.txt.gz +0 -0
- data/ex/riocat +42 -0
- data/ex/riogunzip +31 -0
- data/ex/riogzip +24 -0
- data/ex/rioprompt.rb +10 -0
- data/ex/targz2zip +17 -0
- data/ex/tonl +10 -0
- data/lib/rio/abstract_method.rb +56 -0
- data/lib/rio/argv.rb +56 -0
- data/lib/rio/arycopy.rb +43 -0
- data/lib/rio/assert.rb +114 -0
- data/lib/rio/base.rb +56 -0
- data/lib/rio/callstr.rb +46 -0
- data/lib/rio/const.rb +51 -0
- data/lib/rio/construct.rb +50 -0
- data/lib/rio/constructor.rb +258 -0
- data/lib/rio/context/autoclose.rb +72 -0
- data/lib/rio/context/copying.rb +55 -0
- data/lib/rio/context/cxx.rb +66 -0
- data/lib/rio/context/dir.rb +120 -0
- data/lib/rio/context/gzip.rb +50 -0
- data/lib/rio/context/methods.rb +182 -0
- data/lib/rio/context/skip.rb +66 -0
- data/lib/rio/context/stream.rb +229 -0
- data/lib/rio/context.rb +117 -0
- data/lib/rio/cp.rb +370 -0
- data/lib/rio/def.rb +53 -0
- data/lib/rio/dir.rb +144 -0
- data/lib/rio/doc/EXAMPLES.rb +299 -0
- data/lib/rio/doc/HOWTO.rb +737 -0
- data/lib/rio/doc/INDEX.rb +311 -0
- data/lib/rio/doc/INTRO.rb +1068 -0
- data/lib/rio/doc/OPTIONAL.rb +130 -0
- data/lib/rio/doc/SYNOPSIS.rb +183 -0
- data/lib/rio/doc.rb +45 -0
- data/lib/rio/entrysel.rb +246 -0
- data/lib/rio/exception/copy.rb +97 -0
- data/lib/rio/exception/notimplemented.rb +57 -0
- data/lib/rio/exception/notsupported.rb +46 -0
- data/lib/rio/exception/open.rb +61 -0
- data/lib/rio/exception/state.rb +73 -0
- data/lib/rio/exception.rb +41 -0
- data/lib/rio/ext/csv.rb +351 -0
- data/lib/rio/ext/if.rb +45 -0
- data/lib/rio/ext/mp3info.rb +80 -0
- data/lib/rio/ext/splitlines.rb +253 -0
- data/lib/rio/ext/yaml/doc.rb +133 -0
- data/lib/rio/ext/yaml/tie.rb +149 -0
- data/lib/rio/ext/yaml.rb +164 -0
- data/lib/rio/ext/zipfile/fs.rb +116 -0
- data/lib/rio/ext/zipfile/rl.rb +251 -0
- data/lib/rio/ext/zipfile/rootdir.rb +117 -0
- data/lib/rio/ext/zipfile/state.rb +161 -0
- data/lib/rio/ext/zipfile/wrap.rb +204 -0
- data/lib/rio/ext/zipfile.rb +110 -0
- data/lib/rio/ext.rb +138 -0
- data/lib/rio/factory.rb +436 -0
- data/lib/rio/file.rb +118 -0
- data/lib/rio/filter/closeoneof.rb +103 -0
- data/lib/rio/filter/gzip.rb +70 -0
- data/lib/rio/filter.rb +94 -0
- data/lib/rio/fs/base.rb +41 -0
- data/lib/rio/fs/impl.rb +122 -0
- data/lib/rio/fs/native.rb +75 -0
- data/lib/rio/fs/stream.rb +61 -0
- data/lib/rio/fs/url.rb +63 -0
- data/lib/rio/ftp/conncache.rb +101 -0
- data/lib/rio/ftp/dir.rb +94 -0
- data/lib/rio/ftp/fs.rb +180 -0
- data/lib/rio/ftp/ftpfile.rb +20 -0
- data/lib/rio/grande.rb +97 -0
- data/lib/rio/handle.rb +100 -0
- data/lib/rio/if/basic.rb +64 -0
- data/lib/rio/if/csv.rb +76 -0
- data/lib/rio/if/dir.rb +157 -0
- data/lib/rio/if/file.rb +89 -0
- data/lib/rio/if/fileordir.rb +268 -0
- data/lib/rio/if/grande.rb +729 -0
- data/lib/rio/if/grande_entry.rb +379 -0
- data/lib/rio/if/grande_stream.rb +693 -0
- data/lib/rio/if/internal.rb +125 -0
- data/lib/rio/if/path.rb +462 -0
- data/lib/rio/if/rubyio.rb +681 -0
- data/lib/rio/if/string.rb +83 -0
- data/lib/rio/if/temp.rb +45 -0
- data/lib/rio/if/test.rb +282 -0
- data/lib/rio/if/yaml.rb +206 -0
- data/lib/rio/if.rb +64 -0
- data/lib/rio/ioh.rb +162 -0
- data/lib/rio/iomode.rb +109 -0
- data/lib/rio/ios/fail.rb +106 -0
- data/lib/rio/ios/generic.rb +119 -0
- data/lib/rio/ios/mode.rb +60 -0
- data/lib/rio/ios/null.rb +119 -0
- data/lib/rio/iowrap.rb +128 -0
- data/lib/rio/kernel.rb +54 -0
- data/lib/rio/local.rb +62 -0
- data/lib/rio/match.rb +53 -0
- data/lib/rio/matchrecord.rb +283 -0
- data/lib/rio/no_warn.rb +49 -0
- data/lib/rio/nullio.rb +159 -0
- data/lib/rio/open3.rb +68 -0
- data/lib/rio/ops/construct.rb +61 -0
- data/lib/rio/ops/create.rb +77 -0
- data/lib/rio/ops/dir.rb +346 -0
- data/lib/rio/ops/either.rb +134 -0
- data/lib/rio/ops/file.rb +102 -0
- data/lib/rio/ops/path.rb +296 -0
- data/lib/rio/ops/stream/input.rb +267 -0
- data/lib/rio/ops/stream/output.rb +100 -0
- data/lib/rio/ops/stream/read.rb +86 -0
- data/lib/rio/ops/stream/write.rb +57 -0
- data/lib/rio/ops/stream.rb +87 -0
- data/lib/rio/ops/symlink.rb +80 -0
- data/lib/rio/path/reset.rb +69 -0
- data/lib/rio/path.rb +129 -0
- data/lib/rio/piper/cp.rb +80 -0
- data/lib/rio/piper.rb +122 -0
- data/lib/rio/prompt.rb +66 -0
- data/lib/rio/rectype.rb +88 -0
- data/lib/rio/rl/base.rb +118 -0
- data/lib/rio/rl/builder.rb +117 -0
- data/lib/rio/rl/chmap.rb +66 -0
- data/lib/rio/rl/fs2url.rb +82 -0
- data/lib/rio/rl/ioi.rb +78 -0
- data/lib/rio/rl/path.rb +110 -0
- data/lib/rio/rl/pathmethods.rb +116 -0
- data/lib/rio/rl/uri.rb +200 -0
- data/lib/rio/rl/withpath.rb +296 -0
- data/lib/rio/scheme/aryio.rb +88 -0
- data/lib/rio/scheme/cmdio.rb +80 -0
- data/lib/rio/scheme/cmdpipe.rb +118 -0
- data/lib/rio/scheme/fd.rb +65 -0
- data/lib/rio/scheme/ftp.rb +141 -0
- data/lib/rio/scheme/http.rb +78 -0
- data/lib/rio/scheme/null.rb +55 -0
- data/lib/rio/scheme/path.rb +98 -0
- data/lib/rio/scheme/stderr.rb +55 -0
- data/lib/rio/scheme/stdio.rb +71 -0
- data/lib/rio/scheme/strio.rb +87 -0
- data/lib/rio/scheme/sysio.rb +63 -0
- data/lib/rio/scheme/tcp.rb +75 -0
- data/lib/rio/scheme/temp.rb +200 -0
- data/lib/rio/state/error.rb +72 -0
- data/lib/rio/state.rb +242 -0
- data/lib/rio/stream/base.rb +54 -0
- data/lib/rio/stream/duplex.rb +79 -0
- data/lib/rio/stream/open.rb +202 -0
- data/lib/rio/stream.rb +181 -0
- data/lib/rio/symantics.rb +45 -0
- data/lib/rio/tempdir.rb +132 -0
- data/lib/rio/to_rio/all.rb +39 -0
- data/lib/rio/to_rio/array.rb +39 -0
- data/lib/rio/to_rio/io.rb +40 -0
- data/lib/rio/to_rio/object.rb +42 -0
- data/lib/rio/to_rio/string.rb +40 -0
- data/lib/rio/to_rio.rb +67 -0
- data/lib/rio/uri/file.rb +198 -0
- data/lib/rio/util.rb +48 -0
- data/lib/rio/version.rb +51 -0
- data/lib/rio.rb +162 -0
- data/setup.rb +1360 -0
- data/test/bin/count_lines.rb +11 -0
- data/test/bin/find_lines.rb +13 -0
- data/test/bin/list_dir.rb +14 -0
- data/test/ftp/all.rb +9 -0
- data/test/ftp/anon_copy_data.rb +36 -0
- data/test/ftp/anon_misc.rb +124 -0
- data/test/ftp/anon_read.rb +105 -0
- data/test/ftp/anon_special.rb +68 -0
- data/test/ftp/anon_write.rb +70 -0
- data/test/ftp/ftp2ftp.rb +51 -0
- data/test/ftp/initftpfiles.rb +14 -0
- data/test/ftp/testdef.rb +55 -0
- data/test/gem_runtests.rb +15 -0
- data/test/http/all.rb +4 -0
- data/test/http/copy-from-http.rb +141 -0
- data/test/http/uri-meta.rb +72 -0
- data/test/lib/temp_server.rb +46 -0
- data/test/runalltests.rb +17 -0
- data/test/runftptests.rb +14 -0
- data/test/runhttp.rb +11 -0
- data/test/runhttptests.rb +14 -0
- data/test/runtests.rb +52 -0
- data/test/tc/abs.rb +355 -0
- data/test/tc/all.rb +80 -0
- data/test/tc/base.rb +31 -0
- data/test/tc/base2.rb +87 -0
- data/test/tc/cd1.rb +113 -0
- data/test/tc/clearsel.rb +68 -0
- data/test/tc/clone.rb +208 -0
- data/test/tc/closeoncopy.rb +102 -0
- data/test/tc/closeoneof.rb +194 -0
- data/test/tc/cmdpipe.rb +149 -0
- data/test/tc/copy-dir-samevar.rb +91 -0
- data/test/tc/copy-from.rb +129 -0
- data/test/tc/copy-to.rb +91 -0
- data/test/tc/copy.rb +74 -0
- data/test/tc/copyarray.rb +188 -0
- data/test/tc/copydest.rb +50 -0
- data/test/tc/copydir.rb +166 -0
- data/test/tc/copydirlines.rb +121 -0
- data/test/tc/copylines.rb +46 -0
- data/test/tc/copynonex.rb +118 -0
- data/test/tc/copysymlink.rb +39 -0
- data/test/tc/create.rb +114 -0
- data/test/tc/csv.rb +226 -0
- data/test/tc/csv2.rb +138 -0
- data/test/tc/csv_columns.rb +37 -0
- data/test/tc/csvutil.rb +56 -0
- data/test/tc/dir.rb +76 -0
- data/test/tc/dir_iter.rb +383 -0
- data/test/tc/dirautoclose.rb +67 -0
- data/test/tc/dirent.rb +178 -0
- data/test/tc/dirss.rb +81 -0
- data/test/tc/each.rb +111 -0
- data/test/tc/each_break.rb +243 -0
- data/test/tc/edf.rb +81 -0
- data/test/tc/empty.rb +51 -0
- data/test/tc/emptyriodir.rb +129 -0
- data/test/tc/entary.rb +227 -0
- data/test/tc/entsel.rb +110 -0
- data/test/tc/eq.rb +101 -0
- data/test/tc/expand_path.rb +69 -0
- data/test/tc/ext.rb +136 -0
- data/test/tc/fileno.rb +94 -0
- data/test/tc/files_select.rb +92 -0
- data/test/tc/get.rb +152 -0
- data/test/tc/getrec.rb +137 -0
- data/test/tc/gzip.rb +109 -0
- data/test/tc/io_each_byte.rb +60 -0
- data/test/tc/io_read.rb +80 -0
- data/test/tc/iometh.rb +149 -0
- data/test/tc/likeio.rb +116 -0
- data/test/tc/line_record_row.rb +51 -0
- data/test/tc/lineno.rb +196 -0
- data/test/tc/lines.rb +66 -0
- data/test/tc/misc.rb +432 -0
- data/test/tc/nolines.rb +204 -0
- data/test/tc/noqae.rb +879 -0
- data/test/tc/null.rb +45 -0
- data/test/tc/once.rb +6 -0
- data/test/tc/overload.rb +140 -0
- data/test/tc/pa.rb +158 -0
- data/test/tc/path_parts.rb +175 -0
- data/test/tc/pathop.rb +60 -0
- data/test/tc/paths.rb +145 -0
- data/test/tc/pid.rb +31 -0
- data/test/tc/piper.rb +143 -0
- data/test/tc/programs_util.rb +24 -0
- data/test/tc/qae.rb +493 -0
- data/test/tc/qae_riovar.rb +499 -0
- data/test/tc/readline.rb +30 -0
- data/test/tc/records.rb +68 -0
- data/test/tc/rename.rb +233 -0
- data/test/tc/rename_assign.rb +45 -0
- data/test/tc/riorl.rb +181 -0
- data/test/tc/route.rb +51 -0
- data/test/tc/selnosel.rb +33 -0
- data/test/tc/skip.rb +89 -0
- data/test/tc/skiplines.rb +71 -0
- data/test/tc/split.rb +28 -0
- data/test/tc/splitlines.rb +65 -0
- data/test/tc/splitpath.rb +83 -0
- data/test/tc/sub.rb +46 -0
- data/test/tc/symlink.rb +176 -0
- data/test/tc/symlink0.rb +348 -0
- data/test/tc/symlink1.rb +114 -0
- data/test/tc/synopsis.rb +75 -0
- data/test/tc/temp.rb +152 -0
- data/test/tc/tempdir.rb +60 -0
- data/test/tc/tempfile.rb +66 -0
- data/test/tc/testcase.rb +170 -0
- data/test/tc/tonl.rb +37 -0
- data/test/tc/truncate.rb +39 -0
- data/test/tc/yaml.rb +275 -0
- metadata +387 -0
data/lib/rio/open3.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# = open3.rb
|
|
39
|
+
#
|
|
40
|
+
# = Rio
|
|
41
|
+
#
|
|
42
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
43
|
+
#
|
|
44
|
+
#
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
require 'rio'
|
|
48
|
+
require 'open3'
|
|
49
|
+
|
|
50
|
+
module RIO
|
|
51
|
+
def popen3(*args,&block)
|
|
52
|
+
if block_given?
|
|
53
|
+
i,o,e = nil,nil,nil
|
|
54
|
+
begin
|
|
55
|
+
Open3.popen3(*args) do |si,so,se|
|
|
56
|
+
yield(i=Rio.new(si),o=Rio.new(so),e=Rio.new(se))
|
|
57
|
+
end
|
|
58
|
+
ensure
|
|
59
|
+
[i,o,e].each { |el| el.reset if el }
|
|
60
|
+
end
|
|
61
|
+
else
|
|
62
|
+
si,so,se = Open3.popen3(*args)
|
|
63
|
+
[Rio.new(si),Rio.new(so),Rio.new(se)]
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
module_function :popen3
|
|
67
|
+
end
|
|
68
|
+
__END__
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
module RIO
|
|
37
|
+
CONSTRUCTOR_SYMS = [
|
|
38
|
+
:strio,
|
|
39
|
+
:stdio,
|
|
40
|
+
:stderr,
|
|
41
|
+
:temp,
|
|
42
|
+
:tempfile,
|
|
43
|
+
:tempdir,
|
|
44
|
+
:tcp,
|
|
45
|
+
:cmdio,
|
|
46
|
+
:cmdpipe,
|
|
47
|
+
:sysio,
|
|
48
|
+
:fd,
|
|
49
|
+
:ftp,
|
|
50
|
+
]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
module RIO
|
|
54
|
+
module Ops
|
|
55
|
+
module Construct
|
|
56
|
+
RIO::CONSTRUCTOR_SYMS.each { |sym|
|
|
57
|
+
module_eval "def #{sym}(*args,&block) Rio.rio(:#{sym},*args,&block) end"
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
module RIO
|
|
38
|
+
module Ops
|
|
39
|
+
module Path
|
|
40
|
+
module Create
|
|
41
|
+
def join(*args)
|
|
42
|
+
before = self.rl.to_s
|
|
43
|
+
arl = self.rl
|
|
44
|
+
nrio = new_rio(arl,*args)
|
|
45
|
+
after = self.rl.to_s
|
|
46
|
+
#p "b=#{before} a=#{after}"
|
|
47
|
+
nrio
|
|
48
|
+
end
|
|
49
|
+
#alias :catpath :join
|
|
50
|
+
def join!(*args)
|
|
51
|
+
rl.join(*args)
|
|
52
|
+
softreset
|
|
53
|
+
end
|
|
54
|
+
#alias :catpath! :join!
|
|
55
|
+
def /(arg)
|
|
56
|
+
ans = join(arg)
|
|
57
|
+
return ans
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def getwd(*args,&block)
|
|
61
|
+
new_rio(fs.getwd,*args,&block)
|
|
62
|
+
end
|
|
63
|
+
def cwd(*args,&block)
|
|
64
|
+
new_rio(fs.cwd,*args,&block)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def rootpath(*args,&block)
|
|
68
|
+
new_rio(fs.root(),*args,&block)
|
|
69
|
+
end
|
|
70
|
+
alias :root :rootpath
|
|
71
|
+
def cleanpath(*args)
|
|
72
|
+
new_rio(fs.cleanpath(fspath,*args))
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
data/lib/rio/ops/dir.rb
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# ===============================================================================
|
|
3
|
+
# Copyright (c) 2005,2006,2007 Christopher Kleckner
|
|
4
|
+
# All rights reserved
|
|
5
|
+
#
|
|
6
|
+
# This file is part of the Rio library for ruby.
|
|
7
|
+
#
|
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
#
|
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
# GNU General Public License for more details.
|
|
17
|
+
#
|
|
18
|
+
# You should have received a copy of the GNU General Public License
|
|
19
|
+
# along with Rio; if not, write to the Free Software
|
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
21
|
+
# ===============================================================================
|
|
22
|
+
#++
|
|
23
|
+
#
|
|
24
|
+
# To create the documentation for Rio run the command
|
|
25
|
+
# ruby build_doc.rb
|
|
26
|
+
# from the distribution directory.
|
|
27
|
+
#
|
|
28
|
+
# Suggested Reading
|
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
|
30
|
+
# * RIO::Doc::INTRO
|
|
31
|
+
# * RIO::Doc::HOWTO
|
|
32
|
+
# * RIO::Doc::EXAMPLES
|
|
33
|
+
# * RIO::Rio
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
require 'rio/grande'
|
|
38
|
+
require 'rio/cp'
|
|
39
|
+
require 'rio/ops/either'
|
|
40
|
+
|
|
41
|
+
module RIO
|
|
42
|
+
# module Impl
|
|
43
|
+
# module U
|
|
44
|
+
# def self.rmdir(s) ::Dir.rmdir(s.to_s) end
|
|
45
|
+
# def self.mkdir(s,*args) ::Dir.mkdir(s.to_s,*args) end
|
|
46
|
+
# def self.chdir(s,&block) ::Dir.chdir(s.to_s,&block) end
|
|
47
|
+
# def self.foreach(s,&block) ::Dir.foreach(s.to_s,&block) end
|
|
48
|
+
# def self.entries(s) ::Dir.entries(s.to_s) end
|
|
49
|
+
# def self.cp_r(s,d)
|
|
50
|
+
# require 'fileutils'
|
|
51
|
+
# ::FileUtils.cp_r(s.to_s,d.to_s)
|
|
52
|
+
# end
|
|
53
|
+
# def self.find(s,&block)
|
|
54
|
+
# require 'find'
|
|
55
|
+
# Find.find(s.to_s) do |f|
|
|
56
|
+
# yield f
|
|
57
|
+
# end
|
|
58
|
+
# end
|
|
59
|
+
# def self.glob(gstr,*args,&block)
|
|
60
|
+
# ::Dir.glob(gstr,*args,&block)
|
|
61
|
+
# end
|
|
62
|
+
# def self.rmtree(s)
|
|
63
|
+
# require 'fileutils'
|
|
64
|
+
# ::FileUtils.rmtree(s.to_s)
|
|
65
|
+
# end
|
|
66
|
+
# def self.mkpath(s)
|
|
67
|
+
# require 'fileutils'
|
|
68
|
+
# ::FileUtils.mkpath(s.to_s)
|
|
69
|
+
# end
|
|
70
|
+
# end
|
|
71
|
+
# end
|
|
72
|
+
|
|
73
|
+
module Ops
|
|
74
|
+
module Dir
|
|
75
|
+
module ExistOrNot
|
|
76
|
+
include RIO::Ops::FileOrDir::ExistOrNot
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
module Ops
|
|
81
|
+
module Dir
|
|
82
|
+
module NonExisting
|
|
83
|
+
include ExistOrNot
|
|
84
|
+
include ::RIO::Ops::FileOrDir::NonExisting
|
|
85
|
+
def mkdir(*args)
|
|
86
|
+
fs.mkdir(self.to_s,*args);
|
|
87
|
+
softreset()
|
|
88
|
+
end
|
|
89
|
+
def mkpath(*args)
|
|
90
|
+
# p callstr('mkpath',*args)
|
|
91
|
+
fs.mkpath(self.to_s,*args);
|
|
92
|
+
#fs.mkpath(self,*args);
|
|
93
|
+
softreset()
|
|
94
|
+
end
|
|
95
|
+
def rmdir(*args) self end
|
|
96
|
+
def rmtree(*args) self end
|
|
97
|
+
alias :delete :rmdir
|
|
98
|
+
alias :unlink :rmdir
|
|
99
|
+
alias :delete! :rmtree
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
module RIO
|
|
105
|
+
module Ops
|
|
106
|
+
module Dir
|
|
107
|
+
module Existing
|
|
108
|
+
include ExistOrNot
|
|
109
|
+
include FileOrDir::Existing
|
|
110
|
+
include Cp::Dir::Input
|
|
111
|
+
include Cp::Dir::Output
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
module RIO
|
|
120
|
+
module Ops
|
|
121
|
+
module Dir
|
|
122
|
+
module Existing
|
|
123
|
+
def selective?
|
|
124
|
+
%w[entry_sel stream_sel stream_nosel].any? { |k| cx.has_key?(k) }
|
|
125
|
+
end
|
|
126
|
+
def empty?() self.to_a.empty? end
|
|
127
|
+
def mkdir(*args) self end
|
|
128
|
+
def mkpath(*args) self end
|
|
129
|
+
def rmdir(*args)
|
|
130
|
+
fs.rmdir(self.to_s,*args);
|
|
131
|
+
softreset()
|
|
132
|
+
end
|
|
133
|
+
def rmtree(*args) fs.rmtree(self.to_s,*args); softreset() end
|
|
134
|
+
def rm(*args) fs.rm(self.to_s,*args); softreset() end
|
|
135
|
+
|
|
136
|
+
alias :delete :rmdir
|
|
137
|
+
alias :unlink :delete
|
|
138
|
+
alias :delete! :rmtree
|
|
139
|
+
|
|
140
|
+
def chdir(*args,&block)
|
|
141
|
+
if block_given?
|
|
142
|
+
fs.chdir(self.to_s,*args) { |dir|
|
|
143
|
+
yield new_rio('.')
|
|
144
|
+
}
|
|
145
|
+
else
|
|
146
|
+
fs.chdir(self.path,*args)
|
|
147
|
+
return new_rio('.')
|
|
148
|
+
end
|
|
149
|
+
self
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def ensure_rio_cx(arg0)
|
|
153
|
+
return arg0 if arg0.kind_of?(::RIO::Rio)
|
|
154
|
+
new_rio_cx(arg0)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def glob(*args,&block)
|
|
158
|
+
chdir do
|
|
159
|
+
if block_given?
|
|
160
|
+
fs.glob(*args) do |ent|
|
|
161
|
+
yield new_rio_cx(self,ent)
|
|
162
|
+
end
|
|
163
|
+
else
|
|
164
|
+
return fs.glob(*args).map { |ent| new_rio_cx(self,ent) }
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
module Ops
|
|
173
|
+
module Dir
|
|
174
|
+
module Stream
|
|
175
|
+
include FileOrDir::Existing
|
|
176
|
+
include Enumerable
|
|
177
|
+
include Grande
|
|
178
|
+
include Cp::Dir::Input
|
|
179
|
+
include Cp::Dir::Output
|
|
180
|
+
public
|
|
181
|
+
|
|
182
|
+
def entries(*args,&block) _set_select('entries',*args,&block) end
|
|
183
|
+
|
|
184
|
+
def each(*args,&block)
|
|
185
|
+
each_(*args,&block)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def read()
|
|
190
|
+
read_()
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def get()
|
|
194
|
+
self.each_ent_ { |d|
|
|
195
|
+
return d
|
|
196
|
+
}
|
|
197
|
+
return nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def rewind() ioh.rewind(); self end
|
|
201
|
+
def seek(integer) ioh.seek(integer); self end
|
|
202
|
+
|
|
203
|
+
extend Forwardable
|
|
204
|
+
def_instance_delegators(:ioh,:tell,:pos,:pos=)
|
|
205
|
+
|
|
206
|
+
protected
|
|
207
|
+
require 'rio/entrysel'
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
module RIO
|
|
213
|
+
module Ops
|
|
214
|
+
module Dir
|
|
215
|
+
module Stream
|
|
216
|
+
|
|
217
|
+
protected
|
|
218
|
+
|
|
219
|
+
def read_()
|
|
220
|
+
if ent = ioh.read()
|
|
221
|
+
new_rio_cx(ent)
|
|
222
|
+
else
|
|
223
|
+
self.close if closeoneof?
|
|
224
|
+
nil
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
def handle_skipped
|
|
228
|
+
#return unless cx.has_key?('skip_args') or cx['skipping']
|
|
229
|
+
return self unless cx.has_key?('skip_args')
|
|
230
|
+
args = cx['skip_args'] || []
|
|
231
|
+
self.skipentries(*args)
|
|
232
|
+
end
|
|
233
|
+
def ent_to_rio_(ent,indir)
|
|
234
|
+
#p "ent_to_rio: ent=#{ent.inspect} indir=#{indir}"
|
|
235
|
+
if ent.kind_of?(RIO::Rio)
|
|
236
|
+
oldpath = ent.to_s
|
|
237
|
+
ent.rl.urlpath = indir.to_s
|
|
238
|
+
ent.join!(oldpath)
|
|
239
|
+
ent.cx = self.cx.bequeath(ent.cx)
|
|
240
|
+
ent
|
|
241
|
+
else
|
|
242
|
+
# KIT: should this be RL.fs2url(ent) ???
|
|
243
|
+
if indir
|
|
244
|
+
new_rio_cx(indir.rl,ent)
|
|
245
|
+
else
|
|
246
|
+
new_rio_cx(ent)
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
def handle_ent_(ent,indir,sel,&block)
|
|
251
|
+
begin
|
|
252
|
+
erio = ent_to_rio_(ent,indir)
|
|
253
|
+
#p "handle_ent_1: #{erio.cx.inspect}"
|
|
254
|
+
if stream_iter?
|
|
255
|
+
# case for iterating files in a directory (e.g. rio('adir').lines)
|
|
256
|
+
_add_stream_iter_cx(erio).each(&block) if erio.file? and sel.match?(erio)
|
|
257
|
+
else
|
|
258
|
+
yield _add_iter_cx(erio) if sel.match?(erio)
|
|
259
|
+
end
|
|
260
|
+
#p "handle_ent_2: #{erio.cx.inspect}"
|
|
261
|
+
|
|
262
|
+
if cx.has_key?('all') and erio.directory?
|
|
263
|
+
rsel = Match::Entry::SelectorClassic.new(cx['r_sel'],cx['r_nosel'])
|
|
264
|
+
_add_recurse_iter_cx(erio).each(&block) if rsel.match?(erio)
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
rescue ::Errno::ENOENT, ::URI::InvalidURIError => ex
|
|
268
|
+
$stderr.puts(ex.message+". Skipping.")
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
def each_(*args,&block)
|
|
272
|
+
#p "#{callstr('each_',*args)} sel=#{cx['entry_sel'].inspect}"
|
|
273
|
+
handle_skipped()
|
|
274
|
+
sel = Match::Entry::Selector.new(cx['entry_sel'])
|
|
275
|
+
indir = (self.to_s == '.' ? nil : self)
|
|
276
|
+
self.ioh.each do |ent|
|
|
277
|
+
#next if
|
|
278
|
+
handle_ent_(ent,indir,sel,&block) unless ent =~ /^\.(\.)?$/
|
|
279
|
+
end
|
|
280
|
+
closeoneof? ? self.close : self
|
|
281
|
+
end
|
|
282
|
+
def each_ent_(*args,&block)
|
|
283
|
+
#p "#{callstr('each_',*args)} sel=#{cx['sel'].inspect} nosel=#{cx['nosel'].inspect}"
|
|
284
|
+
handle_skipped()
|
|
285
|
+
sel = Match::Entry::Selector.new(cx['entry_sel'])
|
|
286
|
+
indir = (self.to_s == '.' ? nil : self)
|
|
287
|
+
while ent = self.ioh.read
|
|
288
|
+
handle_ent_(ent,indir,sel,&block) unless ent =~ /^\.(\.)?$/
|
|
289
|
+
end
|
|
290
|
+
closeoneof? ? self.close : self
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
module RIO
|
|
299
|
+
module Ops
|
|
300
|
+
module Dir
|
|
301
|
+
module Stream
|
|
302
|
+
|
|
303
|
+
private
|
|
304
|
+
|
|
305
|
+
def _ss_keys() Cx::SS::ENTRY_KEYS + Cx::SS::STREAM_KEYS end
|
|
306
|
+
CX_ALL_SKIP_KEYS = ['retrystate']
|
|
307
|
+
def _add_recurse_iter_cx(ario)
|
|
308
|
+
new_cx = ario.cx
|
|
309
|
+
cx.keys.reject { |k|
|
|
310
|
+
CX_ALL_SKIP_KEYS.include?(k)
|
|
311
|
+
}.each { |k|
|
|
312
|
+
new_cx.set_(k,cx[k])
|
|
313
|
+
}
|
|
314
|
+
ario.cx = new_cx
|
|
315
|
+
ario
|
|
316
|
+
end
|
|
317
|
+
def _add_cx(ario,keys)
|
|
318
|
+
new_cx = ario.cx
|
|
319
|
+
keys.each {|k|
|
|
320
|
+
next unless cx.has_key?(k)
|
|
321
|
+
new_cx.set_(k,cx[k])
|
|
322
|
+
}
|
|
323
|
+
ario.cx = new_cx
|
|
324
|
+
end
|
|
325
|
+
CX_DIR_ITER_KEYS = %w[entry_sel]
|
|
326
|
+
CX_STREAM_ITER_KEYS = %w[stream_rectype stream_itertype stream_sel stream_nosel]
|
|
327
|
+
def _add_iter_cx(ario)
|
|
328
|
+
if nostreamenum?
|
|
329
|
+
_add_cx(ario,CX_DIR_ITER_KEYS)
|
|
330
|
+
end
|
|
331
|
+
_add_stream_iter_cx(ario)
|
|
332
|
+
end
|
|
333
|
+
def _add_stream_iter_cx(ario)
|
|
334
|
+
_add_cx(ario,CX_STREAM_ITER_KEYS)
|
|
335
|
+
new_cx = ario.cx
|
|
336
|
+
if stream_iter?
|
|
337
|
+
new_cx.set_('ss_args',cx['ss_args']) if cx.has_key?('ss_args')
|
|
338
|
+
new_cx.set_('ss_type',cx['ss_type']) if cx.has_key?('ss_type')
|
|
339
|
+
end
|
|
340
|
+
ario.cx = new_cx
|
|
341
|
+
ario
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
end
|