Skip to content

Commit

Permalink
add cli.archive and cli.extract
Browse files Browse the repository at this point in the history
  • Loading branch information
waruqi committed Aug 21, 2024
1 parent de0ade7 commit b5478ed
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 1 deletion.
51 changes: 51 additions & 0 deletions xmake/modules/cli/archive.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, TBOOX Open Source Group.
--
-- @author ruki
-- @file archive.lua
--

-- imports
import("core.base.option")
import("utils.archive.archive")

-- the options
local options = {
{nil, "compress", "kv", nil, "Set the compress algorithm.", values = {"fastest", "faster", "default", "better", "best"}},
{'r', "recurse", "k", nil, "Enable recursive pattern."},
{nil, "excludes", "kv", nil, "Set the excludes patterns.",
"e.g.",
" - xmake l cli.archive --excludes=\"*/dir/*|dir/*\" -o archivefile inputfiles"},
{'o', "archivefile","kv", nil, "The output archive file."},
{nil, "inputfiles", "vs", nil, "The input files."}
}

function main(...)
local argv = table.pack(...)
local args = option.parse(argv, options, "Archive file.",
"",
"Usage: xmake l cli.archive [options]")
local archivefile = assert(args.archivefile, "please set output file!")
local inputfiles = assert(args.inputfiles, "please set input files!")

local opt = {}
opt.recurse = args.recurse
opt.compress = args.compress
if args.excludes then
opt.excludes = args.excludes:split("|")
end
archive(archivefile, inputfiles, opt)
end
48 changes: 48 additions & 0 deletions xmake/modules/cli/extract.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, TBOOX Open Source Group.
--
-- @author ruki
-- @file extract.lua
--

-- imports
import("core.base.option")
import("utils.archive.extract")

-- the options
local options = {
{nil, "excludes", "kv", nil, "Set the excludes patterns.",
"e.g.",
" - xmake l cli.extract --excludes=\"*/dir/*|dir/*\" -o outputdir archivefile"},
{'o', "outputdir", "kv", nil, "The output directory."},
{nil, "archivefile","v", nil, "The archive file."}
}

function main(...)
local argv = table.pack(...)
local args = option.parse(argv, options, "Extract file.",
"",
"Usage: xmake l cli.extract [options]")
local archivefile = assert(args.archivefile, "please set archive file!")
local outputdir = assert(args.outputdir, "please set output directory!")

local opt = {}
opt.recurse = args.recurse
if args.excludes then
opt.excludes = args.excludes:split("|")
end
extract(archivefile, outputdir, opt)
end
14 changes: 13 additions & 1 deletion xmake/modules/utils/archive/archive_xmz.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,24 @@
-- imports
import("core.base.option")

-- archive archive file
-- archive file
--
-- @param archivefile the archive file. e.g. *.tar.gz, *.zip, *.7z, *.tar.bz2, ..
-- @param inputfiles the input file or directory or list
-- @param options the options, e.g.. {curdir = "/tmp", recurse = true, compress = "fastest|faster|default|better|best", excludes = {"*/dir/*", "dir/*"}}
--
function main(archivefile, inputfiles, opt)
opt = opt or {}
local files = {}
for _, inputfile in ipairs(inputfiles) do
if os.isdir(inputfile) then
table.join2(files, os.files(path.join(inputfile, opt.recurse and "**" or "*")))
elseif os.isfile(inputfile) then
table.insert(files, inputfile)
end
end
inputfiles = files

print("archivefile", archivefile)
print("inputfiles", inputfiles)
end

0 comments on commit b5478ed

Please sign in to comment.