Example #1
0
        /// <summary>
        /// Compares changesets
        /// </summary>
        /// <param name="localPath"></param>
        /// <param name="sourceChangesetId">Source changeset Id</param>
        /// <param name="serverUrl">Server Uri</param>
        /// <param name="srcPath">Source item path</param>
        public static void CompareLocal(string localPath, string sourceChangesetId, string serverUri, string srcPath)
        {
            if (String.IsNullOrWhiteSpace(sourceChangesetId))
            {
                throw new ArgumentException("'sourceChangesetId' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(serverUri))
            {
                throw new TfsHistorySearchException("'serverUri' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(srcPath))
            {
                throw new TfsHistorySearchException("'srcPath' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(localPath))
            {
                throw new TfsHistorySearchException("'localPath' is null or empty.");
            }

            TfsTeamProjectCollection tc  = new TfsTeamProjectCollection(new Uri(serverUri));
            VersionControlServer     vcs = tc.GetService(typeof(VersionControlServer)) as VersionControlServer;

            //VersionSpec sourceVersion = VersionSpec.ParseSingleSpec(sourceChangesetId, vcs.TeamFoundationServer.AuthenticatedUserName);
            VersionSpec sourceVersion = VersionSpec.ParseSingleSpec(sourceChangesetId, vcs.AuthorizedUser);

            //VersionSpec targetVersion = VersionSpec.ParseSingleSpec(targetChangesetId, vcs.TeamFoundationServer.AuthenticatedUserName);

            //Difference.DiffFiles(
            Difference.VisualDiffItems(vcs, Difference.CreateTargetDiffItem(vcs, srcPath, sourceVersion, 0, sourceVersion), Difference.CreateTargetDiffItem(vcs, localPath, null, 0, null));
            //Difference.VisualDiffFiles();
            //Difference.VisualDiffItems(vcs,
            //                           Difference.CreateTargetDiffItem(vcs, srcPath, sourceVersion, 0, sourceVersion),
            //                           Difference.CreateTargetDiffItem(vcs, targetPath, targetVersion, 0, targetVersion));
        }
        public void GetUpdates()
        {
            var packages = new[] { new LucenePackage(path => null)
                                   {
                                       Id = "id1", Version = new StrictSemanticVersion("2.0")
                                   } };

            var constraint = new VersionSpec {
                MinVersion = new SemanticVersion("1.0"), IsMinInclusive = false
            };

            repo.Setup(r => r.GetUpdates(
                           It.Is <IEnumerable <IPackage> >(p => p.Count() == 1),
                           false,
                           false,
                           It.Is <IEnumerable <FrameworkName> >(p => !p.Any()),
                           It.Is <IEnumerable <IVersionSpec> >(p => p.Single().ToString() == constraint.ToString())))
            .Returns(packages);

            var result = controller.GetUpdates("id1", "1.0", false, false, "", "");

            repo.VerifyAll();

            Assert.That(result, Is.InstanceOf <OkNegotiatedContentResult <IQueryable <ODataPackage> > >());
            var queryable = ((OkNegotiatedContentResult <IQueryable <ODataPackage> >)result).Content;

            Assert.That(queryable.Count(), Is.EqualTo(1));
            Assert.That(queryable.First().Id, Is.EqualTo("id1"));
            Assert.That(queryable.First().Version, Is.EqualTo("2.0"));
        }
        /// <summary>
        /// Retrieves the latest changeset ID associated with a path
        /// </summary>
        /// <param name="localPath">A path on the local filesystem</param>
        /// <param name="credentials">Credentials used to authenticate against the serer</param>
        /// <returns></returns>
        public int GetLatestChangesetId(string localPath, ICredentials credentials)
        {
            int    latestChangesetId = 0;
            string server;

            Workstation   workstation   = new Workstation(versionControlClientAssembly);
            WorkspaceInfo workspaceInfo = workstation.GetLocalWorkspaceInfo(localPath);

            server = workspaceInfo.ServerUri.ToString();
            VersionControlServer sourceControl = new VersionControlServer(clientAssembly, versionControlClientAssembly, server, credentials);

            Workspace            workspace            = sourceControl.GetWorkspace(localPath);
            WorkspaceVersionSpec workspaceVersionSpec = new WorkspaceVersionSpec(versionControlClientAssembly, workspace);

            VersionSpec   versionSpec   = new VersionSpec(versionControlClientAssembly);
            RecursionType recursionType = new RecursionType(versionControlClientAssembly);

            IEnumerable history = sourceControl.QueryHistory(localPath, versionSpec.Latest, recursionType.Full, workspaceVersionSpec);

            IEnumerator historyEnumerator = history.GetEnumerator();
            Changeset   latestChangeset   = new Changeset(versionControlClientAssembly);

            if (historyEnumerator.MoveNext())
            {
                latestChangeset = new Changeset(versionControlClientAssembly, historyEnumerator.Current);
            }

            if (latestChangeset.Instance != null)
            {
                latestChangesetId = latestChangeset.ChangesetId;
            }
            return(latestChangesetId);
        }
Example #4
0
        public void HashCode()
        {
            var spec1 = new VersionSpec { MinVersion = new SemanticVersion("1.0"), MaxVersion = new SemanticVersion("2.0") };
            var spec2 = new VersionSpec { MinVersion = new SemanticVersion("1.0"), MaxVersion = new SemanticVersion("2.0") };

            Assert.Equal(spec1.GetHashCode(), spec2.GetHashCode());
        }
Example #5
0
        public async Task <IFileSource> GetFileAsync(VersionSpec version)
        {
            BuildServices();
            var container = Client.GetContainerReference(ContainerName);
            await container.PrepContainer();

            var path  = BuildPath(version);
            var blobs = await container.ListBlobsAsync();

            if (MatchStrategy == null)
            {
                var blob = blobs
                           .OfType <CloudBlockBlob>()
                           .FirstOrDefault(
                    b => PatternMatcher.Match(b.Name, version)
                    );
                if (blob == null)
                {
                    throw new VersionNotFoundException($"No matches found from {blobs.Count} files using {PatternMatcher?.Name} matching!");
                }
                return(blob.ToSource(version));
            }
            var match = await MatchStrategy.MatchAsync(blobs, version);

            return(match);
        }
Example #6
0
        public void Equal_Not()
        {
            var spec1 = new VersionSpec { MinVersion = new SemanticVersion("1.0") };
            var spec2 = new VersionSpec { MinVersion = new SemanticVersion("2.0") };

            Assert.False(Equals(spec1, spec2));
        }
Example #7
0
        public void Equal_Operator()
        {
            var spec1 = new VersionSpec();
            var spec2 = new VersionSpec();

            Assert.True(spec1 == spec2);
        }
        public SourceItem[] QueryItems(int revision, string path, Recursion recursion)
        {
            List <SourceItem> list = null;

            persistentCache.UnitOfWork(delegate
            {
                string serverPath = GetServerPath(path);

                if (serverPath == Constants.ServerRootPath && recursion == Recursion.None)
                {
                    SourceItem[] items = sourceControlService.QueryItems(serverUrl, credentials, serverPath, RecursionType.None,
                                                                         VersionSpec.FromChangeset(revision), DeletedState.NonDeleted,
                                                                         ItemType.Any);

                    list = new List <SourceItem>(items);
                    return;
                }

                EnsureRevisionIsCached(revision, path);

                string cacheKey = GetItemsListCacheKey(recursion, revision, serverPath);

                list = persistentCache.GetList <SourceItem>(cacheKey);
                list.Sort(delegate(SourceItem x, SourceItem y)
                {
                    return(x.RemoteName.CompareTo(y.RemoteName));
                });
            });
            return(list.ToArray());
        }
        public void ReadPackages_TwoPackagesInSourceRepositoryAndTwoNewerPackageVersionAvailableAndProjectHasConstraint_NewerPackageVersionThatMeetsConstraintIsDisplayed()
        {
            CreateViewModel();
            var versionSpec = new VersionSpec();

            versionSpec.MinVersion     = new SemanticVersion("1.0");
            versionSpec.IsMinInclusive = true;
            versionSpec.MaxVersion     = new SemanticVersion("2.0");
            versionSpec.IsMaxInclusive = true;
            var constraintProvider = new DefaultConstraintProvider();

            constraintProvider.AddConstraint("Test", versionSpec);
            solution.FakeProjectToReturnFromGetProject.ConstraintProvider = constraintProvider;
            AddPackageToLocalRepository("Test", "1.0.0.0");
            AddPackageToActiveRepository("Test", "1.0.0.0");
            FakePackage expectedPackage = AddPackageToActiveRepository("Test", "2.0.0.0");

            AddPackageToActiveRepository("Test", "3.0.0.0");

            viewModel.ReadPackages();
            CompleteReadPackagesTask();

            var expectedPackages = new FakePackage[] {
                expectedPackage
            };

            PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
        }
Example #10
0
        public void RenameUndeleteMergeTest()
        {
            int changesetId = AddBranch();

            PendUndeleteRename(file);
            SourceWorkspace.Merge(source.LocalPath, target.LocalPath,
                                  VersionSpec.ParseSingleSpec(changesetId.ToString(), Environment.UserName),
                                  VersionSpec.Latest, LockLevel.None, RecursionType.Full, MergeOptions.None);

            CheckinMergeResolve(changesetId);

            if (TestEnvironment.SourceTFSVersion == TFSVersionEnum.TFS2010)
            {
                Run();

                // 1 extra merge item on source side is expected in dev10
                VerifyHistory(1, 1);

                //Changeset targetChangeset = diff.TargetChanges[0];
                //Changeset sourceChangeset = diff.SourceChanges[0];
                //diff.ChangesetDiff(ref targetChangeset, ref sourceChangeset);
                //Assert.AreEqual(1, sourceChangeset.Changes.Length);
                //Assert.AreEqual(ChangeType.Merge, sourceChangeset.Changes[0].ChangeType);
                //Assert.AreEqual(0, targetChangeset.Changes.Length);

                // verify content matches
                Assert.IsTrue(VerifyContents());
            }
            else
            {
                RunAndValidate();
            }
        }
Example #11
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            if (reader.TokenType == JsonToken.String)
            {
                return(serializer.Deserialize(reader, objectType));
            }

            JObject obj = JObject.Load(reader);

            if (obj["Id"] != null)
            {
                var minVersion = obj["VersionSpec"]["MinVersion"].Value <string>();
                var maxVersion = obj["VersionSpec"]["MaxVersion"].Value <string>();

                var version = new VersionSpec()
                {
                    IsMaxInclusive = obj["VersionSpec"]["IsMaxInclusive"].ToObject <bool>(),
                    MaxVersion     = String.IsNullOrEmpty(maxVersion) ? null : new SemanticVersion(maxVersion),
                    IsMinInclusive = obj["VersionSpec"]["IsMinInclusive"].ToObject <bool>(),
                    MinVersion     = String.IsNullOrEmpty(minVersion)  ? null : new SemanticVersion(minVersion)
                };

                return(new PackageDependency(
                           obj["Id"].ToString(),
                           version,
                           obj["Include"].Value <string>(),
                           obj["Exclude"].Value <string>()));
            }

            return(serializer.Deserialize(reader, objectType));
        }
Example #12
0
        public Task <IFileSource> GetFileAsync(VersionSpec version)
        {
            var message = "There is no storage backend currently configured! Use the settings file or environment variables to enable a remote backend.";

            _logger.LogWarning(404, message);
            throw new VersionNotFoundException(message);
        }
Example #13
0
        public void Equal_Operator()
        {
            var spec1 = new VersionSpec();
            var spec2 = new VersionSpec();

            Assert.True(spec1 == spec2);
        }
Example #14
0
        public void RenameEditUndeleteMergeTest()
        {
            int changesetId = AddBranch();

            MergeDeletePendUndelete(m_file, changesetId);
            SourceWorkspace.PendRename(m_file.ServerPath, m_file.NewServerPath);
            SourceAdapter.EditFile(m_file.NewLocalPath);

            SourceWorkspace.Merge(m_source.LocalPath, m_target.LocalPath,
                                  VersionSpec.ParseSingleSpec(changesetId.ToString(), Environment.UserName),
                                  VersionSpec.Latest, LockLevel.None, RecursionType.Full, MergeOptions.None);

            resolveConflictAcceptThiers();

            if (TestEnvironment.SourceEndPoint.IsTfsAdapter &&
                TestEnvironment.SourceEndPoint.AdapterType >= AdapterType.TFS2010VC)
            {
                Run();
                Assert.IsTrue(VerifyContents());
            }
            else
            {
                RunAndValidate();
            }
        }
Example #15
0
 public static string FindBranch(VersionControlServer tfs, string path, VersionSpec versionSpec = null)
 {
     if (versionSpec == null)
     {
         versionSpec = VersionSpec.Latest;
     }
     try {
         while (!string.IsNullOrEmpty(path))
         {
             var item = tfs.GetItem(path, versionSpec, DeletedState.NonDeleted, GetItemsOptions.IncludeBranchInfo);
             if (item == null)
             {
                 return(null);
             }
             if (item.IsBranch)
             {
                 return(path);
             }
             path = System.IO.Path.GetDirectoryName(path);
         }
         return(null);
     }
     catch (ItemNotMappedException) {
         return(null);
     }
 }
Example #16
0
        public async Task <IFileSource> GetFileAsync(VersionSpec version)
        {
            if (Credentials == null)
            {
                _logger.LogCritical("Repo details not found! Please add GitHubStorage to your app configuration and restart the server.");
                throw new UnauthorizedAccessException("Repository details not found in configuration!");
            }
            try
            {
                var releases = await Client.Repository.Release.GetAll(Credentials.Owner, Credentials.Repo);

                if (MatchStrategy == null)
                {
                    foreach (var release in releases)
                    {
                        var asset = release.Assets.FirstOrDefault(a => PatternMatcher.Match(a.Name, version));
                        if (asset != null)
                        {
                            var source = new GitHubFileSource(version, !release.Draft);
                            source.Build(asset);
                            return(source);
                        }
                    }
                    throw new VersionNotFoundException();
                }
                return(await MatchStrategy.MatchAsync(releases, version));
            }
            catch (RateLimitExceededException)
            {
                throw new VersionNotFoundException("GitHub API rate limit exceeded! Unable to fetch releases. Please add an API token to the `GitHubStorage/ApiToken` configuration key.");
            }
        }
Example #17
0
 public AzureHDInsightVersionSpec(VersionSpec versionSpec)
 {
     this.FriendlyName = versionSpec?.FriendlyName;
     this.DisplayName = versionSpec?.DisplayName;
     this.IsDefault = versionSpec?.IsDefault.ToString();  // ToDo: need to change IsDefault from string to bool, waiting for next major release
     this.ComponentVersions = versionSpec?.ComponentVersions;
 }
Example #18
0
        public void GetUpdatedPackages_OnePackageReferencedWithConstraintAndUpdatesAvailable_LatestVersionReturnedBasedOnConstraint()
        {
            AddPackageReference("Test", "1.0");
            FakePackage package = AddPackageToSourceRepository("Test", "2.0");

            FakePackage [] expectedPackages = new [] {
                package
            };
            AddPackageToSourceRepository("Test", "3.0");
            var versionSpec = new VersionSpec();

            versionSpec.MinVersion     = new SemanticVersion("1.0");
            versionSpec.IsMinInclusive = true;
            versionSpec.MaxVersion     = new SemanticVersion("2.0");
            versionSpec.IsMaxInclusive = true;
            var constraintProvider = new DefaultConstraintProvider();

            constraintProvider.AddConstraint("Test", versionSpec);
            project.ConstraintProvider = constraintProvider;
            var repository = new FakePackageRepository();

            repository.FakePackages = sourceRepositoryPackages;
            CreateUpdatedPackages(repository);

            IEnumerable <IPackage> packages = updatedPackages.GetUpdatedPackages();

            PackageCollectionAssert.AreEqual(expectedPackages, packages);
        }
Example #19
0
        public void NotEqual_Operator()
        {
            var spec1 = new VersionSpec();
            var spec2 = new VersionSpec { IsMaxInclusive = true };

            Assert.True(spec1 != spec2);
        }
Example #20
0
        public void RenameMergeTest()
        {
            MigrationItemStrings file1 = new MigrationItemStrings(source.Name + "file1.txt", source.Name + "renamed-file1.txt", TestEnvironment, true);

            SourceAdapter.AddFile(file1.LocalPath);

            MigrationItemStrings file2 = new MigrationItemStrings(source.Name + "file2.txt", source.Name + "renamed-file2.txt", TestEnvironment, true);

            SourceAdapter.AddFile(file2.LocalPath);

            int changesetId = AddBranch();

            SourceAdapter.RenameItem(file.ServerPath, file.NewServerPath, AddComment);
            SourceAdapter.RenameItem(file1.ServerPath, file1.NewServerPath, AddComment);
            SourceAdapter.RenameItem(file2.ServerPath, file2.NewServerPath, AddComment);

            SourceWorkspace.Merge(source.LocalPath, target.LocalPath,
                                  VersionSpec.ParseSingleSpec(changesetId.ToString(), Environment.UserName),
                                  VersionSpec.Latest, LockLevel.None, RecursionType.Full, MergeOptions.ForceMerge);

            Conflict[] conflicts = SourceWorkspace.QueryConflicts(new string[] { "$/" }, true);

            foreach (Conflict conflict in conflicts)
            {
                conflict.Resolution = Resolution.AcceptTheirs;
                SourceWorkspace.ResolveConflict(conflict);
            }

            RunAndValidate();
        }
Example #21
0
        public static List <ChangesetViewModel> GetChangesetHistory(ChangesetHistoryRequest request)
        {
            List <ChangesetViewModel> changesetList = new List <ChangesetViewModel>();

            using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(request.TFSUrl)))
            {
                tpc.EnsureAuthenticated();
                VersionControlServer vcs = tpc.GetService <VersionControlServer>();

                VersionSpec fromDateVersion = null;
                VersionSpec toDateVersion   = null;
                if (request.FromDate != DateTime.MinValue || request.ToDate != DateTime.MinValue)
                {
                    fromDateVersion = new DateVersionSpec(request.FromDate.AddDays(-1));
                    toDateVersion   = new DateVersionSpec(request.ToDate);
                }

                IEnumerable changesets = vcs.QueryHistory(request.ReleaseBranchUrl, VersionSpec.Latest,
                                                          0, RecursionType.Full, null, fromDateVersion, toDateVersion, int.MaxValue, true, true);

                var ignoreUsers = request.IgnoreFromUsers;
                foreach (Changeset changeset in changesets)
                {
                    if (!ignoreUsers.Any(n => changeset.Owner.ToLower().Contains(n) || changeset.OwnerDisplayName.ToLower().Contains(n)))
                    {
                        changesetList.Add(new ChangesetViewModel()
                        {
                            ChangesetId = changeset.ChangesetId, Owner = changeset.OwnerDisplayName ?? changeset.Owner, Comment = changeset.Comment, CheckInDateTime = changeset.CreationDate
                        });
                    }
                }
            }
            return(changesetList);
        }
Example #22
0
        public void Equal_VersionsSpecified()
        {
            var spec1 = new VersionSpec { MinVersion = new SemanticVersion("1.0"), MaxVersion = new SemanticVersion("2.0") };
            var spec2 = new VersionSpec { MinVersion = new SemanticVersion("1.0"), MaxVersion = new SemanticVersion("2.0") };

            Assert.True(Equals(spec1, spec2));
        }
Example #23
0
        private void BtnGetInformation_Click(object sender, EventArgs e)
        {
            TfsTeamProjectCollection ProjectCollection = new TfsTeamProjectCollection(new Uri("http://example.com:8080/tfs/ProjectCollection"));

            ProjectCollection.Connect(ConnectOptions.None);

            var vcs = ProjectCollection.GetService <VersionControlServer>();

            VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null);

            VersionSpec versionTo = VersionSpec.Latest;

            string serverPath = @"$/";

            List <Changeset> Changesets = vcs.QueryHistory(serverPath,
                                                           VersionSpec.Latest,
                                                           0,
                                                           RecursionType.Full,
                                                           null,
                                                           versionFrom,
                                                           versionTo,
                                                           Int32.MaxValue,
                                                           true,
                                                           false
                                                           ).Cast <Changeset>().ToList <Changeset>();

            BaseChangesets = Changesets;

            if (BaseChangesets != null)
            {
                GrpDateFilter.Enabled = true;
            }
        }
 public AzureHDInsightVersionSpec(VersionSpec versionSpec)
 {
     this.FriendlyName      = versionSpec?.FriendlyName;
     this.DisplayName       = versionSpec?.DisplayName;
     this.IsDefault         = versionSpec?.IsDefault;
     this.ComponentVersions = versionSpec?.ComponentVersions;
 }
Example #25
0
        public void Equal_Default()
        {
            var spec1 = new VersionSpec();
            var spec2 = new VersionSpec();

            Assert.True(Equals(spec1, spec2));
        }
Example #26
0
 private void FixUpVersionSpec(ref VersionSpec spec)
 {
     if (spec is LabelVersionSpec)
     {
         spec = this.ConvertToChangesetSpec((LabelVersionSpec)spec);
     }
 }
        private void FetchChangesets(VersionControlServer server, string path, VersionSpec version)
        {
            var changesets = server.QueryHistory(path, version, 0, RecursionType.None, null, null, version, int.MaxValue, true, false, true, false);

            foreach (Changeset changeset in changesets)
            {
                if (changeset.Changes.Length != 1)
                {
                    throw new InvalidOperationException("Expected exactly 1 change, but got " + changeset.Changes.Length + " for ChangesetId " + changeset.ChangesetId);
                }

                this.changesets.Add(changeset);
                filenames.Add(null);
                manualResetEvents.Add(null);

                var change = changeset.Changes[0];
                if (change.ChangeType.HasFlag(ChangeType.Branch))
                {
                    var branchHistoryTree = server.GetBranchHistory(new[] { new ItemSpec(change.Item.ServerItem, RecursionType.None) }, new ChangesetVersionSpec(changeset.ChangesetId));
                    if (branchHistoryTree == null || branchHistoryTree.Length == 0 || branchHistoryTree[0].Length == 0)
                    {
                        continue;
                    }
                    var item = branchHistoryTree[0][0].GetRequestedItem().Relative.BranchFromItem;
                    if (item != null)
                    {
                        FetchChangesets(server, item.ServerItem, new ChangesetVersionSpec(item.ChangesetId));
                    }
                }
            }
        }
Example #28
0
        public void Equal_Default()
        {
            var spec1 = new VersionSpec();
            var spec2 = new VersionSpec();

            Assert.True(Equals(spec1, spec2));
        }
Example #29
0
        private VersionSpec GetToVersion()
        {
            VersionSpec Spec = this.ToVersionSpec.GetVersionSpec();

            this.FixUpVersionSpec(ref Spec);
            return(Spec);
        }
Example #30
0
        public void MergeMovesTest()
        {
            MigrationItemStrings branch = new MigrationItemStrings("source/", "target/", TestEnvironment, true);
            MigrationItemStrings file   = new MigrationItemStrings("source/file.txt", "source/sub/file.txt", TestEnvironment, true);
            MigrationItemStrings file2  = new MigrationItemStrings("source/file2.txt", "source/sub/file2.txt", TestEnvironment, true);

            SourceAdapter.AddFile(file.LocalPath);
            SourceAdapter.AddFile(file2.LocalPath);

            int branchChangeset = SourceAdapter.BranchItem(branch.ServerPath, branch.NewServerPath);

            SourceAdapter.EditFile(file.LocalPath);
            SourceAdapter.EditFile(file.LocalPath);
            SourceAdapter.EditFile(m_extraFile.LocalPath);

            SourceAdapter.RenameItem(file.ServerPath, file.NewServerPath);
            SourceAdapter.RenameItem(file2.ServerPath, file2.NewServerPath);

            SourceWorkspace.Merge(branch.ServerPath, branch.NewServerPath,
                                  VersionSpec.ParseSingleSpec(branchChangeset.ToString(),
                                                              Environment.UserName), VersionSpec.Latest, LockLevel.None, RecursionType.Full, MergeOptions.None);
            ResolveConflicts(Resolution.AcceptTheirs);
            SourceWorkspace.CheckIn(SourceWorkspace.GetPendingChanges(), MergeComment);

            RunAndValidate();
        }
Example #31
0
        public override void Execute()
        {
            var package             = Package;
            var packageRepositories = _moduleCatalog.GetAllPackageRepositories(true).ToList();

            var versionSpec = new VersionSpec
            {
                IsMinInclusive = true,
                MinVersion     = package.Version,
                IsMaxInclusive = true,
                MaxVersion     = package.Version
            };

            var packagesToDownload = ResolveDependencies(package.Id, versionSpec, packageRepositories);

            foreach (var packageToDownload in packagesToDownload)
            {
                Log.Debug("Installing package '{0}' from source '{1}'", packageToDownload.Package.Id, packageToDownload.PackageRepository.Source);

                var packageManager = new PackageManager(packageToDownload.PackageRepository, OutputDirectory);

                lock (_syncObj)
                {
                    packageManager.InstallPackage(packageToDownload.Package, IgnoreDependencies, AllowPrereleaseVersions);
                }
            }
        }
Example #32
0
        /// <summary>
        /// Compares changesets
        /// </summary>
        /// <param name="sourceChangesetId">Source changeset Id</param>
        /// <param name="targetChangesetId">Target changeset Id</param>
        /// <param name="serverUrl">Server Uri</param>
        /// <param name="srcPath">Source item path</param>
        /// <param name="targetPath">Target item path</param>
        public static void Compare(string sourceChangesetId, string targetChangesetId, string serverUri, string srcPath, string targetPath)
        {
            if (String.IsNullOrWhiteSpace(sourceChangesetId))
            {
                throw new ArgumentException("'sourceChangesetId' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(targetChangesetId))
            {
                throw new ArgumentException("'targetChangesetId' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(serverUri))
            {
                throw new ArgumentException("'serverUri' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(srcPath))
            {
                throw new ArgumentException("'srcPath' is null or empty.");
            }
            if (String.IsNullOrWhiteSpace(targetPath))
            {
                throw new ArgumentException("'targetPath' is null or empty.");
            }

            TfsTeamProjectCollection tc  = new TfsTeamProjectCollection(new Uri(serverUri));
            VersionControlServer     vcs = tc.GetService(typeof(VersionControlServer)) as VersionControlServer;

            VersionSpec sourceVersion = VersionSpec.ParseSingleSpec(sourceChangesetId, vcs.AuthorizedUser);
            VersionSpec targetVersion = VersionSpec.ParseSingleSpec(targetChangesetId, vcs.AuthorizedUser);

            Difference.VisualDiffItems(vcs,
                                       Difference.CreateTargetDiffItem(vcs, srcPath, sourceVersion, 0, sourceVersion),
                                       Difference.CreateTargetDiffItem(vcs, targetPath, targetVersion, 0, targetVersion));
        }
Example #33
0
    public override void Run()
    {
        RecursionType rtype   = OptionRecursive ? RecursionType.Full : RecursionType.None;
        VersionSpec   version = VersionFromString(OptionVersion);

        List <ItemSpec> itemSpecs = new List <ItemSpec>();

        foreach (string item in Arguments)
        {
            string fpath = (VersionControlPath.IsServerItem(item))? item : Path.GetFullPath(item);
            itemSpecs.Add(new ItemSpec(fpath, rtype));
        }

        BranchHistoryTreeItem[][] treeItemsArray = VersionControlServer.GetBranchHistory(itemSpecs.ToArray(), version);
        foreach (BranchHistoryTreeItem[] treeItems in treeItemsArray)
        {
            //Console.WriteLine("New TreeItem");
            foreach (BranchHistoryTreeItem treeItem in treeItems)
            {
                //Console.WriteLine("Relative: " + treeItem.Relative);
                //Console.WriteLine(treeItem.Relative.ServerItem);
                foreach (Object obj in treeItem.Children)
                {
                    BranchRelative branch   = obj as BranchRelative;
                    Item           fromItem = branch.BranchFromItem;
                    Console.WriteLine(fromItem.ServerItem);
                    Item toItem = branch.BranchToItem;
                    Console.Write(">> \t" + toItem.ServerItem);
                    Console.WriteLine("\tBranched from version " + fromItem.ChangesetId + " <<");
                }
            }
        }
    }
Example #34
0
    public GetStatus UpdatePathFromServer(string[] paths)
    {
        // process command options
        RecursionType folderRecursion = OptionRecursive ? RecursionType.Full : RecursionType.OneLevel;
        bool          getSetting      = Settings.Current.GetAsBool("Get.Recursive");

        if (getSetting)
        {
            folderRecursion = RecursionType.Full;
        }

        VersionSpec       version  = VersionFromString(OptionVersion);
        List <GetRequest> requests = new List <GetRequest>();

        foreach (string path in paths)
        {
            RecursionType recursion = RecursionType.None;
            if (Directory.Exists(path))
            {
                recursion = folderRecursion;
            }

            if (path[0] != '$')
            {
                requests.Add(new GetRequest(Path.GetFullPath(path), recursion, version));
            }
            else
            {
                requests.Add(new GetRequest(path, recursion, version));
            }
        }

        return(workspace.Get(requests.ToArray(), GetOptionFlags()));
    }
Example #35
0
        public async Task <IFileSource> GetFileAsync(VersionSpec version)
        {
            var blobs = new List <S3Object>();

            using (var client = BuildClient())
            {
                ListObjectsV2Request request = new ListObjectsV2Request
                {
                    BucketName = BucketName,
                    MaxKeys    = 10
                };
                ListObjectsV2Response response;
                do
                {
                    response = await client.ListObjectsV2Async(request);

                    blobs.AddRange(response.S3Objects);
                    request.ContinuationToken = response.NextContinuationToken;
                } while (response.IsTruncated == true);
            }
            if (MatchStrategy == null)
            {
                var blob = blobs.FirstOrDefault(
                    o => PatternMatcher.Match(o.Key, version)
                    );
                if (blob == null)
                {
                    throw new VersionNotFoundException();
                }
                return(ToSource(version, blob));
            }
            var match = await MatchStrategy.MatchAsync(blobs, version);

            return(match);
        }
Example #36
0
        public async Task <IFileSource> GetFileAsync(VersionSpec version)
        {
            var pattern = BuildPattern(version);
            //TODO: refactor this to use strategies and matchers
            var files = await Search(pattern);

            if (!files.Any())
            {
                throw new VersionNotFoundException();
            }
            var firstMatch = files.First();

            using (var client = BuildClient())
            {
                var req = new GetPreSignedUrlRequest
                {
                    BucketName = BucketName,
                    Key        = firstMatch.Key,
                    Expires    = DateTime.Now.AddMinutes(15)
                };
                var url = client.GetPreSignedURL(req);
                return(new S3FileSource(new Uri(url))
                {
                    Metadata = new FileMetadata(firstMatch.Size, firstMatch.Key.Split('/', '\\', ':').Last()),
                    Version = version
                });
            }
        }
 public ChangeRequest(string path, RequestType requestType, ItemType itemType,
                      RecursionType recursion, LockLevel lockLevel, VersionSpec version)
 {
     this.Item = new ItemSpec(path, recursion);
     this.RequestType = requestType;
     this.ItemType = itemType;
     this.LockLevel = lockLevel;
     this.VersionSpec = version;
 }
Example #38
0
        public void ToStringMinVersionExclusive()
        {
            // Arrange
            var spec = new VersionSpec {
                IsMinInclusive = false,
                MinVersion = new Version("1.0"),
            };

            // Act
            string value = spec.ToString();

            // Assert
            Assert.AreEqual("(1.0, )", value);
        }
Example #39
0
        public void ToStringMaxVersionInclusive()
        {
            // Arrange
            var spec = new VersionSpec {
                IsMaxInclusive = true,
                MaxVersion = new Version("1.0"),
            };

            // Act
            string value = spec.ToString();

            // Assert
            Assert.AreEqual("(, 1.0]", value);
        }
        public void ToStringMinVersionInclusive()
        {
            // Arrange
            var spec = new VersionSpec
            {
                IsMinInclusive = true,
                MinVersion = new SemanticVersion("1.0"),
            };

            // Act
            string value = spec.ToString();

            // Assert
            Assert.Equal("1.0", value);
        }
        public void ToStringMaxVersionExclusive()
        {
            // Arrange
            var spec = new VersionSpec
            {
                IsMaxInclusive = false,
                MaxVersion = new SemanticVersion("1.0"),
            };

            // Act
            string value = spec.ToString();

            // Assert
            Assert.Equal("(, 1.0)", value);
        }
 private static IVersionSpec CreateVersionSpec(
     string minVersion = null,
     string maxVersion = null,
     bool isMinInclusive = true,
     bool isMaxInclusive = false)
 {
     var versionSpec = new VersionSpec();
     versionSpec.IsMaxInclusive = isMaxInclusive;
     versionSpec.IsMinInclusive = isMinInclusive;
     if (!string.IsNullOrWhiteSpace(maxVersion))
     {
         versionSpec.MaxVersion = new SemanticVersion(maxVersion);
     }
     if (!string.IsNullOrWhiteSpace(minVersion))
     {
         versionSpec.MinVersion = new SemanticVersion(minVersion);
     }
     return versionSpec;
 }
 public IEnumerable<PackageDependency> GetPackageDependenciesFromPackagesConfig(XDocument packagesConfigXml)
 {
     List<PackageDependency> packageDependencies = new List<PackageDependency>();
     if (packagesConfigXml.Root != null)
     {
         foreach (XElement packageElement in packagesConfigXml.Root.Elements("package"))
         {
             XAttribute idAttribute = packageElement.Attribute("id");
             XAttribute versionAttribute = packageElement.Attribute("version");
             if (idAttribute != null && versionAttribute != null)
             {
                 string id = idAttribute.Value;
                 IVersionSpec versionSpec = new VersionSpec(new SemanticVersion(versionAttribute.Value));
                 PackageDependency packageInfo = new PackageDependency(id, versionSpec);
                 packageDependencies.Add(packageInfo);
             }
         }
     }
     return packageDependencies;
 }
        public void GetUpdates()
        {
            var packages = new[] {new LucenePackage(path => null)  {Id = "id1", Version = new StrictSemanticVersion("2.0")}};

            var constraint = new VersionSpec {MinVersion = new SemanticVersion("1.0"), IsMinInclusive = false};
            repo.Setup(r => r.GetUpdates(
                It.Is<IEnumerable<IPackage>>(p => p.Count() == 1),
                false,
                false,
                It.Is<IEnumerable<FrameworkName>>(p => !p.Any()),
                It.Is<IEnumerable<IVersionSpec>>(p => p.Single().ToString() == constraint.ToString())))
                .Returns(packages);

            var result = service.GetUpdates("id1", "1.0", false, false, "", "");

            repo.VerifyAll();

            Assert.That(result.Count(), Is.EqualTo(1));
            Assert.That(result.First().Id, Is.EqualTo("id1"));
            Assert.That(result.First().Version, Is.EqualTo("2.0"));
        }
        public void GetUpdates()
        {
            var packages = new[] {new LucenePackage(path => null)  {Id = "id1", Version = new StrictSemanticVersion("2.0")}};

            var constraint = new VersionSpec {MinVersion = new SemanticVersion("1.0"), IsMinInclusive = false};
            repo.Setup(r => r.GetUpdates(
                It.Is<IEnumerable<IPackage>>(p => p.Count() == 1),
                false,
                false,
                It.Is<IEnumerable<FrameworkName>>(p => !p.Any()),
                It.Is<IEnumerable<IVersionSpec>>(p => p.Single().ToString() == constraint.ToString())))
                .Returns(packages);

            var result = controller.GetUpdates("id1", "1.0", false, false, "", "");

            repo.VerifyAll();

            Assert.That(result, Is.InstanceOf<OkNegotiatedContentResult<IQueryable<ODataPackage>>>());
            var queryable = ((OkNegotiatedContentResult<IQueryable<ODataPackage>>) result).Content;

            Assert.That(queryable.Count(), Is.EqualTo(1));
            Assert.That(queryable.First().Id, Is.EqualTo("id1"));
            Assert.That(queryable.First().Version, Is.EqualTo("2.0"));
        }
 /// <summary>
 /// Returns the largest version spec we can think of to start narrowing down from.
 /// </summary>
 /// <returns></returns>
 private static VersionSpec ReturnLargestVersionSpec()
 {
     VersionSpec smallest = new VersionSpec()
     {
         MinVersion = SemanticVersion.Parse("0.0.0.0"),
         MaxVersion = SemanticVersion.Parse("999.999.999.999"),
         IsMinInclusive = true,
         IsMaxInclusive = true
     };
     return smallest;
 }
Example #47
0
        public void ParseVersionParsesTokensVersionsCorrectly(string versionString, VersionSpec versionSpec)
        {
            // Act
            var actual = VersionUtility.ParseVersionSpec(versionString);

            // Assert
            Assert.Equal(versionSpec.IsMinInclusive, actual.IsMinInclusive);
            Assert.Equal(versionSpec.IsMaxInclusive, actual.IsMaxInclusive);
            Assert.Equal(versionSpec.MinVersion, actual.MinVersion);
            Assert.Equal(versionSpec.MaxVersion, actual.MaxVersion);
        }
        /// <summary>
        /// Resolves the installable version.
        /// </summary>
        /// <param name="remoteRepository"> </param>
        /// <param name="packageReference"> </param>
        /// <returns></returns>
        public IPackage ResolveLatestInstallablePackage(IPackageRepository remoteRepository, PackageReference packageReference)
        {
            IPackage package = null;
            if (Latest)
            {
                //We can only work on an AggregateRepository, just return null if we dont get one.
                var aggregateRepository = remoteRepository as AggregateRepository;
                if (aggregateRepository == null) return null;

                var versionSpecComparer = new VersionSpecEqualityComparer(packageReference.VersionConstraint);
                var defaultVersionSpec = new VersionSpec();

                if (versionSpecComparer.Equals(defaultVersionSpec))
                {
                    //First, check to see if we have already checked for this ID, and if so, return the right version
                    if (_cache.TryCacheHitByIsLatest(packageReference.Id, out package)) return package;

                    //TODO need to check where we need to get the bools for this call....assuming a bit much here.
                    Console.Log(MessageLevel.Info, "Checking for latest package: {0}", packageReference.Id);


                    try
                    {
                        IPackage p = aggregateRepository.FindLatestPackage(packageReference.Id);
                        if (p != null)
                        {
                            Console.Log(MessageLevel.Info, "Using latest version : {0} {1}", p.Id, p.ToString());
                            //Only add if there is no constraint....
                            _cache.AddCacheEntryByIsLatest(p);
                            package = p;
                        }
                        else
                        {
                            Console.Log(MessageLevel.Info,
                                        "Latest version requested, however {0} cannot be found on feed.",
                                        packageReference.Id);
                            return null;
                        }
                    }
                    catch (NullReferenceException)
                    {
                        Console.Log(MessageLevel.Error,
                                    "One of the feeds threw an error, a package called {0} could not be found.",
                                    packageReference.Id);
                        return null;
                    }
                }

                else
                {
                    Console.Log(MessageLevel.Info, "Checking for latest package: {0} using constraint {1}",
                                packageReference.Id, packageReference.VersionConstraint);
                    if (_cache.TryCacheHitByVersionConstraint(packageReference, out package)) return package;

                    try
                    {
                        IPackage p = aggregateRepository.FindLatestPackage(packageReference.Id,
                                                                           packageReference.VersionConstraint);
                        if (p != null)
                        {
                            package = p;
                            _cache.AddCacheEntryByConstraint(package, packageReference.VersionConstraint);
                            Console.Log(MessageLevel.Info, "Using constrained version : {0} {1}, constrained by {2}",
                                        packageReference.Id, p.Version.ToString(), packageReference.VersionConstraint);
                        }
                        else
                        {
                            Console.Log(MessageLevel.Error,
                                        "Latest version requested, however {0} cannot be satisfied on feed using constraint {1}.",
                                        packageReference.Id, packageReference.VersionConstraint);
                            return null;
                        }
                    }
                    catch (NullReferenceException)
                    {
                        Console.Log(MessageLevel.Error,
                                    "One of the feeds threw an error, a package called {0} could not be found.",
                                    packageReference.Id);
                        return null;
                    }
                }
            }
            return package;
        }
        public List<Changeset> QueryHistory(ItemSpec item, VersionSpec versionItem, 
                                            VersionSpec versionFrom, VersionSpec versionTo, int maxCount = short.MaxValue)
        {
            var invoker = new SoapInvoker(this);
            var msg = invoker.CreateEnvelope("QueryHistory");
            msg.Add(item.ToXml(MessageNs + "itemSpec"));
            msg.Add(versionItem.ToXml(MessageNs + "versionItem"));
            if (versionFrom != null)
                msg.Add(versionFrom.ToXml(MessageNs + "versionFrom"));
            if (versionTo != null)
                msg.Add(versionTo.ToXml(MessageNs + "versionTo"));
            msg.Add(new XElement(MessageNs + "maxCount", maxCount));
            msg.Add(new XElement(MessageNs + "includeFiles", false));
            msg.Add(new XElement(MessageNs + "generateDownloadUrls", false));
            msg.Add(new XElement(MessageNs + "slotMode", false));
            msg.Add(new XElement(MessageNs + "sortAscending", false));

            var result = invoker.InvokeResult();
            return result.Elements(MessageNs + "Changeset").Select(Changeset.FromXml).ToList();
        }
 public List<Item> QueryItems(Workspace workspace, ItemSpec itemSpec, VersionSpec versionSpec,
                              DeletedState deletedState, ItemType itemType, 
                              bool includeDownloadInfo)
 {
     if (workspace == null)
         return QueryItems(itemSpec, versionSpec, deletedState, itemType, includeDownloadInfo);
     return QueryItems(workspace.Name, workspace.OwnerName, new [] { itemSpec }, versionSpec, deletedState, itemType, includeDownloadInfo);
 }
 public List<Item> QueryItems(ItemSpec itemSpec, VersionSpec versionSpec,
                              DeletedState deletedState, ItemType itemType, 
                              bool includeDownloadInfo)
 {
     return QueryItems(string.Empty, string.Empty, new [] { itemSpec }, versionSpec, deletedState, itemType, includeDownloadInfo);
 }
Example #52
0
        public void ValidateDependenciesDoesNotThrowIfDependencyForAPrereleaseVersionIsPrerelease(VersionSpec versionSpec)
        {
            // Arrange
            var dependencies = new[] {
                new PackageDependency("A", versionSpec),
                new PackageDependency("B", new VersionSpec()),
            };
            var packageVersion = new SemanticVersion("1.0.0-beta");

            var dependencySets = new PackageDependencySet[] {
                new PackageDependencySet(null, dependencies)
            };

            // Act
            PackageBuilder.ValidateDependencySets(packageVersion, dependencySets);

            // Assert
            // If we've got this far, no exceptions were thrown.
            Assert.True(true);
        }
Example #53
0
        public void ValidateDependenciesThrowsIfAnyDependencyForAStableReleaseIsPrerelease(VersionSpec versionSpec)
        {
            // Arrange
            var badDependency = new PackageDependency("A", versionSpec);
            var dependencies = new[] {
                badDependency,
                new PackageDependency("B", new VersionSpec()),
            };
            var packageVersion = new SemanticVersion("1.0.0");

            var dependencySets = new PackageDependencySet[] {
                new PackageDependencySet(null, dependencies)
            };

            // Act and Assert
            ExceptionAssert.Throws<InvalidDataException>(() => PackageBuilder.ValidateDependencySets(packageVersion, dependencySets),
                String.Format(CultureInfo.InvariantCulture,
                    "A stable release of a package should not have on a prerelease dependency. Either modify the version spec of dependency \"{0}\" or update the version field.",
                    badDependency));
        }
 public DiffItemVersionedFile(Item item, VersionSpec versionSpec)
 {
     this.item = item;
     this.versionSpec = versionSpec;
     this.label = item.ServerItem;
 }
        /// <summary>
        /// Retrieves the latest changeset ID associated with a path
        /// </summary>
        /// <param name="localPath">A path on the local filesystem</param>
        /// <param name="credentials">Credentials used to authenticate against the serer</param>
        /// <returns></returns>
        public int GetLatestChangesetId(string localPath, ICredentials credentials)
        {
            int latestChangesetId = 0;
            string server;

            Workstation workstation = new Workstation(versionControlClientAssembly);
            WorkspaceInfo workspaceInfo = workstation.GetLocalWorkspaceInfo(localPath);
            server = workspaceInfo.ServerUri.ToString();
            VersionControlServer sourceControl = new VersionControlServer(clientAssembly, versionControlClientAssembly, server, credentials);

            Workspace workspace = sourceControl.GetWorkspace(localPath);
            WorkspaceVersionSpec workspaceVersionSpec = new WorkspaceVersionSpec(versionControlClientAssembly, workspace);

            VersionSpec versionSpec = new VersionSpec(versionControlClientAssembly);
            RecursionType recursionType = new RecursionType(versionControlClientAssembly);

            IEnumerable history = sourceControl.QueryHistory(localPath, versionSpec.Latest, recursionType.Full, workspaceVersionSpec);

            IEnumerator historyEnumerator = history.GetEnumerator();
            Changeset latestChangeset = new Changeset(versionControlClientAssembly);
            if (historyEnumerator.MoveNext())
            {
                latestChangeset = new Changeset(versionControlClientAssembly, historyEnumerator.Current);
            }

            if (latestChangeset.Instance != null)
            {
                latestChangesetId = latestChangeset.ChangesetId;
            }
            return latestChangesetId;
        }
 internal static PackageDependency CreateExact(string id, string version)
 {
     var versionSpec = new VersionSpec(new SemanticVersion(version));
     return new PackageDependency(id, versionSpec);
 }
 internal GetRequest(VersionSpec versionSpec)
 {
     this.VersionSpec = versionSpec;
 }
Example #58
0
        public void ToStringMinVersionInclusiveMaxExclusive()
        {
            // Arrange
            var spec = new VersionSpec {
                IsMaxInclusive = false,
                IsMinInclusive = true,
                MaxVersion = new Version("4.0"),
                MinVersion = new Version("1.0"),
            };

            // Act
            string value = spec.ToString();

            // Assert
            Assert.AreEqual("[1.0, 4.0)", value);
        }
 public GetRequest(ItemSpec itemSpec, VersionSpec versionSpec)
 {
     this.ItemSpec = itemSpec;
     this.VersionSpec = versionSpec;
 }
        //    <QueryItems xmlns="http://schemas.microsoft.com/TeamFoundation/2005/06/VersionControl/ClientServices/03">
        //      <workspaceName>string</workspaceName>
        //      <workspaceOwner>string</workspaceOwner>
        //      <items>
        //        <ItemSpec item="string" recurse="None or OneLevel or Full" did="int" />
        //        <ItemSpec item="string" recurse="None or OneLevel or Full" did="int" />
        //      </items>
        //      <version />
        //      <deletedState>NonDeleted or Deleted or Any</deletedState>
        //      <itemType>Any or Folder or File</itemType>
        //      <generateDownloadUrls>boolean</generateDownloadUrls>
        //      <options>int</options>
        //    </QueryItems>
        public List<Item> QueryItems(string workspaceName, string workspaceOwner, ItemSpec[] itemSpecs, VersionSpec versionSpec,
                                     DeletedState deletedState, ItemType itemType, 
                                     bool includeDownloadInfo)
        {
            var invoker = new SoapInvoker(this);
            var msg = invoker.CreateEnvelope("QueryItems");
            if (!string.IsNullOrEmpty(workspaceName))
                msg.Add(new XElement(MessageNs + "workspaceName", workspaceName));
            if (!string.IsNullOrEmpty(workspaceOwner))
                msg.Add(new XElement(MessageNs + "workspaceOwner", workspaceOwner));
            msg.Add(new XElement(MessageNs + "items", itemSpecs.Select(itemSpec => itemSpec.ToXml(MessageNs + "ItemSpec"))));
            msg.Add(versionSpec.ToXml(MessageNs + "version"));
            msg.Add(new XElement(MessageNs + "deletedState", deletedState));
            msg.Add(new XElement(MessageNs + "itemType", itemType));
            msg.Add(new XElement(MessageNs + "generateDownloadUrls", includeDownloadInfo.ToLowString()));

            var result = invoker.InvokeResult();
            return result.Descendants(MessageNs + "Item").Select(Item.FromXml).ToList();
        }