Beispiel #1
0
        public override bool Execute()
        {
            DateTime startTime = DateTime.Now;

            ConflictingPackageInfos = SourceBuiltPackageInfos
                                      .Where(item =>
            {
                string sourceBuiltPath = item.ItemSpec;
                string id      = item.GetMetadata("PackageId");
                string version = item.GetMetadata("PackageVersion");

                string packageCachePath = Path.Combine(
                    PackageCacheDir,
                    id.ToLowerInvariant(),
                    version,
                    $"{id.ToLowerInvariant()}.{version}.nupkg");

                if (!File.Exists(packageCachePath))
                {
                    Log.LogMessage(
                        MessageImportance.Low,
                        $"OK: Package not found in package cache: {id} {version}");
                    return(false);
                }

                Log.LogMessage(
                    MessageImportance.Low,
                    $"Package id/version found in package cache, verifying: {id} {version}");

                bool identical = File.ReadAllBytes(sourceBuiltPath)
                                 .SequenceEqual(File.ReadAllBytes(packageCachePath));

                if (!identical)
                {
                    Log.LogMessage(
                        MessageImportance.Low,
                        "BAD: Source-built nupkg is not byte-for-byte identical " +
                        $"to nupkg in cache: {id} {version}");
                    return(true);
                }

                Log.LogMessage(
                    MessageImportance.Low,
                    $"OK: Package in cache is identical to source-built: {id} {version}");
                return(false);
            })
                                      .ToArray();

            // Tell the user about this task, in case it takes a while.
            Log.LogMessage(
                MessageImportance.High,
                "Checked cache for conflicts with source-built nupkgs. " +
                $"Took {DateTime.Now - startTime}");

            return(!Log.HasLoggedErrors);
        }
Beispiel #2
0
        public override bool Execute()
        {
            DateTime startTime = DateTime.Now;

            var knownNupkgs = new Lazy <ILookup <PackageIdentity, string> >(() =>
            {
                Log.LogMessage(
                    MessageImportance.Low,
                    $"Reading all {nameof(KnownOriginPackagePaths)} package identities to search " +
                    "for conflicting package origin...");

                return(KnownOriginPackagePaths.NullAsEmpty().ToLookup(
                           ReadNuGetPackageInfos.ReadIdentity,
                           path => path));
            });

            ConflictingPackageInfos = SourceBuiltPackageInfos
                                      .Where(item =>
            {
                string sourceBuiltPath = item.ItemSpec;
                string id      = item.GetMetadata("PackageId");
                string version = item.GetMetadata("PackageVersion");

                string packageCachePath = Path.Combine(
                    PackageCacheDir,
                    id.ToLowerInvariant(),
                    version,
                    $"{id.ToLowerInvariant()}.{version}.nupkg");

                if (!File.Exists(packageCachePath))
                {
                    Log.LogMessage(
                        MessageImportance.Low,
                        $"OK: Package not found in package cache: {id} {version}");
                    return(false);
                }

                Log.LogMessage(
                    MessageImportance.Low,
                    $"Package id/version found in package cache, verifying: {id} {version}");

                byte[] packageCacheBytes = File.ReadAllBytes(packageCachePath);

                if (packageCacheBytes.SequenceEqual(File.ReadAllBytes(sourceBuiltPath)))
                {
                    Log.LogMessage(
                        MessageImportance.Low,
                        $"OK: Package in cache is identical to source-built: {id} {version}");
                    return(false);
                }

                Log.LogMessage(
                    MessageImportance.Low,
                    "BAD: Source-built nupkg is not byte-for-byte identical " +
                    $"to nupkg in cache: {id} {version}");

                var ident = new PackageIdentity(id, NuGetVersion.Parse(version));

                string message = null;

                foreach (string knownNupkg in knownNupkgs.Value[ident])
                {
                    if (packageCacheBytes.SequenceEqual(File.ReadAllBytes(knownNupkg)))
                    {
                        Log.LogMessage(
                            MessageImportance.Low,
                            $"Found identity match with identical contents: {knownNupkg}");

                        message = (message ?? "Nupkg found at") + $" '{knownNupkg}'";
                    }
                    else
                    {
                        Log.LogMessage(
                            MessageImportance.Low,
                            $"Package identity match, but contents differ: {knownNupkg}");
                    }
                }

                item.SetMetadata(
                    "WarningMessage",
                    message ??
                    "Origin nupkg not found in build directory. It may have been " +
                    "downloaded by NuGet restore.");

                return(true);
            })
                                      .ToArray();

            // Tell the user about this task, in case it takes a while.
            Log.LogMessage(
                MessageImportance.High,
                "Checked cache for conflicts with source-built nupkgs. " +
                $"Took {DateTime.Now - startTime}");

            return(!Log.HasLoggedErrors);
        }