private void CopyPinnedAssembly(string assemblyName, PinnedProject project, string hintPath)
 {
     var backupEntry = project.Pin.GetBackupForAssembly(assemblyName);
     var hintPathDir = Path.GetFullPath(Path.GetDirectoryName(hintPath));
     if(!backupEntry.ContainsOriginalDirectory(hintPathDir))
     {
         var newBackupEntry = backupEntry.AddEntry(Environment.Directory, hintPathDir);
         Environment.PinRegistry.Save();
         Log.LogMessage("Backing up original copy of assembly '" + assemblyName + "' in '" + hintPath + "' because it is about to be overridden by a pinned copy of that assembly...");
         this.ExecTask(() => new CopyAssembly
         {
             Assemblies = hintPath.ToTaskItems(),
             DestinationFolder = newBackupEntry.ToTaskItem(),
             CopyDependencies = false,
             SkipUnchangedFiles = SkipUnchangedFiles
         });
     }
     Log.LogMessage("Copying pinned assembly '" + assemblyName + "' to hint path location '" + hintPath + "'...");
     this.ExecTask(() => new CopyAssembly
     {
         Assemblies = project.Project.AssemblyPath.ToTaskItems(),
         DestinationFolder = hintPath.ToTaskItem().FullDirectoryPath().ToTaskItem(),
         CopyDependencies = false,
         SkipUnchangedFiles = SkipUnchangedFiles
     });
 }
Exemple #2
0
        private bool IsAssemblyInPinnedRepo(string assemblyName, out PinnedProject project)
        {
            var registeredAssembly = AssemblyRegistry.GetAssembly(assemblyName);

            if (registeredAssembly == null)
            {
                project = null;
                return(false);
            }

            var pinnedRepos = GetPinnedRepos().ToList();
            var matchingProjectsInPinnedRepos = (from pinnedRepo in pinnedRepos
                                                 from aProject in registeredAssembly.Projects
                                                 where aProject.AssemblyPath.StartsWith(pinnedRepo.Repo.Path, StringComparison.OrdinalIgnoreCase)
                                                 select new { Repo = pinnedRepo, Project = aProject }).ToArray();

            if (matchingProjectsInPinnedRepos.Length == 0)
            {
                project = null;
                return(false);
            }

            var projectRepoPair = matchingProjectsInPinnedRepos
                                  .OrderByDescending(p => p.Project.Timestamp)
                                  .First();

            project = new PinnedProject
            {
                Pin     = projectRepoPair.Repo.Pin,
                Project = projectRepoPair.Project
            };
            return(true);
        }
Exemple #3
0
        private bool IsAssemblyInPinnedRepo(string assemblyName, out PinnedProject project)
        {
            var registeredAssembly = AssemblyRegistry.GetAssembly(assemblyName);
            if(registeredAssembly == null)
            {
                project = null;
                return false;
            }

            var pinnedRepos = GetPinnedRepos().ToList();
            var matchingProjectsInPinnedRepos = (from pinnedRepo in pinnedRepos
                                                from aProject in registeredAssembly.Projects
                                                where aProject.AssemblyPath.StartsWith(pinnedRepo.Repo.Path, StringComparison.OrdinalIgnoreCase)
                                                select new { Repo = pinnedRepo, Project = aProject}).ToArray();

            if(matchingProjectsInPinnedRepos.Length == 0)
            {
                project = null;
                return false;
            }

            var projectRepoPair = matchingProjectsInPinnedRepos
                .OrderByDescending(p => p.Project.Timestamp)
                .First();
            project = new PinnedProject
            {
                Pin = projectRepoPair.Repo.Pin,
                Project = projectRepoPair.Project
            };
            return true;
        }