feat(git): made repo flags optional
This finalizes the roadmap item of making certain fields optional. Very nice! Signed-off-by: Christina Sørensen <christina@cafkafk.com>
This commit is contained in:
parent
1c6793f8e4
commit
ee8e546b22
6 changed files with 61 additions and 23 deletions
|
@ -2,7 +2,7 @@
|
||||||
name = "gg"
|
name = "gg"
|
||||||
version = "0.0.6"
|
version = "0.0.6"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Christina Sørensen <christina@cafkafk.com>"]
|
authors = ["Christina Sørensen"]
|
||||||
repository = "https://github.com/cafkafk/gg"
|
repository = "https://github.com/cafkafk/gg"
|
||||||
license = "GPL-3.0-only"
|
license = "GPL-3.0-only"
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
- [ ] Generic repositories
|
- [ ] Generic repositories
|
||||||
- [ ] Version pinning
|
- [ ] Version pinning
|
||||||
- [ ] libgit2 (maybe)
|
- [ ] libgit2 (maybe)
|
||||||
* 0.1.0 [40%] [2/5]
|
* 0.1.0 [60%] [3/5]
|
||||||
- [X] No functionality regressions
|
- [X] No functionality regressions
|
||||||
- [X] commit works in quick, fast
|
- [X] commit works in quick, fast
|
||||||
- [X] commit with edit works
|
- [X] commit with edit works
|
||||||
- [X] Repo Flags Finished
|
- [X] Repo Flags Finished
|
||||||
- [ ] Category Flags Finished
|
- [ ] Category Flags Finished
|
||||||
- [-] Optional Fields
|
- [X] Optional Fields
|
||||||
- [ ] Subcommands
|
- [ ] Subcommands
|
||||||
|
|
20
src/git.rs
20
src/git.rs
|
@ -92,7 +92,8 @@ pub struct GitRepo {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub path: String,
|
pub path: String,
|
||||||
pub url: String,
|
pub url: String,
|
||||||
pub flags: Vec<RepoFlags>,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub flags: Option<Vec<RepoFlags>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
@ -157,7 +158,12 @@ impl Links {
|
||||||
impl GitRepo {
|
impl GitRepo {
|
||||||
/// Clones the repository to its specified folder.
|
/// Clones the repository to its specified folder.
|
||||||
fn clone(&self) -> bool {
|
fn clone(&self) -> bool {
|
||||||
if self.flags.contains(&RepoFlags::Clone) {
|
if self
|
||||||
|
.flags
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to unwrap flags")
|
||||||
|
.contains(&RepoFlags::Clone)
|
||||||
|
{
|
||||||
// TODO: check if &self.name already exists in dir
|
// TODO: check if &self.name already exists in dir
|
||||||
let output = Command::new("git")
|
let output = Command::new("git")
|
||||||
.current_dir(&self.path)
|
.current_dir(&self.path)
|
||||||
|
@ -176,6 +182,8 @@ impl GitRepo {
|
||||||
fn pull(&self) -> bool {
|
fn pull(&self) -> bool {
|
||||||
if self
|
if self
|
||||||
.flags
|
.flags
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to unwrap flags")
|
||||||
.iter()
|
.iter()
|
||||||
.any(|s| s == &RepoFlags::Pull || s == &RepoFlags::Fast)
|
.any(|s| s == &RepoFlags::Pull || s == &RepoFlags::Fast)
|
||||||
{
|
{
|
||||||
|
@ -194,6 +202,8 @@ impl GitRepo {
|
||||||
fn add_all(&self) -> bool {
|
fn add_all(&self) -> bool {
|
||||||
if self
|
if self
|
||||||
.flags
|
.flags
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to unwrap flags")
|
||||||
.iter()
|
.iter()
|
||||||
.any(|s| s == &RepoFlags::Add || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
.any(|s| s == &RepoFlags::Add || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
||||||
{
|
{
|
||||||
|
@ -220,6 +230,8 @@ impl GitRepo {
|
||||||
fn commit(&self) -> bool {
|
fn commit(&self) -> bool {
|
||||||
if self
|
if self
|
||||||
.flags
|
.flags
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to unwrap flags")
|
||||||
.iter()
|
.iter()
|
||||||
.any(|s| s == &RepoFlags::Commit || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
.any(|s| s == &RepoFlags::Commit || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
||||||
{
|
{
|
||||||
|
@ -238,6 +250,8 @@ impl GitRepo {
|
||||||
fn commit_with_msg(&self, msg: &str) -> bool {
|
fn commit_with_msg(&self, msg: &str) -> bool {
|
||||||
if self
|
if self
|
||||||
.flags
|
.flags
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to unwrap flags")
|
||||||
.iter()
|
.iter()
|
||||||
.any(|s| s == &RepoFlags::Commit || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
.any(|s| s == &RepoFlags::Commit || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
||||||
{
|
{
|
||||||
|
@ -258,6 +272,8 @@ impl GitRepo {
|
||||||
fn push(&self) -> bool {
|
fn push(&self) -> bool {
|
||||||
if self
|
if self
|
||||||
.flags
|
.flags
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to unwrap flags")
|
||||||
.iter()
|
.iter()
|
||||||
.any(|s| s == &RepoFlags::Push || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
.any(|s| s == &RepoFlags::Push || s == &RepoFlags::Quick || s == &RepoFlags::Fast)
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,7 +150,7 @@ mod config {
|
||||||
name: "test repo".to_string(),
|
name: "test repo".to_string(),
|
||||||
path: "/tmp".to_string(),
|
path: "/tmp".to_string(),
|
||||||
url: "https://github.com/cafkafk/gg".to_string(),
|
url: "https://github.com/cafkafk/gg".to_string(),
|
||||||
flags: vec![Clone, Push],
|
flags: Some(vec![Clone, Push]),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,17 @@ categories:
|
||||||
url: git@github.com:cafkafk/li.git
|
url: git@github.com:cafkafk/li.git
|
||||||
flags: [Clone, Push]
|
flags: [Clone, Push]
|
||||||
empty:
|
empty:
|
||||||
|
stuff:
|
||||||
|
flags: []
|
||||||
|
repos:
|
||||||
|
gg:
|
||||||
|
name: gg
|
||||||
|
path: /home/ces/.dots/
|
||||||
|
url: git@github.com:cafkafk/gg.git
|
||||||
|
li:
|
||||||
|
name: li
|
||||||
|
path: /home/ces/org/src/git/
|
||||||
|
url: git@github.com:cafkafk/li.git
|
||||||
links:
|
links:
|
||||||
- name: gg
|
- name: gg
|
||||||
rx: /home/ces/.config/gg
|
rx: /home/ces/.config/gg
|
||||||
|
|
|
@ -1,5 +1,31 @@
|
||||||
categories:
|
categories:
|
||||||
empty: {}
|
utils:
|
||||||
|
repos:
|
||||||
|
li:
|
||||||
|
name: li
|
||||||
|
path: /home/ces/org/src/git/
|
||||||
|
url: git@github.com:cafkafk/li.git
|
||||||
|
flags:
|
||||||
|
- Clone
|
||||||
|
- Push
|
||||||
|
gg:
|
||||||
|
name: gg
|
||||||
|
path: /home/ces/.dots/
|
||||||
|
url: git@github.com:cafkafk/gg.git
|
||||||
|
flags:
|
||||||
|
- Clone
|
||||||
|
- Push
|
||||||
|
stuff:
|
||||||
|
flags: []
|
||||||
|
repos:
|
||||||
|
li:
|
||||||
|
name: li
|
||||||
|
path: /home/ces/org/src/git/
|
||||||
|
url: git@github.com:cafkafk/li.git
|
||||||
|
gg:
|
||||||
|
name: gg
|
||||||
|
path: /home/ces/.dots/
|
||||||
|
url: git@github.com:cafkafk/gg.git
|
||||||
config:
|
config:
|
||||||
flags: []
|
flags: []
|
||||||
repos:
|
repos:
|
||||||
|
@ -17,22 +43,7 @@ categories:
|
||||||
flags:
|
flags:
|
||||||
- Clone
|
- Clone
|
||||||
- Push
|
- Push
|
||||||
utils:
|
empty: {}
|
||||||
repos:
|
|
||||||
li:
|
|
||||||
name: li
|
|
||||||
path: /home/ces/org/src/git/
|
|
||||||
url: git@github.com:cafkafk/li.git
|
|
||||||
flags:
|
|
||||||
- Clone
|
|
||||||
- Push
|
|
||||||
gg:
|
|
||||||
name: gg
|
|
||||||
path: /home/ces/.dots/
|
|
||||||
url: git@github.com:cafkafk/gg.git
|
|
||||||
flags:
|
|
||||||
- Clone
|
|
||||||
- Push
|
|
||||||
links:
|
links:
|
||||||
- name: gg
|
- name: gg
|
||||||
rx: /home/ces/.config/gg
|
rx: /home/ces/.config/gg
|
||||||
|
|
Loading…
Reference in a new issue