bup save could fail trying to read the metadata of a deleted file

If bup index see that a file foo has no change, bup save still need to read
foo in order to update the metadata. If the user removed foo between the
index and the save, the metadata call metadata.from_path would result in a
non intercepted error. This commit adds a try/except to handle this case.

Signed-off-by: Damien Robert <Damien.Olivier.Robert+...@gmail.com>
[git@tim-riemenschneider.de: rebased to current tmp/pending/meta:
since metadata is (now) stored in the index, only 1 of 2 hunks still applies
(race condition between reading the file for its content and stat-ing it for
metadata)]
Correcting a metadata bug when directories are removed

The preceding commit handled the case when a file was removed but still
present in an index. In this case, bup save tries to read the metadata of
the file, which gives an exception since the file does not exist anymore,
and the exception was not catched.

This commit do the same but for directories rather than files. The code for
directories is not at the same place than for the files, so the preceding
catch did not catch the exception corresponding to a removed directory.

I also added the catch in
  if first_root == None
although admittedly it would only produce if the whole structure that bup
save tries to save was gone, so it would not make much sense for the user
to save it...

Signed-off-by: Damien Robert <Damien.Olivier.Robert+...@gmail.com>
testcase for save-crashed-on-missing-directory

This commit adds testcases for directories, that are deleted between index and save (and also for files, which was already fixed in tmp/pending/meta)

Signed-off-by: Tim Riemenschneider <git@tim-riemenschneider.de>