164 lines
3.8 KiB
Lua
164 lines
3.8 KiB
Lua
-- -*- coding: utf-8 -*-
|
|
-- preamble: common routines
|
|
|
|
local matchers = require("matchers")
|
|
local w = require("tables").wrap
|
|
local concat = require("funclib").concat
|
|
|
|
local parser = clink.arg.new_parser
|
|
|
|
local function pipenv_libs_list(token)
|
|
local handle = io.popen('python -c "import sys; print(\\";\\".join(sys.path))"')
|
|
local result = handle:read("*a")
|
|
handle:close()
|
|
|
|
-- trim spaces
|
|
result = clink.get_cwd() .. result:gsub("^%s*(.-)%s*$", "%1")
|
|
|
|
local lib_paths = clink.split(result, ";")
|
|
|
|
local list = w()
|
|
for lib_path in lib_paths do
|
|
local finder = matchers.create_files_matcher(lib_path)
|
|
local libs = finder(token)
|
|
libs =
|
|
libs:filter(
|
|
function(v)
|
|
return clink.is_dir(lib_path .. "/" .. v) or string.find(v, "%.py$")
|
|
end
|
|
)
|
|
|
|
list = w(concat(list, libs))
|
|
end
|
|
|
|
-- remove ".py" and "-1.2.3-dist-info" of file name
|
|
for k, v in pairs(list) do
|
|
list[k] = v:gsub(".py", ""):gsub("-[%d%.]+dist%-info$", "")
|
|
end
|
|
|
|
return list
|
|
end
|
|
|
|
local pipenv_default_flags = {
|
|
"--python",
|
|
"--three",
|
|
"--two",
|
|
"--clear",
|
|
"--verbose",
|
|
"-v",
|
|
"--pypi-mirror",
|
|
"--help",
|
|
"-h"
|
|
}
|
|
|
|
local pipenv_check_parser = parser():add_flags(pipenv_default_flags, "--unused", "--ignore", "-i", "--system"):loop(1)
|
|
|
|
local pipenv_clean_parser = parser():add_flags(pipenv_default_flags, "--bare", "--dry-run")
|
|
|
|
local pipenv_graph_parser = parser():add_flags(pipenv_default_flags, "--bare", "--json", "--json-tree", "--reverse")
|
|
|
|
local pipenv_install_parser =
|
|
parser():add_flags(
|
|
pipenv_default_flags,
|
|
"--system",
|
|
"--code",
|
|
"-c",
|
|
"--deploy",
|
|
"--skip-lock",
|
|
"--editable",
|
|
"-e",
|
|
"--ignore-pipfile",
|
|
"--selective-upgrade",
|
|
"--pre",
|
|
"--requirements" .. parser({clink.matches_are_files}),
|
|
"-r" .. parser({clink.matches_are_files}),
|
|
"--extra-index-url",
|
|
"--index",
|
|
"-i",
|
|
"--sequential",
|
|
"--keep-outdated",
|
|
"--dev",
|
|
"-d"
|
|
):loop(1)
|
|
|
|
local pipenv_lock_parser =
|
|
parser():add_flags(pipenv_default_flags, "--requirements", "-r", "--keep-outdated", "--pre", "--dev", "-d")
|
|
|
|
local pipenv_open_parser = parser({pipenv_libs_list}):add_flags(pipenv_default_flags)
|
|
|
|
local pipenv_run_parser = parser():add_flags(pipenv_default_flags)
|
|
|
|
local pipenv_shell_parser = parser():add_flags("--fancy", "--anyway", pipenv_default_flags)
|
|
|
|
local pipenv_sync_parser =
|
|
parser():add_flags("--bare", "--sequential", "--keep-outdated", "--pre", "--dev", "-d", pipenv_default_flags)
|
|
|
|
local pipenv_uninstall_parser =
|
|
parser():add_flags(
|
|
"--skip-lock",
|
|
"--lock",
|
|
"--all-dev",
|
|
"--all",
|
|
"--editable",
|
|
"-e",
|
|
"--keep-outdated",
|
|
"--pre",
|
|
"--dev",
|
|
"-d",
|
|
pipenv_default_flags
|
|
)
|
|
|
|
local pipenv_update_parser =
|
|
parser():add_flags(
|
|
"--bare",
|
|
"--outdated",
|
|
"--dry-run",
|
|
"--editable",
|
|
"-e",
|
|
"--ignore-pipfile",
|
|
"--selective-upgrade",
|
|
"--pre",
|
|
"--requirements",
|
|
"-r",
|
|
"--extra-index-url",
|
|
"--index",
|
|
"-i",
|
|
"--sequential",
|
|
"--keep-outdated",
|
|
"--dev",
|
|
"-d",
|
|
pipenv_default_flags
|
|
)
|
|
|
|
local pipenv_parser =
|
|
parser(
|
|
{
|
|
"check" .. pipenv_check_parser,
|
|
"clean" .. pipenv_clean_parser,
|
|
"graph" .. pipenv_graph_parser,
|
|
"install" .. pipenv_install_parser,
|
|
"lock" .. pipenv_lock_parser,
|
|
"open" .. pipenv_open_parser,
|
|
"run" .. pipenv_run_parser,
|
|
"shell" .. pipenv_shell_parser,
|
|
"sync" .. pipenv_sync_parser,
|
|
"uninstall" .. pipenv_uninstall_parser,
|
|
"update" .. pipenv_update_parser
|
|
}
|
|
):add_flags(
|
|
pipenv_default_flags,
|
|
"--where",
|
|
"--venv",
|
|
"--py",
|
|
"--envs",
|
|
"--rm",
|
|
"--bare",
|
|
"--completion",
|
|
"--man",
|
|
"--support",
|
|
"--site-packages",
|
|
"--version"
|
|
)
|
|
|
|
clink.arg.register_parser("pipenv", pipenv_parser)
|