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); }
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); } } }