# [GitWrap](https://crates.io/crates/gitwrap)
[](https://rust-reportcard.xuri.me/badge/github.com/japiber/gitwrap?style=flat)[](https://github.com/japiber/gitwrap/actions/workflows/rust.yml) [](https://github.com/xuri/rust-reportcard/blob/master/LICENSE)
[](https://crates.io/crates/gitwrap)
GitWrap is a simple wrapper around `git` command.
The purpose of this library is to provide a controlled and reliable method of accessing the git commands in the simplest possible way.
This project is in progress, not all git commands / options are implemented yet.
## Credits
This project is inspired and based on [Go Git Cmd Wrapper](https://github.com/ldez/go-git-cmd-wrapper)
## License
The code is licensed under the permissive Apache v2.0 licence. This means you can do what you like with the software, as long as you include the required notices. [Read this](https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)) for a summary.
## Install
```
cargo install gitwrap
```
Running the above command will globally install the gitwrap binary.
Install as library
Run the following Cargo command in your project directory:
```
cargo add gitwrap
```
Or add the following line to your Cargo.toml:
```
gitwrap = "0.7.0"
```
## Usage
Here are some examples of use (work in progress)
### 1. Cloning a remote repo
```rust
use gitwrap::clone;
fn initialize(repo_url: &str, repo_path: &str) {
let mut cmd = clone::clone(None);
cmd.option(clone::repository(repo_url));
cmd.option(clone::directory(repo_path));
assert!(cmd.execute().is_ok());
}
```
### Clone a repo using macros
```rust
fn initialize(repo_url: &str, repo_path: &str) {
let cmd = clone!(None,
clone::repository("https://github.com/japiber/gitwrap.git"),
clone::directory(path.as_str()),
assert!(cmd.execute().is_ok());
}
```
### 2. Setting repo configuration
```rust
use gitwrap::config;
fn set_repo_config(commit_email: &str, repo_path: &str) {
let mut cmd = config::config(Some(repo_path));
cmd.option(config::entry("user.email", commit_email));
assert!(cmd.execute().is_ok());
}
```
### 3. Check if a directory is a valid git repo
```rust
use gitwrap::rev_parse;
fn is_repo_valid(repo_path: &str) {
let mut cmd = rev_parse::rev_parse(Some(repo_path));
cmd.option(rev_parse::is_inside_work_tree());
let r = cmd.execute();
assert!(r.is_ok());
assert!(r.ok().unwrap().contains("true"));
}
```