Skip to content

Commit

Permalink
Merge pull request #918 from willsb/download-timeout
Browse files Browse the repository at this point in the history
Adds overloads to GetArchive for adding custom timeouts
  • Loading branch information
shiftkey committed Nov 4, 2015
2 parents 7ac970a + 56b8174 commit 59aa436
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 5 deletions.
12 changes: 12 additions & 0 deletions Octokit.Reactive/Clients/IObservableRepositoryContentsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,18 @@ public interface IObservableRepositoryContentsClient
/// <returns>A promise, containing the binary contents of the archive</returns>
IObservable<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference);

/// <summary>
/// Get an archive of a given repository's contents, in a specific format
/// </summary>
/// <remarks>https://developer.github.com/v3/repos/contents/#get-archive-link</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="archiveFormat">The format of the archive. Can be either tarball or zipball</param>
/// <param name="reference">A valid Git reference.</param>
/// <param name="timeout"> Time span until timeout </param>
/// <returns>The binary contents of the archive</returns>
IObservable<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference, TimeSpan timeout);

/// <summary>
/// Returns the contents of a file or directory in a repository.
/// </summary>
Expand Down
25 changes: 22 additions & 3 deletions Octokit.Reactive/Clients/ObservableRepositoryContentsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public IObservable<string> GetArchiveLink(string owner, string name)
/// <returns>A promise, containing the binary contents of the archive</returns>
public IObservable<byte[]> GetArchive(string owner, string name)
{
return _client.Repository.Content.GetArchive(owner, name).ToObservable();
return GetArchive(owner, name, ArchiveFormat.Tarball);
}

/// <summary>
Expand Down Expand Up @@ -104,7 +104,7 @@ public IObservable<string> GetArchiveLink(string owner, string name, ArchiveForm
/// <returns>A promise, containing the binary contents of the archive</returns>
public IObservable<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat)
{
return _client.Repository.Content.GetArchive(owner, name, archiveFormat).ToObservable();
return GetArchive(owner, name, archiveFormat, string.Empty);
}

/// <summary>
Expand Down Expand Up @@ -139,7 +139,7 @@ public IObservable<string> GetArchiveLink(string owner, string name, ArchiveForm
/// <returns>A promise, containing the binary contents of the archive</returns>
public IObservable<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference)
{
return _client.Repository.Content.GetArchive(owner, name, archiveFormat, reference).ToObservable();
return GetArchive(owner, name, archiveFormat, reference, TimeSpan.FromMinutes(60));
}

/// <summary>
Expand All @@ -165,6 +165,25 @@ public IObservable<RepositoryContent> GetAllContents(string owner, string name,
.GetAndFlattenAllPages<RepositoryContent>(ApiUrls.RepositoryContent(owner, name, path));
}

/// <summary>
/// Get an archive of a given repository's contents, in a specific format
/// </summary>
/// <remarks>https://developer.github.com/v3/repos/contents/#get-archive-link</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="archiveFormat">The format of the archive. Can be either tarball or zipball</param>
/// <param name="reference">A valid Git reference.</param>
/// <param name="timeout"> Time span until timeout </param>
/// <returns>The binary contents of the archive</returns>
public IObservable<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference, TimeSpan timeout)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.GreaterThanZero(timeout, "timeout");

return _client.Repository.Content.GetArchive(owner, name, archiveFormat, reference, timeout).ToObservable();
}

/// <summary>
/// Returns the contents of a file or directory in a repository.
/// </summary>
Expand Down
12 changes: 12 additions & 0 deletions Octokit/Clients/IRepositoryContentsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,18 @@ public interface IRepositoryContentsClient
/// <returns>The binary contents of the archive</returns>
Task<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference);

/// <summary>
/// Get an archive of a given repository's contents, in a specific format
/// </summary>
/// <remarks>https://developer.github.com/v3/repos/contents/#get-archive-link</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="archiveFormat">The format of the archive. Can be either tarball or zipball</param>
/// <param name="reference">A valid Git reference.</param>
/// <param name="timeout"> Time span until timeout </param>
/// <returns>The binary contents of the archive</returns>
Task<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference, TimeSpan timeout);

/// <summary>
/// Creates a commit that creates a new file in a repository.
/// </summary>
Expand Down
20 changes: 18 additions & 2 deletions Octokit/Clients/RepositoryContentsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,14 +187,30 @@ public Task<string> GetArchiveLink(string owner, string name, ArchiveFormat arch
/// <param name="archiveFormat">The format of the archive. Can be either tarball or zipball</param>
/// <param name="reference">A valid Git reference.</param>
/// <returns>The binary contents of the archive</returns>
public async Task<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference)
public Task<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference)
{
return GetArchive(owner, name, archiveFormat, string.Empty, TimeSpan.FromMinutes(60));
}

/// <summary>
/// Get an archive of a given repository's contents, in a specific format
/// </summary>
/// <remarks>https://developer.github.com/v3/repos/contents/#get-archive-link</remarks>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="archiveFormat">The format of the archive. Can be either tarball or zipball</param>
/// <param name="reference">A valid Git reference.</param>
/// <param name="timeout"> Time span until timeout </param>
/// <returns>The binary contents of the archive</returns>
public async Task<byte[]> GetArchive(string owner, string name, ArchiveFormat archiveFormat, string reference, TimeSpan timeout)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.GreaterThanZero(timeout, "timeout");

var endpoint = ApiUrls.RepositoryArchiveLink(owner, name, archiveFormat, reference);

var response = await Connection.Get<byte[]>(endpoint, TimeSpan.FromMinutes(60));
var response = await Connection.Get<byte[]>(endpoint, timeout);

return response.Body;
}
Expand Down

0 comments on commit 59aa436

Please sign in to comment.