diff --git a/NGitLab.Mock/Clients/RepositoryClient.cs b/NGitLab.Mock/Clients/RepositoryClient.cs index aa96e0ce..f497e33d 100644 --- a/NGitLab.Mock/Clients/RepositoryClient.cs +++ b/NGitLab.Mock/Clients/RepositoryClient.cs @@ -95,6 +95,11 @@ public void GetArchive(Action parser) throw new NotImplementedException(); } + public void GetArchive(GetArchiveRequest request, Action parser) + { + throw new NotImplementedException(); + } + public IEnumerable GetCommits(string refName, int maxResults = 0) { using (Context.BeginOperationScope()) diff --git a/NGitLab.Tests/RepositoryClient/RepositoryClientTests.cs b/NGitLab.Tests/RepositoryClient/RepositoryClientTests.cs index f346d7e0..45412879 100644 --- a/NGitLab.Tests/RepositoryClient/RepositoryClientTests.cs +++ b/NGitLab.Tests/RepositoryClient/RepositoryClientTests.cs @@ -349,6 +349,83 @@ public async Task GetArchive() Assert.That(archiveItems.Where(item => item.Value is TarEntryType.RegularFile).ToList(), Has.Count.EqualTo(commitCount)); } + [TestCase(0)] + [TestCase(1)] + [TestCase(3)] + [NGitLabRetry] + public async Task GetArchiveBySha(int commitToDownload) + { + // Arrange + const int commitCount = 4; + int expectedFilesInCommit = commitToDownload + 1; + using var context = await RepositoryClientTestsContext.CreateAsync(commitCount); + + var archiveItems = new List>(); + + var commit = context.RepositoryClient.Commits.ElementAt(commitCount - commitToDownload - 1); + var request = new GetArchiveRequest + { + Sha = commit.Id.ToString(), + }; + + // Act + context.RepositoryClient.GetArchive(request, tgzStream => + { + using var gzipDecompressor = new GZipStream(tgzStream, CompressionMode.Decompress); + using var unzippedStream = new MemoryStream(); + + gzipDecompressor.CopyTo(unzippedStream); + unzippedStream.Seek(0, SeekOrigin.Begin); + + using var reader = new TarReader(unzippedStream); + + while (reader.GetNextEntry() is TarEntry entry) + { + archiveItems.Add(new KeyValuePair(entry.Name, entry.EntryType)); + } + }); + + // Assert + Assert.That( + archiveItems.Where(item => item.Value is TarEntryType.RegularFile).ToList(), + Has.Count.EqualTo(expectedFilesInCommit)); + } + + [Test] + [NGitLabRetry] + public async Task GetZipArchive() + { + // Arrange + const int commitCount = 4; + using var context = await RepositoryClientTestsContext.CreateAsync(commitCount); + + var archiveItems = new List(); + + var request = new GetArchiveRequest + { + Format = ArchiveFormats.Zip, + }; + + static bool IsFile(ZipArchiveEntry entry) => !string.IsNullOrEmpty(entry.Name); + + // Act + context.RepositoryClient.GetArchive(request, zipStream => + { + using var archive = new ZipArchive(zipStream, ZipArchiveMode.Read); + + foreach (var entry in archive.Entries) + { + if (IsFile(entry)) + { + archiveItems.Add(entry.FullName); + } + } + }); + + // Assert + Assert.That(archiveItems, Has.Count.EqualTo(commitCount)); + } + [Test] [NGitLabRetry] public async Task GetRawBlob() diff --git a/NGitLab/ArchiveFormats.cs b/NGitLab/ArchiveFormats.cs new file mode 100644 index 00000000..6a36a8ee --- /dev/null +++ b/NGitLab/ArchiveFormats.cs @@ -0,0 +1,16 @@ +namespace NGitLab; + +/// +/// Well-known archive formats. +/// +public static class ArchiveFormats +{ + public const string Bz2 = "bz2"; + public const string Tar = "tar"; + public const string TarBz2 = "tar.bz2"; + public const string TarGz = "tar.gz"; + public const string Tb2 = "tb2"; + public const string Tbz = "tbz"; + public const string Tbz2 = "tbz2"; + public const string Zip = "zip"; +} diff --git a/NGitLab/GetArchiveRequest.cs b/NGitLab/GetArchiveRequest.cs new file mode 100644 index 00000000..b9f5319e --- /dev/null +++ b/NGitLab/GetArchiveRequest.cs @@ -0,0 +1,24 @@ +namespace NGitLab; + +public class GetArchiveRequest +{ + /// + /// Commit SHA to download. Accepts a tag, branch reference, or SHA. If not specified, defaults to the tip of the default branch. + /// + public string Sha { get; init; } + + /// + /// Optional suffix for the archive format, and defaults to tar.gz. For all formats . + /// + public string Format { get; init; } + + /// + /// If true, LFS objects are included in the archive. When set to false, LFS objects are excluded. Default is true. + /// + public bool? IncludeLfsBlobs { get; init; } + + /// + /// Subpath of the repository to download. If an empty string, defaults to the whole repository. + /// + public string Path { get; init; } +} diff --git a/NGitLab/IRepositoryClient.cs b/NGitLab/IRepositoryClient.cs index da6b635f..9b9cc13e 100644 --- a/NGitLab/IRepositoryClient.cs +++ b/NGitLab/IRepositoryClient.cs @@ -25,6 +25,8 @@ public interface IRepositoryClient void GetArchive(Action parser); + void GetArchive(GetArchiveRequest request, Action parser); + IEnumerable Commits { get; } IContributorClient Contributors { get; } diff --git a/NGitLab/Impl/RepositoryClient.cs b/NGitLab/Impl/RepositoryClient.cs index e0cdda29..d930aa94 100644 --- a/NGitLab/Impl/RepositoryClient.cs +++ b/NGitLab/Impl/RepositoryClient.cs @@ -55,6 +55,33 @@ public void GetArchive(Action parser) _api.Get().Stream(_repoPath + "/archive", parser); } + public void GetArchive(GetArchiveRequest request, Action parser) + { + var url = _repoPath + "/archive"; + + if (!string.IsNullOrWhiteSpace(request?.Format)) + { + url += $".{request.Format}"; + } + + if (!string.IsNullOrWhiteSpace(request?.Path)) + { + url = Utils.AddParameter(url, "path", request.Path); + } + + if (!string.IsNullOrWhiteSpace(request?.Sha)) + { + url = Utils.AddParameter(url, "sha", request.Sha); + } + + if (request?.IncludeLfsBlobs.HasValue == true) + { + url = Utils.AddParameter(url, "include_lfs_blobs", request.IncludeLfsBlobs.Value); + } + + _api.Get().Stream(url, parser); + } + public IEnumerable Commits => _api.Get().GetAll(_repoPath + $"/commits?per_page={GetCommitsRequest.DefaultPerPage}"); /// diff --git a/NGitLab/PublicAPI/net10.0/PublicAPI.Unshipped.txt b/NGitLab/PublicAPI/net10.0/PublicAPI.Unshipped.txt index a8071518..5cdfd494 100644 --- a/NGitLab/PublicAPI/net10.0/PublicAPI.Unshipped.txt +++ b/NGitLab/PublicAPI/net10.0/PublicAPI.Unshipped.txt @@ -1,5 +1,13 @@ abstract NGitLab.GitLabCollectionResponse.GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Collections.Generic.IAsyncEnumerator abstract NGitLab.GitLabCollectionResponse.GetEnumerator() -> System.Collections.Generic.IEnumerator +const NGitLab.ArchiveFormats.Bz2 = "bz2" -> string +const NGitLab.ArchiveFormats.Tar = "tar" -> string +const NGitLab.ArchiveFormats.TarBz2 = "tar.bz2" -> string +const NGitLab.ArchiveFormats.TarGz = "tar.gz" -> string +const NGitLab.ArchiveFormats.Tb2 = "tb2" -> string +const NGitLab.ArchiveFormats.Tbz = "tbz" -> string +const NGitLab.ArchiveFormats.Tbz2 = "tbz2" -> string +const NGitLab.ArchiveFormats.Zip = "zip" -> string const NGitLab.Impl.GroupsClient.Url = "/groups" -> string const NGitLab.Impl.LabelClient.GroupLabelUrl = "/groups/{0}/labels" -> string const NGitLab.Impl.LabelClient.ProjectLabelUrl = "/projects/{0}/labels" -> string @@ -20,6 +28,7 @@ const NGitLab.Models.Project.Url = "/projects" -> string const NGitLab.Models.Runner.Url = "/runners" -> string const NGitLab.Models.Session.Url = "/session" -> string const NGitLab.Models.User.Url = "/users" -> string +NGitLab.ArchiveFormats NGitLab.DynamicEnum NGitLab.DynamicEnum.DynamicEnum() -> void NGitLab.DynamicEnum.DynamicEnum(string stringValue) -> void @@ -28,6 +37,16 @@ NGitLab.DynamicEnum.EnumValue.get -> TEnum? NGitLab.DynamicEnum.Equals(NGitLab.DynamicEnum other) -> bool NGitLab.DynamicEnum.Equals(TEnum other) -> bool NGitLab.DynamicEnum.StringValue.get -> string +NGitLab.GetArchiveRequest +NGitLab.GetArchiveRequest.Format.get -> string +NGitLab.GetArchiveRequest.Format.init -> void +NGitLab.GetArchiveRequest.GetArchiveRequest() -> void +NGitLab.GetArchiveRequest.IncludeLfsBlobs.get -> bool? +NGitLab.GetArchiveRequest.IncludeLfsBlobs.init -> void +NGitLab.GetArchiveRequest.Path.get -> string +NGitLab.GetArchiveRequest.Path.init -> void +NGitLab.GetArchiveRequest.Sha.get -> string +NGitLab.GetArchiveRequest.Sha.init -> void NGitLab.GetCommitsRequest NGitLab.GetCommitsRequest.FirstParent.get -> bool? NGitLab.GetCommitsRequest.FirstParent.set -> void @@ -897,6 +916,7 @@ NGitLab.Impl.RepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGit NGitLab.Impl.RepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.Impl.RepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.Impl.RepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.Impl.RepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetArchive(System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.Impl.RepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable @@ -1137,6 +1157,7 @@ NGitLab.IRepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGitLab. NGitLab.IRepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.IRepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.IRepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.IRepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.IRepositoryClient.GetArchive(System.Action parser) -> void NGitLab.IRepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.IRepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable diff --git a/NGitLab/PublicAPI/net472/PublicAPI.Unshipped.txt b/NGitLab/PublicAPI/net472/PublicAPI.Unshipped.txt index a905ae1e..4b679160 100644 --- a/NGitLab/PublicAPI/net472/PublicAPI.Unshipped.txt +++ b/NGitLab/PublicAPI/net472/PublicAPI.Unshipped.txt @@ -1,5 +1,13 @@ abstract NGitLab.GitLabCollectionResponse.GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Collections.Generic.IAsyncEnumerator abstract NGitLab.GitLabCollectionResponse.GetEnumerator() -> System.Collections.Generic.IEnumerator +const NGitLab.ArchiveFormats.Bz2 = "bz2" -> string +const NGitLab.ArchiveFormats.Tar = "tar" -> string +const NGitLab.ArchiveFormats.TarBz2 = "tar.bz2" -> string +const NGitLab.ArchiveFormats.TarGz = "tar.gz" -> string +const NGitLab.ArchiveFormats.Tb2 = "tb2" -> string +const NGitLab.ArchiveFormats.Tbz = "tbz" -> string +const NGitLab.ArchiveFormats.Tbz2 = "tbz2" -> string +const NGitLab.ArchiveFormats.Zip = "zip" -> string const NGitLab.Impl.GroupsClient.Url = "/groups" -> string const NGitLab.Impl.LabelClient.GroupLabelUrl = "/groups/{0}/labels" -> string const NGitLab.Impl.LabelClient.ProjectLabelUrl = "/projects/{0}/labels" -> string @@ -20,6 +28,7 @@ const NGitLab.Models.Project.Url = "/projects" -> string const NGitLab.Models.Runner.Url = "/runners" -> string const NGitLab.Models.Session.Url = "/session" -> string const NGitLab.Models.User.Url = "/users" -> string +NGitLab.ArchiveFormats NGitLab.DynamicEnum NGitLab.DynamicEnum.DynamicEnum() -> void NGitLab.DynamicEnum.DynamicEnum(string stringValue) -> void @@ -28,6 +37,16 @@ NGitLab.DynamicEnum.EnumValue.get -> TEnum? NGitLab.DynamicEnum.Equals(NGitLab.DynamicEnum other) -> bool NGitLab.DynamicEnum.Equals(TEnum other) -> bool NGitLab.DynamicEnum.StringValue.get -> string +NGitLab.GetArchiveRequest +NGitLab.GetArchiveRequest.Format.get -> string +NGitLab.GetArchiveRequest.Format.init -> void +NGitLab.GetArchiveRequest.GetArchiveRequest() -> void +NGitLab.GetArchiveRequest.IncludeLfsBlobs.get -> bool? +NGitLab.GetArchiveRequest.IncludeLfsBlobs.init -> void +NGitLab.GetArchiveRequest.Path.get -> string +NGitLab.GetArchiveRequest.Path.init -> void +NGitLab.GetArchiveRequest.Sha.get -> string +NGitLab.GetArchiveRequest.Sha.init -> void NGitLab.GetCommitsRequest NGitLab.GetCommitsRequest.FirstParent.get -> bool? NGitLab.GetCommitsRequest.FirstParent.set -> void @@ -898,6 +917,7 @@ NGitLab.Impl.RepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGit NGitLab.Impl.RepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.Impl.RepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.Impl.RepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.Impl.RepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetArchive(System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.Impl.RepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable @@ -1138,6 +1158,7 @@ NGitLab.IRepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGitLab. NGitLab.IRepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.IRepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.IRepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.IRepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.IRepositoryClient.GetArchive(System.Action parser) -> void NGitLab.IRepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.IRepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable diff --git a/NGitLab/PublicAPI/net8.0/PublicAPI.Unshipped.txt b/NGitLab/PublicAPI/net8.0/PublicAPI.Unshipped.txt index a8071518..5cdfd494 100644 --- a/NGitLab/PublicAPI/net8.0/PublicAPI.Unshipped.txt +++ b/NGitLab/PublicAPI/net8.0/PublicAPI.Unshipped.txt @@ -1,5 +1,13 @@ abstract NGitLab.GitLabCollectionResponse.GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Collections.Generic.IAsyncEnumerator abstract NGitLab.GitLabCollectionResponse.GetEnumerator() -> System.Collections.Generic.IEnumerator +const NGitLab.ArchiveFormats.Bz2 = "bz2" -> string +const NGitLab.ArchiveFormats.Tar = "tar" -> string +const NGitLab.ArchiveFormats.TarBz2 = "tar.bz2" -> string +const NGitLab.ArchiveFormats.TarGz = "tar.gz" -> string +const NGitLab.ArchiveFormats.Tb2 = "tb2" -> string +const NGitLab.ArchiveFormats.Tbz = "tbz" -> string +const NGitLab.ArchiveFormats.Tbz2 = "tbz2" -> string +const NGitLab.ArchiveFormats.Zip = "zip" -> string const NGitLab.Impl.GroupsClient.Url = "/groups" -> string const NGitLab.Impl.LabelClient.GroupLabelUrl = "/groups/{0}/labels" -> string const NGitLab.Impl.LabelClient.ProjectLabelUrl = "/projects/{0}/labels" -> string @@ -20,6 +28,7 @@ const NGitLab.Models.Project.Url = "/projects" -> string const NGitLab.Models.Runner.Url = "/runners" -> string const NGitLab.Models.Session.Url = "/session" -> string const NGitLab.Models.User.Url = "/users" -> string +NGitLab.ArchiveFormats NGitLab.DynamicEnum NGitLab.DynamicEnum.DynamicEnum() -> void NGitLab.DynamicEnum.DynamicEnum(string stringValue) -> void @@ -28,6 +37,16 @@ NGitLab.DynamicEnum.EnumValue.get -> TEnum? NGitLab.DynamicEnum.Equals(NGitLab.DynamicEnum other) -> bool NGitLab.DynamicEnum.Equals(TEnum other) -> bool NGitLab.DynamicEnum.StringValue.get -> string +NGitLab.GetArchiveRequest +NGitLab.GetArchiveRequest.Format.get -> string +NGitLab.GetArchiveRequest.Format.init -> void +NGitLab.GetArchiveRequest.GetArchiveRequest() -> void +NGitLab.GetArchiveRequest.IncludeLfsBlobs.get -> bool? +NGitLab.GetArchiveRequest.IncludeLfsBlobs.init -> void +NGitLab.GetArchiveRequest.Path.get -> string +NGitLab.GetArchiveRequest.Path.init -> void +NGitLab.GetArchiveRequest.Sha.get -> string +NGitLab.GetArchiveRequest.Sha.init -> void NGitLab.GetCommitsRequest NGitLab.GetCommitsRequest.FirstParent.get -> bool? NGitLab.GetCommitsRequest.FirstParent.set -> void @@ -897,6 +916,7 @@ NGitLab.Impl.RepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGit NGitLab.Impl.RepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.Impl.RepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.Impl.RepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.Impl.RepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetArchive(System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.Impl.RepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable @@ -1137,6 +1157,7 @@ NGitLab.IRepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGitLab. NGitLab.IRepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.IRepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.IRepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.IRepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.IRepositoryClient.GetArchive(System.Action parser) -> void NGitLab.IRepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.IRepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable diff --git a/NGitLab/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt b/NGitLab/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt index a905ae1e..4b679160 100644 --- a/NGitLab/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt +++ b/NGitLab/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt @@ -1,5 +1,13 @@ abstract NGitLab.GitLabCollectionResponse.GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Collections.Generic.IAsyncEnumerator abstract NGitLab.GitLabCollectionResponse.GetEnumerator() -> System.Collections.Generic.IEnumerator +const NGitLab.ArchiveFormats.Bz2 = "bz2" -> string +const NGitLab.ArchiveFormats.Tar = "tar" -> string +const NGitLab.ArchiveFormats.TarBz2 = "tar.bz2" -> string +const NGitLab.ArchiveFormats.TarGz = "tar.gz" -> string +const NGitLab.ArchiveFormats.Tb2 = "tb2" -> string +const NGitLab.ArchiveFormats.Tbz = "tbz" -> string +const NGitLab.ArchiveFormats.Tbz2 = "tbz2" -> string +const NGitLab.ArchiveFormats.Zip = "zip" -> string const NGitLab.Impl.GroupsClient.Url = "/groups" -> string const NGitLab.Impl.LabelClient.GroupLabelUrl = "/groups/{0}/labels" -> string const NGitLab.Impl.LabelClient.ProjectLabelUrl = "/projects/{0}/labels" -> string @@ -20,6 +28,7 @@ const NGitLab.Models.Project.Url = "/projects" -> string const NGitLab.Models.Runner.Url = "/runners" -> string const NGitLab.Models.Session.Url = "/session" -> string const NGitLab.Models.User.Url = "/users" -> string +NGitLab.ArchiveFormats NGitLab.DynamicEnum NGitLab.DynamicEnum.DynamicEnum() -> void NGitLab.DynamicEnum.DynamicEnum(string stringValue) -> void @@ -28,6 +37,16 @@ NGitLab.DynamicEnum.EnumValue.get -> TEnum? NGitLab.DynamicEnum.Equals(NGitLab.DynamicEnum other) -> bool NGitLab.DynamicEnum.Equals(TEnum other) -> bool NGitLab.DynamicEnum.StringValue.get -> string +NGitLab.GetArchiveRequest +NGitLab.GetArchiveRequest.Format.get -> string +NGitLab.GetArchiveRequest.Format.init -> void +NGitLab.GetArchiveRequest.GetArchiveRequest() -> void +NGitLab.GetArchiveRequest.IncludeLfsBlobs.get -> bool? +NGitLab.GetArchiveRequest.IncludeLfsBlobs.init -> void +NGitLab.GetArchiveRequest.Path.get -> string +NGitLab.GetArchiveRequest.Path.init -> void +NGitLab.GetArchiveRequest.Sha.get -> string +NGitLab.GetArchiveRequest.Sha.init -> void NGitLab.GetCommitsRequest NGitLab.GetCommitsRequest.FirstParent.get -> bool? NGitLab.GetCommitsRequest.FirstParent.set -> void @@ -898,6 +917,7 @@ NGitLab.Impl.RepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGit NGitLab.Impl.RepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.Impl.RepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.Impl.RepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.Impl.RepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetArchive(System.Action parser) -> void NGitLab.Impl.RepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.Impl.RepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable @@ -1138,6 +1158,7 @@ NGitLab.IRepositoryClient.Compare(NGitLab.Models.CompareQuery query) -> NGitLab. NGitLab.IRepositoryClient.CompareAsync(NGitLab.Models.CompareQuery query, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task NGitLab.IRepositoryClient.Contributors.get -> NGitLab.IContributorClient NGitLab.IRepositoryClient.Files.get -> NGitLab.IFilesClient +NGitLab.IRepositoryClient.GetArchive(NGitLab.GetArchiveRequest request, System.Action parser) -> void NGitLab.IRepositoryClient.GetArchive(System.Action parser) -> void NGitLab.IRepositoryClient.GetCommit(NGitLab.Sha1 sha) -> NGitLab.Models.Commit NGitLab.IRepositoryClient.GetCommitDiff(NGitLab.Sha1 sha) -> System.Collections.Generic.IEnumerable