vagrant-unbundled 2.2.6.1 → 2.2.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +11 -9
  3. data/vagrant.gemspec +1 -1
  4. data/vendor/bundle/ruby/2.6.0/bundler/gems/vagrant-spec-abfc34474d12/vagrant-spec.gemspec +1 -1
  5. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/CHANGELOG +79 -0
  6. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/MIT-LICENSE +21 -0
  7. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/README.rdoc +109 -0
  8. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/Rakefile +78 -0
  9. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/lib/erubi/capture_end.rb +52 -0
  10. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/lib/erubi.rb +211 -0
  11. data/vendor/bundle/ruby/2.6.0/gems/erubi-1.9.0/test/test.rb +780 -0
  12. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/README.md +354 -0
  13. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/Rakefile +18 -0
  14. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/TODO +15 -0
  15. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/central_directory.rb +208 -0
  16. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/compressor.rb +9 -0
  17. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/constants.rb +63 -0
  18. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/crypto/encryption.rb +11 -0
  19. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/crypto/null_encryption.rb +43 -0
  20. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/crypto/traditional_encryption.rb +99 -0
  21. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/decompressor.rb +13 -0
  22. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/deflater.rb +34 -0
  23. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/dos_time.rb +48 -0
  24. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/entry.rb +700 -0
  25. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/entry_set.rb +86 -0
  26. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/errors.rb +18 -0
  27. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/generic.rb +43 -0
  28. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/ntfs.rb +90 -0
  29. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/old_unix.rb +44 -0
  30. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/universal_time.rb +47 -0
  31. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/unix.rb +37 -0
  32. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/zip64.rb +68 -0
  33. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field/zip64_placeholder.rb +15 -0
  34. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/extra_field.rb +101 -0
  35. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/file.rb +443 -0
  36. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/filesystem.rb +627 -0
  37. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/inflater.rb +66 -0
  38. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/input_stream.rb +173 -0
  39. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/ioextras/abstract_input_stream.rb +111 -0
  40. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/ioextras/abstract_output_stream.rb +43 -0
  41. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/ioextras.rb +36 -0
  42. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/null_compressor.rb +15 -0
  43. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/null_decompressor.rb +27 -0
  44. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/null_input_stream.rb +10 -0
  45. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/output_stream.rb +189 -0
  46. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/pass_thru_compressor.rb +23 -0
  47. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/pass_thru_decompressor.rb +40 -0
  48. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/streamable_directory.rb +15 -0
  49. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/streamable_stream.rb +56 -0
  50. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip/version.rb +3 -0
  51. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/lib/zip.rb +71 -0
  52. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/example.rb +81 -0
  53. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/example_filesystem.rb +31 -0
  54. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/example_recursive.rb +54 -0
  55. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/gtk_ruby_zip.rb +84 -0
  56. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/qtzip.rb +92 -0
  57. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/write_simple.rb +12 -0
  58. data/vendor/bundle/ruby/2.6.0/gems/rubyzip-2.0.0/samples/zipfind.rb +66 -0
  59. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/LICENSE +202 -0
  60. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/README.md +276 -0
  61. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/bin/rwinrm +90 -0
  62. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/connection.rb +84 -0
  63. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/connection_opts.rb +90 -0
  64. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/exceptions.rb +88 -0
  65. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/http/response_handler.rb +127 -0
  66. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/http/transport.rb +462 -0
  67. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/http/transport_factory.rb +64 -0
  68. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/output.rb +58 -0
  69. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/create_pipeline.xml.erb +167 -0
  70. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/fragment.rb +68 -0
  71. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/init_runspace_pool.xml.erb +224 -0
  72. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message.rb +128 -0
  73. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/base.rb +47 -0
  74. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/error_record.rb +66 -0
  75. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/pipeline_host_call.rb +30 -0
  76. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/pipeline_output.rb +48 -0
  77. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/pipeline_state.rb +38 -0
  78. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/runspacepool_host_call.rb +30 -0
  79. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/runspacepool_state.rb +37 -0
  80. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data/session_capability.rb +34 -0
  81. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_data.rb +40 -0
  82. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_defragmenter.rb +62 -0
  83. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_factory.rb +86 -0
  84. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/message_fragmenter.rb +58 -0
  85. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/powershell_output_decoder.rb +142 -0
  86. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/receive_response_reader.rb +95 -0
  87. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/session_capability.xml.erb +7 -0
  88. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/psrp/uuid.rb +39 -0
  89. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/shells/base.rb +187 -0
  90. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/shells/cmd.rb +63 -0
  91. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/shells/power_shell.rb +206 -0
  92. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/shells/retryable.rb +44 -0
  93. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/shells/shell_factory.rb +56 -0
  94. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/version.rb +5 -0
  95. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/base.rb +57 -0
  96. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/cleanup_command.rb +60 -0
  97. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/close_shell.rb +49 -0
  98. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/command.rb +100 -0
  99. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/command_output.rb +75 -0
  100. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/command_output_decoder.rb +54 -0
  101. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/configuration.rb +44 -0
  102. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/create_pipeline.rb +64 -0
  103. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/create_shell.rb +115 -0
  104. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/header.rb +213 -0
  105. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/init_runspace_pool.rb +96 -0
  106. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/iso8601_duration.rb +58 -0
  107. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/keep_alive.rb +66 -0
  108. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/receive_response_reader.rb +128 -0
  109. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/send_data.rb +66 -0
  110. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/soap.rb +49 -0
  111. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/wql_pull.rb +54 -0
  112. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/wql_query.rb +98 -0
  113. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm/wsmv/write_stdin.rb +86 -0
  114. data/vendor/bundle/ruby/2.6.0/gems/winrm-2.3.3/lib/winrm.rb +37 -0
  115. data/vendor/bundle/ruby/2.6.0/gems/winrm-elevated-1.1.2/LICENSE +202 -0
  116. data/vendor/bundle/ruby/2.6.0/gems/winrm-elevated-1.1.2/README.md +99 -0
  117. data/vendor/bundle/ruby/2.6.0/gems/winrm-elevated-1.1.2/lib/winrm/shells/elevated.rb +108 -0
  118. data/vendor/bundle/ruby/2.6.0/gems/winrm-elevated-1.1.2/lib/winrm-elevated/scripts/elevated_shell.ps1 +116 -0
  119. data/vendor/bundle/ruby/2.6.0/gems/winrm-elevated-1.1.2/lib/winrm-elevated.rb +17 -0
  120. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/LICENSE +202 -0
  121. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/README.md +82 -0
  122. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/bin/rwinrmcp +87 -0
  123. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/core/file_transporter.rb +569 -0
  124. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/core/tmp_zip.rb +178 -0
  125. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/exceptions.rb +29 -0
  126. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/file_manager.rb +158 -0
  127. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/check_files.ps1.erb +49 -0
  128. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/checksum.ps1.erb +13 -0
  129. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/create_dir.ps1.erb +6 -0
  130. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/delete.ps1.erb +6 -0
  131. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/download.ps1.erb +17 -0
  132. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/exists.ps1.erb +10 -0
  133. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/extract_files.ps1.erb +52 -0
  134. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs/scripts/scripts.rb +47 -0
  135. data/vendor/bundle/ruby/2.6.0/gems/winrm-fs-1.3.4/lib/winrm-fs.rb +29 -0
  136. data/vendor/bundle/ruby/2.6.0/specifications/erubi-1.9.0.gemspec +38 -0
  137. data/vendor/bundle/ruby/2.6.0/specifications/rubyzip-2.0.0.gemspec +45 -0
  138. data/vendor/bundle/ruby/2.6.0/specifications/winrm-2.3.3.gemspec +73 -0
  139. data/vendor/bundle/ruby/2.6.0/specifications/winrm-elevated-1.1.2.gemspec +50 -0
  140. data/vendor/bundle/ruby/2.6.0/specifications/winrm-fs-1.3.4.gemspec +58 -0
  141. data/version.txt +1 -1
  142. metadata +142 -6
