libgit2: Add more RemoteCallbacks
Add SidebandProgressCallback to be able to cancel the network operation before any transfer operation. Add PushTransferProgressCallback to be able to cancel the push transfer operation. Signed-off-by: Sunny <darkowlzz@protonmail.com>
This commit is contained in:
parent
d407c824d6
commit
65e5c6a686
|
|
@ -47,7 +47,9 @@ var (
|
|||
func RemoteCallbacks(ctx context.Context, opts *git.AuthOptions) git2go.RemoteCallbacks {
|
||||
if opts != nil {
|
||||
return git2go.RemoteCallbacks{
|
||||
SidebandProgressCallback: transportMessageCallback(ctx),
|
||||
TransferProgressCallback: transferProgressCallback(ctx),
|
||||
PushTransferProgressCallback: pushTransferProgressCallback(ctx),
|
||||
CredentialsCallback: credentialsCallback(opts),
|
||||
CertificateCheckCallback: certificateCallback(opts),
|
||||
}
|
||||
|
|
@ -73,6 +75,38 @@ func transferProgressCallback(ctx context.Context) git2go.TransferProgressCallba
|
|||
}
|
||||
}
|
||||
|
||||
// transportMessageCallback constructs TransportMessageCallback which signals
|
||||
// libgit2 it should cancel the network operation when the given context is
|
||||
// closed.
|
||||
func transportMessageCallback(ctx context.Context) git2go.TransportMessageCallback {
|
||||
return func(_ string) git2go.ErrorCode {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return git2go.ErrorCodeUser
|
||||
default:
|
||||
return git2go.ErrorCodeOK
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// pushTransferProgressCallback constructs PushTransferProgressCallback which
|
||||
// signals libgit2 it should stop the push transfer when the given context is
|
||||
// closed (due to e.g. a timeout).
|
||||
func pushTransferProgressCallback(ctx context.Context) git2go.PushTransferProgressCallback {
|
||||
return func(current, total uint32, _ uint) git2go.ErrorCode {
|
||||
// Early return if current equals total.
|
||||
if current == total {
|
||||
return git2go.ErrorCodeOK
|
||||
}
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return git2go.ErrorCodeUser
|
||||
default:
|
||||
return git2go.ErrorCodeOK
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// credentialsCallback constructs CredentialsCallbacks with the given options
|
||||
// for git.Transport, and returns the result.
|
||||
func credentialsCallback(opts *git.AuthOptions) git2go.CredentialsCallback {
|
||||
|
|
|
|||
Loading…
Reference in New Issue