diff --git a/README.md b/README.md index a5dda53..6110d7b 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,26 @@ #### Table of Contents -1. [Demo](#demo) -1. [About](#about) -4. [Package Contents](#package-contents) -5. [Issues](#issues) +1. [Features](#features) +2. [Object Model](#object-model) +3. [Demo](#demo) +4. [Issues](#issues) +5. [Details](#details) +6. [TODO](#todo)
+ +### Features +* Core + * Multiple folders can be synchronized + * Delete operations are recorded, and synchronized. + * For files with identical hashes, drop the modified date of the newer file. +* Additional + * Folders can be added to ignore List +* Technical + * FS/OS agnostic (Java `FileChannel`) +
-#### Design Goals -* Least possible intrusion. - * work on top of a FS - * can be plugged / unpluggen anytime -* Sync, not redundancy, not backup - * if user deletes File on one system, it will be deleted on all systems -* Pretty simple rules: - * if same md5 keep older file - * if diff md5 keep newer file - * if created, create everywhere - * if deleted, delete everywhere - -#### Overview +### Object Model ``` DataRoot a data root \_ SyncBundle : a bundle of directories on the FS to be syncronized. @@ -27,43 +28,78 @@ DataRoot a data root \_ SyncFile : a file on the FS. ``` -#### Record -* Used for tracking of file deletions. -* Located in each `SyncDirectory\state.ensync` -* Contains ` ` for each file in the SyncDirectory. +
-#### Demo +### Demo [![IMAGE ALT TEXT](http://img.youtube.com/vi/znR3jyM_4Ss/0.jpg)](https://youtu.be/znR3jyM_4Ss "ensync WIP Demo")
-#### About +### Issues + +##### Detection of Concurrent Changes + +Ensync has a core loop. +The duration of this cycle is determined by # of files and pause.
+To correctly detect a create/delete operation on different instances of a file on requires at most 5 cyles. +``` + * BAD + * cycle 1 : A creates + * cycle 2 : A deletes / B sync creates + * cycle 3 : A sync creates + * GOOD + * cycle 1 : A creates + * cycle 2 : / B sync creates + * cycle 3 : A ignores sync create + * cycle 4 : A deletes + * cycle 5 : / B sync deletes +``` +This means as # of files grows, we must wait longer and longer between modifying the same file. + +This was somewhat addressed by switching to FileChannel, and locking all the files.
+However more tests must follow. + +For the best practice is not to modify different instances of the same file +before having executed a core loop. + +##### Lazy first Run (Design Choice) +If *ensync* initially runs on a non-empty directory it will consider the +existing files as "on record", thus not "created".
+Hence ensyc will not push the changes to the other directories.
+This avoids an accidental push of massive file set, +but means that you have to copy the files manually the first time. + +
+ +### Details + +#### Record +* Used for tracking of file deletions. +* Located in each `SyncDirectory\record.ensync` +* Contains `` for each file in the SyncDirectory. + +#### Core Loop Sync files across directories. ![alt text](https://raw.githubusercontent.com/IO42630/ensync/master/doc/flow-n-instances.png "Hello!")

-#### Package Contents +#### Package Contents | Path | Comment | |---------------|-------------| doc | Diagrams. src.com.olexyn.ensync.artifacts | Data Model: Maps, Directories, Files. -src.com.olexyn.ensync.shell | .sh files to ease interaction with the host. -src.com.olexyn.ensync.ui | JavaFX. -src.com.olexyn.ensync.Execute | Issue .sh commands. src.com.olexyn.ensync.Main | Run from here. src.com.olexyn.ensync.Flow | Flow of the synchronization. src.com.olexyn.ensync. | Low level helper methods. -

-#### Issues +### TODO - Add tests. -- Remove Map entries, once file ops is performed. - Reduce disk access. - Add error handling. (i.e. if a web-directory is not available) - Track files that were modified during the loop. diff --git a/src/main/resources/syncignore b/src/main/resources/syncignore index d528580..a461512 100644 --- a/src/main/resources/syncignore +++ b/src/main/resources/syncignore @@ -1,2 +1,7 @@ -collection\wallpapers -record.ensync \ No newline at end of file +record.ensync +collection/backup +collection/books +collection/movies +collection/music +collection/software +collection/youtube \ No newline at end of file