git2_credentials 0.10.0

Provide credential function to used with git2::RemoteCallbacks.credentials
Documentation
# git2_credentials

[![crate license](https://img.shields.io/crates/l/git2_credentials.svg)](https://spdx.org/licenses/Apache-2.0.html)
[![crate version](https://img.shields.io/crates/v/git2_credentials.svg)](https://crates.io/crates/git2_credentials)

[![Actions Status](https://github.com/davidB/git2_credentials/workflows/ci-flow/badge.svg)](https://github.com/davidB/git2_credentials/actions)

Provide credentials function to used with [git2](https://crates.io/crates/git2)::[RemoteCallbacks.credentials](https://docs.rs/git2/0.8.0/git2/struct.RemoteCallbacks.html#method.credentials)

## Usage

```rust
use git2;
use git2_credentials::CredentialHandler;
use tempfile;

let mut cb = git2::RemoteCallbacks::new();
let git_config = git2::Config::open_default().unwrap();
let mut ch = CredentialHandler::new(git_config);
cb.credentials(move |url, username, allowed| ch.try_next_credential(url, username, allowed));

// clone a repository
let mut fo = git2::FetchOptions::new();
fo.remote_callbacks(cb)
    .download_tags(git2::AutotagOption::All)
    .update_fetchhead(true);
let dst = tempfile::tempdir().unwrap();
std::fs::create_dir_all(&dst.as_ref()).unwrap();
git2::build::RepoBuilder::new()
    .branch("master")
    .fetch_options(fo)
    .clone("git@github.com:davidB/git2_credentials.git", dst.as_ref()).unwrap();
```

You can run the example via

```sh
cargo run --example clone -- --nocapture
```

You can provide custom UI (to ask password, passphrase) by providing a `CredentialUI`. A default implementation (with [dialoguer](https://crates.io/crates/dialoguer) is provided.

### Build

```sh
cargo make ci-flow
```

## Credit

Code *extracted* from:

- [cargo/utils.rs at master · rust-lang/cargo]https://github.com/rust-lang/cargo/blob/master/src/cargo/sources/git/utils.rs (search `with_authentication`)
  > Cargo, a package manager for Rust.
- [ffizer]https://crates.io/crates/ffizer
  > ffizer is a files and folders initializer / generator. Create any kind (or part) of project from template.
- [gpm/ssh.rs at master · aerys/gpm]https://github.com/aerys/gpm/blob/master/src/gpm/ssh.rs
  > Git-based package manager.

## Links

- ["authentication required but no callback set" on clone with SSH url · Issue #41 · rust-lang/git2-rs]https://github.com/rust-lang/git2-rs/issues/41