Don't crash; defer an error when a path changes while indexing it.

Mirror the error handling already used by save.

With this change the result for a path that changes or is deleted
between the drecurse traversal and the from_path() call should be the
same as the result for a path that changes or is deleted between index
and save.

Thanks to Yann Autissier <yann.autissier@gmail.com> for reporting the
problem and Gabriel Filion <gabster@lelutin.ca> for helping figure out
the solution.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Add a minimum blob size on the rolling checksum

For each blob, we record its mode, type, hash and offset, which use at least
57 bytes. The rolling checksum often generates blobs smaller than 57 bytes.
Not only those blobs end up using more space, but they also increase the
number of tree created to fanout the blobs. We also need to check if each
one is already present in the repository during the backup and we do more
disk seek during the restoration.

Of course, the minimum size also limit the minimum deduplication that can
be done, but, for size close to 57, the net result should be a gain in
speed and in space.

Signed-off-by: Patrick Rouleau <prouleau72@gmail.com>
Add functions to get and set values from git's config file

Signed-off-by: Patrick Rouleau <prouleau72@gmail.com>
Store the minimum blob size in git's config file to use the same value across backups

If we use a different size across backup, it will not corrupt the data, but
it will generate a lot of new blobs because the data would be splitted
differently, thus creating bigger backups than necessary.

Signed-off-by: Patrick Rouleau <prouleau72@gmail.com>