~ed.so/duplicity/reuse-passphrase-for-signing-fix

« back to all changes in this revision

Viewing changes to duplicity/robust.py

  • Committer: bescoto
  • Date: 2002-10-29 01:49:46 UTC
  • Revision ID: vcs-imports@canonical.com-20021029014946-3m4rmm5plom7pl6q
Initial checkin

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2002 Ben Escoto
 
2
#
 
3
# This file is part of duplicity.
 
4
#
 
5
# duplicity is free software; you can redistribute it and/or modify it
 
6
# under the terms of the GNU General Public License as published by
 
7
# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA
 
8
# 02139, USA; either version 2 of the License, or (at your option) any
 
9
# later version; incorporated herein by reference.
 
10
 
 
11
import tempfile
 
12
import librsync, errno, log, path
 
13
 
 
14
tmp_file_index = 1
 
15
 
 
16
def check_common_error(error_handler, function, args = ()):
 
17
        """Apply function to args, if error, run error_handler on exception
 
18
 
 
19
        This only catches certain exceptions which seem innocent
 
20
        enough.
 
21
 
 
22
        """
 
23
        try: return function(*args)
 
24
        #except (EnvironmentError, SkipFileException, DSRPPermError,
 
25
        #               RPathException, Rdiff.RdiffException,
 
26
        #               librsync.librsyncError, C.UnknownFileTypeError), exc:
 
27
        #       TracebackArchive.add()
 
28
        except (EnvironmentError, librsync.librsyncError, path.PathException), exc:
 
29
                if (not isinstance(exc, EnvironmentError) or
 
30
                        (errno.errorcode[exc[0]] in
 
31
                         ['EPERM', 'ENOENT', 'EACCES', 'EBUSY', 'EEXIST',
 
32
                          'ENOTDIR', 'ENAMETOOLONG', 'EINTR', 'ENOTEMPTY',
 
33
                          'EIO', 'ETXTBSY', 'ESRCH', 'EINVAL'])):
 
34
                        #Log.exception()
 
35
                        if error_handler: return error_handler(exc, *args)
 
36
                else:
 
37
                        #Log.exception(1, 2)
 
38
                        raise
 
39
 
 
40
def listpath(path):
 
41
        """Like path.listdir() but return [] if error, and sort results"""
 
42
        def error_handler(exc):
 
43
                log.Log("Error listing directory %s" % path.name, 2)
 
44
                return []
 
45
        dir_listing = check_common_error(error_handler, path.listdir)
 
46
        dir_listing.sort()
 
47
        return dir_listing
 
48