Last active
March 5, 2019 19:26
-
-
Save Lazzlo2096/ecf44b5953c0dc6a7625ef03635dbbab to your computer and use it in GitHub Desktop.
Tasks of making 'fdupes-xenon' utility
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
https://github.com/Lazzlo2096/fdupes-xenon | |
Необходимость: [maybe]\[want]\[need]\[necessary] | |
Сложность: [easy]\[mid]\[hard] | |
* - первоочередные задачи (без которых не былобы этой проги) | |
WIP x 1 | |
DONE x 2 | |
---------------------------------------------- | |
1) __old age__ | |
1.3)[hard][necessary] должен работать с ярлыками и другими видами link'ов корректно (не удалять оригиналы, считая что хард-ярлык это его копия) | |
1.4*)[hard] добавить фн-цию мердж ( слить [и выделить разность (хз) ] ) | |
1.4.1) Но сначало определить, могут ли папки быть смержены | |
1.4.1.1)[WIP] определить полностью ли папки содержат файлы дубликаты | |
1.4.2) мерджинг лог (что было во что слилось) \ выбрать имя папки от куда брать имена \ или вообще индивидуально | |
2) __new age__ | |
2.1)[maybe] buty CLI psevdo-GUI. | |
2.1.2) красивый консольный вывод (хеш-сумму, правильные палочки в путях (not "\ " and "\\" in Windows) и их отсутвие, size, max common folder? ) | |
2.1.2.1)[easy] флаг выводить ли это всё --^ . Или Возможность выбирать тип вывода (кастомный вывод), типа printf("%size %hash %hash %date") хз. | |
2.2) __Флаги\Аргументы__ | |
2.2.2)[want] выбирать тип хеш-суммы (или даже двойной для избежания коллизий) | |
2.2.3)[DONE 0.1.2] рекурсивно обходить ли папки или нет | |
2.2.4)[DONE 0.1.2](by hack) сравнивать две (и более) папки на дубликаты в аргуменах | |
2.2.5) показывать ли только уникальные файлы | |
2.3)[want] Выделить функции и тесты в отдельные фалы (?) | |
3) нарисовать и описать схему работы (безопасное копирование, перемещение и удаление) | |
4) (продвинутое) определить какой файл мение поверждён (и повреждён ли вообще) | |
5) распаралелить поиск по каждой папке на процесс (в зависимости от ядерности компа) (?) | |
6)[want] GUI (?) | |
7) сделать супер быстрой {а разьве сейчас медленная?} (через sum by ассеблер? Cмотри как он собираеться в асм \ профилировать) | |
8*) Сделать поиск повторок по строго определённому файлу(или содержимому папки), или группы файлов(папок). [Используй Hash trait Люк!] | |
---------------------------------- | |
x) нужно ли делать флаги для кадых папок-аргументов отдельно? (мол гибкая настройка) | |
example:{ fdupiex-xenon -r ./di1 ./dir2_not_rec -r ./dir3; } | |
or: { fdupiex-xenon ./dir0_not_rec -r ./dir1_rec ./der1_rec -R ./dir2 -r ./dir3_rec; } | |
Если нет, то тогда можно сделать рекурсивынй обход по умолчанию.. | |
2) Сделать секцию в реадми "Main features" - мол что эту программу отличает от других подобных | |
4) А карго может make install ? | |
========= Bugs ============================= | |
#1. [in v0.1.2] Multiple checks. | |
When ./target/debug/fdupes-xenon ./for\ tests/folder\ 1/ ./for\ tests/folder\ 2/ ./for\ tests/ -r; | |
#2. [in v] | |
============================================ | |
возможность удалять дубликаты так: | |
{ | |
/1/A.txt | |
/2/A.txt | |
/1/2/A.txt | |
/1/B.txt | |
/2/B.txt | |
/1/2/B.txt | |
будет возможность это выбрать: оставить один экземпляр дубликатов которые: самые страые/новые \ лежат в папке X \ имеет имя <regex> | |
} | |
======= | |
а стоит ли делать если уже есть? сделаю лучше и удобней для себя | |
https://ru.wikipedia.org/wiki/Fdupes | |
https://github.com/jbruchon/jdupes | |
и просто для практики в раст |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// [FIXIT] | |
//use std::io::prelude::*; // ? | |
// https://doc.rust-lang.org/std/fs/struct.File.html | |
// use std::fs::{*, self}; | |
//enrtries | |
// let rewq: [u8; 2] = [1, 4]; | |
// let rewq2: [u8; 2] = [1, 4]; | |
// let rewq3: [u8; 2] = [1, 5]; | |
// let werrt = rewq==rewq3; | |
// println!("{:?}", werrt); | |
// assert_eq!(true, rewq==rewq2); | |
// assert_eq!(false, rewq==rewq3); | |
//------------ | |
let mut hash_paths_dict: HashMap<[u8; 16], Vec<path::PathBuf>> = HashMap::new(); | |
//==================== | |
// let a:[u8; 16] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; | |
// let b:[u8; 16] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]; | |
// let c:[u8; 16] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2]; | |
// hash_paths_dict.insert(a, vec![]); | |
// if hash_paths_dict.contains_key(&a) { println!("\tThis is A!"); } | |
// if hash_paths_dict.contains_key(&b) { println!("\tThis is B!"); } | |
// let d : Vec<i8> = Vec::new(); // vec![] // [].to_vec() | |
//======================= unused code | |
//Похоже я не обрабатываю ошибки | |
fn _my_read_file( file_name: &str, buf_str: &mut String) -> usize { | |
//Вообщем я реализвал наконец-то эту функцию, но наверно зазря.. потому что оказалось что и без меня есть read_to_string() | |
let mut f = fs::File::open(file_name).unwrap(); | |
//Почему он ищет этот файл в корневой папке? Мб карго перенаправляет... | |
//вместо ?, unwrap() - как исправить? и вообще wtf? | |
//Почему f должен быть mut? | |
let mut buffer: String = String::new(); | |
//^ А тут нужен mut? нужен, а зачем? | |
let len = f.read_to_string(&mut buffer).unwrap(); | |
//^ принимает &mut String | |
*buf_str = buffer; | |
// println!("read_to_string: {:?} {}", len, buf_str); | |
// assert_eq!(len, 5); | |
// assert_eq!(buf_str, "hello"); | |
return len; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment