900ffcb7d1
Add ui submodules to talk to external programs, editor in this case
2015-12-29 16:00:08 +01:00
e3b22d488d
Remove box-syntax in test
2015-12-29 15:10:09 +01:00
e21da820c4
Fix test for to use FileID::parse()
2015-12-29 15:10:09 +01:00
b5da0cb613
Fix use... in test modules
2015-12-29 15:01:35 +01:00
248b5c7574
Merge branch 'debug'
2015-12-28 21:55:08 +01:00
6ca4818302
Add File::set_header()
2015-12-28 21:51:08 +01:00
68f66ca27d
Add BM::command_set_tags()
2015-12-28 21:51:08 +01:00
bcbd568311
Add BM::command_rm_tags()
2015-12-28 21:51:08 +01:00
7e401b5881
Add generic alter_tags_in_files() function
2015-12-28 21:51:08 +01:00
966e9902cb
BM header helpers: Add set_tags_in_header()
2015-12-28 21:25:51 +01:00
46b7ae9384
Add BM::command_add_tags()
2015-12-28 20:53:13 +01:00
cbefa577e9
Use get_files() to filter files, remove afterwards
...
Change get_files() signature, so we know whether there was a filter
applied, so we can abort the action if there was no filter involved.
2015-12-28 19:46:59 +01:00
e84986680d
Add functions to get files from Store by certain predicated (id, match, tags)
2015-12-28 19:42:35 +01:00
db204f3cba
BM::command_add(): Add URL verification
2015-12-28 18:47:17 +01:00
16d40e9bfe
Add util: is_url(String) -> bool
2015-12-28 18:47:17 +01:00
9db5ffa842
Implement BM::command_remove()
2015-12-28 18:02:32 +01:00
c2469b83ce
Add debug output to Store::load_in_cache()
2015-12-28 17:39:00 +01:00
302549d194
Fixup Store::load_by_hash()
2015-12-28 17:39:00 +01:00
3a5bb3a5ce
Add Store::load_by_hash()
2015-12-28 17:39:00 +01:00
5a55636c65
Implement: BM: command_list()
2015-12-28 17:38:59 +01:00
bd9abf3bc7
Add Store::load_in_cache(... FileID)
2015-12-28 17:38:59 +01:00
7170f95825
BM header helpers: Add get_url_from_header()
2015-12-28 17:38:59 +01:00
2e7621d2bd
Add header helpers for BM
2015-12-28 17:38:59 +01:00
e346f56a8e
Fix: BM module name
2015-12-28 17:38:59 +01:00
fda7fd56b9
Fix: Argument for BM::exec()
2015-12-28 17:38:59 +01:00
523e6f8f66
Implement: BM::command_add()
2015-12-28 17:38:59 +01:00
df27e5d2a3
BM subcommands: Pass ArgMatches
2015-12-28 17:38:59 +01:00
c432e8c2c4
Add subcommand calling code
2015-12-28 17:38:59 +01:00
81ead3c68c
Add debug output to FileID::parse()
2015-12-28 17:35:55 +01:00
f24db1eb7d
Add debug output to Store::remove()
2015-12-28 17:35:55 +01:00
e9ea485ed5
Add debug output to Store::load_in_cache()
2015-12-28 17:35:55 +01:00
4ea83d538f
Add Store::load_by_hash()
2015-12-28 17:35:55 +01:00
62ee1d4e96
Add Store::load_for_module()
2015-12-28 17:35:20 +01:00
3a2c8b091e
Add Store::load_in_cache(... FileID)
2015-12-28 17:35:13 +01:00
c6f31496ab
Module helpers: header: Add get_url_from_header()
2015-12-28 17:35:07 +01:00
24e1ea2522
Fix: Debug for File implementation
2015-12-28 17:34:56 +01:00
d20ace3e80
Add Store::ensure_store_path_exists()
2015-12-28 17:34:47 +01:00
c97f4bab56
Add Store::remove(FileID)
2015-12-28 14:40:56 +01:00
bb97778fbb
Rename table title
2015-12-28 14:30:45 +01:00
1fde80800b
Allow the custom function to return an Vec<String> in the FilePrinter trait
2015-12-28 14:29:44 +01:00
51605e1314
Impl FilePrinter for TablePrinter ::print_files_custom()
2015-12-28 13:56:53 +01:00
6455c45630
Impl FilePrinter for SimplePrinter ::print_file_custom()
2015-12-28 13:56:38 +01:00
f0c186f33b
Impl FilePrinter for DebugPrinter ::print_file_custom()
2015-12-28 13:56:20 +01:00
fc42d6b4bf
FilePrinter: Add print_file_custom(), print_files_custom()
2015-12-28 13:56:01 +01:00
74aab89fbb
ui: Change to take Rc<RefCell<File>> instead of File
2015-12-28 13:36:44 +01:00
c8a0c1168d
Initialize store in Runtime object, pass store path directly into Store object
2015-12-28 00:39:55 +01:00
656aa69bfd
Implement Store::persist()
2015-12-28 00:30:25 +01:00
8145b21404
Fix: Parser::write() can get reference tuple
2015-12-28 00:29:45 +01:00
0212fb1929
Fix: Add missing dash
2015-12-28 00:29:21 +01:00
23e4152aaa
Implement Store::load()
2015-12-28 00:04:54 +01:00
f29bcc7430
Store: Put file into cache, return FileID
2015-12-27 23:51:44 +01:00
470f1b1378
Save only module name in File, not whole module
2015-12-27 23:46:08 +01:00
f774effabb
File: Return inner contents as references, not cloned
2015-12-27 23:26:23 +01:00
030b5fc888
Fixup Store
2015-12-27 23:18:55 +01:00
c595f5a1e8
Move File-creation code to Store
2015-12-27 23:17:51 +01:00
cb2c512440
Add Store type
2015-12-27 23:17:51 +01:00
73c7281259
Make File members pub
2015-12-27 23:17:51 +01:00
736c3784a9
Derive: Eq, PartialEq for FileID
2015-12-27 23:17:51 +01:00
6676611f4b
Derive Hash for FileIDType
2015-12-27 23:02:34 +01:00
f60c540ee5
Derive: Hash for FileID
2015-12-27 23:02:20 +01:00
4c252577f2
Derive: Hash for FileHash
2015-12-27 23:02:06 +01:00
Marcel Müller
22b57d5ad9
Implement FromStr for FileIDType
2015-12-27 18:55:27 +01:00
65aa98607e
Add File::persist()
2015-12-27 18:52:25 +01:00
8029057b22
Add File::edit_contents()
2015-12-27 18:52:19 +01:00
961fb27f99
Add File::edit()
2015-12-27 18:52:02 +01:00
4cac382412
Fixup Into<str> for Path -> Impl as Into<String> for Path
2015-12-27 18:00:56 +01:00
3273e77d24
Fixup Into<str> for Path
2015-12-27 18:00:56 +01:00
312bcf9703
Fixup File::get_new_file_id()
2015-12-27 18:00:56 +01:00
003efb6296
Fixup Into<str> for Path
2015-12-27 18:00:56 +01:00
71bf650653
Fixup FileIDType::parse
2015-12-27 18:00:56 +01:00
2585472349
impl Into<String> for FileID
2015-12-27 18:00:56 +01:00
1fc1c73b4a
impl Into<String> for FileIDType
2015-12-27 18:00:56 +01:00
fab2dece59
When generating a new FileID, use the FileHash type
2015-12-27 18:00:31 +01:00
62150c5a61
Add missing lifetimes
2015-12-27 18:00:31 +01:00
63bbede00f
Add missing 'use ...'
2015-12-27 18:00:31 +01:00
8c2af3e931
Add Path type
2015-12-27 18:00:31 +01:00
85a199ffc8
Add module file for storage
2015-12-27 18:00:31 +01:00
00d0bbf4ae
Add basic interface for BM module
2015-12-27 18:00:28 +01:00
7e77d786bb
Remove old code, FileIDType::NONE does not exist, we use Option<>
2015-12-21 19:28:15 +01:00
dcec155505
Move FileIDType to new module, export publicly
2015-12-21 19:20:09 +01:00
8a7d4b8aaf
Add FileHash type, custom type for an ID
2015-12-21 19:20:09 +01:00
dd7b412976
Remove code
2015-12-21 19:20:09 +01:00
3212429c9e
Impl Debug for Parser
2015-12-19 11:47:24 +01:00
d5af28d98d
Impl {Display,Debug} for JsonHeaderParser
2015-12-19 11:47:24 +01:00
ee78c249f0
Remove leftover file from storage backend moving
2015-12-06 13:15:07 +01:00
188aacad75
Move FileHeader{Spec,Data} to own submodules
2015-12-06 13:09:51 +01:00
3b89148cd0
Move storage/file_id.rs -> storage/file/id.rs
2015-12-06 13:02:21 +01:00
95f6f2e97e
Move file.rs to subdirectory
2015-12-06 13:01:02 +01:00
6e0d0058b0
Move key generating to top-level spec helpers
2015-12-06 12:49:31 +01:00
dad856ff2a
Move get_tags() from BM module to module utilities
2015-12-06 12:49:31 +01:00
7d40b68407
Rename: StorageBackend -> Storage
2015-12-06 12:49:02 +01:00
da2b482bda
Move Storage Backend code imag::storage::backend -> imag::storage
2015-12-06 12:47:08 +01:00
ab3ada0914
Move header helpers from module/header/ to module/helpers/
2015-12-05 16:03:05 +01:00
c6a2d39981
Outsource header utilities into header helper
2015-12-05 16:01:30 +01:00
3a8f2b5493
Refactor: dont use helper but StorageBackendError::new() directly
2015-12-05 15:01:46 +01:00
e6a32eafc0
Outsource StorageBackendError building into helper function
2015-12-05 14:24:58 +01:00
9f59478da0
Readability fixes
2015-12-05 11:10:54 +01:00
93393751b2
Remove uneccessary variable
2015-12-05 11:06:22 +01:00
80563cb340
Move tag filtering to sub-function
2015-12-05 11:05:50 +01:00
e8c7df4593
Remove variable, use expression directly
2015-12-05 11:03:05 +01:00
166a0cf5dd
bm: remove_command: Refactor into sub-functions
2015-12-05 11:00:44 +01:00
75cedc1580
Move to rust stable (1.4 atm) so we can use clap
2015-12-05 10:45:33 +01:00
230d00f35a
Remove unused imports
2015-12-05 01:23:06 +01:00
1f8bdef1ed
Remove unused variables
2015-12-05 01:18:12 +01:00
f7a92b6e79
Resort "use"
...
First comes std stuff
Second is external crates
Then we have own modules
All in alphabetical order and as few lines as possible if readability is
preserved.
2015-12-05 01:14:13 +01:00
5953563671
Refactor for readability
2015-12-04 23:39:30 +01:00
f8e870312e
Outsource: ids iterator to files vector
2015-12-04 23:35:48 +01:00
55f740497b
Beautify get_tags() helper
2015-12-04 23:26:08 +01:00
cd1bb88f20
Rework remove_command()
2015-12-04 23:19:18 +01:00
848fb0b4b4
Ensure we build the globstring _with_ the ID in it
2015-12-04 23:11:59 +01:00
261fbdd038
Add id getter for FileID
2015-12-04 23:11:46 +01:00
87d5852986
Ensure we dont crash if there are no files found
2015-12-04 23:01:37 +01:00
fd3d2ec8dc
Fixup get_file_by_id()
2015-12-04 22:57:28 +01:00
6473b743a3
Outsource globlist -> Vec<FileID> transformation code snippet
2015-12-04 22:53:31 +01:00
dac4911ea2
(partly) Rewrite StorageBackend::get_file_by_id(), so we can get a file with a partially available ID
2015-12-04 22:49:00 +01:00
253658ece5
Fix: FileID::from() should also succeed if we pass a ID as string
2015-12-04 22:31:09 +01:00
2dfb76bd0d
Reimplement: Parser::divide_text()
2015-12-04 21:56:48 +01:00
5c38e6752b
Fixup glob string generating
2015-12-04 21:56:48 +01:00
08fa8f8655
Add debugging output
2015-12-04 21:56:48 +01:00
2b21d1cb47
StorageBackend::iter_files(): Add caused_by use
2015-12-04 21:56:48 +01:00
90e3f44005
StorageBackend::iter_ids(): Add caused_by() usage
...
Actually not, as there is no Error implementation for the error we get
to handle here.
2015-12-04 21:56:48 +01:00
87d9ca7d06
Print table only if there are entries
2015-12-04 21:56:48 +01:00
b6c1a6301f
Use ParserError::with_cause() and build new ParserError object
2015-12-04 21:56:48 +01:00
3a76c05317
ParserError: Add cause
2015-12-04 21:56:47 +01:00
1aaea39b3d
storage/parser::divide_text(): Add debug output
2015-12-04 21:56:33 +01:00
e72c1c68b9
Fix: Output formatting
...
The header-content separator dashes were completely missing. Shame on
me.
2015-12-04 21:56:33 +01:00
e31239b02b
Fix wording in debug message
2015-12-04 21:56:33 +01:00
915cbd24ef
Impl From<PathBuf> for FileID, using From<String> for FileID
2015-12-04 21:56:33 +01:00
db9c4e48ba
ui/TablePrinter: Add debug output
2015-12-04 21:56:33 +01:00
3484858c3d
Remove unused code
2015-12-04 21:56:33 +01:00
2ab025a4eb
Add test: match_header_spec() testing
2015-12-04 17:52:30 +01:00
e025cf8835
Add missing Clone for FileHeaderSpec
2015-12-04 17:52:30 +01:00
04443b34bf
Add test: serialize-deserialize-compare
2015-12-04 17:52:30 +01:00
3e75117d69
Add test: Deserialization without Specification should match as well
2015-12-04 17:52:30 +01:00
74a9523f45
Use box_patterns, so we can unbox in the tests
2015-12-04 17:52:30 +01:00
2dce3151bd
Remove default impl for Error for ParserError
2015-12-04 17:52:30 +01:00
84e7100229
Add test for deserialization
2015-12-04 17:52:30 +01:00
d9019e408e
Remove static livetime in ParserError::short()
2015-12-04 17:51:22 +01:00
03856cd3a1
Reimplement StorageBackendError::{new,build} with Into<String>
2015-12-04 15:18:52 +01:00
c1d497fa6a
Add URL check before adding the "url" to the store
2015-12-04 15:09:03 +01:00
04df3fdf3c
Rewrite BMModule::get_filtered_files_from_backend() with the backend speaking Result<> now instead of Option<>
2015-12-04 14:17:32 +01:00
40ae26d0f2
BMModule::list_command() - we get back an Result<> here
2015-12-04 14:17:03 +01:00
be094dcfae
StorageBackend::iter_files() return Result<> with StorageBackendError on error
2015-12-04 14:04:20 +01:00
3df106ce8b
StorageBackend::iter_ids() return Result<> with StorageBackendError on error
2015-12-04 14:02:30 +01:00
1b0f4894ac
Use FileIDType::from() and remove select_id_type_from_str()
2015-12-03 17:37:13 +01:00
ce4d99384b
Impl From<&str> for FileIDType, use implementation in From<String> for FileIDType
2015-12-03 17:36:52 +01:00
f25e3683a1
Add hash type to filepath
2015-12-03 17:33:48 +01:00
5c3d0ecce7
Impl Into<FileIDType> for FileID
2015-12-03 17:33:29 +01:00
445f543159
Impl From<String> for FileIDType
2015-12-03 17:33:16 +01:00
02da675b3f
Impl Into<String> for FileIDType
2015-12-03 17:33:03 +01:00
dbf9ada732
Implement: FileID::from(&String), FileID::from(String)
2015-12-02 22:36:27 +01:00
2c3dd521b8
Add test: file_id_from_string()
2015-12-02 22:35:41 +01:00
bcc9771f28
module/bm/commands: Use FileID::into()
2015-12-02 13:43:09 +01:00
557187fbd7
storage/file: Call FileID::new() to build FileID object
2015-12-02 13:43:09 +01:00
8ddfb090b4
ui/file: use FileID::into()
2015-12-02 13:43:09 +01:00
292e29a5f1
Backend: Use FileID::from()
2015-12-02 13:43:09 +01:00
d3bdb39468
Reimplement FileID as abstract type, use Into, From traits for conversion
2015-12-02 13:43:09 +01:00
e93aa4ceae
Refactor uses of file-id-parsing functions to ensure we honnor the Result type
2015-12-02 13:06:08 +01:00
3e94e1612f
Add FileIDResult<FileID, FileIDError>
2015-12-02 13:05:48 +01:00
05a9803c05
Fixup: Member name
2015-12-02 12:29:04 +01:00
9231049e30
Remove StorageBackend::build()
2015-12-02 12:28:41 +01:00
731d13e0ba
Create store path on storage backend creation
2015-12-02 12:24:05 +01:00
abee4d4904
Implement StorageBackend::remove_file()
2015-12-02 12:24:05 +01:00
4675f79aae
remove_command(): Be able to run in "checked" mode
2015-12-02 12:24:05 +01:00
c81d0bf0a8
Implement remove_command()
2015-12-02 12:24:05 +01:00
484b1fb865
Outsource file retrieving from list_command() into helper function
2015-12-02 12:24:05 +01:00
6fcccc8297
Implement list_command
2015-12-02 12:24:05 +01:00
42181afde5
Add tags_of_file() to extract tags from a File
2015-12-02 12:24:05 +01:00
a6ed8e1080
Pass id as &FileID in StorageBackend::get_file_by_id()
2015-12-02 12:24:05 +01:00
103cba0c27
Add File::matches_with(&Regex)
2015-12-02 12:24:05 +01:00
e598a475e5
Use prettytable to implement TablePrinter
2015-12-02 12:24:05 +01:00
965779fcaf
Impl Debug for BMModule
2015-12-02 12:24:05 +01:00
e515a70ec2
Rewrite Debug for Module
2015-12-02 12:24:05 +01:00
043e607765
Implement StorageBackendError::cause()
2015-12-02 12:24:05 +01:00
f060c89751
Add helper for building file prefix
...
This helper builds the file prefix for the files of a module.
2015-12-02 12:24:05 +01:00
144398a2ad
Remove explanation member of StorageBackendError to reduce complexibility
2015-12-02 12:24:05 +01:00
83aa5afcbe
Build ModuleError out of StorageBackendError if any
2015-12-02 12:24:05 +01:00
c3019528cf
ModuleError needs a cause as well
2015-12-02 12:24:05 +01:00
4a6d1a74c0
Retry fixing the StorageBackend::cause()
2015-12-02 12:24:05 +01:00
366121b6ed
Reimplement StorageBackend::update_file()
2015-12-02 12:24:05 +01:00
eabf726846
Outsource file to string parsing
2015-12-02 12:24:05 +01:00
e0fefc3da4
Reimplement StorageBackend::put_file()
2015-12-02 12:24:05 +01:00
21d889e1e2
Add caused_by field in StorageBackend
2015-12-02 12:24:05 +01:00
455d6e88ed
Use real array instead of text array to save tags
2015-12-02 12:24:05 +01:00
cf1687e8ba
Convention: module names are lowercase
2015-12-02 12:24:05 +01:00
1038880de9
Save storepath in extra variable
2015-12-02 12:24:05 +01:00
8a2c41ea22
Fix: Build StorageBackend with runtime
2015-12-02 12:24:05 +01:00
e78bde72c1
Implement add_command() with backend
2015-12-02 12:24:05 +01:00
c9ebe3b7a1
Pass owner to file path builder helper function
2015-12-02 12:24:05 +01:00
98ec735ea3
Add File::owner() - a getter for the owner of a file
2015-12-02 12:24:05 +01:00
593e98ac5d
A File is bound to a Module
...
A File object must be bound to a Module, as one Module owns the File.
This way we can use the Module internally to build the file path later.
2015-12-02 12:24:05 +01:00
0d751f9ffd
Add some debug output in StorageBackend::build_filepath_with_id()
2015-12-02 12:24:05 +01:00
7531b5a6d7
Pass module to subcommand.
...
We need the module in the subcommand for building file paths and so on.
To be able to pass it, we must remove the ::new() function from the
trait, so we can make the parameter a trait object.
This is no object, as the module gets build non-generically from the
main(), so everything is fine with this.
2015-12-02 12:24:05 +01:00
ff873c8fe3
Transfer old code to new structure
2015-12-02 12:24:05 +01:00
08d6e8da13
We need to unwrap here (and it is save)
2015-12-02 12:24:05 +01:00
fda2c4feea
Add CommandEnv building in command calling code in main()
2015-12-02 12:24:05 +01:00
0a026002b0
Pass CommandEnv struct to command exec function
...
So we can add parameters rather easily.
Also define CommandResult as result type.
2015-12-02 12:24:05 +01:00
9bf9f96ab1
Fix: ModuleError::mk() -> pub ModuleError::new()
2015-12-02 12:24:05 +01:00
18ea01b854
Pass StorageBackend to subcommand function
2015-12-02 12:24:05 +01:00
3f19aba7b2
Add subcommand calling code in main()
2015-12-02 12:24:05 +01:00