diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs index 22e2bc5da8..612ec33882 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs @@ -51,25 +51,29 @@ namespace ICSharpCode.PackageManagement.Cmdlets protected override void ProcessRecord() { ThrowErrorIfProjectNotOpen(); - if (IsPackageIdMissing()) { + if (HasPackageId()) { + if (HasProjectName()) { + UpdatePackageInSingleProject(); + } else { + UpdatePackageInAllProjects(); + } + } else { if (HasProjectName()) { UpdateAllPackagesInProject(); } else { UpdateAllPackagesInSolution(); } - } else { - UpdatePackageInSingleProject(); } } - bool IsPackageIdMissing() + bool HasPackageId() { - return String.IsNullOrEmpty(Id); + return !String.IsNullOrEmpty(Id); } bool HasProjectName() { - return ProjectName != null; + return !String.IsNullOrEmpty(ProjectName); } void UpdateAllPackagesInProject() @@ -138,5 +142,21 @@ namespace ICSharpCode.PackageManagement.Cmdlets action.Execute(); } } + + void UpdatePackageInAllProjects() + { + IPackageManagementSolution solution = ConsoleHost.Solution; + IPackageRepository repository = GetActivePackageRepository(); + PackageReference packageReference = CreatePackageReference(); + IUpdatePackageActions updateActions = + updatePackageActionsFactory.CreateUpdatePackageInAllProjects(packageReference, solution, repository); + + RunActions(updateActions); + } + + PackageReference CreatePackageReference() + { + return new PackageReference(Id, Version, null); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs index b9dc861063..e61f9ea84f 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs @@ -23,6 +23,7 @@ namespace PackageManagement.Cmdlets.Tests FakeUpdatePackageActions fakeUpdateAllPackagesInProject; FakePackageManagementSolution fakeSolution; FakeUpdatePackageActions fakeUpdateAllPackagesInSolution; + FakeUpdatePackageActions fakeUpdatePackageInAllProjects; void CreateCmdletWithoutActiveProject() { @@ -34,6 +35,7 @@ namespace PackageManagement.Cmdlets.Tests fakeUpdateActionsFactory = cmdlet.FakeUpdatePackageActionsFactory; fakeUpdateAllPackagesInProject = fakeUpdateActionsFactory.FakeUpdateAllPackagesInProject; fakeUpdateAllPackagesInSolution = fakeUpdateActionsFactory.FakeUpdateAllPackagesInSolution; + fakeUpdatePackageInAllProjects = fakeUpdateActionsFactory.FakeUpdatePackageInAllProjects; } FakeUpdatePackageAction UpdatePackageInSingleProjectAction { @@ -66,6 +68,19 @@ namespace PackageManagement.Cmdlets.Tests get { return GetUpdatingAllPackagesInSolutionAction(1); } } + FakeUpdatePackageAction FirstUpdateActionWhenUpdatingPackageInAllProjects { + get { return GetUpdatingPackageInAllProjectsAction(0); } + } + + FakeUpdatePackageAction GetUpdatingPackageInAllProjectsAction(int index) + { + return fakeUpdateActionsFactory.FakeUpdatePackageInAllProjects.FakeActions[index]; + } + + FakeUpdatePackageAction SecondUpdateActionWhenUpdatingPackageInAllProjects { + get { return GetUpdatingPackageInAllProjectsAction(1); } + } + void CreateCmdletWithActivePackageSourceAndProject() { CreateCmdletWithoutActiveProject(); @@ -129,6 +144,19 @@ namespace PackageManagement.Cmdlets.Tests fakeUpdateActionsFactory.FakeUpdateAllPackagesInSolution.FakeActions.Add(action); } + void CreateTwoUpdateActionsWhenUpdatingPackageInAllProjects(string packageId1, string packageId2) + { + CreateUpdateActionWhenUpdatingPackageInAllProjects(packageId1); + CreateUpdateActionWhenUpdatingPackageInAllProjects(packageId2); + } + + void CreateUpdateActionWhenUpdatingPackageInAllProjects(string packageId) + { + var action = new FakeUpdatePackageAction(fakeProject); + action.PackageId = packageId; + fakeUpdateActionsFactory.FakeUpdatePackageInAllProjects.FakeActions.Add(action); + } + [Test] public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError() { @@ -394,6 +422,19 @@ namespace PackageManagement.Cmdlets.Tests Assert.AreEqual(fakeSolution, solution); } + [Test] + public void ProcessRecord_UpdateAllPackagesInSolutionWhenProjectNameIsEmptyString_CreatesUpdateAllPackagesSolution() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetProjectNameParameter(String.Empty); + RunCmdlet(); + + IPackageManagementSolution solution = + fakeUpdateActionsFactory.SolutionPassedToCreateUpdateAllPackagesInSolution; + + Assert.AreEqual(fakeSolution, solution); + } + [Test] public void ProcessRecord_UpdateAllPackagesInSolutionWhenSourceSpecified_PackageSourceUsedToGetRepository() { @@ -486,5 +527,145 @@ namespace PackageManagement.Cmdlets.Tests Assert.AreEqual(cmdlet, runner); } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjects_CreatesUpdatePackageInAllProjects() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + RunCmdlet(); + + IPackageManagementSolution solution = + fakeUpdateActionsFactory.SolutionPassedToCreateUpdatePackageInAllProjects; + + Assert.AreEqual(fakeSolution, solution); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjectsWhenSourceSpecified_PackageSourceUsedToGetRepository() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + RunCmdlet(); + + PackageSource packageSource = fakeConsoleHost.PackageSourcePassedToGetRepository; + PackageSource expectedPackageSource = fakeConsoleHost.PackageSourceToReturnFromGetActivePackageSource; + + Assert.AreEqual(expectedPackageSource, packageSource); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjectsWhenSourceSpecified_SourceUsedPassedGetActvePackageSourceFromConsoleHost() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + SetSourceParameter("Test"); + RunCmdlet(); + + string packageSource = fakeConsoleHost.PackageSourcePassedToGetActivePackageSource; + + Assert.AreEqual("Test", packageSource); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjects_RepositoryUsedToCreateUpdatePackageInAllProjects() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + RunCmdlet(); + + IPackageRepository repository = fakeUpdateActionsFactory.SourceRepositoryPassedToCreateUpdatePackageInAllProjects; + IPackageRepository expectedRepository = fakeConsoleHost.FakePackageRepository; + + Assert.AreEqual(expectedRepository, repository); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjectsWhenTwoUpdateActionsReturned_TwoUpdateActionsAreExecuted() + { + CreateCmdletWithActivePackageSourceAndProject(); + CreateTwoUpdateActionsWhenUpdatingPackageInAllProjects("PackageA", "PackageB"); + SetIdParameter("MyPackage"); + RunCmdlet(); + + bool[] executedActions = new bool[] { + FirstUpdateActionWhenUpdatingPackageInAllProjects.IsExecuted, + SecondUpdateActionWhenUpdatingPackageInAllProjects.IsExecuted + }; + + bool[] expectedExecutedActions = new bool[] { + true, + true + }; + + CollectionAssert.AreEqual(expectedExecutedActions, executedActions); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjectsAndIgnoreDependenciesIsTrue_ActionDoesNotUpdateDependencies() + { + CreateCmdletWithActivePackageSourceAndProject(); + CreateUpdateActionWhenUpdatingPackageInAllProjects("PackageA"); + SetIdParameter("PackageA"); + EnableIgnoreDependenciesParameter(); + RunCmdlet(); + + bool update = fakeUpdatePackageInAllProjects.UpdateDependencies; + + Assert.IsFalse(update); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjectsAndIgnoreDependenciesIsFalse_ActionUpdatesDependencies() + { + CreateCmdletWithActivePackageSourceAndProject(); + CreateUpdateActionWhenUpdatingPackageInAllProjects("PackageA"); + SetIdParameter("PackageA"); + RunCmdlet(); + + bool update = fakeUpdatePackageInAllProjects.UpdateDependencies; + + Assert.IsTrue(update); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjects_ActionsUseCmdletAsScriptRunner() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + RunCmdlet(); + + IPackageScriptRunner runner = fakeUpdatePackageInAllProjects.PackageScriptRunner; + + Assert.AreEqual(cmdlet, runner); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjects_PackageIdPassedToAction() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + RunCmdlet(); + + PackageReference packageReference = + fakeUpdateActionsFactory.PackageReferencePassedToCreateUpdatePackageInAllProjects; + + Assert.AreEqual("MyPackage", packageReference.Id); + } + + [Test] + public void ProcessRecord_UpdatePackageInAllProjects_PackageVersionPassedToAction() + { + CreateCmdletWithActivePackageSourceAndProject(); + SetIdParameter("MyPackage"); + var expectedVersion = new Version("1.0"); + SetVersionParameter(expectedVersion); + RunCmdlet(); + + PackageReference packageReference = + fakeUpdateActionsFactory.PackageReferencePassedToCreateUpdatePackageInAllProjects; + + Assert.AreEqual(expectedVersion, packageReference.Version); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index bc88582a7f..d11cd49021 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -360,6 +360,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActionsFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActionsFactory.cs index 490767dff8..de60405ecc 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActionsFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActionsFactory.cs @@ -13,5 +13,10 @@ namespace ICSharpCode.PackageManagement IUpdatePackageActions CreateUpdateAllPackagesInSolution( IPackageManagementSolution solution, IPackageRepository sourceRepository); + + IUpdatePackageActions CreateUpdatePackageInAllProjects( + PackageReference packageReference, + IPackageManagementSolution solution, + IPackageRepository sourceRepository); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageActionsFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageActionsFactory.cs index cd692ce51e..86ea21051a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageActionsFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageActionsFactory.cs @@ -19,5 +19,13 @@ namespace ICSharpCode.PackageManagement { return new UpdateAllPackagesInSolution(solution, sourceRepository); } + + public IUpdatePackageActions CreateUpdatePackageInAllProjects( + PackageReference packageReference, + IPackageManagementSolution solution, + IPackageRepository sourceRepository) + { + return new UpdatePackageInAllProjects(packageReference, solution, sourceRepository); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageInAllProjects.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageInAllProjects.cs new file mode 100644 index 0000000000..64b11da20a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageInAllProjects.cs @@ -0,0 +1,62 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using System.Linq; +using ICSharpCode.PackageManagement.Scripting; +using NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class UpdatePackageInAllProjects : IUpdatePackageActions + { + IPackageManagementSolution solution; + IPackageRepository sourceRepository; + List projects; + PackageReference packageReference; + + public UpdatePackageInAllProjects( + PackageReference packageReference, + IPackageManagementSolution solution, + IPackageRepository sourceRepository) + { + this.packageReference = packageReference; + this.solution = solution; + this.sourceRepository = sourceRepository; + } + + public bool UpdateDependencies { get; set; } + public IPackageScriptRunner PackageScriptRunner { get; set; } + + public IEnumerable CreateActions() + { + GetProjects(); + foreach (IPackageManagementProject project in projects) { + yield return CreateUpdatePackageAction(project); + } + } + + void GetProjects() + { + projects = new List(); + projects.AddRange(solution.GetProjects(sourceRepository)); + } + + UpdatePackageAction CreateUpdatePackageAction(IPackageManagementProject project) + { + UpdatePackageAction action = project.CreateUpdatePackageAction(); + SetUpdatePackageActionProperties(action); + return action; + } + + void SetUpdatePackageActionProperties(UpdatePackageAction action) + { + action.PackageId = packageReference.Id; + action.PackageScriptRunner = PackageScriptRunner; + action.PackageVersion = packageReference.Version; + action.UpdateDependencies = UpdateDependencies; + action.UpdateIfPackageDoesNotExistInProject = false; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 09db0465c1..adac04ca1b 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -263,6 +263,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeUpdatePackageActionsFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeUpdatePackageActionsFactory.cs index 35bbf442d0..df82941635 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeUpdatePackageActionsFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeUpdatePackageActionsFactory.cs @@ -34,5 +34,23 @@ namespace PackageManagement.Tests.Helpers SourceRepositoryPassedToCreateUpdateAllPackagesInSolution = sourceRepository; return FakeUpdateAllPackagesInSolution; } + + public FakeUpdatePackageActions FakeUpdatePackageInAllProjects = + new FakeUpdatePackageActions(); + + public IPackageManagementSolution SolutionPassedToCreateUpdatePackageInAllProjects; + public IPackageRepository SourceRepositoryPassedToCreateUpdatePackageInAllProjects; + public PackageReference PackageReferencePassedToCreateUpdatePackageInAllProjects; + + public IUpdatePackageActions CreateUpdatePackageInAllProjects( + PackageReference packageReference, + IPackageManagementSolution solution, + IPackageRepository sourceRepository) + { + PackageReferencePassedToCreateUpdatePackageInAllProjects = packageReference; + SolutionPassedToCreateUpdatePackageInAllProjects = solution; + SourceRepositoryPassedToCreateUpdatePackageInAllProjects = sourceRepository; + return FakeUpdatePackageInAllProjects; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageInAllProjectsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageInAllProjectsTests.cs new file mode 100644 index 0000000000..815a94ad95 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageInAllProjectsTests.cs @@ -0,0 +1,211 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using System.Linq; + +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; +using ICSharpCode.PackageManagement.Scripting; +using NuGet; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class UpdatePackageInAllProjectsTests + { + UpdatePackageInAllProjects updatePackageInAllProjects; + FakePackageManagementSolution fakeSolution; + FakePackageRepository fakeSourceRepository; + List updateActions; + + void CreateUpdatePackageInAllProjects(string packageId) + { + CreateUpdatePackageInAllProjects(packageId, new Version("1.0")); + } + + void CreateUpdatePackageInAllProjects(string packageId, Version version) + { + fakeSolution = new FakePackageManagementSolution(); + fakeSourceRepository = new FakePackageRepository(); + var packageReference = new PackageReference(packageId, version, null); + updatePackageInAllProjects = new UpdatePackageInAllProjects(packageReference, fakeSolution, fakeSourceRepository); + } + + void CreateUpdatePackageInAllProjects() + { + CreateUpdatePackageInAllProjects("MyPackageId"); + } + + void CallCreateActions() + { + IEnumerable actions = updatePackageInAllProjects.CreateActions(); + updateActions = actions.ToList(); + } + + UpdatePackageAction FirstUpdateAction { + get { return updateActions[0]; } + } + + FakePackageManagementProject AddProjectToSolution(string projectName) + { + return fakeSolution.AddFakeProject(projectName); + } + + FakePackageManagementProject FirstProjectInSolution { + get { return fakeSolution.FakeProjects[0]; } + } + + [Test] + public void CreateActions_SolutionHasOneProject_ReturnsOneAction() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + CallCreateActions(); + + Assert.AreEqual(1, updateActions.Count); + } + + [Test] + public void CreateActions_SolutionHasOneProject_UpdateActionCreatedFromProject() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + CallCreateActions(); + + UpdatePackageAction action = FirstUpdateAction; + UpdatePackageAction expectedAction = FirstProjectInSolution.FirstFakeUpdatePackageActionCreated; + + Assert.AreEqual(expectedAction, action); + } + + [Test] + public void CreateActions_SolutionHasOneProject_UpdateActionCreatedUsingSourceRepositoryPassedInConstructor() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + CallCreateActions(); + + IPackageRepository repository = fakeSolution.SourceRepositoryPassedToGetProjects; + FakePackageRepository expectedRepository = fakeSourceRepository; + + Assert.AreEqual(expectedRepository, repository); + } + + [Test] + public void CreateActions_NoPackagesInSolution_NoActionsReturned() + { + CreateUpdatePackageInAllProjects(); + CallCreateActions(); + + Assert.AreEqual(0, updateActions.Count); + } + + [Test] + public void CreateActions_TwoProjectsInSolution_ReturnsTwoActions() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject1"); + AddProjectToSolution("MyProject2"); + CallCreateActions(); + + Assert.AreEqual(2, updateActions.Count); + } + + [Test] + public void CreateActions_OnePackageInSolutionWithTwoProjects_ReturnsTwoActionsCreatedFromProjects() + { + CreateUpdatePackageInAllProjects(); + FakePackageManagementProject project1 = AddProjectToSolution("MyProject1"); + FakePackageManagementProject project2 = AddProjectToSolution("MyProject2"); + CallCreateActions(); + + var expectedActions = new UpdatePackageAction[] { + project1.FirstFakeUpdatePackageActionCreated, + project2.FirstFakeUpdatePackageActionCreated + }; + + Assert.AreEqual(expectedActions, updateActions); + } + + [Test] + public void CreateActions_SolutionHasOneProject_PackageIdSetInUpdateAction() + { + CreateUpdatePackageInAllProjects("MyPackage"); + AddProjectToSolution("MyProject"); + CallCreateActions(); + + string packageId = FirstUpdateAction.PackageId; + + Assert.AreEqual("MyPackage", packageId); + } + + [Test] + public void CreateActions_SolutionHasOneProject_PackageVersionSetInUpdateAction() + { + var expectedVersion = new Version("1.2.3.4"); + CreateUpdatePackageInAllProjects("MyPackage", expectedVersion); + AddProjectToSolution("MyProject"); + CallCreateActions(); + + Version version = FirstUpdateAction.PackageVersion; + + Assert.AreEqual(expectedVersion, version); + } + + [Test] + public void CreateActions_SolutionHasOneProjectAndScriptRunnerIsSet_UpdateActionUsesSameScriptRunner() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + var expectedRunner = new FakePackageScriptRunner(); + updatePackageInAllProjects.PackageScriptRunner = expectedRunner; + CallCreateActions(); + + IPackageScriptRunner runner = FirstUpdateAction.PackageScriptRunner; + + Assert.AreEqual(expectedRunner, runner); + } + + [Test] + public void CreateActions_SolutionHasOneProject_UpdateActionDoesNotUpdatePackageIfProjectDoesNotHavePackage() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + CallCreateActions(); + + bool updateIfPackageDoesNotExist = FirstUpdateAction.UpdateIfPackageDoesNotExistInProject; + + Assert.IsFalse(updateIfPackageDoesNotExist); + } + + [Test] + public void CreateActions_SolutionHasOneProjectAndUpdateDependenciesIsFalse_UpdateActionDoesNotUpdateDependencies() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + updatePackageInAllProjects.UpdateDependencies = false; + CallCreateActions(); + + bool updateDependencies = FirstUpdateAction.UpdateDependencies; + + Assert.IsFalse(updateDependencies); + } + + [Test] + public void CreateActions_SolutionHasOneProjectAndUpdateDependenciesIsTrue_UpdateActionDoesUpdateDependencies() + { + CreateUpdatePackageInAllProjects(); + AddProjectToSolution("MyProject"); + updatePackageInAllProjects.UpdateDependencies = true; + CallCreateActions(); + + bool updateDependencies = FirstUpdateAction.UpdateDependencies; + + Assert.IsTrue(updateDependencies); + } + } +}