implement -all option to add
This commit is contained in:
parent
41c4796555
commit
57647e5df2
@ -1,20 +1,31 @@
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use std::fs::OpenOptions;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use clap::Values;
|
use clap::Values;
|
||||||
|
use crate::store::index;
|
||||||
use crate::store::{self, object::Object};
|
use crate::store::{self, object::Object};
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
use crate::utils::nextsyncignore::{self, ignore_file};
|
use crate::utils::nextsyncignore::{self, ignore_file};
|
||||||
use crate::utils::path::{normalize_relative, repo_root};
|
use crate::utils::path::{normalize_relative, repo_root, path_buf_to_string};
|
||||||
|
|
||||||
|
use super::status::get_all_objs;
|
||||||
|
|
||||||
pub struct AddArgs<'a> {
|
pub struct AddArgs<'a> {
|
||||||
pub files: Values<'a>,
|
pub files: Option<Values<'a>>,
|
||||||
pub force: bool,
|
pub force: bool,
|
||||||
|
pub all: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo match deleted files
|
// todo match deleted files
|
||||||
// todo match weird reg expression
|
// todo match weird reg expression
|
||||||
// todo -A == .
|
// todo -A == .
|
||||||
pub fn add(args: AddArgs) {
|
pub fn add(args: AddArgs) {
|
||||||
|
// write all modification in the index
|
||||||
|
if args.all {
|
||||||
|
write_all();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let mut index_file = store::index::open();
|
let mut index_file = store::index::open();
|
||||||
let mut added_files: Vec<String> = vec![];
|
let mut added_files: Vec<String> = vec![];
|
||||||
|
|
||||||
@ -24,7 +35,7 @@ pub fn add(args: AddArgs) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let mut ignored_f = vec![];
|
let mut ignored_f = vec![];
|
||||||
let file_vec: Vec<&str> = args.files.collect();
|
let file_vec: Vec<&str> = args.files.unwrap().collect();
|
||||||
for file in file_vec {
|
for file in file_vec {
|
||||||
|
|
||||||
let f = match normalize_relative(file) {
|
let f = match normalize_relative(file) {
|
||||||
@ -95,3 +106,14 @@ fn add_folder_content(path: PathBuf, added_files: &mut Vec<String>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn write_all() {
|
||||||
|
let objs = get_all_objs();
|
||||||
|
let mut index_file = OpenOptions::new()
|
||||||
|
.write(true)
|
||||||
|
.create(true)
|
||||||
|
.open(index::path()).expect("Cannot open index file");
|
||||||
|
for obj in objs {
|
||||||
|
writeln!(index_file, "{}", path_buf_to_string(obj.path.clone()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
16
src/main.rs
16
src/main.rs
@ -81,6 +81,7 @@ fn main() {
|
|||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("files")
|
Arg::with_name("files")
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.conflicts_with("all")
|
||||||
.multiple(true)
|
.multiple(true)
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.value_name("FILE")
|
.value_name("FILE")
|
||||||
@ -92,6 +93,12 @@ fn main() {
|
|||||||
.long("force")
|
.long("force")
|
||||||
.help("Allow adding otherwise ignored files."),
|
.help("Allow adding otherwise ignored files."),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("all")
|
||||||
|
.short("A")
|
||||||
|
.long("all")
|
||||||
|
.help("This adds, modifies, and removes index entries to match the working tree"),
|
||||||
|
)
|
||||||
.about("Add changes to the index")
|
.about("Add changes to the index")
|
||||||
)
|
)
|
||||||
.subcommand(
|
.subcommand(
|
||||||
@ -138,8 +145,15 @@ fn main() {
|
|||||||
} else if let Some(matches) = matches.subcommand_matches("add") {
|
} else if let Some(matches) = matches.subcommand_matches("add") {
|
||||||
if let Some(files) = matches.values_of("files") {
|
if let Some(files) = matches.values_of("files") {
|
||||||
commands::add::add(AddArgs {
|
commands::add::add(AddArgs {
|
||||||
files,
|
files: Some(files),
|
||||||
force: matches.is_present("force"),
|
force: matches.is_present("force"),
|
||||||
|
all: matches.is_present("all"),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
commands::add::add(AddArgs {
|
||||||
|
files: None,
|
||||||
|
force: matches.is_present("force"),
|
||||||
|
all: matches.is_present("all"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else if let Some(_) = matches.subcommand_matches("reset") {
|
} else if let Some(_) = matches.subcommand_matches("reset") {
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
use std::io;
|
use std::io;
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::fs::OpenOptions;
|
use std::fs::OpenOptions;
|
||||||
use crate::utils::{read, path};
|
use crate::utils::{read, path};
|
||||||
|
|
||||||
pub fn open() -> File {
|
pub fn path() -> PathBuf {
|
||||||
let mut path = path::nextsync();
|
let mut path = path::nextsync();
|
||||||
|
|
||||||
path.push("index");
|
path.push("index");
|
||||||
|
path
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn open() -> File {
|
||||||
|
let mut path = path();
|
||||||
OpenOptions::new()
|
OpenOptions::new()
|
||||||
.read(true)
|
.read(true)
|
||||||
.write(true)
|
.write(true)
|
||||||
|
Loading…
Reference in New Issue
Block a user