git-annex/doc/tips/Git_annex_and_Calibre.mdwn
Joey Hess e213ef310f git-annex (5.20140717) unstable; urgency=high
* Fix minor FD leak in journal code. Closes: #754608
  * direct: Fix handling of case where a work tree subdirectory cannot
    be written to due to permissions.
  * migrate: Avoid re-checksumming when migrating from hashE to hash backend.
  * uninit: Avoid failing final removal in some direct mode repositories
    due to file modes.
  * S3: Deal with AWS ACL configurations that do not allow creating or
    checking the location of a bucket, but only reading and writing content to
    it.
  * resolvemerge: New plumbing command that runs the automatic merge conflict
    resolver.
  * Deal with change in git 2.0 that made indirect mode merge conflict
    resolution leave behind old files.
  * sync: Fix git sync with local git remotes even when they don't have an
    annex.uuid set. (The assistant already did so.)
  * Set gcrypt-publish-participants when setting up a gcrypt repository,
    to avoid unncessary passphrase prompts.
    This is a security/usability tradeoff. To avoid exposing the gpg key
    ids who can decrypt the repository, users can unset
    gcrypt-publish-participants.
  * Install nautilus hooks even when ~/.local/share/nautilus/ does not yet
    exist, since it is not automatically created for Gnome 3 users.
  * Windows: Move .vbs files out of git\bin, to avoid that being in the
    PATH, which caused some weird breakage. (Thanks, divB)
  * Windows: Fix locking issue that prevented the webapp starting
    (since 5.20140707).

# imported from the archive
2014-07-17 11:27:25 -04:00

120 lines
3.5 KiB
Markdown

The problem
===========
[Calibre](http://calibre-ebook.com/) is a ebook manager that is
available in [debian](http://packages.debian.org/sid/calibre). I use
it to maintain my library, but also to dowload every day an epub
version of a French newspaper and then put it on my kobo.
Configuring git annex for this
==============================
I wanted to use git-annex, so
$ git init
$ git annex init "some useful name"
But I don't want every thing in annex, because Calibre use some text
file to save some metadata, so I used:
$ git config annex.largefiles "include=* exclude=*.opf exclude=*.json"
then lets add everything
$ git annex add *
$ git add *
$ git commit -m "first commit"
Calibre need read and write access on the its database, so let unlock it:
$ git annex unlock metadata.db
On my other computer I only need to do
$ git clone $user@$host:Calibre\ library
$ cd Calibre\ library
$ git annex init "another useful name"
$ git annex get .
$ git annex unlock metadata.db
The problem is that every time you will `git annex sync`, git annex
will lock again the metadata.db, so lets unlock it automatically. I
use git hooks, in `.git/hooks/post-commit` I have
#!/bin/bash
git annex edit metadata.db
don't forget to make this file executable
$ chmod a+x .git/hooks/post-commit
Day to day operation
====================
$ git annex add .
Will put new file into the annex
$ git add .
Will take care of the files that should no go into annex
$ git annex sync
Will make the repositories exchange informations about all this, and
make remote change local
$ git annex get .
Will make remote book locally available
Merge conflict
--------------
You should not run calibre on the two computer simultaneously, or
without syncing before it. If you do, you will have a conflict that
git-annex will automatically *solve* by rename both of the file.
You can then either:
- Choose one. If no books have been changed or added on one of the
computer, to use the other `metadata.db` will not make you loose
any information
- rebuild it. `calibredb restore_database` won't do it, but will tell
you how to do it.
Checking the library
--------------------
You can use `calibredb check_library` to check you library is
correct. If you use git for it, it will always tell you that it is not
correct: there is this author ".git" it doesn't know about. Just don't
care about it.
Maybe this can be solved by using `vcsh` but apparently
`vcsh`+`git annex` it not well tested yet.
Automatic stuff
---------------
I use `mr` to automatically run all this, but some config could be
done (I believe) to have `git annex copy --auto` do what it should.
There are also the git annex assistant for this kind of automatic
synchronizations of contents, but I don't know if my automatic
unlocking of one file will break this.
It might be interesting to find someway to unlock and lock the library
only when running calibre, a simple script to launch calibre will do
that. Note that each time you will lock and unlock, you will have a
new commit in git.
Another solution
===================
You could also use direct mode in place of the auto unlock feature
git annex direct
The remove the `post-commit` git hook (or do not add it). Its a
simpler solution, but remember that interaction between git annex direct
repositories and plain git are complex and sometimes downright dangerous. See [[direct mode]] for details.
In particular, do *not* called `git add *` in the above steps, as that will commit all books into git.