package_id
at version
# Install the `package_id` at `version`
private fun install_package(package_id: String, version: nullable String)
do
if package_id.is_package_name then
# Ask a centralized server
# TODO customizable server list
# TODO parse ini file in memory
var url = "https://nitlanguage.org/catalog/p/{package_id}.ini"
var ini_path = "/tmp/{package_id}.ini"
if verbose then print "Looking for a package description at '{url}'"
var request = new CurlHTTPRequest(url)
request.verbose = verbose
var response = request.download_to_file(ini_path)
if response isa CurlResponseFailed then
print_error "Failed to contact the remote server at '{url}': {response.error_msg} ({response.error_code})"
exit 1
end
assert response isa CurlFileResponseSuccess
if response.status_code == 404 then
print_error "Package '{package_id}' not found on the server"
exit 1
else if response.status_code != 200 then
print_error "Server side error: {response.status_code}"
exit 1
end
if verbose then
print "Found a package description:"
print ini_path.to_path.read_all
end
var ini = new IniFile.from_file(ini_path)
var git_repo = ini["upstream.git"]
if git_repo == null then
print_error "Package description invalid, or it does not declare a Git repository"
exit 1
abort
end
install_from_git(git_repo, package_id, version)
else
var name = package_id.git_name
if name != null and name != "." and not name.is_empty then
name = name.to_lower
install_from_git(package_id, name, version)
else
print_error "Failed to infer the package name"
exit 1
end
end
end
src/nitpm.nit:102,2--157,4