/// <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));
        }
示例#4
0
        /// <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);
         }
     }
 }
示例#7
0
 /// <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;
 }
示例#8
0
 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));
 }