chore(version): bump to v0.2.0 #10
4 changed files with 238 additions and 41 deletions
28
src/git.rs
28
src/git.rs
|
@ -507,6 +507,34 @@ impl Config {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn get_repo<F>(&self, cat_name: &str, repo_name: &str, f: F)
|
||||||
|
where
|
||||||
|
F: FnOnce(&GitRepo),
|
||||||
|
{
|
||||||
|
f(&self
|
||||||
|
.categories
|
||||||
|
.get(cat_name)
|
||||||
|
.expect("failed to get category")
|
||||||
|
.repos
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to get repo")
|
||||||
|
.get(repo_name)
|
||||||
|
.expect("failed to get category"))
|
||||||
|
}
|
||||||
|
pub fn get_link<F>(&self, cat_name: &str, link_name: &str, f: F)
|
||||||
|
where
|
||||||
|
F: FnOnce(&Link),
|
||||||
|
{
|
||||||
|
f(&self
|
||||||
|
.categories
|
||||||
|
.get(cat_name)
|
||||||
|
.expect("failed to get category")
|
||||||
|
.links
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to get repo")
|
||||||
|
.get(link_name)
|
||||||
|
.expect("failed to get category"))
|
||||||
|
}
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
6
src/lib.rs
Normal file
6
src/lib.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
// #[allow(unused)]
|
||||||
|
// pub mod git;
|
||||||
|
// #[allow(unused)]
|
||||||
|
// mod settings;
|
||||||
|
// #[allow(unused)]
|
||||||
|
// mod utils;
|
44
src/main.rs
44
src/main.rs
|
@ -195,34 +195,6 @@ mod config {
|
||||||
fn get_category<'cat>(config: &'cat Config, name: &'cat str) -> &'cat Category {
|
fn get_category<'cat>(config: &'cat Config, name: &'cat str) -> &'cat Category {
|
||||||
config.categories.get(name).expect("failed to get category")
|
config.categories.get(name).expect("failed to get category")
|
||||||
}
|
}
|
||||||
fn get_repo<F>(config: &Config, cat_name: &str, repo_name: &str, f: F)
|
|
||||||
where
|
|
||||||
F: FnOnce(&GitRepo),
|
|
||||||
{
|
|
||||||
f(config
|
|
||||||
.categories
|
|
||||||
.get(cat_name)
|
|
||||||
.expect("failed to get category")
|
|
||||||
.repos
|
|
||||||
.as_ref()
|
|
||||||
.expect("failed to get repo")
|
|
||||||
.get(repo_name)
|
|
||||||
.expect("failed to get category"))
|
|
||||||
}
|
|
||||||
fn get_link<F>(config: &Config, cat_name: &str, link_name: &str, f: F)
|
|
||||||
where
|
|
||||||
F: FnOnce(&Link),
|
|
||||||
{
|
|
||||||
f(config
|
|
||||||
.categories
|
|
||||||
.get(cat_name)
|
|
||||||
.expect("failed to get category")
|
|
||||||
.links
|
|
||||||
.as_ref()
|
|
||||||
.expect("failed to get repo")
|
|
||||||
.get(link_name)
|
|
||||||
.expect("failed to get category"))
|
|
||||||
}
|
|
||||||
#[test]
|
#[test]
|
||||||
fn is_config_readable() {
|
fn is_config_readable() {
|
||||||
let root = current_dir().expect("failed to get current dir");
|
let root = current_dir().expect("failed to get current dir");
|
||||||
|
@ -235,30 +207,20 @@ mod config {
|
||||||
);
|
);
|
||||||
|
|
||||||
let _flags = vec![Clone, Push];
|
let _flags = vec![Clone, Push];
|
||||||
// FIXME not very extensive
|
// NOTE not very extensive
|
||||||
#[allow(clippy::bool_assert_comparison)]
|
#[allow(clippy::bool_assert_comparison)]
|
||||||
{
|
{
|
||||||
get_repo(&config, "config", "qmk_firmware", |repo| {
|
(&config).get_repo("config", "qmk_firmware", |repo| {
|
||||||
assert_eq!(repo.name, "qmk_firmware");
|
assert_eq!(repo.name, "qmk_firmware");
|
||||||
assert_eq!(repo.path, "/home/ces/org/src/git/");
|
assert_eq!(repo.path, "/home/ces/org/src/git/");
|
||||||
assert_eq!(repo.url, "git@github.com:cafkafk/qmk_firmware.git");
|
assert_eq!(repo.url, "git@github.com:cafkafk/qmk_firmware.git");
|
||||||
});
|
});
|
||||||
get_link(&config, "stuff", "gg", |link| {
|
(&config).get_link("stuff", "gg", |link| {
|
||||||
assert_eq!(link.name, "gg");
|
assert_eq!(link.name, "gg");
|
||||||
assert_eq!(link.tx, "/home/ces/.dots/gg");
|
assert_eq!(link.tx, "/home/ces/.dots/gg");
|
||||||
assert_eq!(link.rx, "/home/ces/.config/gg");
|
assert_eq!(link.rx, "/home/ces/.config/gg");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
{
|
|
||||||
assert_eq!(config.links[0].name, "gg");
|
|
||||||
assert_eq!(config.links[0].rx, "/home/ces/.config/gg");
|
|
||||||
assert_eq!(config.links[0].tx, "/home/ces/.dots/gg");
|
|
||||||
assert_eq!(config.links[1].name, "starship");
|
|
||||||
assert_eq!(config.links[1].rx, "/home/ces/.config/starship.toml");
|
|
||||||
assert_eq!(config.links[1].tx, "/home/ces/.dots/starship.toml");
|
|
||||||
// FIXME doesn't check repoflags
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
201
tests/main.rs
Normal file
201
tests/main.rs
Normal file
|
@ -0,0 +1,201 @@
|
||||||
|
#[test]
|
||||||
|
fn main() {
|
||||||
|
assert!(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#[cfg(test)]
|
||||||
|
mod config {
|
||||||
|
use gg::git::RepoFlags::{Clone, Push};
|
||||||
|
use gg::git::{Category, Config, GitRepo, Link};
|
||||||
|
use relative_path::RelativePath;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::env::current_dir;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
#[test]
|
||||||
|
fn init_config() {
|
||||||
|
let _config = Config {
|
||||||
|
categories: HashMap::new(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn init_config_populate() {
|
||||||
|
let default_category = Category {
|
||||||
|
flags: Some(vec![]),
|
||||||
|
repos: Some(HashMap::new()),
|
||||||
|
links: Some(HashMap::new()),
|
||||||
|
};
|
||||||
|
let mut config = Config {
|
||||||
|
categories: HashMap::new(),
|
||||||
|
};
|
||||||
|
config
|
||||||
|
.categories
|
||||||
|
.insert(format!("{}", 0).to_string(), default_category);
|
||||||
|
for i in 0..=5 {
|
||||||
|
config
|
||||||
|
.categories
|
||||||
|
.get_mut(&format!("{}", 0).to_string())
|
||||||
|
.expect("category not found")
|
||||||
|
.repos
|
||||||
|
.as_mut()
|
||||||
|
.expect("failed to get repo")
|
||||||
|
.insert(
|
||||||
|
format!("{}", i).to_string(),
|
||||||
|
GitRepo {
|
||||||
|
name: "test repo".to_string(),
|
||||||
|
path: "/tmp".to_string(),
|
||||||
|
url: "https://github.com/cafkafk/gg".to_string(),
|
||||||
|
flags: Some(vec![Clone, Push]),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn read_config_populate() {
|
||||||
|
let _config = Config::new(&RelativePath::new("./src/test/config.yaml").to_string());
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn write_config() {
|
||||||
|
let root = current_dir().expect("failed to get current dir");
|
||||||
|
let config = Config::new(
|
||||||
|
&RelativePath::new("./src/test/config.yaml")
|
||||||
|
.to_logical_path(&root)
|
||||||
|
.into_os_string()
|
||||||
|
.into_string()
|
||||||
|
.expect("failed to turn config into string"),
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut test_file = File::create(
|
||||||
|
RelativePath::new("./src/test/test.yaml")
|
||||||
|
.to_logical_path(&root)
|
||||||
|
.into_os_string()
|
||||||
|
.into_string()
|
||||||
|
.expect("failed to turn config into string"),
|
||||||
|
)
|
||||||
|
.expect("failed to create test file");
|
||||||
|
let contents = serde_yaml::to_string(&config).expect("failed to turn config into string");
|
||||||
|
test_file
|
||||||
|
.write_all(contents.as_bytes())
|
||||||
|
.expect("failed to write contents of config into file");
|
||||||
|
|
||||||
|
let test_config = Config::new(&RelativePath::new("./src/test/test.yaml").to_string());
|
||||||
|
assert_eq!(config, test_config);
|
||||||
|
}
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn get_category<'cat>(config: &'cat Config, name: &'cat str) -> &'cat Category {
|
||||||
|
config.categories.get(name).expect("failed to get category")
|
||||||
|
}
|
||||||
|
fn get_repo<F>(config: &Config, cat_name: &str, repo_name: &str, f: F)
|
||||||
|
where
|
||||||
|
F: FnOnce(&GitRepo),
|
||||||
|
{
|
||||||
|
f(config
|
||||||
|
.categories
|
||||||
|
.get(cat_name)
|
||||||
|
.expect("failed to get category")
|
||||||
|
.repos
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to get repo")
|
||||||
|
.get(repo_name)
|
||||||
|
.expect("failed to get category"))
|
||||||
|
}
|
||||||
|
fn get_link<F>(config: &Config, cat_name: &str, link_name: &str, f: F)
|
||||||
|
where
|
||||||
|
F: FnOnce(&Link),
|
||||||
|
{
|
||||||
|
f(config
|
||||||
|
.categories
|
||||||
|
.get(cat_name)
|
||||||
|
.expect("failed to get category")
|
||||||
|
.links
|
||||||
|
.as_ref()
|
||||||
|
.expect("failed to get repo")
|
||||||
|
.get(link_name)
|
||||||
|
.expect("failed to get category"))
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn is_config_readable() {
|
||||||
|
let root = current_dir().expect("failed to get current dir");
|
||||||
|
let config = Config::new(
|
||||||
|
&RelativePath::new("./src/test/config.yaml")
|
||||||
|
.to_logical_path(root)
|
||||||
|
.into_os_string()
|
||||||
|
.into_string()
|
||||||
|
.expect("failed to turnn config into string"),
|
||||||
|
);
|
||||||
|
|
||||||
|
let _flags = vec![Clone, Push];
|
||||||
|
// FIXME not very extensive
|
||||||
|
#[allow(clippy::bool_assert_comparison)]
|
||||||
|
{
|
||||||
|
get_repo(&config, "config", "qmk_firmware", |repo| {
|
||||||
|
assert_eq!(repo.name, "qmk_firmware");
|
||||||
|
assert_eq!(repo.path, "/home/ces/org/src/git/");
|
||||||
|
assert_eq!(repo.url, "git@github.com:cafkafk/qmk_firmware.git");
|
||||||
|
});
|
||||||
|
get_link(&config, "stuff", "gg", |link| {
|
||||||
|
assert_eq!(link.name, "gg");
|
||||||
|
assert_eq!(link.tx, "/home/ces/.dots/gg");
|
||||||
|
assert_eq!(link.rx, "/home/ces/.config/gg");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
assert_eq!(config.links[0].name, "gg");
|
||||||
|
assert_eq!(config.links[0].rx, "/home/ces/.config/gg");
|
||||||
|
assert_eq!(config.links[0].tx, "/home/ces/.dots/gg");
|
||||||
|
assert_eq!(config.links[1].name, "starship");
|
||||||
|
assert_eq!(config.links[1].rx, "/home/ces/.config/starship.toml");
|
||||||
|
assert_eq!(config.links[1].tx, "/home/ces/.dots/starship.toml");
|
||||||
|
// FIXME doesn't check repoflags
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
#[cfg(test)]
|
||||||
|
mod repo_actions {
|
||||||
|
use gg::git::GitRepo;
|
||||||
|
use gg::relative_path::RelativePath;
|
||||||
|
use gg::std::env::current_dir;
|
||||||
|
use gg::std::process::Command;
|
||||||
|
#[test]
|
||||||
|
#[allow(clippy::redundant_clone)]
|
||||||
|
fn test_repo_actions() {
|
||||||
|
let test_repo_name: String = "test".to_string();
|
||||||
|
let root = current_dir().unwrap();
|
||||||
|
let test_repo_dir: String = RelativePath::new("./src/test")
|
||||||
|
.to_logical_path(&root)
|
||||||
|
.into_os_string()
|
||||||
|
.into_string()
|
||||||
|
.unwrap();
|
||||||
|
let test_repo_url: String = "git@github.com:cafkafk/test.git".to_string();
|
||||||
|
println!("{}", test_repo_dir);
|
||||||
|
let mut config = Config {
|
||||||
|
repos: vec![],
|
||||||
|
links: vec![],
|
||||||
|
};
|
||||||
|
let repo = GitRepo {
|
||||||
|
name: test_repo_name.to_owned(),
|
||||||
|
path: test_repo_dir.to_owned(),
|
||||||
|
url: test_repo_url.to_owned(),
|
||||||
|
clone: true,
|
||||||
|
};
|
||||||
|
config.repos.push(repo);
|
||||||
|
// BUG FIXME can't do this in flake
|
||||||
|
// should have a good alternative
|
||||||
|
// config.clone_all();
|
||||||
|
// config.pull_all();
|
||||||
|
for r in config.repos.iter() {
|
||||||
|
Command::new("touch")
|
||||||
|
.current_dir(&(r.path.to_owned() + &r.name))
|
||||||
|
.arg("test")
|
||||||
|
.status()
|
||||||
|
.expect("failed to create test file");
|
||||||
|
}
|
||||||
|
config.add_all();
|
||||||
|
config.commit_all_msg(&"test".to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
Loading…
Reference in a new issue