git integration
This commit is contained in:
parent
261aa74800
commit
1cc7adfeb8
@ -17,8 +17,6 @@ A (currently in development) to do app for the command line.
|
|||||||
- Options for which field to order by, and how to order (ascending or descending)
|
- Options for which field to order by, and how to order (ascending or descending)
|
||||||
- Options for which columns to include
|
- Options for which columns to include
|
||||||
- If no values given, read a set of defaults from a `list.toml` file, which can be edited from a similar command
|
- If no values given, read a set of defaults from a `list.toml` file, which can be edited from a similar command
|
||||||
- Git integration
|
|
||||||
- `toru git` should run the provided Git command directly at the root of the current vault
|
|
||||||
- Ability to view, edit, delete, etc. using name
|
- Ability to view, edit, delete, etc. using name
|
||||||
- Have a file containing a serialized `HashMap<String, Vec<Id>>`
|
- Have a file containing a serialized `HashMap<String, Vec<Id>>`
|
||||||
- Disallow numerical names and have command automatically identify if it is a name or Id
|
- Disallow numerical names and have command automatically identify if it is a name or Id
|
||||||
@ -28,3 +26,6 @@ A (currently in development) to do app for the command line.
|
|||||||
- Error if any circular dependencies are introduced
|
- Error if any circular dependencies are introduced
|
||||||
- Make sure dependencies written to file are only those that could be successfully created
|
- Make sure dependencies written to file are only those that could be successfully created
|
||||||
- Automatically added recurring notes
|
- Automatically added recurring notes
|
||||||
|
|
||||||
|
## Bugs:
|
||||||
|
- Git commands which automatically open a text editor after don't work as expected
|
||||||
|
@ -2,6 +2,7 @@ use crate::colour;
|
|||||||
|
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::str;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
@ -10,6 +11,7 @@ pub enum Error {
|
|||||||
Trash(trash::Error),
|
Trash(trash::Error),
|
||||||
TomlDe(toml::de::Error),
|
TomlDe(toml::de::Error),
|
||||||
TomlSer(toml::ser::Error),
|
TomlSer(toml::ser::Error),
|
||||||
|
Utf8(str::Utf8Error),
|
||||||
Generic(String),
|
Generic(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,6 +23,7 @@ impl fmt::Display for Error {
|
|||||||
Error::Trash(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
Error::Trash(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
||||||
Error::TomlDe(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
Error::TomlDe(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
||||||
Error::TomlSer(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
Error::TomlSer(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
||||||
|
Error::Utf8(err) => write!(f, "{} {}", colour::error("Internal Error:"), err),
|
||||||
Error::Generic(message) => write!(f, "{}", message),
|
Error::Generic(message) => write!(f, "{}", message),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,3 +58,9 @@ impl From<toml::ser::Error> for Error {
|
|||||||
Error::TomlSer(err)
|
Error::TomlSer(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<str::Utf8Error> for Error {
|
||||||
|
fn from(err : str::Utf8Error) -> Self {
|
||||||
|
Error::Utf8(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
26
src/git.rs
Normal file
26
src/git.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
use crate::error;
|
||||||
|
|
||||||
|
use std::io;
|
||||||
|
use std::str;
|
||||||
|
use std::path;
|
||||||
|
use std::process;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
|
pub fn run_command(args : Vec<String>, vault_folder : &path::Path) -> Result<(), error::Error> {
|
||||||
|
|
||||||
|
let mut command = process::Command::new("git");
|
||||||
|
|
||||||
|
command
|
||||||
|
.current_dir(vault_folder)
|
||||||
|
// Force colour output even though run from other process.
|
||||||
|
.args(["-c", "color.ui=always"])
|
||||||
|
.args(args);
|
||||||
|
|
||||||
|
let output = command.output()?;
|
||||||
|
let output_string = str::from_utf8(&output.stdout)?;
|
||||||
|
|
||||||
|
print!("{}", output_string);
|
||||||
|
io::stdout().flush()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
11
src/main.rs
11
src/main.rs
@ -1,5 +1,6 @@
|
|||||||
#![allow(dead_code, unused_variables)]
|
#![allow(dead_code, unused_variables)]
|
||||||
|
|
||||||
|
mod git;
|
||||||
mod vault;
|
mod vault;
|
||||||
mod error;
|
mod error;
|
||||||
mod tasks;
|
mod tasks;
|
||||||
@ -16,7 +17,7 @@ struct Args {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(clap::Subcommand, Debug)]
|
#[derive(clap::Subcommand, Debug)]
|
||||||
#[clap(version, about, author, global_setting = clap::AppSettings::DisableHelpSubcommand)]
|
#[clap(version, about, author, global_setting=clap::AppSettings::DisableHelpSubcommand)]
|
||||||
enum Command {
|
enum Command {
|
||||||
/// Create a new task.
|
/// Create a new task.
|
||||||
New {
|
New {
|
||||||
@ -43,6 +44,11 @@ enum Command {
|
|||||||
Complete {
|
Complete {
|
||||||
id : tasks::Id,
|
id : tasks::Id,
|
||||||
},
|
},
|
||||||
|
/// Run Git commands at the root of the vault.
|
||||||
|
#[clap(trailing_var_arg=true)]
|
||||||
|
Git {
|
||||||
|
args : Vec<String>,
|
||||||
|
},
|
||||||
/// Commands for interacting with vaults.
|
/// Commands for interacting with vaults.
|
||||||
#[clap(subcommand)]
|
#[clap(subcommand)]
|
||||||
Vault(VaultCommand),
|
Vault(VaultCommand),
|
||||||
@ -151,6 +157,9 @@ fn program() -> Result<(), error::Error> {
|
|||||||
task.save()?;
|
task.save()?;
|
||||||
println!("Marked task {} as complete", colour::id(&id.to_string()));
|
println!("Marked task {} as complete", colour::id(&id.to_string()));
|
||||||
},
|
},
|
||||||
|
Git { args } => {
|
||||||
|
git::run_command(args, vault_folder)?;
|
||||||
|
},
|
||||||
Vault(_) => unreachable!(),
|
Vault(_) => unreachable!(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user