@@ -0,0 +1,627 @@
1
+ require 'zip'
2
+
3
+ module Zip
4
+ # The ZipFileSystem API provides an API for accessing entries in
5
+ # a zip archive that is similar to ruby's builtin File and Dir
6
+ # classes.
7
+ #
8
+ # Requiring 'zip/filesystem' includes this module in Zip::File
9
+ # making the methods in this module available on Zip::File objects.
10
+ #
11
+ # Using this API the following example creates a new zip file
12
+ # <code>my.zip</code> containing a normal entry with the name
13
+ # <code>first.txt</code>, a directory entry named <code>mydir</code>
14
+ # and finally another normal entry named <code>second.txt</code>
15
+ #
16
+ # require 'zip/filesystem'
17
+ #
18
+ # Zip::File.open("my.zip", Zip::File::CREATE) {
19
+ # |zipfile|
20
+ # zipfile.file.open("first.txt", "w") { |f| f.puts "Hello world" }
21
+ # zipfile.dir.mkdir("mydir")
22
+ # zipfile.file.open("mydir/second.txt", "w") { |f| f.puts "Hello again" }
23
+ # }
24
+ #
25
+ # Reading is as easy as writing, as the following example shows. The
26
+ # example writes the contents of <code>first.txt</code> from zip archive
27
+ # <code>my.zip</code> to standard out.
28
+ #
29
+ # require 'zip/filesystem'
30
+ #
31
+ # Zip::File.open("my.zip") {
32
+ # |zipfile|
33
+ # puts zipfile.file.read("first.txt")
34
+ # }
35
+
36
+ module FileSystem
37
+ def initialize # :nodoc:
38
+ mappedZip = ZipFileNameMapper.new(self)
39
+ @zipFsDir = ZipFsDir.new(mappedZip)
40
+ @zipFsFile = ZipFsFile.new(mappedZip)
41
+ @zipFsDir.file = @zipFsFile
42
+ @zipFsFile.dir = @zipFsDir
43
+ end
44
+
45
+ # Returns a ZipFsDir which is much like ruby's builtin Dir (class)
46
+ # object, except it works on the Zip::File on which this method is
47
+ # invoked
48
+ def dir
49
+ @zipFsDir
50
+ end
51
+
52
+ # Returns a ZipFsFile which is much like ruby's builtin File (class)
53
+ # object, except it works on the Zip::File on which this method is
54
+ # invoked
55
+ def file
56
+ @zipFsFile
57
+ end
58
+
59
+ # Instances of this class are normally accessed via the accessor
60
+ # Zip::File::file. An instance of ZipFsFile behaves like ruby's
61
+ # builtin File (class) object, except it works on Zip::File entries.
62
+ #
63
+ # The individual methods are not documented due to their
64
+ # similarity with the methods in File
65
+ class ZipFsFile
66
+ attr_writer :dir
67
+ # protected :dir
68
+
69
+ class ZipFsStat
70
+ class << self
71
+ def delegate_to_fs_file(*methods)
72
+ methods.each do |method|
73
+ class_eval <<-end_eval, __FILE__, __LINE__ + 1
74
+ def #{method} # def file?
75
+ @zipFsFile.#{method}(@entryName) # @zipFsFile.file?(@entryName)
76
+ end # end
77
+ end_eval
78
+ end
79
+ end
80
+ end
81
+
82
+ def initialize(zipFsFile, entryName)
83
+ @zipFsFile = zipFsFile
84
+ @entryName = entryName
85
+ end
86
+
87
+ def kind_of?(t)
88
+ super || t == ::File::Stat
89
+ end
90
+
91
+ delegate_to_fs_file :file?, :directory?, :pipe?, :chardev?, :symlink?,
92
+ :socket?, :blockdev?, :readable?, :readable_real?, :writable?, :ctime,
93
+ :writable_real?, :executable?, :executable_real?, :sticky?, :owned?,
94
+ :grpowned?, :setuid?, :setgid?, :zero?, :size, :size?, :mtime, :atime
95
+
96
+ def blocks
97
+ nil
98
+ end
99
+
100
+ def get_entry
101
+ @zipFsFile.__send__(:get_entry, @entryName)
102
+ end
103
+ private :get_entry
104
+
105
+ def gid
106
+ e = get_entry
107
+ if e.extra.member? 'IUnix'
108
+ e.extra['IUnix'].gid || 0
109
+ else
110
+ 0
111
+ end
112
+ end
113
+
114
+ def uid
115
+ e = get_entry
116
+ if e.extra.member? 'IUnix'
117
+ e.extra['IUnix'].uid || 0
118
+ else
119
+ 0
120
+ end
121
+ end
122
+
123
+ def ino
124
+ 0
125
+ end
126
+
127
+ def dev
128
+ 0
129
+ end
130
+
131
+ def rdev
132
+ 0
133
+ end
134
+
135
+ def rdev_major
136
+ 0
137
+ end
138
+
139
+ def rdev_minor
140
+ 0
141
+ end
142
+
143
+ def ftype
144
+ if file?
145
+ 'file'
146
+ elsif directory?
147
+ 'directory'
148
+ else
149
+ raise StandardError, 'Unknown file type'
150
+ end
151
+ end
152
+
153
+ def nlink
154
+ 1
155
+ end
156
+
157
+ def blksize
158
+ nil
159
+ end
160
+
161
+ def mode
162
+ e = get_entry
163
+ if e.fstype == 3
164
+ e.external_file_attributes >> 16
165
+ else
166
+ 33_206 # 33206 is equivalent to -rw-rw-rw-
167
+ end
168
+ end
169
+ end
170
+
171
+ def initialize(mappedZip)
172
+ @mappedZip = mappedZip
173
+ end
174
+
175
+ def get_entry(fileName)
176
+ unless exists?(fileName)
177
+ raise Errno::ENOENT, "No such file or directory - #{fileName}"
178
+ end
179
+ @mappedZip.find_entry(fileName)
180
+ end
181
+ private :get_entry
182
+
183
+ def unix_mode_cmp(fileName, mode)
184
+ e = get_entry(fileName)
185
+ e.fstype == 3 && ((e.external_file_attributes >> 16) & mode) != 0
186
+ rescue Errno::ENOENT
187
+ false
188
+ end
189
+ private :unix_mode_cmp
190
+
191
+ def exists?(fileName)
192
+ expand_path(fileName) == '/' || !@mappedZip.find_entry(fileName).nil?
193
+ end
194
+ alias exist? exists?
195
+
196
+ # Permissions not implemented, so if the file exists it is accessible
197
+ alias owned? exists?
198
+ alias grpowned? exists?
199
+
200
+ def readable?(fileName)
201
+ unix_mode_cmp(fileName, 0o444)
202
+ end
203
+ alias readable_real? readable?
204
+
205
+ def writable?(fileName)
206
+ unix_mode_cmp(fileName, 0o222)
207
+ end
208
+ alias writable_real? writable?
209
+
210
+ def executable?(fileName)
211
+ unix_mode_cmp(fileName, 0o111)
212
+ end
213
+ alias executable_real? executable?
214
+
215
+ def setuid?(fileName)
216
+ unix_mode_cmp(fileName, 0o4000)
217
+ end
218
+
219
+ def setgid?(fileName)
220
+ unix_mode_cmp(fileName, 0o2000)
221
+ end
222
+
223
+ def sticky?(fileName)
224
+ unix_mode_cmp(fileName, 0o1000)
225
+ end
226
+
227
+ def umask(*args)
228
+ ::File.umask(*args)
229
+ end
230
+
231
+ def truncate(_fileName, _len)
232
+ raise StandardError, 'truncate not supported'
233
+ end
234
+
235
+ def directory?(fileName)
236
+ entry = @mappedZip.find_entry(fileName)
237
+ expand_path(fileName) == '/' || (!entry.nil? && entry.directory?)
238
+ end
239
+
240
+ def open(fileName, openMode = 'r', permissionInt = 0o644, &block)
241
+ openMode.delete!('b') # ignore b option
242
+ case openMode
243
+ when 'r'
244
+ @mappedZip.get_input_stream(fileName, &block)
245
+ when 'w'
246
+ @mappedZip.get_output_stream(fileName, permissionInt, &block)
247
+ else
248
+ raise StandardError, "openmode '#{openMode} not supported" unless openMode == 'r'
249
+ end
250
+ end
251
+
252
+ def new(fileName, openMode = 'r')
253
+ open(fileName, openMode)
254
+ end
255
+
256
+ def size(fileName)
257
+ @mappedZip.get_entry(fileName).size
258
+ end
259
+
260
+ # Returns nil for not found and nil for directories
261
+ def size?(fileName)
262
+ entry = @mappedZip.find_entry(fileName)
263
+ entry.nil? || entry.directory? ? nil : entry.size
264
+ end
265
+
266
+ def chown(ownerInt, groupInt, *filenames)
267
+ filenames.each do |fileName|
268
+ e = get_entry(fileName)
269
+ e.extra.create('IUnix') unless e.extra.member?('IUnix')
270
+ e.extra['IUnix'].uid = ownerInt
271
+ e.extra['IUnix'].gid = groupInt
272
+ end
273
+ filenames.size
274
+ end
275
+
276
+ def chmod(modeInt, *filenames)
277
+ filenames.each do |fileName|
278
+ e = get_entry(fileName)
279
+ e.fstype = 3 # force convertion filesystem type to unix
280
+ e.unix_perms = modeInt
281
+ e.external_file_attributes = modeInt << 16
282
+ e.dirty = true
283
+ end
284
+ filenames.size
285
+ end
286
+
287
+ def zero?(fileName)
288
+ sz = size(fileName)
289
+ sz.nil? || sz == 0
290
+ rescue Errno::ENOENT
291
+ false
292
+ end
293
+
294
+ def file?(fileName)
295
+ entry = @mappedZip.find_entry(fileName)
296
+ !entry.nil? && entry.file?
297
+ end
298
+
299
+ def dirname(fileName)
300
+ ::File.dirname(fileName)
301
+ end
302
+
303
+ def basename(fileName)
304
+ ::File.basename(fileName)
305
+ end
306
+
307
+ def split(fileName)
308
+ ::File.split(fileName)
309
+ end
310
+
311
+ def join(*fragments)
312
+ ::File.join(*fragments)
313
+ end
314
+
315
+ def utime(modifiedTime, *fileNames)
316
+ fileNames.each do |fileName|
317
+ get_entry(fileName).time = modifiedTime
318
+ end
319
+ end
320
+
321
+ def mtime(fileName)
322
+ @mappedZip.get_entry(fileName).mtime
323
+ end
324
+
325
+ def atime(fileName)
326
+ e = get_entry(fileName)
327
+ if e.extra.member? 'UniversalTime'
328
+ e.extra['UniversalTime'].atime
329
+ elsif e.extra.member? 'NTFS'
330
+ e.extra['NTFS'].atime
331
+ end
332
+ end
333
+
334
+ def ctime(fileName)
335
+ e = get_entry(fileName)
336
+ if e.extra.member? 'UniversalTime'
337
+ e.extra['UniversalTime'].ctime
338
+ elsif e.extra.member? 'NTFS'
339
+ e.extra['NTFS'].ctime
340
+ end
341
+ end
342
+
343
+ def pipe?(_filename)
344
+ false
345
+ end
346
+
347
+ def blockdev?(_filename)
348
+ false
349
+ end
350
+
351
+ def chardev?(_filename)
352
+ false
353
+ end
354
+
355
+ def symlink?(_fileName)
356
+ false
357
+ end
358
+
359
+ def socket?(_fileName)
360
+ false
361
+ end
362
+
363
+ def ftype(fileName)
364
+ @mappedZip.get_entry(fileName).directory? ? 'directory' : 'file'
365
+ end
366
+
367
+ def readlink(_fileName)
368
+ raise NotImplementedError, 'The readlink() function is not implemented'
369
+ end
370
+
371
+ def symlink(_fileName, _symlinkName)
372
+ raise NotImplementedError, 'The symlink() function is not implemented'
373
+ end
374
+
375
+ def link(_fileName, _symlinkName)
376
+ raise NotImplementedError, 'The link() function is not implemented'
377
+ end
378
+
379
+ def pipe
380
+ raise NotImplementedError, 'The pipe() function is not implemented'
381
+ end
382
+
383
+ def stat(fileName)
384
+ raise Errno::ENOENT, fileName unless exists?(fileName)
385
+ ZipFsStat.new(self, fileName)
386
+ end
387
+
388
+ alias lstat stat
389
+
390
+ def readlines(fileName)
391
+ open(fileName) { |is| is.readlines }
392
+ end
393
+
394
+ def read(fileName)
395
+ @mappedZip.read(fileName)
396
+ end
397
+
398
+ def popen(*args, &aProc)
399
+ ::File.popen(*args, &aProc)
400
+ end
401
+
402
+ def foreach(fileName, aSep = $/, &aProc)
403
+ open(fileName) { |is| is.each_line(aSep, &aProc) }
404
+ end
405
+
406
+ def delete(*args)
407
+ args.each do |fileName|
408
+ if directory?(fileName)
409
+ raise Errno::EISDIR, "Is a directory - \"#{fileName}\""
410
+ end
411
+ @mappedZip.remove(fileName)
412
+ end
413
+ end
414
+
415
+ def rename(fileToRename, newName)
416
+ @mappedZip.rename(fileToRename, newName) { true }
417
+ end
418
+
419
+ alias unlink delete
420
+
421
+ def expand_path(aPath)
422
+ @mappedZip.expand_path(aPath)
423
+ end
424
+ end
425
+
426
+ # Instances of this class are normally accessed via the accessor
427
+ # ZipFile::dir. An instance of ZipFsDir behaves like ruby's
428
+ # builtin Dir (class) object, except it works on ZipFile entries.
429
+ #
430
+ # The individual methods are not documented due to their
431
+ # similarity with the methods in Dir
432
+ class ZipFsDir
433
+ def initialize(mappedZip)
434
+ @mappedZip = mappedZip
435
+ end
436
+
437
+ attr_writer :file
438
+
439
+ def new(aDirectoryName)
440
+ ZipFsDirIterator.new(entries(aDirectoryName))
441
+ end
442
+
443
+ def open(aDirectoryName)
444
+ dirIt = new(aDirectoryName)
445
+ if block_given?
446
+ begin
447
+ yield(dirIt)
448
+ return nil
449
+ ensure
450
+ dirIt.close
451
+ end
452
+ end
453
+ dirIt
454
+ end
455
+
456
+ def pwd
457
+ @mappedZip.pwd
458
+ end
459
+ alias getwd pwd
460
+
461
+ def chdir(aDirectoryName)
462
+ unless @file.stat(aDirectoryName).directory?
463
+ raise Errno::EINVAL, "Invalid argument - #{aDirectoryName}"
464
+ end
465
+ @mappedZip.pwd = @file.expand_path(aDirectoryName)
466
+ end
467
+
468
+ def entries(aDirectoryName)
469
+ entries = []
470
+ foreach(aDirectoryName) { |e| entries << e }
471
+ entries
472
+ end
473
+
474
+ def glob(*args, &block)
475
+ @mappedZip.glob(*args, &block)
476
+ end
477
+
478
+ def foreach(aDirectoryName)
479
+ unless @file.stat(aDirectoryName).directory?
480
+ raise Errno::ENOTDIR, aDirectoryName
481
+ end
482
+ path = @file.expand_path(aDirectoryName)
483
+ path << '/' unless path.end_with?('/')
484
+ path = Regexp.escape(path)
485
+ subDirEntriesRegex = Regexp.new("^#{path}([^/]+)$")
486
+ @mappedZip.each do |fileName|
487
+ match = subDirEntriesRegex.match(fileName)
488
+ yield(match[1]) unless match.nil?
489
+ end
490
+ end
491
+
492
+ def delete(entryName)
493
+ unless @file.stat(entryName).directory?
494
+ raise Errno::EINVAL, "Invalid argument - #{entryName}"
495
+ end
496
+ @mappedZip.remove(entryName)
497
+ end
498
+ alias rmdir delete
499
+ alias unlink delete
500
+
501
+ def mkdir(entryName, permissionInt = 0o755)
502
+ @mappedZip.mkdir(entryName, permissionInt)
503
+ end
504
+
505
+ def chroot(*_args)
506
+ raise NotImplementedError, 'The chroot() function is not implemented'
507
+ end
508
+ end
509
+
510
+ class ZipFsDirIterator # :nodoc:all
511
+ include Enumerable
512
+
513
+ def initialize(arrayOfFileNames)
514
+ @fileNames = arrayOfFileNames
515
+ @index = 0
516
+ end
517
+
518
+ def close
519
+ @fileNames = nil
520
+ end
521
+
522
+ def each(&aProc)
523
+ raise IOError, 'closed directory' if @fileNames.nil?
524
+ @fileNames.each(&aProc)
525
+ end
526
+
527
+ def read
528
+ raise IOError, 'closed directory' if @fileNames.nil?
529
+ @fileNames[(@index += 1) - 1]
530
+ end
531
+
532
+ def rewind
533
+ raise IOError, 'closed directory' if @fileNames.nil?
534
+ @index = 0
535
+ end
536
+
537
+ def seek(anIntegerPosition)
538
+ raise IOError, 'closed directory' if @fileNames.nil?
539
+ @index = anIntegerPosition
540
+ end
541
+
542
+ def tell
543
+ raise IOError, 'closed directory' if @fileNames.nil?
544
+ @index
545
+ end
546
+ end
547
+
548
+ # All access to Zip::File from ZipFsFile and ZipFsDir goes through a
549
+ # ZipFileNameMapper, which has one responsibility: ensure
550
+ class ZipFileNameMapper # :nodoc:all
551
+ include Enumerable
552
+
553
+ def initialize(zipFile)
554
+ @zipFile = zipFile
555
+ @pwd = '/'
556
+ end
557
+
558
+ attr_accessor :pwd
559
+
560
+ def find_entry(fileName)
561
+ @zipFile.find_entry(expand_to_entry(fileName))
562
+ end
563
+
564
+ def get_entry(fileName)
565
+ @zipFile.get_entry(expand_to_entry(fileName))
566
+ end
567
+
568
+ def get_input_stream(fileName, &aProc)
569
+ @zipFile.get_input_stream(expand_to_entry(fileName), &aProc)
570
+ end
571
+
572
+ def get_output_stream(fileName, permissionInt = nil, &aProc)
573
+ @zipFile.get_output_stream(expand_to_entry(fileName), permissionInt, &aProc)
574
+ end
575
+
576
+ def glob(pattern, *flags, &block)
577
+ @zipFile.glob(expand_to_entry(pattern), *flags, &block)
578
+ end
579
+
580
+ def read(fileName)
581
+ @zipFile.read(expand_to_entry(fileName))
582
+ end
583
+
584
+ def remove(fileName)
585
+ @zipFile.remove(expand_to_entry(fileName))
586
+ end
587
+
588
+ def rename(fileName, newName, &continueOnExistsProc)
589
+ @zipFile.rename(expand_to_entry(fileName), expand_to_entry(newName),
590
+ &continueOnExistsProc)
591
+ end
592
+
593
+ def mkdir(fileName, permissionInt = 0o755)
594
+ @zipFile.mkdir(expand_to_entry(fileName), permissionInt)
595
+ end
596
+
597
+ # Turns entries into strings and adds leading /
598
+ # and removes trailing slash on directories
599
+ def each
600
+ @zipFile.each do |e|
601
+ yield('/' + e.to_s.chomp('/'))
602
+ end
603
+ end
604
+
605
+ def expand_path(aPath)
606
+ expanded = aPath.start_with?('/') ? aPath : ::File.join(@pwd, aPath)
607
+ expanded.gsub!(/\/\.(\/|$)/, '')
608
+ expanded.gsub!(/[^\/]+\/\.\.(\/|$)/, '')
609
+ expanded.empty? ? '/' : expanded
610
+ end
611
+
612
+ private
613
+
614
+ def expand_to_entry(aPath)
615
+ expand_path(aPath)[1..-1]
616
+ end
617
+ end
618
+ end
619
+
620
+ class File
621
+ include FileSystem
622
+ end
623
+ end
624
+
625
+ # Copyright (C) 2002, 2003 Thomas Sondergaard
626
+ # rubyzip is free software; you can redistribute it and/or
627
+ # modify it under the terms of the ruby license.
@@ -0,0 +1,66 @@
1
+ module Zip
2
+ class Inflater < Decompressor #:nodoc:all
3
+ def initialize(input_stream, decrypter = NullDecrypter.new)
4
+ super(input_stream)
5
+ @zlib_inflater = ::Zlib::Inflate.new(-Zlib::MAX_WBITS)
6
+ @output_buffer = ''.dup
7
+ @has_returned_empty_string = false
8
+ @decrypter = decrypter
9
+ end
10
+
11
+ def sysread(number_of_bytes = nil, buf = '')
12
+ readEverything = number_of_bytes.nil?
13
+ while readEverything || @output_buffer.bytesize < number_of_bytes
14
+ break if internal_input_finished?
15
+ @output_buffer << internal_produce_input(buf)
16
+ end
17
+ return value_when_finished if @output_buffer.bytesize == 0 && input_finished?
18
+ end_index = number_of_bytes.nil? ? @output_buffer.bytesize : number_of_bytes
19
+ @output_buffer.slice!(0...end_index)
20
+ end
21
+
22
+ def produce_input
23
+ if @output_buffer.empty?
24
+ internal_produce_input
25
+ else
26
+ @output_buffer.slice!(0...(@output_buffer.length))
27
+ end
28
+ end
29
+
30
+ # to be used with produce_input, not read (as read may still have more data cached)
31
+ # is data cached anywhere other than @outputBuffer? the comment above may be wrong
32
+ def input_finished?
33
+ @output_buffer.empty? && internal_input_finished?
34
+ end
35
+
36
+ alias :eof input_finished?
37
+ alias :eof? input_finished?
38
+
39
+ private
40
+
41
+ def internal_produce_input(buf = '')
42
+ retried = 0
43
+ begin
44
+ @zlib_inflater.inflate(@decrypter.decrypt(@input_stream.read(Decompressor::CHUNK_SIZE, buf)))
45
+ rescue Zlib::BufError
46
+ raise if retried >= 5 # how many times should we retry?
47
+ retried += 1
48
+ retry
49
+ end
50
+ end
51
+
52
+ def internal_input_finished?
53
+ @zlib_inflater.finished?
54
+ end
55
+
56
+ def value_when_finished # mimic behaviour of ruby File object.
57
+ return if @has_returned_empty_string
58
+ @has_returned_empty_string = true
59
+ ''
60
+ end
61
+ end
62
+ end
63
+
64
+ # Copyright (C) 2002, 2003 Thomas Sondergaard
65
+ # rubyzip is free software; you can redistribute it and/or
66
+ # modify it under the terms of the ruby license.