rufus-lua-win 5.1.5
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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +1 -0
- data/lib/rufus/lua/win.rb +18 -0
- data/lib/rufus/lua/win/version.rb +7 -0
- data/rufus-lua-win.gemspec +23 -0
- data/vendor/lua/bin/liblua.dll +0 -0
- data/vendor/lua/lib/lua/LuaXml.lua +119 -0
- data/vendor/lua/lib/lua/alien.lua +250 -0
- data/vendor/lua/lib/lua/alien/core.dll +0 -0
- data/vendor/lua/lib/lua/alien/struct.dll +0 -0
- data/vendor/lua/lib/lua/base.lua +536 -0
- data/vendor/lua/lib/lua/bin.lua +20 -0
- data/vendor/lua/lib/lua/bit.dll +0 -0
- data/vendor/lua/lib/lua/cdlua.dll +0 -0
- data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
- data/vendor/lua/lib/lua/cdluagl.dll +0 -0
- data/vendor/lua/lib/lua/cdluaim.dll +0 -0
- data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
- data/vendor/lua/lib/lua/copas.lua +543 -0
- data/vendor/lua/lib/lua/coxpcall.lua +57 -0
- data/vendor/lua/lib/lua/date.lua +745 -0
- data/vendor/lua/lib/lua/debug_ext.lua +84 -0
- data/vendor/lua/lib/lua/debug_init.lua +2 -0
- data/vendor/lua/lib/lua/des56.dll +0 -0
- data/vendor/lua/lib/lua/dist/config.lua +109 -0
- data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
- data/vendor/lua/lib/lua/dist/depends.lua +601 -0
- data/vendor/lua/lib/lua/dist/git.lua +307 -0
- data/vendor/lua/lib/lua/dist/init.lua +278 -0
- data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
- data/vendor/lua/lib/lua/dist/package.lua +583 -0
- data/vendor/lua/lib/lua/dist/sys.lua +367 -0
- data/vendor/lua/lib/lua/dist/utils.lua +130 -0
- data/vendor/lua/lib/lua/ex.dll +0 -0
- data/vendor/lua/lib/lua/fstable.lua +116 -0
- data/vendor/lua/lib/lua/getopt.lua +273 -0
- data/vendor/lua/lib/lua/git.lua +5 -0
- data/vendor/lua/lib/lua/git/core.dll +0 -0
- data/vendor/lua/lib/lua/git/objects.lua +121 -0
- data/vendor/lua/lib/lua/git/pack.lua +316 -0
- data/vendor/lua/lib/lua/git/protocol.lua +188 -0
- data/vendor/lua/lib/lua/git/repo.lua +283 -0
- data/vendor/lua/lib/lua/git/util.lua +233 -0
- data/vendor/lua/lib/lua/gzio.dll +0 -0
- data/vendor/lua/lib/lua/gzip.lua +81 -0
- data/vendor/lua/lib/lua/iconv.dll +0 -0
- data/vendor/lua/lib/lua/imlua.dll +0 -0
- data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
- data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
- data/vendor/lua/lib/lua/io_ext.lua +115 -0
- data/vendor/lua/lib/lua/iuplua.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
- data/vendor/lua/lib/lua/iupluacd.dll +0 -0
- data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
- data/vendor/lua/lib/lua/iupluagl.dll +0 -0
- data/vendor/lua/lib/lua/iupluaim.dll +0 -0
- data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
- data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
- data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
- data/vendor/lua/lib/lua/lanes.lua +591 -0
- data/vendor/lua/lib/lua/lanes/core.dll +0 -0
- data/vendor/lua/lib/lua/lcs.lua +55 -0
- data/vendor/lua/lib/lua/lemock.lua +659 -0
- data/vendor/lua/lib/lua/lfs.dll +0 -0
- data/vendor/lua/lib/lua/list.lua +375 -0
- data/vendor/lua/lib/lua/logging.lua +189 -0
- data/vendor/lua/lib/lua/logging/console.lua +22 -0
- data/vendor/lua/lib/lua/logging/email.lua +44 -0
- data/vendor/lua/lib/lua/logging/file.lua +55 -0
- data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
- data/vendor/lua/lib/lua/logging/socket.lua +35 -0
- data/vendor/lua/lib/lua/logging/sql.lua +64 -0
- data/vendor/lua/lib/lua/loop/base.lua +68 -0
- data/vendor/lua/lib/lua/loop/cached.lua +312 -0
- data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
- data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
- data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
- data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
- data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
- data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
- data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
- data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
- data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
- data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
- data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
- data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
- data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
- data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
- data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
- data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
- data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
- data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
- data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
- data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
- data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
- data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
- data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
- data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
- data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
- data/vendor/lua/lib/lua/loop/simple.lua +75 -0
- data/vendor/lua/lib/lua/loop/table.lua +71 -0
- data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
- data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
- data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
- data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
- data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
- data/vendor/lua/lib/lua/lpeg.dll +0 -0
- data/vendor/lua/lib/lua/ltn12.lua +292 -0
- data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
- data/vendor/lua/lib/lua/luacurl.dll +0 -0
- data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
- data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
- data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
- data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
- data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
- data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
- data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
- data/vendor/lua/lib/lua/luagl.dll +0 -0
- data/vendor/lua/lib/lua/luaglu.dll +0 -0
- data/vendor/lua/lib/lua/luaidl.lua +113 -0
- data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
- data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
- data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
- data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
- data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
- data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
- data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
- data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
- data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
- data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
- data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
- data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
- data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
- data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
- data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
- data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
- data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
- data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
- data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
- data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
- data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
- data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
- data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
- data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
- data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
- data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
- data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
- data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
- data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
- data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
- data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
- data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
- data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
- data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
- data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
- data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
- data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
- data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
- data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
- data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
- data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
- data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
- data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
- data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
- data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
- data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
- data/vendor/lua/lib/lua/luars232.dll +0 -0
- data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
- data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
- data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
- data/vendor/lua/lib/lua/luaunit.lua +601 -0
- data/vendor/lua/lib/lua/lxp.dll +0 -0
- data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
- data/vendor/lua/lib/lua/math_ext.lua +27 -0
- data/vendor/lua/lib/lua/mbox.lua +53 -0
- data/vendor/lua/lib/lua/md5.lua +19 -0
- data/vendor/lua/lib/lua/md5/core.dll +0 -0
- data/vendor/lua/lib/lua/metalua.lua +0 -0
- data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
- data/vendor/lua/lib/lua/metalua/base.lua +104 -0
- data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
- data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
- data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
- data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
- data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
- data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
- data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
- data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
- data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
- data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
- data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
- data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
- data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
- data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
- data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
- data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
- data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
- data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
- data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
- data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
- data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
- data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
- data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
- data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
- data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
- data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
- data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
- data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
- data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
- data/vendor/lua/lib/lua/mime.lua +87 -0
- data/vendor/lua/lib/lua/mime/core.dll +0 -0
- data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
- data/vendor/lua/lib/lua/modules.lua +16 -0
- data/vendor/lua/lib/lua/object.lua +56 -0
- data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
- data/vendor/lua/lib/lua/oil/arch.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
- data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
- data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
- data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
- data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
- data/vendor/lua/lib/lua/oil/assert.lua +87 -0
- data/vendor/lua/lib/lua/oil/builder.lua +45 -0
- data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
- data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
- data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
- data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/compat.lua +846 -0
- data/vendor/lua/lib/lua/oil/component.lua +1 -0
- data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
- data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
- data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
- data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
- data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
- data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
- data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
- data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
- data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
- data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
- data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
- data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
- data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
- data/vendor/lua/lib/lua/oil/oo.lua +1 -0
- data/vendor/lua/lib/lua/oil/port.lua +1 -0
- data/vendor/lua/lib/lua/oil/properties.lua +57 -0
- data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
- data/vendor/lua/lib/lua/package_ext.lua +15 -0
- data/vendor/lua/lib/lua/parser.lua +268 -0
- data/vendor/lua/lib/lua/pl/Date.lua +555 -0
- data/vendor/lua/lib/lua/pl/List.lua +613 -0
- data/vendor/lua/lib/lua/pl/Map.lua +113 -0
- data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
- data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
- data/vendor/lua/lib/lua/pl/Set.lua +153 -0
- data/vendor/lua/lib/lua/pl/app.lua +165 -0
- data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
- data/vendor/lua/lib/lua/pl/class.lua +180 -0
- data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
- data/vendor/lua/lib/lua/pl/config.lua +176 -0
- data/vendor/lua/lib/lua/pl/data.lua +606 -0
- data/vendor/lua/lib/lua/pl/dir.lua +475 -0
- data/vendor/lua/lib/lua/pl/file.lua +70 -0
- data/vendor/lua/lib/lua/pl/func.lua +376 -0
- data/vendor/lua/lib/lua/pl/init.lua +68 -0
- data/vendor/lua/lib/lua/pl/input.lua +173 -0
- data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
- data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
- data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
- data/vendor/lua/lib/lua/pl/operator.lua +201 -0
- data/vendor/lua/lib/lua/pl/path.lua +398 -0
- data/vendor/lua/lib/lua/pl/permute.lua +63 -0
- data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
- data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
- data/vendor/lua/lib/lua/pl/seq.lua +551 -0
- data/vendor/lua/lib/lua/pl/sip.lua +344 -0
- data/vendor/lua/lib/lua/pl/strict.lua +70 -0
- data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
- data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
- data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
- data/vendor/lua/lib/lua/pl/template.lua +103 -0
- data/vendor/lua/lib/lua/pl/test.lua +135 -0
- data/vendor/lua/lib/lua/pl/text.lua +243 -0
- data/vendor/lua/lib/lua/pl/utils.lua +550 -0
- data/vendor/lua/lib/lua/pl/xml.lua +689 -0
- data/vendor/lua/lib/lua/profiler.dll +0 -0
- data/vendor/lua/lib/lua/re.lua +248 -0
- data/vendor/lua/lib/lua/rex_onig.dll +0 -0
- data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
- data/vendor/lua/lib/lua/rex_posix.dll +0 -0
- data/vendor/lua/lib/lua/rings.dll +0 -0
- data/vendor/lua/lib/lua/serialize.lua +193 -0
- data/vendor/lua/lib/lua/set.lua +149 -0
- data/vendor/lua/lib/lua/socket.lua +133 -0
- data/vendor/lua/lib/lua/socket/core.dll +0 -0
- data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
- data/vendor/lua/lib/lua/socket/http.lua +350 -0
- data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
- data/vendor/lua/lib/lua/socket/tp.lua +123 -0
- data/vendor/lua/lib/lua/socket/url.lua +297 -0
- data/vendor/lua/lib/lua/ssl.dll +0 -0
- data/vendor/lua/lib/lua/ssl.lua +93 -0
- data/vendor/lua/lib/lua/ssl/https.lua +138 -0
- data/vendor/lua/lib/lua/stable.lua +28 -0
- data/vendor/lua/lib/lua/std.lua +16 -0
- data/vendor/lua/lib/lua/strbuf.lua +32 -0
- data/vendor/lua/lib/lua/strict.lua +45 -0
- data/vendor/lua/lib/lua/string_ext.lua +274 -0
- data/vendor/lua/lib/lua/table_ext.lua +117 -0
- data/vendor/lua/lib/lua/tar.lua +262 -0
- data/vendor/lua/lib/lua/task.dll +0 -0
- data/vendor/lua/lib/lua/tree.lua +81 -0
- data/vendor/lua/lib/lua/unicode.dll +0 -0
- data/vendor/lua/lib/lua/verbose_require.lua +11 -0
- data/vendor/lua/lib/lua/vstruct.lua +86 -0
- data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
- data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
- data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
- data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
- data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
- data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
- data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
- data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
- data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
- data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
- data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
- data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
- data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
- data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
- data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
- data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
- data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
- data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
- data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
- data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
- data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
- data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
- data/vendor/lua/lib/lua/wx.dll +0 -0
- data/vendor/lua/lib/lua/xml.lua +75 -0
- data/vendor/lua/lib/lua/zip.dll +0 -0
- data/vendor/lua/lib/lua/zlib.dll +0 -0
- metadata +529 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
-- Working with manifest and dist.info files
|
|
2
|
+
|
|
3
|
+
module ("dist.manifest", package.seeall)
|
|
4
|
+
|
|
5
|
+
local cfg = require "dist.config"
|
|
6
|
+
local git = require "dist.git"
|
|
7
|
+
local sys = require "dist.sys"
|
|
8
|
+
local utils = require "dist.utils"
|
|
9
|
+
|
|
10
|
+
-- Return the manifest table from 'manifest_file'. If the manifest is in cache,
|
|
11
|
+
-- then the cached version is used. You can set the cache timeout value in
|
|
12
|
+
-- 'config.cache_timeout' variable.
|
|
13
|
+
-- If optional 'force_no_cache' parameter is true, then the cache is not used.
|
|
14
|
+
function get_manifest(manifest_file, force_no_cache)
|
|
15
|
+
manifest_file = manifest_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
|
|
16
|
+
force_no_cache = force_no_cache or false
|
|
17
|
+
|
|
18
|
+
assert(type(manifest_file) == "string", "manifest.get_manifest: Argument 'manifest_file' is not a string.")
|
|
19
|
+
assert(type(force_no_cache) == "boolean", "manifest.get_manifest: Argument 'force_no_cache' is not a boolean.")
|
|
20
|
+
manifest_file = sys.abs_path(manifest_file)
|
|
21
|
+
|
|
22
|
+
-- download new manifest to the cache if not present or cache not used or cache expired
|
|
23
|
+
if not sys.exists(manifest_file) or force_no_cache or not cfg.cache or utils.cache_timeout_expired(cfg.cache_timeout, manifest_file) then
|
|
24
|
+
local manifest_dest = sys.parent_dir(manifest_file) or sys.current_dir()
|
|
25
|
+
local ok, err = download_manifest(manifest_dest, cfg.repos)
|
|
26
|
+
if not ok then return nil, "Error when downloading manifest: " .. err end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
-- load manifest from cache
|
|
30
|
+
local manifest, err = load_manifest(manifest_file)
|
|
31
|
+
if not manifest then return nil, "Error when loading manifest: " .. err end
|
|
32
|
+
|
|
33
|
+
return manifest
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
-- Download manifest from the table of git 'repository_urls' to 'dest_dir' and return true on success
|
|
37
|
+
-- and nil and error message on error.
|
|
38
|
+
function download_manifest(dest_dir, repository_urls)
|
|
39
|
+
dest_dir = dest_dir or sys.make_path(cfg.root_dir, cfg.cache_dir)
|
|
40
|
+
repository_urls = repository_urls or cfg.repos
|
|
41
|
+
if type(repository_urls) == "string" then repository_urls = {repository_urls} end
|
|
42
|
+
|
|
43
|
+
assert(type(dest_dir) == "string", "manifest.download_manifest: Argument 'dest_dir' is not a string.")
|
|
44
|
+
assert(type(repository_urls) == "table", "manifest.download_manifest: Argument 'repository_urls' is not a table or string.")
|
|
45
|
+
dest_dir = sys.abs_path(dest_dir)
|
|
46
|
+
|
|
47
|
+
-- define used files and directories
|
|
48
|
+
local manifest_filename = sys.extract_name(cfg.manifest_file)
|
|
49
|
+
local manifest_file = sys.make_path(dest_dir, manifest_filename)
|
|
50
|
+
local temp_dir = sys.make_path(cfg.root_dir, cfg.temp_dir)
|
|
51
|
+
|
|
52
|
+
-- ensure that destination directory exists
|
|
53
|
+
local ok, err = sys.make_dir(dest_dir)
|
|
54
|
+
if not ok then return nil, err end
|
|
55
|
+
|
|
56
|
+
-- retrieve manifests from repositories and collect them into one manifest table
|
|
57
|
+
local manifest = {}
|
|
58
|
+
|
|
59
|
+
if #repository_urls == 0 then return nil, "No repository url specified." end
|
|
60
|
+
|
|
61
|
+
print("Downloading repository information...")
|
|
62
|
+
for k, repo in pairs(repository_urls) do
|
|
63
|
+
local clone_dir = sys.make_path(temp_dir, "repository_" .. tostring(k))
|
|
64
|
+
|
|
65
|
+
-- clone the repo and add its '.gitmodules' file to the manifest table
|
|
66
|
+
|
|
67
|
+
ok, err = git.create_repo(clone_dir)
|
|
68
|
+
|
|
69
|
+
local sha
|
|
70
|
+
if ok then sha, err = git.fetch_branch(clone_dir, repo, "master") end
|
|
71
|
+
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
|
72
|
+
|
|
73
|
+
if not (ok and sha) then
|
|
74
|
+
if not cfg.debug then sys.delete(clone_dir) end
|
|
75
|
+
return nil, "Error when downloading the manifest from repository with url: '" .. repo .. "': " .. err
|
|
76
|
+
else
|
|
77
|
+
for _, pkg in pairs(load_manifest(sys.make_path(clone_dir, ".gitmodules"))) do
|
|
78
|
+
table.insert(manifest, pkg)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
if not cfg.debug then sys.delete(clone_dir) end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
-- save the new manifest table to the file
|
|
85
|
+
ok, err = save_manifest(manifest, manifest_file)
|
|
86
|
+
if not ok then return nil, err end
|
|
87
|
+
|
|
88
|
+
return true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
-- Load and return manifest table from the manifest file.
|
|
92
|
+
-- If manifest file not present, return nil.
|
|
93
|
+
function load_manifest(manifest_file)
|
|
94
|
+
manifest_file = manifest_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
|
|
95
|
+
assert(type(manifest_file) == "string", "manifest.load_manifest: Argument 'manifest_file' is not a string.")
|
|
96
|
+
manifest_file = sys.abs_path(manifest_file)
|
|
97
|
+
|
|
98
|
+
if sys.exists(manifest_file) then
|
|
99
|
+
-- load the manifest file
|
|
100
|
+
local file, err = io.open(manifest_file, "r")
|
|
101
|
+
if not file then return nil, "Error when opening the manifest file '" .. manifest_file .. "':" .. err end
|
|
102
|
+
|
|
103
|
+
local mf_text = file:read("*a")
|
|
104
|
+
file:close()
|
|
105
|
+
if not mf_text then return nil, "Error when reading the manifest file '" .. manifest_file .. "':" .. err end
|
|
106
|
+
|
|
107
|
+
manifest = {}
|
|
108
|
+
for url in mf_text:gmatch("git://%S+.git") do
|
|
109
|
+
pkg = {name = url:match("git:/.+/.+/(.*).git$"), version = "scm", path = url}
|
|
110
|
+
table.insert(manifest, pkg)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
return manifest
|
|
114
|
+
else
|
|
115
|
+
return nil, "Error when loading the manifest: file '" .. manifest_file .. "' doesn't exist."
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
-- Save manifest table to the 'file'
|
|
120
|
+
function save_manifest(manifest_table, file)
|
|
121
|
+
assert(type(manifest_table) == "table", "manifest.save_distinfo: Argument 'manifest_table' is not a table.")
|
|
122
|
+
assert(type(file) == "string", "manifest.save_distinfo: Argument 'file' is not a string.")
|
|
123
|
+
file = sys.abs_path(file)
|
|
124
|
+
|
|
125
|
+
-- Print table 'tbl' to io stream 'file'.
|
|
126
|
+
local function print_table(file, tbl, in_nested_table)
|
|
127
|
+
for k, v in pairs(tbl) do
|
|
128
|
+
-- print key
|
|
129
|
+
if in_nested_table then file:write("\t\t") end
|
|
130
|
+
if type(k) ~= "number" then
|
|
131
|
+
file:write("['" .. k .. "']" .. " = ")
|
|
132
|
+
end
|
|
133
|
+
-- print value
|
|
134
|
+
if type(v) == "table" then
|
|
135
|
+
file:write("{\n")
|
|
136
|
+
print_table(file, v, true)
|
|
137
|
+
if in_nested_table then file:write("\t") end
|
|
138
|
+
file:write("\t}")
|
|
139
|
+
else
|
|
140
|
+
if in_nested_table then file:write("\t") end
|
|
141
|
+
if type(v) == "string" then
|
|
142
|
+
file:write('[[' .. v .. ']]')
|
|
143
|
+
else
|
|
144
|
+
file:write(v)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
file:write(",\n")
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
local manifest_file = io.open(file, "w")
|
|
152
|
+
if not manifest_file then return nil, "Error when saving manifest: cannot open the file '" .. file .. "'." end
|
|
153
|
+
|
|
154
|
+
manifest_file:write('return {\n')
|
|
155
|
+
print_table(manifest_file, manifest_table)
|
|
156
|
+
manifest_file:write('},\ntrue')
|
|
157
|
+
manifest_file:close()
|
|
158
|
+
|
|
159
|
+
return true
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
-- Load and return package info table from the distinfo_file file.
|
|
163
|
+
-- If file not present, return nil.
|
|
164
|
+
function load_distinfo(distinfo_file)
|
|
165
|
+
assert(type(distinfo_file) == "string", "manifest.load_distinfo: Argument 'distinfo_file' is not a string.")
|
|
166
|
+
distinfo_file = sys.abs_path(distinfo_file)
|
|
167
|
+
|
|
168
|
+
if not sys.exists(distinfo_file) then
|
|
169
|
+
return nil, "Error when loading the package info: file '" .. distinfo_file .. "' doesn't exist."
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
-- load the distinfo file
|
|
173
|
+
local distinfo, err = loadfile(distinfo_file)
|
|
174
|
+
if not distinfo then return nil, "Error when loading package info:" .. err end
|
|
175
|
+
|
|
176
|
+
-- set clear environment for the distinfo file execution and collect values into it
|
|
177
|
+
local distinfo_env = {}
|
|
178
|
+
setfenv(distinfo, distinfo_env)
|
|
179
|
+
distinfo()
|
|
180
|
+
|
|
181
|
+
return distinfo_env
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
-- Save distinfo table to the 'file'
|
|
185
|
+
function save_distinfo(distinfo_table, file)
|
|
186
|
+
assert(type(distinfo_table) == "table", "manifest.save_distinfo: Argument 'distinfo_table' is not a table.")
|
|
187
|
+
assert(type(file) == "string", "manifest.save_distinfo: Argument 'file' is not a string.")
|
|
188
|
+
file = sys.abs_path(file)
|
|
189
|
+
|
|
190
|
+
-- Print table 'tbl' to io stream 'file'.
|
|
191
|
+
local function print_table(file, tbl, in_nested_table)
|
|
192
|
+
for k, v in pairs(tbl) do
|
|
193
|
+
-- print key
|
|
194
|
+
if type(k) ~= "number" then
|
|
195
|
+
file:write(k .. " = ")
|
|
196
|
+
end
|
|
197
|
+
-- print value
|
|
198
|
+
if type(v) == "table" then
|
|
199
|
+
file:write("{\n")
|
|
200
|
+
print_table(file, v, true)
|
|
201
|
+
file:write("}\n")
|
|
202
|
+
elseif type(v) == "string" then
|
|
203
|
+
if in_nested_table then
|
|
204
|
+
file:write('[[' .. v .. ']]')
|
|
205
|
+
else
|
|
206
|
+
file:write('"' .. v .. '"')
|
|
207
|
+
end
|
|
208
|
+
else
|
|
209
|
+
file:write(v)
|
|
210
|
+
end
|
|
211
|
+
if in_nested_table then
|
|
212
|
+
file:write(",")
|
|
213
|
+
end
|
|
214
|
+
file:write("\n")
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
local distinfo_file = io.open(file, "w")
|
|
219
|
+
if not distinfo_file then return nil, "Error when saving dist-info table: cannot open the file '" .. file .. "'." end
|
|
220
|
+
|
|
221
|
+
print_table(distinfo_file, distinfo_table)
|
|
222
|
+
distinfo_file:close()
|
|
223
|
+
|
|
224
|
+
return true
|
|
225
|
+
end
|
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
-- Package functions
|
|
2
|
+
|
|
3
|
+
module ("dist.package", package.seeall)
|
|
4
|
+
|
|
5
|
+
local cfg = require "dist.config"
|
|
6
|
+
local git = require "dist.git"
|
|
7
|
+
local sys = require "dist.sys"
|
|
8
|
+
local mf = require "dist.manifest"
|
|
9
|
+
local utils = require "dist.utils"
|
|
10
|
+
local depends = require "dist.depends"
|
|
11
|
+
|
|
12
|
+
-- Remove package from 'pkg_distinfo_dir' of 'deploy_dir'.
|
|
13
|
+
function remove_pkg(pkg_distinfo_dir, deploy_dir)
|
|
14
|
+
deploy_dir = deploy_dir or cfg.root_dir
|
|
15
|
+
assert(type(pkg_distinfo_dir) == "string", "package.remove_pkg: Argument 'pkg_distinfo_dir' is not a string.")
|
|
16
|
+
assert(type(deploy_dir) == "string", "package.remove_pkg: Argument 'deploy_dir' is not a string.")
|
|
17
|
+
deploy_dir = sys.abs_path(deploy_dir)
|
|
18
|
+
|
|
19
|
+
local abs_pkg_distinfo_dir = sys.make_path(deploy_dir, pkg_distinfo_dir)
|
|
20
|
+
|
|
21
|
+
-- check for 'dist.info'
|
|
22
|
+
local info, err = mf.load_distinfo(sys.make_path(abs_pkg_distinfo_dir, "dist.info"))
|
|
23
|
+
if not info then return nil, "Error removing package from '" .. pkg_distinfo_dir .. "' - it doesn't contain valid 'dist.info' file." end
|
|
24
|
+
if not info.files then return nil, "File '" .. sys.make_path(pkg_distinfo_dir, "dist.info") .."' doesn't contain list of installed files." end
|
|
25
|
+
|
|
26
|
+
-- remove files installed as components of this package
|
|
27
|
+
for _, component in ipairs(cfg.components) do
|
|
28
|
+
if info.files[component] then
|
|
29
|
+
for i = #info.files[component], 1, -1 do
|
|
30
|
+
local f = info.files[component][i]
|
|
31
|
+
f = sys.make_path(deploy_dir,f)
|
|
32
|
+
if sys.is_file(f) then
|
|
33
|
+
sys.delete(f)
|
|
34
|
+
elseif sys.is_dir(f) then
|
|
35
|
+
local dir_files, err = sys.get_file_list(f)
|
|
36
|
+
if not dir_files then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "': " .. err end
|
|
37
|
+
if #dir_files == 0 then sys.delete(f) end
|
|
38
|
+
end
|
|
39
|
+
-- delete also all parent directories if empty
|
|
40
|
+
local parents = sys.parents_up_to(f, deploy_dir)
|
|
41
|
+
for _, parent in ipairs(parents) do
|
|
42
|
+
if sys.is_dir(parent) then
|
|
43
|
+
local dir_files, err = sys.get_file_list(parent)
|
|
44
|
+
if not dir_files then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "': " .. err end
|
|
45
|
+
if #dir_files == 0 then
|
|
46
|
+
sys.delete(parent)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
-- remove removed components also from 'dist.info'
|
|
55
|
+
for _, component in ipairs(cfg.components) do
|
|
56
|
+
info.files[component] = nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
-- delete the package information from deploy_dir
|
|
60
|
+
local ok = sys.delete(abs_pkg_distinfo_dir)
|
|
61
|
+
if not ok then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "'." end
|
|
62
|
+
|
|
63
|
+
-- if the package was not completely removed (e.g. some components remain),
|
|
64
|
+
-- save the new version of its 'dist.info'
|
|
65
|
+
local comp_num = 0
|
|
66
|
+
for _, _ in pairs(info.files) do comp_num = comp_num + 1 end
|
|
67
|
+
if comp_num ~= 0 then
|
|
68
|
+
sys.make_dir(abs_pkg_distinfo_dir)
|
|
69
|
+
local ok, err = mf.save_distinfo(info, sys.make_path(abs_pkg_distinfo_dir, "dist.info"))
|
|
70
|
+
if not ok then return nil, "Error resaving the 'dist.info': " .. err end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
return ok
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
-- Install package from 'pkg_dir' to 'deploy_dir', using optional CMake 'variables'.
|
|
77
|
+
-- Optional 'preserve_pkg_dir' argument specified whether to preserve the 'pkg_dir'.
|
|
78
|
+
function install_pkg(pkg_dir, deploy_dir, variables, preserve_pkg_dir)
|
|
79
|
+
deploy_dir = deploy_dir or cfg.root_dir
|
|
80
|
+
variables = variables or {}
|
|
81
|
+
preserve_pkg_dir = preserve_pkg_dir or false
|
|
82
|
+
|
|
83
|
+
assert(type(pkg_dir) == "string", "package.install_pkg: Argument 'pkg_dir' is not a string.")
|
|
84
|
+
assert(type(deploy_dir) == "string", "package.install_pkg: Argument 'deploy_dir' is not a string.")
|
|
85
|
+
assert(type(variables) == "table", "package.install_pkg: Argument 'variables' is not a table.")
|
|
86
|
+
assert(type(preserve_pkg_dir) == "boolean", "package.install_pkg: Argument 'preserve_pkg_dir' is not a boolean.")
|
|
87
|
+
|
|
88
|
+
pkg_dir = sys.abs_path(pkg_dir)
|
|
89
|
+
deploy_dir = sys.abs_path(deploy_dir)
|
|
90
|
+
|
|
91
|
+
-- check for dist.info
|
|
92
|
+
local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
|
|
93
|
+
if not info then return nil, "Error installing: the directory '" .. pkg_dir .. "' doesn't exist or doesn't contain valid 'dist.info' file." end
|
|
94
|
+
|
|
95
|
+
-- check if the package is source
|
|
96
|
+
if sys.exists(sys.make_path(pkg_dir, "CMakeLists.txt")) then
|
|
97
|
+
info.arch = info.arch or "Universal"
|
|
98
|
+
info.type = info.type or "source"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
-- check package's architecture
|
|
102
|
+
if info.arch ~= "Universal" and info.arch ~= cfg.arch then
|
|
103
|
+
return nil, "Error installing '" .. info.name .. "-" .. info.version .. "': architecture '" .. info.arch .. "' is not suitable for this machine."
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
-- check package's type
|
|
107
|
+
if info.type ~= "all" and info.type ~= "source" and info.type ~= cfg.type then
|
|
108
|
+
return nil, "Error installing '" .. info.name .. "-" .. info.version .. "': architecture type '" .. info.type .. "' is not suitable for this machine."
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
local ok, err
|
|
112
|
+
|
|
113
|
+
-- if package is of binary type, just deploy it
|
|
114
|
+
if info.type ~= "source" then
|
|
115
|
+
ok, err = deploy_binary_pkg(pkg_dir, deploy_dir)
|
|
116
|
+
|
|
117
|
+
-- else build and then deploy
|
|
118
|
+
else
|
|
119
|
+
|
|
120
|
+
-- check if we have cmake
|
|
121
|
+
ok = utils.system_dependency_available("cmake", "cmake --version")
|
|
122
|
+
if not ok then return nil, "Error when installing: Command 'cmake' not available on the system." end
|
|
123
|
+
|
|
124
|
+
-- set cmake variables
|
|
125
|
+
local cmake_variables = {}
|
|
126
|
+
|
|
127
|
+
-- set variables from config file
|
|
128
|
+
for k, v in pairs(cfg.variables) do
|
|
129
|
+
cmake_variables[k] = v
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
-- set variables specified as argument
|
|
133
|
+
for k, v in pairs(variables) do
|
|
134
|
+
cmake_variables[k] = v
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
cmake_variables.CMAKE_INCLUDE_PATH = table.concat({cmake_variables.CMAKE_INCLUDE_PATH or "", sys.make_path(deploy_dir, "include")}, ";")
|
|
138
|
+
cmake_variables.CMAKE_LIBRARY_PATH = table.concat({cmake_variables.CMAKE_LIBRARY_PATH or "", sys.make_path(deploy_dir, "lib"), sys.make_path(deploy_dir, "bin")}, ";")
|
|
139
|
+
cmake_variables.CMAKE_PROGRAM_PATH = table.concat({cmake_variables.CMAKE_PROGRAM_PATH or "", sys.make_path(deploy_dir, "bin")}, ";")
|
|
140
|
+
|
|
141
|
+
-- build the package and deploy it
|
|
142
|
+
ok, err = build_pkg(pkg_dir, deploy_dir, cmake_variables)
|
|
143
|
+
if not ok then return nil, err end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
-- delete directory of fetched package
|
|
148
|
+
if not (cfg.debug or preserve_pkg_dir) then sys.delete(pkg_dir) end
|
|
149
|
+
|
|
150
|
+
return ok, err
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
-- Build and deploy package from 'src_dir' to 'deploy_dir' using 'variables'.
|
|
154
|
+
-- Return directory to which the package was built or nil on error.
|
|
155
|
+
-- 'variables' is table of optional CMake variables.
|
|
156
|
+
function build_pkg(src_dir, deploy_dir, variables)
|
|
157
|
+
deploy_dir = deploy_dir or cfg.root_dir
|
|
158
|
+
variables = variables or {}
|
|
159
|
+
|
|
160
|
+
assert(type(src_dir) == "string", "package.build_pkg: Argument 'src_dir' is not a string.")
|
|
161
|
+
assert(type(deploy_dir) == "string", "package.build_pkg: Argument 'deploy_dir' is not a string.")
|
|
162
|
+
assert(type(variables) == "table", "package.build_pkg: Argument 'variables' is not a table.")
|
|
163
|
+
|
|
164
|
+
src_dir = sys.abs_path(src_dir)
|
|
165
|
+
deploy_dir = sys.abs_path(deploy_dir)
|
|
166
|
+
|
|
167
|
+
-- check for dist.info
|
|
168
|
+
local info, err = mf.load_distinfo(sys.make_path(src_dir, "dist.info"))
|
|
169
|
+
if not info then return nil, "Error building package from '" .. src_dir .. "': it doesn't contain valid 'dist.info' file." end
|
|
170
|
+
local pkg_name = info.name .. "-" .. info.version
|
|
171
|
+
|
|
172
|
+
-- set machine information
|
|
173
|
+
info.arch = cfg.arch
|
|
174
|
+
info.type = cfg.type
|
|
175
|
+
|
|
176
|
+
-- create CMake build dir
|
|
177
|
+
local cmake_build_dir = sys.abs_path(sys.make_path(deploy_dir, cfg.temp_dir, pkg_name .. "-CMake-build"))
|
|
178
|
+
sys.make_dir(cmake_build_dir)
|
|
179
|
+
|
|
180
|
+
-- create cmake cache
|
|
181
|
+
variables["CMAKE_INSTALL_PREFIX"] = deploy_dir
|
|
182
|
+
local cache_file = io.open(sys.make_path(cmake_build_dir, "cache.cmake"), "w")
|
|
183
|
+
if not cache_file then return nil, "Error creating CMake cache file in '" .. cmake_build_dir .. "'" end
|
|
184
|
+
|
|
185
|
+
-- Fill in cache variables
|
|
186
|
+
for k,v in pairs(variables) do
|
|
187
|
+
cache_file:write("SET(" .. k .. " " .. sys.quote(v):gsub("\\+", "/") .. " CACHE STRING \"\" FORCE)\n")
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
-- If user cache file is provided then append it
|
|
191
|
+
if cfg.cache_file ~= "" then
|
|
192
|
+
local user_cache = io.open(sys.abs_path(cfg.cache_file), "r")
|
|
193
|
+
if user_cache then
|
|
194
|
+
cache_file:write(user_cache:read("*all").."\n")
|
|
195
|
+
user_cache:close()
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
cache_file:close()
|
|
199
|
+
|
|
200
|
+
src_dir = sys.abs_path(src_dir)
|
|
201
|
+
print("Building " .. sys.extract_name(src_dir) .. "...")
|
|
202
|
+
|
|
203
|
+
-- set cmake cache command
|
|
204
|
+
local cache_command = cfg.cache_command
|
|
205
|
+
if cfg.debug then cache_command = cache_command .. " " .. cfg.cache_debug_options end
|
|
206
|
+
|
|
207
|
+
-- set cmake build command
|
|
208
|
+
local build_command = cfg.build_command
|
|
209
|
+
if cfg.debug then build_command = build_command .. " " .. cfg.build_debug_options end
|
|
210
|
+
|
|
211
|
+
-- set the cmake cache
|
|
212
|
+
local ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. cache_command .. " " .. sys.quote(src_dir))
|
|
213
|
+
if not ok then return nil, "Error preloading the CMake cache script '" .. sys.make_path(cmake_build_dir, "cmake.cache") .. "'" end
|
|
214
|
+
|
|
215
|
+
-- build with cmake
|
|
216
|
+
ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. build_command)
|
|
217
|
+
if not ok then return nil, "Error building with CMake in directory '" .. cmake_build_dir .. "'" end
|
|
218
|
+
|
|
219
|
+
-- if this is only simulation, exit sucessfully, skipping the next actions
|
|
220
|
+
if cfg.simulate then
|
|
221
|
+
return true, "Simulated build and deployment of package '" .. pkg_name .. "' sucessfull."
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
-- table to collect files installed in the components
|
|
225
|
+
info.files = {}
|
|
226
|
+
|
|
227
|
+
local build_dir = sys.quote(cmake_build_dir)
|
|
228
|
+
-- install the components
|
|
229
|
+
for _, component in ipairs(cfg.components) do
|
|
230
|
+
local strip_option = ""
|
|
231
|
+
if not cfg.debug and component ~= "Library" then strip_option = cfg.strip_option end
|
|
232
|
+
|
|
233
|
+
local ok = sys.exec("cd " .. build_dir .. " && " .. cfg.cmake .. " " .. strip_option .. " " ..cfg.install_component_command:gsub("#COMPONENT#", component))
|
|
234
|
+
|
|
235
|
+
if not ok then return nil, "Error when installing the component '" .. component .. "' with CMake in directory '" .. cmake_build_dir .. "'" end
|
|
236
|
+
|
|
237
|
+
local install_mf = sys.make_path(cmake_build_dir, "install_manifest_" .. component .. ".txt")
|
|
238
|
+
local mf, err
|
|
239
|
+
local component_files = {}
|
|
240
|
+
|
|
241
|
+
-- collect files installed in this component
|
|
242
|
+
if sys.exists(install_mf) then
|
|
243
|
+
mf, err = io.open(install_mf, "r")
|
|
244
|
+
if not mf then return nil, "Error when opening the CMake installation manifest '" .. install_mf .. "': " .. err end
|
|
245
|
+
for line in mf:lines() do
|
|
246
|
+
line = sys.check_separators(line)
|
|
247
|
+
local file = line:gsub(utils.escape_magic(deploy_dir .. sys.path_separator()), "")
|
|
248
|
+
table.insert(component_files, file)
|
|
249
|
+
end
|
|
250
|
+
mf:close()
|
|
251
|
+
|
|
252
|
+
-- add list of component files to the 'dist.info'
|
|
253
|
+
if #component_files > 0 then info.files[component] = component_files end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
-- if bookmark == 0 then return nil, "Package did not install any files!" end
|
|
257
|
+
|
|
258
|
+
-- test with ctest
|
|
259
|
+
if cfg.test then
|
|
260
|
+
print("Testing " .. sys.extract_name(src_dir) .. " ...")
|
|
261
|
+
ok = sys.exec("cd " .. sys.quote(deploy_dir) .. " && " .. cfg.test_command)
|
|
262
|
+
if not ok then return nil, "Error when testing the module '" .. pkg_name .. "' with CTest." end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
-- save modified 'dist.info' file
|
|
266
|
+
local pkg_distinfo_dir = sys.make_path(deploy_dir, cfg.distinfos_dir, pkg_name)
|
|
267
|
+
sys.make_dir(pkg_distinfo_dir)
|
|
268
|
+
ok, err = mf.save_distinfo(info, sys.make_path(pkg_distinfo_dir, "dist.info"))
|
|
269
|
+
if not ok then return nil, err end
|
|
270
|
+
|
|
271
|
+
-- clean up
|
|
272
|
+
if not cfg.debug then sys.delete(cmake_build_dir) end
|
|
273
|
+
|
|
274
|
+
return true, "Package '" .. pkg_name .. "' successfully builded and deployed to '" .. deploy_dir .. "'."
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
-- Deploy binary package from 'pkg_dir' to 'deploy_dir' by copying.
|
|
278
|
+
function deploy_binary_pkg(pkg_dir, deploy_dir)
|
|
279
|
+
deploy_dir = deploy_dir or cfg.root_dir
|
|
280
|
+
|
|
281
|
+
assert(type(pkg_dir) == "string", "package.deploy_binary_pkg: Argument 'pkg_dir' is not a string.")
|
|
282
|
+
assert(type(deploy_dir) == "string", "package.deploy_binary_pkg: Argument 'deploy_dir' is not a string.")
|
|
283
|
+
|
|
284
|
+
pkg_dir = sys.abs_path(pkg_dir)
|
|
285
|
+
deploy_dir = sys.abs_path(deploy_dir)
|
|
286
|
+
|
|
287
|
+
-- check for dist.info
|
|
288
|
+
local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
|
|
289
|
+
if not info then return nil, "Error deploying package from '" .. pkg_dir .. "': it doesn't contain valid 'dist.info' file." end
|
|
290
|
+
local pkg_name = info.name .. "-" .. info.version
|
|
291
|
+
|
|
292
|
+
-- if this is only simulation, exit sucessfully, skipping the next actions
|
|
293
|
+
if cfg.simulate then
|
|
294
|
+
return true, "Simulated deployment of package '" .. pkg_name .. "' sucessfull."
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
-- copy all components of the module to the deploy_dir
|
|
298
|
+
for _, component in ipairs(cfg.components) do
|
|
299
|
+
if info.files[component] then
|
|
300
|
+
for _, file in ipairs(info.files[component]) do
|
|
301
|
+
local dest_dir = sys.make_path(deploy_dir, sys.parent_dir(file))
|
|
302
|
+
|
|
303
|
+
local ok, err = sys.make_dir(dest_dir)
|
|
304
|
+
if not ok then return nil, "Error when deploying package '" .. pkg_name .. "': cannot create directory '" .. dest_dir .. "': " .. err end
|
|
305
|
+
|
|
306
|
+
ok, err = sys.copy(sys.make_path(pkg_dir, file), dest_dir)
|
|
307
|
+
if not ok then return nil, "Error when deploying package '" .. pkg_name .. "': cannot copy file '" .. file .. "' to the directory '" .. dest_dir .. "': " .. err end
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
-- copy dist.info to register the module as installed
|
|
313
|
+
local pkg_distinfo_dir = sys.make_path(deploy_dir, cfg.distinfos_dir, pkg_name)
|
|
314
|
+
sys.make_dir(pkg_distinfo_dir)
|
|
315
|
+
ok, err = mf.save_distinfo(info, sys.make_path(pkg_distinfo_dir, "dist.info"))
|
|
316
|
+
if not ok then return nil, err end
|
|
317
|
+
|
|
318
|
+
return true, "Package '" .. pkg_name .. "' successfully deployed to '" .. deploy_dir .. "'."
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
-- Fetch package (table 'pkg') to download_dir. Return path to the directory of
|
|
322
|
+
-- downloaded package on success or an error message on error.
|
|
323
|
+
function fetch_pkg(pkg, download_dir)
|
|
324
|
+
download_dir = download_dir or sys.current_dir()
|
|
325
|
+
assert(type(pkg) == "table", "package.fetch_pkg: Argument 'pkg' is not a table.")
|
|
326
|
+
assert(type(download_dir) == "string", "package.fetch_pkg: Argument 'download_dir' is not a string.")
|
|
327
|
+
assert(type(pkg.name) == "string", "package.fetch_pkg: Argument 'pkg.name' is not a string.")
|
|
328
|
+
assert(type(pkg.version) == "string", "package.fetch_pkg: Argument 'pkg.version' is not a string.")
|
|
329
|
+
assert(type(pkg.path) == "string", "package.fetch_pkg: Argument 'pkg.path' is not a string.")
|
|
330
|
+
download_dir = sys.abs_path(download_dir)
|
|
331
|
+
|
|
332
|
+
local pkg_full_name = pkg.name .. "-" .. pkg.version
|
|
333
|
+
local repo_url = pkg.path
|
|
334
|
+
local clone_dir = sys.abs_path(sys.make_path(download_dir, pkg_full_name))
|
|
335
|
+
|
|
336
|
+
-- check if download_dir already exists, assuming the package was already downloaded
|
|
337
|
+
if sys.exists(sys.make_path(clone_dir, "dist.info")) then
|
|
338
|
+
if cfg.cache and not utils.cache_timeout_expired(cfg.cache_timeout, clone_dir) then
|
|
339
|
+
print("'" .. pkg_full_name .. "' already in cache, skipping downloading (use '-cache=false' to force download).")
|
|
340
|
+
return clone_dir
|
|
341
|
+
else
|
|
342
|
+
sys.delete(sys.make_path(clone_dir))
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
local bin_tag = pkg.version .. "-" .. cfg.arch .. "-" .. cfg.type
|
|
347
|
+
local use_binary = false
|
|
348
|
+
|
|
349
|
+
if cfg.binary then
|
|
350
|
+
-- check if binary version of the module for this arch & type available
|
|
351
|
+
local avail_tags, err = git.get_remote_tags(repo_url)
|
|
352
|
+
if not avail_tags then return nil, err end
|
|
353
|
+
|
|
354
|
+
if utils.contains(avail_tags, bin_tag) then
|
|
355
|
+
use_binary = true
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
-- init the git repository
|
|
360
|
+
local ok, err = git.create_repo(clone_dir)
|
|
361
|
+
if not ok then return nil, err end
|
|
362
|
+
|
|
363
|
+
-- Fetch the desired ref (from the pkg's remote repo) and checkout into it.
|
|
364
|
+
|
|
365
|
+
if use_binary then
|
|
366
|
+
|
|
367
|
+
print("Getting " .. pkg_full_name .. " (binary)...")
|
|
368
|
+
|
|
369
|
+
-- We fetch the binary tag.
|
|
370
|
+
local sha
|
|
371
|
+
if ok then sha, err = git.fetch_tag(clone_dir, repo_url, bin_tag) end
|
|
372
|
+
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
|
373
|
+
|
|
374
|
+
elseif cfg.source then
|
|
375
|
+
|
|
376
|
+
print("Getting " .. pkg_full_name .. " (source)...")
|
|
377
|
+
|
|
378
|
+
-- If we want the 'scm' version, we fetch the 'master' branch, otherwise
|
|
379
|
+
-- we fetch the tag, matching the desired package version.
|
|
380
|
+
if ok and pkg.version ~= "scm" then
|
|
381
|
+
local sha
|
|
382
|
+
sha, err = git.fetch_tag(clone_dir, repo_url, pkg.version)
|
|
383
|
+
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
|
384
|
+
elseif ok then
|
|
385
|
+
local sha
|
|
386
|
+
sha, err = git.fetch_branch(clone_dir, repo_url, "master")
|
|
387
|
+
if sha then ok, err = git.checkout_sha(sha, clone_dir) end
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
else
|
|
391
|
+
ok = false
|
|
392
|
+
if cfg.binary then
|
|
393
|
+
err = "Binary version of module not available and using source modules disabled."
|
|
394
|
+
else
|
|
395
|
+
err = "Using both binary and source modules disabled."
|
|
396
|
+
end
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
if not ok then
|
|
400
|
+
-- clean up
|
|
401
|
+
if not cfg.debug then sys.delete(clone_dir) end
|
|
402
|
+
return nil, "Error fetching package '" .. pkg_full_name .. "' from '" .. pkg.path .. "' to '" .. download_dir .. "': " .. err
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
-- delete '.git' directory
|
|
406
|
+
if not cfg.debug then sys.delete(sys.make_path(clone_dir, ".git")) end
|
|
407
|
+
|
|
408
|
+
return clone_dir
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
-- Fetch packages (table 'packages') to 'download_dir'. Return table of paths
|
|
412
|
+
-- to the directories on success or an error message on error.
|
|
413
|
+
function fetch_pkgs(packages, download_dir)
|
|
414
|
+
download_dir = download_dir or sys.current_dir()
|
|
415
|
+
assert(type(packages) == "table", "package.fetch_pkgs: Argument 'packages' is not a table.")
|
|
416
|
+
assert(type(download_dir) == "string", "package.fetch_pkgs: Argument 'download_dir' is not a string.")
|
|
417
|
+
download_dir = sys.abs_path(download_dir)
|
|
418
|
+
|
|
419
|
+
local fetched_dirs = {}
|
|
420
|
+
local dir, err
|
|
421
|
+
|
|
422
|
+
for _, pkg in pairs(packages) do
|
|
423
|
+
-- if package was downloaded by dependency resolving function, do not download it again.
|
|
424
|
+
if pkg.download_dir then
|
|
425
|
+
dir, err = pkg.download_dir, nil
|
|
426
|
+
-- else download it.
|
|
427
|
+
else
|
|
428
|
+
dir, err = fetch_pkg(pkg, download_dir)
|
|
429
|
+
end
|
|
430
|
+
if not dir then
|
|
431
|
+
return nil, err
|
|
432
|
+
else
|
|
433
|
+
table.insert(fetched_dirs, dir)
|
|
434
|
+
end
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
return fetched_dirs
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
-- Return table with information about available versions of 'package'.
|
|
441
|
+
function retrieve_versions(package, manifest)
|
|
442
|
+
assert(type(package) == "string", "package.retrieve_versions: Argument 'string' is not a string.")
|
|
443
|
+
assert(type(manifest) == "table", "package.retrieve_versions: Argument 'manifest' is not a table.")
|
|
444
|
+
|
|
445
|
+
-- get package table
|
|
446
|
+
local pkg_name = depends.split_name_constraint(package)
|
|
447
|
+
local tmp_packages = depends.find_packages(pkg_name, manifest)
|
|
448
|
+
|
|
449
|
+
if #tmp_packages == 0 then
|
|
450
|
+
return nil, "No suitable candidate for package '" .. package .. "' found."
|
|
451
|
+
else
|
|
452
|
+
package = tmp_packages[1]
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
print("Finding out available versions of " .. package.name .. "...")
|
|
456
|
+
|
|
457
|
+
-- get available versions
|
|
458
|
+
local tags, err = git.get_remote_tags(package.path)
|
|
459
|
+
if not tags then return nil, "Error when retrieving versions of package '" .. package.name .. "': " .. err end
|
|
460
|
+
|
|
461
|
+
-- filter out tags of binary packages
|
|
462
|
+
local versions = utils.filter(tags, function (tag) return tag:match("^[^%-]+%-?[^%-]*$") and true end)
|
|
463
|
+
|
|
464
|
+
packages = {}
|
|
465
|
+
|
|
466
|
+
-- create package information
|
|
467
|
+
for _, version in pairs(versions) do
|
|
468
|
+
pkg = {}
|
|
469
|
+
pkg.name = package.name
|
|
470
|
+
pkg.version = version
|
|
471
|
+
pkg.path = package.path
|
|
472
|
+
table.insert(packages, pkg)
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
return packages
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
-- Return table with information from package's dist.info and path to downloaded
|
|
479
|
+
-- package. Optional argument 'deploy_dir' is used just as a temporary
|
|
480
|
+
-- place to place the downloaded packages into.
|
|
481
|
+
function retrieve_pkg_info(package, deploy_dir)
|
|
482
|
+
deploy_dir = deploy_dir or cfg.root_dir
|
|
483
|
+
assert(type(package) == "table", "package.retrieve_pkg_info: Argument 'package' is not a table.")
|
|
484
|
+
assert(type(deploy_dir) == "string", "package.retrieve_pkg_info: Argument 'deploy_dir' is not a string.")
|
|
485
|
+
deploy_dir = sys.abs_path(deploy_dir)
|
|
486
|
+
|
|
487
|
+
local tmp_dir = sys.abs_path(sys.make_path(deploy_dir, cfg.temp_dir))
|
|
488
|
+
|
|
489
|
+
-- download the package
|
|
490
|
+
local pkg_dir, err = fetch_pkg(package, tmp_dir)
|
|
491
|
+
if not pkg_dir then return nil, "Error when retrieving the info about '" .. package.name .. "': " .. err end
|
|
492
|
+
|
|
493
|
+
-- load information from 'dist.info'
|
|
494
|
+
local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
|
|
495
|
+
if not info then return nil, err end
|
|
496
|
+
|
|
497
|
+
-- add 'path' attribute
|
|
498
|
+
if package.path then info.path = package.path end
|
|
499
|
+
|
|
500
|
+
-- set default arch/type if not explicitly stated and package is of source type
|
|
501
|
+
if sys.exists(sys.make_path(pkg_dir, "CMakeLists.txt")) then
|
|
502
|
+
info.arch = info.arch or "Universal"
|
|
503
|
+
info.type = info.type or "source"
|
|
504
|
+
elseif not (info.arch and info.type) then
|
|
505
|
+
return nil, pkg_dir .. ": binary package missing arch or type in 'dist.info'."
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
return info, pkg_dir
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
-- Return manifest, augmented with info about all available versions
|
|
512
|
+
-- of package 'pkg'. Optional argument 'deploy_dir' is used just as a temporary
|
|
513
|
+
-- place to place the downloaded packages into.
|
|
514
|
+
-- Optional argument 'installed' is manifest of all installed packages. When
|
|
515
|
+
-- specified, info from installed packages won't be downloaded from repo,
|
|
516
|
+
-- but the dist.info from installed package will be used.
|
|
517
|
+
function get_versions_info(pkg, manifest, deploy_dir, installed)
|
|
518
|
+
deploy_dir = deploy_dir or cfg.root_dir
|
|
519
|
+
assert(type(pkg) == "string", "package.get_versions_info: Argument 'pkg' is not a string.")
|
|
520
|
+
assert(type(manifest) == "table", "package.get_versions_info: Argument 'manifest' is not a table.")
|
|
521
|
+
assert(type(deploy_dir) == "string", "package.get_versions_info: Argument 'deploy_dir' is not a string.")
|
|
522
|
+
deploy_dir = sys.abs_path(deploy_dir)
|
|
523
|
+
|
|
524
|
+
-- find all available versions of package
|
|
525
|
+
local versions, err = retrieve_versions(pkg, manifest)
|
|
526
|
+
if not versions then return nil, err end
|
|
527
|
+
|
|
528
|
+
-- collect info about all retrieved versions
|
|
529
|
+
local infos = {}
|
|
530
|
+
for _, version in pairs(versions) do
|
|
531
|
+
|
|
532
|
+
local info, path_or_err
|
|
533
|
+
local installed_version = {}
|
|
534
|
+
|
|
535
|
+
-- find out whether this 'version' is installed so we can use it's dist.info
|
|
536
|
+
if type(installed) == "table" then installed_version = depends.find_packages(version.name .. "-" .. version.version, installed) end
|
|
537
|
+
|
|
538
|
+
-- get info
|
|
539
|
+
if #installed_version > 0 then
|
|
540
|
+
print("Using dist.info from installed " .. version.name .. "-" .. version.version)
|
|
541
|
+
info = installed_version[1]
|
|
542
|
+
info.path = version.path
|
|
543
|
+
info.from_installed = true -- flag that dist.info of installed package was used
|
|
544
|
+
else
|
|
545
|
+
info, path_or_err = retrieve_pkg_info(version, deploy_dir)
|
|
546
|
+
if not info then return nil, path_or_err end
|
|
547
|
+
sys.delete(path_or_err)
|
|
548
|
+
end
|
|
549
|
+
table.insert(infos, info)
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
-- found and add an implicit 'scm' version
|
|
553
|
+
local pkg_name = depends.split_name_constraint(pkg)
|
|
554
|
+
local found = depends.find_packages(pkg_name, manifest)
|
|
555
|
+
if #found == 0 then return nil, "No suitable candidate for package '" .. pkg .. "' found." end
|
|
556
|
+
local scm_info, path_or_err = retrieve_pkg_info({name = pkg_name, version = "scm", path = found[1].path})
|
|
557
|
+
if not scm_info then return nil, path_or_err end
|
|
558
|
+
sys.delete(path_or_err)
|
|
559
|
+
scm_info.version = "scm"
|
|
560
|
+
table.insert(infos, scm_info)
|
|
561
|
+
|
|
562
|
+
local tmp_manifest = utils.deepcopy(manifest)
|
|
563
|
+
|
|
564
|
+
-- add collected info to the temp. manifest, replacing existing tables
|
|
565
|
+
for _, info in pairs(infos) do
|
|
566
|
+
local already_in_manifest = false
|
|
567
|
+
-- find if this version is already in manifest
|
|
568
|
+
for idx, pkg in ipairs(tmp_manifest) do
|
|
569
|
+
-- if yes, replace it
|
|
570
|
+
if pkg.name == info.name and pkg.version == info.version then
|
|
571
|
+
tmp_manifest[idx] = info
|
|
572
|
+
already_in_manifest = true
|
|
573
|
+
break
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
-- if not, just normally add to the manifest
|
|
577
|
+
if not already_in_manifest then
|
|
578
|
+
table.insert(tmp_manifest, info)
|
|
579
|
+
end
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
return tmp_manifest
|
|
583
|
+
end
|