nitc :: CommandUninstall :: defaultinit
nitc $ CommandUninstall :: SELF
Type of this instance, automatically specialized in every classnitc $ CommandUninstall :: name
Short name of the command, specified in the command linenitc :: Command :: _all_commands
nitc :: Command :: all_commands
nitc :: Command :: all_commands=
core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
nitc :: Command :: defaultinit
nitc :: CommandUninstall :: defaultinit
core :: Object :: defaultinit
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Object :: native_class_name
The class name of the object in CString format.core :: Object :: output_class_name
Display class name on stdout (debug only).
# Uninstall a package
class CommandUninstall
super Command
redef fun name do return "uninstall"
redef fun usage do return "nitpm uninstall [-f] <package0>[=version] [package1 ...]"
redef fun description do return "Uninstall packages"
redef fun apply(args)
do
var opt_force = "-f"
var force = args.has(opt_force)
if force then args.remove(opt_force)
if args.is_empty then
print_local_help
exit 1
end
for name in args do
var clean_nitpm_lib_dir = nitpm_lib_dir.simplify_path
var target_dir = clean_nitpm_lib_dir / name
# Check validity of the package to delete
target_dir = target_dir.simplify_path
var within_dir = target_dir.has_prefix(clean_nitpm_lib_dir + "/") and
target_dir.length > clean_nitpm_lib_dir.length + 1
var valid_name = name.length > 0 and name.chars.first.is_lower
if not valid_name or not within_dir then
print_error "Package name '{name}' is invalid"
continue
end
if not target_dir.file_exists or not target_dir.to_path.is_dir then
print_error "Package not found"
exit 1
end
# Ask confirmation
if not force then
var response = prompt("Delete {target_dir.escape_to_sh}? [Y/n] ")
var accept = response != null and
(response.to_lower == "y" or response.to_lower == "yes" or response == "")
if not accept then return
end
var cmd = "rm -rf {target_dir.escape_to_sh}"
if verbose then print "+ {cmd}"
var proc = new Process("sh", "-c", cmd)
proc.wait
if proc.status != 0 then
print_error "Uninstall failed"
exit 1
end
end
end
end
src/nitpm.nit:244,1--303,3