Fixing regression #17617: Recipe doesn't download "recommended version" of module/theme

--HG--
branch : 1.x
This commit is contained in:
Suha Can
2011-03-31 12:26:37 -07:00
parent 1a8cfef885
commit 6df96cb690
3 changed files with 53 additions and 24 deletions

View File

@@ -80,7 +80,7 @@ Features:
ModuleRecipeHandler moduleRecipeHandler = _container.Resolve<ModuleRecipeHandler>();
RecipeContext recipeContext = new RecipeContext { RecipeStep = new RecipeStep { Name = "Module", Step = new XElement("SuperWiki") } };
recipeContext.RecipeStep.Step.Add(new XAttribute("packageId", "SuperWiki"));
recipeContext.RecipeStep.Step.Add(new XAttribute("packageId", "Orchard.Module.SuperWiki"));
recipeContext.RecipeStep.Step.Add(new XAttribute("repository", "test"));
IFeatureManager featureManager = _container.Resolve<IFeatureManager>();
@@ -129,7 +129,7 @@ Features:
public IEnumerable<PackagingEntry> GetExtensionList(PackagingSource packagingSource = null, Func<IQueryable<PublishedPackage>, IQueryable<PublishedPackage>> query = null) {
return new[] {
new PackagingEntry {
PackageId = "SuperWiki",
PackageId = "Orchard.Module.SuperWiki",
Title = "SuperWiki",
Version = "1.0.3"
}

View File

@@ -17,20 +17,14 @@ namespace Orchard.Recipes.RecipeHandlers {
private readonly IPackagingSourceManager _packagingSourceManager;
private readonly IPackageManager _packageManager;
private readonly IExtensionManager _extensionManager;
private readonly IFeatureManager _featureManager;
private readonly IDataMigrationManager _dataMigrationManager;
public ModuleRecipeHandler(
IPackagingSourceManager packagingSourceManager,
IPackageManager packageManager,
IExtensionManager extensionManager,
IFeatureManager featureManager,
IDataMigrationManager dataMigrationManager) {
IExtensionManager extensionManager) {
_packagingSourceManager = packagingSourceManager;
_packageManager = packageManager;
_extensionManager = extensionManager;
_featureManager = featureManager;
_dataMigrationManager = dataMigrationManager;
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
@@ -69,6 +63,7 @@ namespace Orchard.Recipes.RecipeHandlers {
// download and install module from the orchard feed or a custom feed if repository is specified.
bool enforceVersion = version != null;
bool installed = false;
PackagingEntry packagingEntry = null;
var packagingSource = _packagingSourceManager.GetSources().FirstOrDefault();
if (repository != null) {
@@ -76,15 +71,25 @@ namespace Orchard.Recipes.RecipeHandlers {
packagingSource = new PackagingSource {FeedTitle = repository, FeedUrl = repository};
}
var packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource,
packages => packages.Where(package =>
package.PackageType.Equals(DefaultExtensionTypes.Module) &&
package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
(!enforceVersion || package.Version.Equals(version, StringComparison.OrdinalIgnoreCase))))
.FirstOrDefault();
if (enforceVersion) {
packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource,
packages => packages.Where(package =>
package.PackageType.Equals(DefaultExtensionTypes.Module) &&
package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
package.Version.Equals(version, StringComparison.OrdinalIgnoreCase))).FirstOrDefault();
}
else {
packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource,
packages => packages.Where(package =>
package.PackageType.Equals(DefaultExtensionTypes.Module) &&
package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
package.IsLatestVersion)).FirstOrDefault();
}
if (packagingEntry != null) {
_packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/"));
if (!ModuleAlreadyInstalled(packagingEntry.PackageId)) {
_packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/"));
}
installed = true;
}
@@ -94,5 +99,12 @@ namespace Orchard.Recipes.RecipeHandlers {
recipeContext.Executed = true;
}
private bool ModuleAlreadyInstalled(string packageId) {
return _extensionManager.AvailableExtensions().Where(m => DefaultExtensionTypes.IsModule(m.ExtensionType))
.Any(module => module.Id.Equals(
packageId.Substring(PackagingSourceManager.GetExtensionPrefix(DefaultExtensionTypes.Module).Length),
StringComparison.OrdinalIgnoreCase));
}
}
}

View File

@@ -77,6 +77,7 @@ namespace Orchard.Recipes.RecipeHandlers {
// download and install theme from the orchard feed or a custom feed if repository is specified.
bool enforceVersion = version != null;
bool installed = false;
PackagingEntry packagingEntry = null;
var packagingSource = _packagingSourceManager.GetSources().FirstOrDefault();
if (repository != null) {
@@ -84,16 +85,25 @@ namespace Orchard.Recipes.RecipeHandlers {
packagingSource = new PackagingSource { FeedTitle = repository, FeedUrl = repository };
}
var packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource,
packages => packages.Where(package =>
package.PackageType.Equals(DefaultExtensionTypes.Theme) &&
package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
(!enforceVersion || package.Version.Equals(version, StringComparison.OrdinalIgnoreCase))))
.FirstOrDefault();
if (enforceVersion) {
packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource,
packages => packages.Where(package =>
package.PackageType.Equals(DefaultExtensionTypes.Theme) &&
package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
package.Version.Equals(version, StringComparison.OrdinalIgnoreCase))).FirstOrDefault();
}
else {
packagingEntry = _packagingSourceManager.GetExtensionList(packagingSource,
packages => packages.Where(package =>
package.PackageType.Equals(DefaultExtensionTypes.Theme) &&
package.Id.Equals(packageId, StringComparison.OrdinalIgnoreCase) &&
package.IsLatestVersion)).FirstOrDefault();
}
if (packagingEntry != null) {
_packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/"));
if (!ThemeAlreadyInstalled(packagingEntry.PackageId)) {
_packageManager.Install(packagingEntry.PackageId, packagingEntry.Version, packagingSource.FeedUrl, HostingEnvironment.MapPath("~/"));
}
if (current) {
_themeService.EnableThemeFeatures(packagingEntry.Title);
_siteThemeService.SetSiteTheme(packagingEntry.Title);
@@ -111,5 +121,12 @@ namespace Orchard.Recipes.RecipeHandlers {
recipeContext.Executed = true;
}
private bool ThemeAlreadyInstalled(string packageId) {
return _extensionManager.AvailableExtensions().Where(t => DefaultExtensionTypes.IsTheme(t.ExtensionType))
.Any(theme => theme.Id.Equals(
packageId.Substring(PackagingSourceManager.GetExtensionPrefix(DefaultExtensionTypes.Theme).Length),
StringComparison.OrdinalIgnoreCase));
}
}
}