Backup repository for imag-pim.org / imag https://imag-pim.org
Find a file
Matthias Beyer 095ae19416 [CHERRY-PICK] Add flag for _update() whether precense should be modified
This is a bugfix for an very particular issue.

Here's what happens:

If we create() an FileLockEntry and then update() it, we are running
into a problem because update() calls _update() which changes the
precense status of a FileLockEntry.

Because update() is _consuming_, the FileLockEntry gets drop()ed
afterwards. This _again_ causes _update() to be called, but with a new
presence status, which is not true in this moment (as the FileLockEntry
is still borrowed, but we already marked it as present).

This patch is a short-term fix. The real problem is, that our Store
interface is consuming. If the Store interface would be non-consuming,
this issue wouldn't happen, as the drop() call would not happen.

I'm rather sure that this patch will not be reverted in the process of
rewriting the Store interface to be non-consuming. But we never know.
2016-10-07 21:18:49 +02:00
.imag-documentation Add module-documentation for the documentation crate 2016-08-24 13:29:53 +02:00
bin Reduce clone()-ing of commands to necessary places 2016-09-07 12:57:34 +02:00
doc Merge pull request #601 from matthiasbeyer/doc-updates 2016-08-02 13:01:40 +02:00
imag-bookmark Upgrade clap dependency to 2.* 2016-08-06 17:37:40 +02:00
imag-counter imag-counter: Use utils to map over Err/Ok 2016-09-08 13:56:51 +02:00
imag-diary imag-diary: Use Err/Ok Result map utils to refactor code 2016-09-08 14:04:41 +02:00
imag-link imag-link: Use Err/Ok map utility functions to refactor code 2016-09-08 13:57:09 +02:00
imag-notes imag-notes: Use Err/Ok utils to map over results and refactor code 2016-09-08 13:57:09 +02:00
imag-ref Upgrade clap dependency to 2.* 2016-08-06 17:38:54 +02:00
imag-store imag-store: Use Err/Ok Result map utils to refactor code 2016-09-08 14:05:13 +02:00
imag-tag imag-tag: Use util fn warn_exit() 2016-09-08 08:48:58 +02:00
imag-todo imag-todo: Use Err/Ok utils to map 2016-09-08 13:57:09 +02:00
imag-view Merge pull request #667 from matthiasbeyer/rewrite-storeid-type 2016-09-05 16:10:47 +02:00
libimagbookmark Remove version argument from module_entry_path_mod!() macro 2016-08-30 11:40:56 +02:00
libimagcounter Remove version argument from module_entry_path_mod!() macro 2016-08-30 11:40:56 +02:00
libimagdiary Export MapErrInto as well here 2016-09-05 16:15:54 +02:00
libimagentryedit Rewrite error module 2016-08-09 15:47:56 +02:00
libimagentryfilter libimagentryfilter: Delete old filter lib 2016-08-14 15:18:39 -04:00
libimagentrylink Bugfix: unique()ing the list of links 2016-09-06 15:30:26 +02:00
libimagentrylist Use StoreId::into_pathbuf() rather than ::into() 2016-09-06 15:31:55 +02:00
libimagentrymarkdown libimagentrymarkdown: Deny warnings 2016-07-26 16:09:38 -04:00
libimagentryselect Rewrite functions to return Result<_> 2016-08-31 08:26:53 +02:00
libimagentrytag Merge pull request #633 from asuivelentine/imag/toml-dependency 2016-08-06 19:56:42 +02:00
libimagentryview Remove versions viewer 2016-08-31 08:26:54 +02:00
libimagerror When generating an error code, we should allow dead code here 2016-09-06 15:31:55 +02:00
libimaginteraction Add README.md for libimaginteraction 2016-08-24 14:25:57 +02:00
libimagnotes Remove version argument from module_entry_path_mod!() macro 2016-08-30 11:40:56 +02:00
libimagref Fix Ref::get_path_hash() to use ::into_pathbuf() 2016-09-06 15:31:55 +02:00
libimagrt Move edit code from libimagrt 2016-08-09 15:47:55 +02:00
libimagstore [CHERRY-PICK] Add flag for _update() whether precense should be modified 2016-10-07 21:18:49 +02:00
libimagstorestdhook Refactor file opening in helper function 2016-09-06 15:31:55 +02:00
libimagtimeui Fix dependency spec 2016-08-23 12:44:43 +02:00
libimagtodo Print errors (dbg) when import_task() failed 2016-09-06 12:03:27 +02:00
libimagutil Merge pull request #695 from matthiasbeyer/libimagutil/warn-exit 2016-09-05 19:24:01 +02:00
tests Disable debug output in shell-script tests 2016-08-29 08:50:01 +02:00
.editorconfig Add editorconfig configuration file 2016-01-11 19:47:51 +01:00
.gitignore Ignore /out 2016-07-07 23:44:04 +02:00
.travis.yml Disable nightly builds on travis 2016-08-29 12:45:33 +02:00
CONTRIBUTING.md Some general updates 2016-08-24 17:11:16 +02:00
default.nix Remove imag project dependency: lldb - we never used it! 2016-07-21 18:13:29 +02:00
imagrc.toml Add setting in imagrc, to allow implictely creating the store path 2016-07-25 17:02:38 +02:00
LICENSE Add LICENSE file 2015-11-08 17:35:49 +01:00
Makefile Fix imag-bin-install target 2016-09-07 17:09:04 +02:00
README.md Merge pull request #675 from matthiasbeyer/make-imag-bin 2016-08-29 17:14:04 +02:00

