Cannot uninstall packages with uppercase package IDs on Mono
What You Are Seeing?
When running on Mono on Linux (Mac probably also affected), choco fails to uninstall packages with package IDs that contain uppercase characters.
What is Expected?
Choco is able to uninstall all packages.
How Did You Get This To Happen? (Steps to Reproduce)
On a system with docker with linux containers:
docker run --rm -it chocolatey/choco /bin/bash
choco install wget
choco uninstall wget
I'm thinking that packageManager.LocalRepository.FindPackage is the issue, could be wrong though.
Output Log
Full Log Output with uninstall wget
root@c1ab833bcdc0:~# choco uninstall wget --debug --verbose
Chocolatey v0.11.2-51-g43132590
Chocolatey is running on Linux v 5.10.0.0
Attempting to delete file "/opt/chocolatey/chocolatey.dll.old".
Attempting to delete file "/opt/chocolatey/choco.exe.old".
Command line: /opt/chocolatey/choco.exe uninstall wget --debug --verbose
Received arguments: uninstall wget --debug --verbose
RemovePendingPackagesTask is now ready and waiting for PreRunMessage.
Sending message 'PreRunMessage' out if there are subscribers...
[Pending] Removing all pending packages that should not be considered installed...
Performing validation checks.
Global Configuration Validation Checks:
- Package Exit Code / Exit On Reboot = Checked
System State Validation Checks:
The source 'https://community.chocolatey.org/api/v2/' evaluated to a 'normal' source type
NOTE: Hiding sensitive configuration data! Please double and triple
check to be sure no sensitive data is shown, especially if copying
output to a gist for review.
Configuration: CommandName='uninstall'|CacheLocation='/tmp/chocolatey'|
ContainsLegacyPackageInstalls='True'|
CommandExecutionTimeoutSeconds='2700'|WebRequestTimeoutSeconds='30'|
Sources='https://community.chocolatey.org/api/v2/'|SourceType='normal'|
Debug='True'|Verbose='True'|Trace='False'|Force='False'|Noop='False'|
HelpRequested='False'|UnsuccessfulParsing='False'|RegularOutput='True'|
QuietOutput='False'|PromptForConfirmation='True'|AcceptLicense='False'|
AllowUnofficialBuild='False'|Input='wget'|AllVersions='False'|
SkipPackageInstallProvider='False'|PackageNames='wget'|
Prerelease='False'|ForceX86='False'|OverrideArguments='False'|
NotSilent='False'|ApplyPackageParametersToDependencies='False'|
ApplyInstallArgumentsToDependencies='False'|IgnoreDependencies='False'|
AllowMultipleVersions='False'|AllowDowngrade='False'|
ForceDependencies='False'|Information.PlatformType='Linux'|
Information.PlatformVersion='5.10.0.0'|
Information.PlatformName='Linux'|
Information.ChocolateyVersion='0.12.0.0'|
Information.ChocolateyProductVersion='0.11.2-51-g43132590'|
Information.FullName='chocolatey, Version=0.12.0.0, Culture=neutral, PublicKeyToken=79d02ea9cad655eb'|
Information.Is64BitOperatingSystem='True'|
Information.Is64BitProcess='True'|Information.IsInteractive='False'|
Information.UserName='root'|Information.UserDomainName='c1ab833bcdc0'|
Information.IsUserAdministrator='False'|
Information.IsUserSystemAccount='False'|
Information.IsUserRemoteDesktop='False'|
Information.IsUserRemote='True'|
Information.IsProcessElevated='False'|
Information.IsLicensedVersion='False'|Information.LicenseType='Foss'|
Information.CurrentDirectory='/root'|Features.AutoUninstaller='True'|
Features.ChecksumFiles='True'|Features.AllowEmptyChecksums='False'|
Features.AllowEmptyChecksumsSecure='True'|
Features.FailOnAutoUninstaller='False'|
Features.FailOnStandardError='False'|Features.UsePowerShellHost='True'|
Features.LogEnvironmentValues='False'|Features.LogWithoutColor='False'|
Features.VirusCheck='False'|
Features.FailOnInvalidOrMissingLicense='False'|
Features.IgnoreInvalidOptionsSwitches='True'|
Features.UsePackageExitCodes='True'|
Features.UseEnhancedExitCodes='False'|
Features.UseFipsCompliantChecksums='False'|
Features.ShowNonElevatedWarnings='True'|
Features.ShowDownloadProgress='True'|
Features.StopOnFirstPackageFailure='False'|
Features.UseRememberedArgumentsForUpgrades='False'|
Features.IgnoreUnfoundPackagesOnUpgradeOutdated='False'|
Features.SkipPackageUpgradesWhenNotInstalled='False'|
Features.RemovePackageInformationOnUninstall='False'|
Features.ExitOnRebootDetected='False'|
Features.LogValidationResultsOnWarnings='True'|
Features.UsePackageRepositoryOptimizations='True'|
Features.ScriptsCheckLastExitCode='False'|
ListCommand.LocalOnly='False'|
ListCommand.IdOnly='False'|ListCommand.IncludeRegistryPrograms='False'|
ListCommand.PageSize='25'|ListCommand.Exact='False'|
ListCommand.ByIdOnly='False'|ListCommand.ByTagOnly='False'|
ListCommand.IdStartsWith='False'|ListCommand.OrderByPopularity='False'|
ListCommand.ApprovedOnly='False'|
ListCommand.DownloadCacheAvailable='False'|
ListCommand.NotBroken='False'|
ListCommand.IncludeVersionOverrides='False'|
UpgradeCommand.FailOnUnfound='False'|
UpgradeCommand.FailOnNotInstalled='False'|
UpgradeCommand.NotifyOnlyAvailableUpgrades='False'|
UpgradeCommand.ExcludePrerelease='False'|
NewCommand.AutomaticPackage='False'|
NewCommand.UseOriginalTemplate='False'|SourceCommand.Command='unknown'|
SourceCommand.Priority='0'|SourceCommand.BypassProxy='False'|
SourceCommand.AllowSelfService='False'|
SourceCommand.VisibleToAdminsOnly='False'|
FeatureCommand.Command='unknown'|ConfigCommand.Command='unknown'|
ApiKeyCommand.Remove='False'|PinCommand.Command='unknown'|
OutdatedCommand.IgnorePinned='False'|
ExportCommand.IncludeVersionNumbers='False'|Proxy.BypassOnLocal='True'|
_ Chocolatey:ChocolateyUninstallCommand - Normal Run Mode _
Uninstalling the following packages:
wget
Running list with the following filter = ''
--- Start of List ---
Wget 1.21.2
--- End of List ---
wget is not installed. Cannot uninstall a non-existent package.
Chocolatey uninstalled 0/1 packages. 1 packages failed.
See the log for details (/opt/chocolatey/logs/chocolatey.log).
Failures
- wget - wget is not installed. Cannot uninstall a non-existent package.
If a package uninstall is failing and/or you've already uninstalled the
software outside of Chocolatey, you can attempt to run the command
with `-n` to skip running a chocolateyUninstall script, additionally
adding `--skip-autouninstaller` to skip an attempt to automatically
remove system-installed software. Only the packaging files are removed
and not things like software installed to Programs and Features.
If a package is failing because it is a dependency of another package
or packages, then you may first need to consider if it needs to be
removed as packages have dependencies for a reason. If
you decide that you still want to remove it, head into
`$env:ChocolateyInstall\lib` and find the package folder you want to
be removed. Then delete the folder for the package. You should use
this option only as a last resort.
Sending message 'PostRunMessage' out if there are subscribers...
Exiting with 1
Full Log Output with uninstall Wget (Capitalized)
root@c1ab833bcdc0:~# choco uninstall Wget --debug --verbose
Chocolatey v0.11.2-51-g43132590
Chocolatey is running on Linux v 5.10.0.0
Attempting to delete file "/opt/chocolatey/chocolatey.dll.old".
Attempting to delete file "/opt/chocolatey/choco.exe.old".
Command line: /opt/chocolatey/choco.exe uninstall Wget --debug --verbose
Received arguments: uninstall Wget --debug --verbose
RemovePendingPackagesTask is now ready and waiting for PreRunMessage.
Sending message 'PreRunMessage' out if there are subscribers...
[Pending] Removing all pending packages that should not be considered installed...
Performing validation checks.
Global Configuration Validation Checks:
- Package Exit Code / Exit On Reboot = Checked
System State Validation Checks:
The source 'https://community.chocolatey.org/api/v2/' evaluated to a 'normal' source type
NOTE: Hiding sensitive configuration data! Please double and triple
check to be sure no sensitive data is shown, especially if copying
output to a gist for review.
Configuration: CommandName='uninstall'|CacheLocation='/tmp/chocolatey'|
ContainsLegacyPackageInstalls='True'|
CommandExecutionTimeoutSeconds='2700'|WebRequestTimeoutSeconds='30'|
Sources='https://community.chocolatey.org/api/v2/'|SourceType='normal'|
Debug='True'|Verbose='True'|Trace='False'|Force='False'|Noop='False'|
HelpRequested='False'|UnsuccessfulParsing='False'|RegularOutput='True'|
QuietOutput='False'|PromptForConfirmation='True'|AcceptLicense='False'|
AllowUnofficialBuild='False'|Input='Wget'|AllVersions='False'|
SkipPackageInstallProvider='False'|PackageNames='Wget'|
Prerelease='False'|ForceX86='False'|OverrideArguments='False'|
NotSilent='False'|ApplyPackageParametersToDependencies='False'|
ApplyInstallArgumentsToDependencies='False'|IgnoreDependencies='False'|
AllowMultipleVersions='False'|AllowDowngrade='False'|
ForceDependencies='False'|Information.PlatformType='Linux'|
Information.PlatformVersion='5.10.0.0'|
Information.PlatformName='Linux'|
Information.ChocolateyVersion='0.12.0.0'|
Information.ChocolateyProductVersion='0.11.2-51-g43132590'|
Information.FullName='chocolatey, Version=0.12.0.0, Culture=neutral, PublicKeyToken=79d02ea9cad655eb'|
Information.Is64BitOperatingSystem='True'|
Information.Is64BitProcess='True'|Information.IsInteractive='False'|
Information.UserName='root'|Information.UserDomainName='c1ab833bcdc0'|
Information.IsUserAdministrator='False'|
Information.IsUserSystemAccount='False'|
Information.IsUserRemoteDesktop='False'|
Information.IsUserRemote='True'|
Information.IsProcessElevated='False'|
Information.IsLicensedVersion='False'|Information.LicenseType='Foss'|
Information.CurrentDirectory='/root'|Features.AutoUninstaller='True'|
Features.ChecksumFiles='True'|Features.AllowEmptyChecksums='False'|
Features.AllowEmptyChecksumsSecure='True'|
Features.FailOnAutoUninstaller='False'|
Features.FailOnStandardError='False'|Features.UsePowerShellHost='True'|
Features.LogEnvironmentValues='False'|Features.LogWithoutColor='False'|
Features.VirusCheck='False'|
Features.FailOnInvalidOrMissingLicense='False'|
Features.IgnoreInvalidOptionsSwitches='True'|
Features.UsePackageExitCodes='True'|
Features.UseEnhancedExitCodes='False'|
Features.UseFipsCompliantChecksums='False'|
Features.ShowNonElevatedWarnings='True'|
Features.ShowDownloadProgress='True'|
Features.StopOnFirstPackageFailure='False'|
Features.UseRememberedArgumentsForUpgrades='False'|
Features.IgnoreUnfoundPackagesOnUpgradeOutdated='False'|
Features.SkipPackageUpgradesWhenNotInstalled='False'|
Features.RemovePackageInformationOnUninstall='False'|
Features.ExitOnRebootDetected='False'|
Features.LogValidationResultsOnWarnings='True'|
Features.UsePackageRepositoryOptimizations='True'|
Features.ScriptsCheckLastExitCode='False'|
ListCommand.LocalOnly='False'|
ListCommand.IdOnly='False'|ListCommand.IncludeRegistryPrograms='False'|
ListCommand.PageSize='25'|ListCommand.Exact='False'|
ListCommand.ByIdOnly='False'|ListCommand.ByTagOnly='False'|
ListCommand.IdStartsWith='False'|ListCommand.OrderByPopularity='False'|
ListCommand.ApprovedOnly='False'|
ListCommand.DownloadCacheAvailable='False'|
ListCommand.NotBroken='False'|
ListCommand.IncludeVersionOverrides='False'|
UpgradeCommand.FailOnUnfound='False'|
UpgradeCommand.FailOnNotInstalled='False'|
UpgradeCommand.NotifyOnlyAvailableUpgrades='False'|
UpgradeCommand.ExcludePrerelease='False'|
NewCommand.AutomaticPackage='False'|
NewCommand.UseOriginalTemplate='False'|SourceCommand.Command='unknown'|
SourceCommand.Priority='0'|SourceCommand.BypassProxy='False'|
SourceCommand.AllowSelfService='False'|
SourceCommand.VisibleToAdminsOnly='False'|
FeatureCommand.Command='unknown'|ConfigCommand.Command='unknown'|
ApiKeyCommand.Remove='False'|PinCommand.Command='unknown'|
OutdatedCommand.IgnorePinned='False'|
ExportCommand.IncludeVersionNumbers='False'|Proxy.BypassOnLocal='True'|
_ Chocolatey:ChocolateyUninstallCommand - Normal Run Mode _
Uninstalling the following packages:
Wget
Running list with the following filter = ''
--- Start of List ---
Wget 1.21.2
--- End of List ---
Attempting to create directory "/opt/chocolatey/lib-bkp".
Backing up existing Wget prior to operation.
Moving '/opt/chocolatey/lib/Wget'
to '/opt/chocolatey/lib-bkp/Wget'
Attempting to create directory "/opt/chocolatey/lib/Wget".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/Wget.nuspec"
to "/opt/chocolatey/lib/Wget/Wget.nuspec".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/Wget.nupkg"
to "/opt/chocolatey/lib/Wget/Wget.nupkg".
Attempting to create directory "/opt/chocolatey/lib/Wget/tools".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/tools/wget-1.21.2-win64_x64.zip"
to "/opt/chocolatey/lib/Wget/tools/wget-1.21.2-win64_x64.zip".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/tools/chocolateyinstall.ps1"
to "/opt/chocolatey/lib/Wget/tools/chocolateyinstall.ps1".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/tools/wget-1.21.2-win32_x32.zip"
to "/opt/chocolatey/lib/Wget/tools/wget-1.21.2-win32_x32.zip".
Attempting to create directory "/opt/chocolatey/lib/Wget/legal".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/legal/VERIFICATION.txt"
to "/opt/chocolatey/lib/Wget/legal/VERIFICATION.txt".
Attempting to copy "/opt/chocolatey/lib-bkp/Wget/legal/LICENSE.txt"
to "/opt/chocolatey/lib/Wget/legal/LICENSE.txt".
Wget not uninstalled. An error occurred during uninstall:
Unable to find package 'wget'.
Chocolatey uninstalled 0/1 packages. 1 packages failed.
See the log for details (/opt/chocolatey/logs/chocolatey.log).
Failures
- wget (exited 1) - Wget not uninstalled. An error occurred during uninstall:
Unable to find package 'wget'.
If a package uninstall is failing and/or you've already uninstalled the
software outside of Chocolatey, you can attempt to run the command
with `-n` to skip running a chocolateyUninstall script, additionally
adding `--skip-autouninstaller` to skip an attempt to automatically
remove system-installed software. Only the packaging files are removed
and not things like software installed to Programs and Features.
If a package is failing because it is a dependency of another package
or packages, then you may first need to consider if it needs to be
removed as packages have dependencies for a reason. If
you decide that you still want to remove it, head into
`$env:ChocolateyInstall\lib` and find the package folder you want to
be removed. Then delete the folder for the package. You should use
this option only as a last resort.
Sending message 'PostRunMessage' out if there are subscribers...
Exiting with 1
After some poking around, it does look like this is caused by an issue within nuget core. I don't think this is worth trying to fix in the current version of nuget core, as it might be a huge amount of work depending on what is going on, and this only affects uninstalls. I will revisit this after nuget core is upgraded; #508
As a workaround to this issue, remove the $env:ChocolateyInstall/lib/<package> folder, and if it happens to be a template package also remove $env:ChocolateyInstall/template/<package> folder. This is an acceptable workaround on non-Windows system because the auto uninstaller and uninstall script are not run, so the package and possibly template folders are sufficient to uninstall the package manually.
Seems to be fixed by the current code in #2740, so this should be fixed as a part of #508
Was fixed by #2740, and tests will be added in #2957