Example #1
0
 private static int DivineDiversion(Options options)
 {
     try
     {
         WriteLine(options, Verbosity.Normal, ConsoleColor.White, "Divining the semantic version based on the diversion from the latest release...");
         var diversion = new AssemblyDiversionDiviner(new NvAssemblyInfoFactory(), new DiversionDiviner()).Divine(options.ReleasedPath, options.Target);
         if (options.GenerateFile)
         {
             using (var writer = new StreamWriter(File.Create(Path.Combine(options.WorkingDirectory, Path.GetFileNameWithoutExtension(options.Target), "diversion.json"))))
                 JsonSerializer.CreateDefault(new JsonSerializerSettings {
                     ContractResolver = new CustomContractResolver()
                 }).Serialize(writer, diversion);
         }
         var version = new NextVersion().Determine(diversion);
         if (version == diversion.Old.Version)
         {
             WriteLine(options, Verbosity.Minimal, ConsoleColor.White, "The target project has not diverged from the released version.");
             return(1);
         }
         else if (version > diversion.New.Version)
         {
             if (!options.Correct)
             {
                 WriteLine(options, Verbosity.Minimal, ConsoleColor.DarkRed, "{0} {1} [Currently {2}]", Path.GetFileNameWithoutExtension(options.Target), version, diversion.New.Version);
                 return(2);
             }
             else
             {
                 WriteLine(options, Verbosity.Normal, ConsoleColor.White, "Updating the assembly info in the target project...");
                 File.WriteAllText(options.AssemblyInfoFile, string.Format(Regex.Replace(File.ReadAllText(options.AssemblyInfoFile), "(Assembly(?:File|Informational)?Version)\\s*\\(\\s*\"([0-9.]*)\"\\s*\\)", "$1(\"{0}\")"), version), Encoding.UTF8);
                 WriteLine(options, Verbosity.Minimal, ConsoleColor.DarkCyan, "{0} {1} [Was {2}]", Path.GetFileNameWithoutExtension(options.Target), version, diversion.New.Version);
             }
         }
         else if (version == diversion.New.Version)
         {
             WriteLine(options, Verbosity.Minimal, ConsoleColor.Green, "{0} {1}", Path.GetFileNameWithoutExtension(options.Target), version);
         }
         else
         {
             WriteLine(options, Verbosity.Minimal, ConsoleColor.DarkGreen, "{0} {1} [Determined {2}]", Path.GetFileNameWithoutExtension(options.Target), diversion.New.Version, version);
         }
         return(0);
     }
     catch (Exception e)
     {
         WriteLine(options, Verbosity.Silent, ConsoleColor.Red, e.Message);
         return(-1);
     }
 }
Example #2
0
        public override bool Execute()
        {
            Configuration = GetConfiguration();
            if (string.IsNullOrWhiteSpace(TargetFramework))
            {
                TargetFramework = TargetFrameworkVersion.Replace("v", "net").Replace(".", "");
            }
            if (string.IsNullOrWhiteSpace(PackageId))
            {
                PackageId = Path.GetFileNameWithoutExtension(TargetPath);
            }
            var releasePath = GetLatestReleasePath();

            if (string.IsNullOrWhiteSpace(releasePath) || !File.Exists(releasePath))
            {
                Log.LogMessage(MessageImportance.High, $"A release could not be located for {PackageId}; the assumption is that this will be the first published version for this framework.");
                HasDiverged = true;
                return(true);
            }
            var diversion = new AssemblyDiversionDiviner(new NvAssemblyInfoFactory(), new DiversionDiviner()).Divine(releasePath, TargetPath);

            if (Configuration.GenerateDiversionFile)
            {
                using (var writer = new StreamWriter(File.Create(Path.Combine(Path.GetDirectoryName(TargetPath), "diversion.output.json"))))
                    JsonSerializer.CreateDefault(new JsonSerializerSettings {
                        ContractResolver = new CustomContractResolver()
                    }).Serialize(writer, diversion);
                Log.LogMessage(MessageImportance.High, "Generated diversion.output.json.");
            }
            var nextVersion = new NextVersion().Determine(diversion);
            var version     = diversion.New.Version >= nextVersion ? diversion.New.Version : nextVersion;

            HasDiverged        = diversion.HasDiverged();
            Version            = version.ToString();
            Verified           = version == diversion.New.Version;
            RequiresCorrection = !Verified && Configuration.IsCorrectionEnabled;
            if (!HasDiverged)
            {
                Log.LogMessage(MessageImportance.High, $"{diversion.Identity} has not diverged from its latest release.");
            }
            if (!Verified && !Configuration.IsCorrectionEnabled)
            {
                var message = $"Based on diversion's semantic version rules, the version of {diversion.Identity} being built should be at least {nextVersion}, but is set at {diversion.New.Version}.";
                if (Configuration.Warn)
                {
                    Log.LogWarning(message);
                }
                else
                {
                    Log.LogError(message);
                }
            }
            if (Verified && HasDiverged)
            {
                Log.LogMessage(MessageImportance.High, $"Based on diversion's semantic version rules, the version of {diversion.Identity} being built has the correct version of {diversion.New.Version}.");
            }
            if (RequiresCorrection)
            {
                Log.LogMessage(MessageImportance.High, $"Based on diversion's semantic version rules, the version of {diversion.Identity} will be changed from {diversion.Old.Version} to {nextVersion}.");
            }
            return(Configuration.IsCorrectionEnabled || Verified || Configuration.Warn);
        }