Resuming incremental backup fails with KeyError in setLastSaved (lp:#637528)

[Original report](https://bugs.launchpad.net/bugs/637528) created by **Daniel Hahler (blueyed)**
```
I am experimenting with duply (a duplicity frontend), and after having
canceled a running backup, it now fails to resume:

duplicity 0.6.09 (July 25, 2010)
Args: /usr/bin/duplicity --name duply_profile --no-encryption --verbosity 5
--volsize 100 --exclude-globbing-filelist /home/user/.duply/profile/exclude
/ file:///mnt/foo/bar
Linux base 2.6.35-20-generic #29-Ubuntu SMP Fri Sep 3 14:49:14 UTC 2010
i686
/usr/bin/python 2.6.6 (r266:84292, Aug 24 2010, 21:47:18)
[GCC 4.4.5 20100816 (prerelease)]
================================================================================
Using temporary directory /tmp/duplicity-Ew6tSE-tempdir
Temp has 4154806272 available, backup will use approx 136314880.
Local and Remote metadata are synchronized, no sync needed.
Added incremental Backupset (start_time: Mon Sep 13 19:45:01 2010 /
end_time: Mon Sep 13 19:52:53 2010)
Added incremental Backupset (start_time: Mon Sep 13 19:52:53 2010 /
end_time: Mon Sep 13 20:20:27 2010)
Added incremental Backupset (start_time: Mon Sep 13 20:20:27 2010 /
end_time: Mon Sep 13 21:20:02 2010)
Last inc backup left a partial set, restarting.
Last full backup date: Mon Sep 13 19:45:01 2010
Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1251, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1244, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1226, in main
    incremental_backup(sig_chain)
  File "/usr/bin/duplicity", line 487, in incremental_backup
    globals.backend)
  File "/usr/bin/duplicity", line 254, in write_multivol
    globals.restart.setLastSaved(mf)
  File "/usr/bin/duplicity", line 1100, in setLastSaved
    vi = mf.volume_info_dict[self.start_vol]
KeyError: 58


I have added "print mf.volume_info_dict.keys()" before this, and it
displays:
[128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127]


This is the traceback from the abortion:

^CTraceback (most recent call last):
  File "/usr/bin/duplicity", line 1251, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1244, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1226, in main
    incremental_backup(sig_chain)
  File "/usr/bin/duplicity", line 487, in incremental_backup
    globals.backend)
  File "/usr/bin/duplicity", line 296, in write_multivol
    at_end = gpg.GzipWriteFile(tarblock_iter, tdp.name, globals.volsize)
  File "/usr/lib/python2.6/dist-packages/duplicity/gpg.py", line 331, in
GzipWriteFile
    new_block = block_iter.next(min(128*1024, bytes_to_go))
  File "/usr/lib/python2.6/dist-packages/duplicity/diffdir.py", line 505,
in next
    result = self.process(self.input_iter.next(), size)
  File "/usr/lib/python2.6/dist-packages/duplicity/diffdir.py", line 631,
in process
    data, last_block = self.get_data_block(fp, size - 512)
  File "/usr/lib/python2.6/dist-packages/duplicity/diffdir.py", line 658,
in get_data_block
    buf = fp.read(read_size)
  File "/usr/lib/python2.6/dist-packages/duplicity/diffdir.py", line 416,
in read
    self.sig_gen.update(buf)
  File "/usr/lib/python2.6/dist-packages/duplicity/librsync.py", line 197,
in update
    if self.process_buffer():
  File "/usr/lib/python2.6/dist-packages/duplicity/librsync.py", line 203,
in process_buffer
    eof, len_buf_read, cycle_out = self.sig_maker.cycle(self.buffer)
KeyboardInterrupt

I will copy/keep the exact duply profile and backup state, in case you can
make use of any more information.


```

Story points: 10.0