/// <summary> /// Creates <c>ProjectInfo</c> for setup project provided. /// </summary> /// <param name="project"> /// Project examined. /// </param> /// <param name="projectTypeInfo"> /// </param> /// <returns> /// <c>ProjectInfo</c> for the project provided. /// </returns> private ProjectInfo GetSetupInfo(Project project, string parentUiPath, ProjectTypeInfo projectTypeInfo, int level) { Debug.Assert(project != null); Debug.Assert(projectTypeInfo != null && (projectTypeInfo.ProjectType == ProjectType.SetupProject || projectTypeInfo.ProjectType == ProjectType.InstallShieldLEProject)); string directoryName = Path.GetDirectoryName(project.FileName); string versionFileExtension = Path.GetExtension(projectTypeInfo.AssemblyInfoFilename); string setupFilename = Path.ChangeExtension(Path.GetFileName(project.UniqueName), versionFileExtension); string filename = Path.Combine(directoryName, setupFilename); Debug.Assert(File.Exists(filename)); VersionStream versionStream = null; switch (projectTypeInfo.ProjectType) { case ProjectType.SetupProject: versionStream = new SetupVersionStream(filename); break; case ProjectType.InstallShieldLEProject: versionStream = new InstallShieldLEVersionStream(filename); break; default: Debug.Assert(false); break; } Debug.Assert(versionStream != null); AssemblyVersions setupVersion = versionStream.GetVersions(); // setup projects are always at solution root return(new ProjectInfo(project.Name, project.FullName, AppendBranchToPath(parentUiPath, project.Name), projectTypeInfo, false, level, setupVersion, new VersionStream[] { versionStream })); }
public static AssemblyVersions MaxProposed(AssemblyVersions assemblyVersions, ProjectInfo projectInfo) { if (projectInfo.Modified) { return(Max(assemblyVersions, projectInfo.ToBecomeAssemblyVersions)); } return(Max(assemblyVersions, projectInfo.CurrentAssemblyVersions)); }
public static AssemblyVersions Max(AssemblyVersions assemblyVersions1, AssemblyVersions assemblyVersions2) { ProjectVersion assemblyVersion = ProjectVersion.Max(assemblyVersions1[AssemblyVersionType.AssemblyVersion], assemblyVersions2[AssemblyVersionType.AssemblyVersion]).Clone(); ProjectVersion assemblyFileVersion = ProjectVersion.Max(assemblyVersions1[AssemblyVersionType.AssemblyFileVersion], assemblyVersions2[AssemblyVersionType.AssemblyFileVersion]).Clone(); ProjectVersion assemblyInformationalVersion = ProjectVersion.Max(assemblyVersions1[AssemblyVersionType.AssemblyInformationalVersion], assemblyVersions2[AssemblyVersionType.AssemblyInformationalVersion]).Clone(); return(new AssemblyVersions(assemblyVersion, assemblyFileVersion, assemblyInformationalVersion)); }
/// <summary> /// Proposes "to become" <c>AssemblyVersions</c> for a project according /// to numbering scheme. /// </summary> /// <param name="currentAssemblyVersions"> /// <c>AssemblyVersions</c> set for which new versions have to be /// evaluated. /// </param> /// <returns> /// <c>AssemblyVersions</c> set with proposed versions. /// </returns> public AssemblyVersions ProposeNewVersions(AssemblyVersions currentAssemblyVersions) { ProjectVersion toBecomeAssemblyVersion = GetToBecomeProjectVersion(currentAssemblyVersions[AssemblyVersionType.AssemblyVersion]); ProjectVersion toBecomeAssemblyFileVersion = GetToBecomeProjectVersion(currentAssemblyVersions[AssemblyVersionType.AssemblyFileVersion]); ProjectVersion toBecomeAssemblyInformationalVersion = GetToBecomeProjectVersion(currentAssemblyVersions[AssemblyVersionType.AssemblyInformationalVersion]); AssemblyVersions toBecomeAssemblyVersions = new AssemblyVersions(toBecomeAssemblyVersion, toBecomeAssemblyFileVersion, toBecomeAssemblyInformationalVersion); if (m_numberingOptions.SynchronizeAllVersionTypes) { toBecomeAssemblyVersions.SynchronizeVersionsToHighest(); } return(toBecomeAssemblyVersions); }
/// <summary> /// Creates <c>ProjectInfo</c> for project provided. /// </summary> /// <param name="project"> /// Project examined. /// </param> /// <param name="projectTypeInfo"> /// Project type info for the project. /// </param> /// <returns> /// <c>ProjectInfo</c> for the project provided. /// </returns> private ProjectInfo GetProjectInfo(Project project, string parentUiPath, ProjectTypeInfo projectTypeInfo, int level) { if (!projectTypeInfo.IsVersionable) { return(new ProjectInfo(project.Name, project.FullName, AppendBranchToPath(parentUiPath, project.Name), projectTypeInfo, level)); } // array of version streams that will be provided to ProjectInfo constructor ArrayList versionStreams = new ArrayList(); // AssemblyVersions used to find the largest one AssemblyVersions assemblyVersions = AssemblyVersions.Empty; // for a VC++ project search for resource file (which may contain version) if configured so if (projectTypeInfo == ProjectTypeInfo.VCppProject && m_numberingOptions.IncludeVCppResourceFiles) { string[] resourceFilenames = GetProjectVersionFile(project, "*.rc"); // if VC++ project contains both AssemblyInfo file and resource // file with version, compare them and get the larger value foreach (string resourceFilename in resourceFilenames) { VersionStream resourceFileStream = new ResourceFileStream(resourceFilename); AssemblyVersions resourceVersion = resourceFileStream.GetVersions(); versionStreams.Add(resourceFileStream); assemblyVersions = AssemblyVersions.Max(assemblyVersions, resourceVersion); } } string[] assemblyInfoFilenames = GetProjectVersionFile(project, projectTypeInfo.AssemblyInfoFilename); Debug.Assert(assemblyInfoFilenames.Length <= 1); if (assemblyInfoFilenames.Length > 0) { VersionStream assemblyInfoStream = new AssemblyInfoStream(assemblyInfoFilenames[0]); AssemblyVersions assemblyInfoVersions = assemblyInfoStream.GetVersions(); versionStreams.Add(assemblyInfoStream); if (assemblyVersions == AssemblyVersions.Empty) { assemblyVersions = assemblyInfoVersions; } else { assemblyVersions = AssemblyVersions.Max(assemblyVersions, assemblyInfoVersions); } } VersionStream[] vs = (VersionStream[])versionStreams.ToArray(typeof(VersionStream)); bool isProjectModified = IsProjectModified(project, vs); return(new ProjectInfo(project.Name, project.FullName, AppendBranchToPath(parentUiPath, project.Name), projectTypeInfo, isProjectModified, level, assemblyVersions, vs)); }
/// <summary> /// Creates a <c>ProjectInfoList</c> containing <c>ProjectInfo</c> /// objects that have passed the filter provided. /// </summary> /// <param name="projectInfos"> /// An array of all <c>ProjectInfo</c> objects. /// </param> /// <param name="filter"> /// A filter used to select <c>ProjectInfo</c> objects. /// </param> /// <param name="newVersionProvider"> /// <c>NewVersionProvider</c> object responsible to propose a new /// version for each <c>ProjectInfo</c> object. /// </param> /// <param name="assemblyVersionsUpdateMask"> /// Mask defining which versions (AssemblyInfo, Informational or /// Product) may be updated. /// </param> public ProjectInfoList(ProjectInfo[] projectInfos, IProjectFilter filter, NewVersionProvider newVersionProvider, AssemblyVersionType assemblyVersionsUpdateMask) { m_projectInfos = new ArrayList(projectInfos.Length); m_highestToBeAssemblyVersions = AssemblyVersions.MinValue; m_highestProposedAssemblyVersion = AssemblyVersions.MinValue; foreach (ProjectInfo projectInfo in projectInfos) { if (filter.Pass(projectInfo)) { ProjectInfo pi = projectInfo; pi.SetToBecomeVersion(newVersionProvider); if (pi.Modified) { pi.MarkAssemblyVersionsForUpdate(assemblyVersionsUpdateMask); } m_projectInfos.Add(pi); m_highestToBeAssemblyVersions = AssemblyVersions.Max(m_highestToBeAssemblyVersions, pi); m_highestProposedAssemblyVersion = AssemblyVersions.MaxProposed(m_highestProposedAssemblyVersion, pi); } } }
/// <summary> /// Initializes <c>ProjectInfo</c> object. /// </summary> /// <param name="project"> /// Project for which object is created. /// </param> /// <param name="projectTypeInfo"> /// ProjectTypeInfo to initialize with. /// </param> /// <param name="version"> /// <c>ProjectVersion</c>. /// </param> /// <param name="assemblyInfoItem"> /// <c>AssemblyInfo</c> /// </param> /// <param name="numberingOptions"> /// Numbering options. /// </param> public ProjectInfo(string projectName, string projectFullName, string uiPath, ProjectTypeInfo projectTypeInfo, bool modified, int level, AssemblyVersions assemblyVersions, VersionStream[] versionStreams) : this(projectName, projectFullName, uiPath, projectTypeInfo, level) { CurrentAssemblyVersions = assemblyVersions; m_versionStreams = new ArrayList(versionStreams); Modified = modified; }
public ProjectInfo(string projectName, string projectFullName, ProjectTypeInfo projectTypeInfo, bool modified, int level, AssemblyVersions assemblyVersions, VersionStream[] versionStreams) : this(projectName, projectFullName, "", projectTypeInfo, modified, level, assemblyVersions, versionStreams) { }
public AssemblyVersions(AssemblyVersions assemblyVersions) : this(assemblyVersions[AssemblyVersionType.AssemblyVersion].Clone(), assemblyVersions[AssemblyVersionType.AssemblyFileVersion].Clone(), assemblyVersions[AssemblyVersionType.AssemblyInformationalVersion].Clone()) { }
public static AssemblyVersions Max(AssemblyVersions assemblyVersions, ProjectInfo projectInfo) { return(Max(assemblyVersions, projectInfo.ToBecomeAssemblyVersions)); }