imag - imag-pim.org

Imag is a CLI PIM suite you can integrate in your tools of choice (Editor, MUA, RSS reader, etc etc).

Build Status Issue Stats Issue Stats license

Please contribute!

We are looking work contributors!

There is always a number of complexity/easy tagged issues available in the issue tracker you can start with and we are open to questions!

Feel free to open issues for asking questions, suggesting features or other things!

Also have a look at the CONTRIBUTING.md file!

Goal

Our goal is to

Create a fast, reliable, forwards/backwards compatible commandline personal information management suite which covers all aspects of personal information management, consists of reusable parts and integrates well with known commandline tools.

We try to accomplish these requirements:

  • "fast": We use the awesome, fast and safe programming language "Rust"
  • "reliable": We try to test every aspect of our software. Our build process ensures that the build breaks whenever a library interface changes and the modules which use the library are not updated.
  • "forwards/backwards compatible:" Our (plain text) on-disk data format and storage library both ensure that incompatibilities are captured and resolved (using semver)
  • "commandline": We ensure that everything can be done by commandline calls, for some modules there might be a curses-like UI, but there are no graphical clients and there never will be any within this codebase. We use clap for commandline-interface building and we try to keep the interface easy and consistent between modules.
  • "personal": We store everything as plain text in a store inside the users $HOME directory. There will be a version-control (most surely git) hook integrated to sync between several machines. There are no multi-user features included or planned at the time of writing.
  • "information management": We want to give the user the possibility to put every single information about their personal lives into the store and we try hard to provide a sane interface to query and retrieve data from this database.
  • "covers all the aspects of personal information management": We want to provide modules for:
    • contact management
    • calendar
    • diary
    • notes
    • personal wiki
    • news (rss)
    • passwords
    • images
    • music
    • movies
    • personal project management
    • podcast management
    • ledger
    • mail
    • bibliography management
    • ... and many, many more.
  • "constists of reusable parts": Every functionality is implemented as library. The binaries we ship are just commandline-interace-to-library-interface translators
  • "integrates well with known commandline tools": We do not re-invent the wheel. We do not implement "yet another password manager", but use the standard unix password manager, do not implement a news reader, but use newsbeuter, do not reimplement a mail reader, etc etc. We do not copy images, movies or other data to the store but "link" them into the store, so you can use imag tools to query and access this data, but still live with your beloved commandline apps. We do not want to duplicate work but reuse as much as possible. You don't like one of the applications we use (for example pass as password manager)? Sure, feel free to submit patches so the user is able to switch the used tool, as long as it doesn't break the workflow. We will happily merge them!

Current state of development

This application is in really early development.

We have implemented the very core of the system, though some more utility work is to be done. We have the store working, a hooks API and some default hooks are in development. Basic features like tagging and linking entries is possible as well as viewing entries. Some small things are implemented, like a note-taking module, a basic diary module, a counter module and a bookmark module. These modules contain basic features and are subject to change. More modules are about to be implemented.

Though, the very core of the system is stable and nothing prevents you from contributing and implementing a module.

Building/Running

Here goes how to try imag out.

Building

By now, there are several targets in the Makefile, fulfilling following roles:

  • all Is the default and builds every crate in debug mode. This is the same as traversing every directory yourself and calling cargo build in it. To build a single crate, call make <crate>, for example make imag-store
  • release, as the name implies, builds every crate in release mode. Following the example above, to build imag-store in release mode, call make imag-store-release.
  • install will install all binary crates to the default installation root (see man cargo-install). To install a single module, run make <module>-install, again, for example: make imag-store-install
  • bin/lib are separate targets for either building all binaries or libraries.
  • lib-test runs cargo test for all libraries. For testing a single library, run make test-libimagstore for example.
  • clean will run cargo clean in every crate. Again, for cleaning a single crate, use make imag-store-clean for example.
  • to build only the imag binary, use the target imag-bin (imag-bin-release for release build, imag-bin-update for cargo updateing, imag-bin-clean for cargo cleaning).

Running

To test out a single module, simply using cargo run -- <options> in the respective directory will do the trick. For using it "normally", install the binaries as described above, as well as the imag-binary:

$> make install

The installation root of the binaries (a.k.a. where they are installed to), may not yet be in your $PATH. To see, where this installation root is, check out man cargo-install. To change the $PATH in bash:

$> PATH=$PATH:~/.cargo/bin
$> imag --help

To test, simply add --help to one of the above commands:

$> imag counter --help

Please note that $PATH will be reset in a new shell. To make these changes permanent, see the User Guide of your shell.

Documentation

For detailed information, please read the documentation (You can either read the Markdown files or compile it to HTML/PDF using pandoc). Developer documentation is also available online on github.io.

Please note that the documentation is work in progress as well and may be outdated.

Contact

Have a look at our website where you can find some information on how to get in touch and so on.

Feel free to join our new IRC channel at freenode: #imag or our mailinglist.

License

We chose to distribute this software under terms of GNU LGPLv2.1.

This decision was made to ensure everyone can write applications which use the imag core functionality which is distributed with the imag source distribution.