Skip to content

Commit

Permalink
(chocolateyGH-1689) Delete packaging scripts before upgrade
Browse files Browse the repository at this point in the history
It is possible, due to the way that Package Reducer works, that there
are extra files left in the package directory when doing an upgrade
of a package.  This can cause a package upgrade to fail.  Prior to
performing the upgrade, delete all packaging scripts (chocolateyInstall,
chocolateyUninstall, and chocolateyBeforeModify) from the package
folder, these will then be replaced during the upgrade, if they are
still required..
  • Loading branch information
gep13 committed Mar 13, 2019
1 parent 2c273d3 commit 3568704
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/chocolatey/infrastructure.app/services/NugetService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1146,6 +1146,8 @@ public virtual void backup_existing_version(ChocolateyConfiguration config, IPac
try
{
_fileSystem.copy_directory(backupLocation, pkgInstallPath, overwriteExisting: true);

remove_packaging_files_prior_to_upgrade(pkgInstallPath, config.CommandName);
}
catch (Exception ex)
{
Expand All @@ -1167,6 +1169,29 @@ process locking the folder or files. Please make sure nothing is
}
}

public virtual void remove_packaging_files_prior_to_upgrade(string directoryPath, string commandName)
{
if (commandName.to_lower() == "upgrade")
{
// Due to the way that Package Reducer works, there is a potential that a Chocolatey Packaging
// script could be incorrectly left in place during an upgrade operation. To guard against this,
// remove any Chocolatey Packaging scripts, which will then be restored by the new package, if
// they are still required
var filesToDelete = new List<string> {"chocolateyinstall", "chocolateyuninstall", "chocolateybeforemodify"};
var packagingScripts = _fileSystem.get_files(directoryPath, "*.ps1", SearchOption.AllDirectories)
.Where(p => filesToDelete.Contains(_fileSystem.get_file_name_without_extension(p).to_lower()));

foreach (var packagingScript in packagingScripts)
{
if (_fileSystem.file_exists(packagingScript))
{
this.Log().Debug("Deleting file {0}".format_with(packagingScript));
_fileSystem.delete_file(packagingScript);
}
}
}
}

public virtual void backup_changed_files(string packageInstallPath, ChocolateyConfiguration config, ChocolateyPackageInformation packageInfo)
{
if (packageInfo == null || packageInfo.Package == null) return;
Expand Down

0 comments on commit 3568704

Please sign in to comment.