Ejemplo n.º 1
0
 private async Task DownloadReplaceChangeSet(TfvcChangeSetRef changeSet, CancellationToken token)
 {
     await _tfvcApi.RefreshRepoAndDownloadItemsForChangeSet(
         _options.OrgName,
         _options.ProjectName,
         _options.TargetDirectory,
         new GetItemParams()
     {
         VersionType = TfvcVersionType.changeset,
         Version     = changeSet.ChangesetId.ToString()
     },
         token);
 }
Ejemplo n.º 2
0
        private async Task ProcessChanges(TfvcChangeSetRef changeSet, IAsyncEnumerable <TfvcChange> changes, CancellationToken token)
        {
            var fileChanges = new List <TfvcChange>(1024);

            await foreach (var change in changes.WithCancellation(token))
            {
                var itemPath = GetFileSystemPath(change.Item.Path);

                if (change.Item.IsBranch || change.Item.IsSymLink || change.Item.IsPendingChange)
                {
                    continue;
                }

                try
                {
                    if (change.ChangeType.HasFlag(VersionControlChangeType.Delete))
                    {
                        if (change.Item.IsFolder)
                        {
                            if (Directory.Exists(itemPath))
                            {
                                Directory.Delete(itemPath, true);
                            }
                        }
                        else
                        {
                            if (File.Exists(itemPath))
                            {
                                File.Delete(itemPath);
                            }
                        }
                    }
                    else if (change.ChangeType.HasFlag(VersionControlChangeType.Rename))
                    {
                        var oldPath = GetFileSystemPath(change.SourceServerItem);

                        if (change.Item.IsFolder)
                        {
                            itemPath.CreateFileDirectory();
                            Directory.Move(oldPath, itemPath);
                        }
                        else
                        {
                            itemPath.CreateFileDirectory();

                            File.Move(oldPath, itemPath, true);
                        }
                    }
                    else if (change.ChangeType.HasFlag(VersionControlChangeType.Edit) ||
                             change.ChangeType.HasFlag(VersionControlChangeType.Add) ||
                             change.ChangeType.HasFlag(VersionControlChangeType.Encoding) ||
                             change.ChangeType.HasFlag(VersionControlChangeType.Undelete) ||
                             change.ChangeType.HasFlag(VersionControlChangeType.Rollback) ||
                             change.ChangeType.HasFlag(VersionControlChangeType.Merge))
                    {
                        if (change.Item.IsFolder)
                        {
                            if (!Directory.Exists(itemPath))
                            {
                                Directory.CreateDirectory(itemPath);
                            }
                        }
                        else
                        {
                            fileChanges.Add(change);
                        }
                    }

//                    else if ()
//                    {
//                    }
//                    else if (change.ChangeType.HasFlag(VersionControlChangeType.Lock))
//                    {
//                    }
//                    else if ())
//                    {
//                    }
//                    else if (change.ChangeType.HasFlag(VersionControlChangeType.None))
//                    {
//                    }
//                    else if (change.ChangeType.HasFlag(VersionControlChangeType.Property))
//                    {
//                    }
//                    else if ()
//                    {
//                    }
//                    else if (change.ChangeType.HasFlag(VersionControlChangeType.SourceRename))
//                    {
//                    }
//                    else if (change.ChangeType.HasFlag(VersionControlChangeType.TargetRename))
//                    {
//                    }
//                    else if ()
//                    {
//                    }
//                    else
//                    {
//                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }


            if (fileChanges.Count == 0)
            {
                return;
            }

            var descriptors = fileChanges.Select(x => new TfvcItemDescriptor()
            {
                Path          = x.Item.Path,
                Version       = x.Item.Version.ToString(),
                VersionOption = TfvcVersionOption.none,
                VersionType   = TfvcVersionType.changeset
            });

            try
            {
                await DownloadItemsBatch(token, descriptors);
            }
            catch (Exception e)
            {
                try
                {
                    await DownloadReplaceChangeSet(changeSet, token);
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                }
            }
        }