Browse Source

use new OS and IO exception hierarchy of py 3.3

Thomas Waldmann 9 years ago
parent
commit
a6f9c29dfe
4 changed files with 17 additions and 25 deletions
  1. 5 5
      borg/archiver.py
  2. 10 16
      borg/locking.py
  3. 1 1
      borg/repository.py
  4. 1 3
      borg/testsuite/archiver.py

+ 5 - 5
borg/archiver.py

@@ -137,14 +137,14 @@ class Archiver:
             try:
             try:
                 st = os.stat(get_cache_dir())
                 st = os.stat(get_cache_dir())
                 skip_inodes.add((st.st_ino, st.st_dev))
                 skip_inodes.add((st.st_ino, st.st_dev))
-            except IOError:
+            except OSError:
                 pass
                 pass
             # Add local repository dir to inode_skip list
             # Add local repository dir to inode_skip list
             if not args.location.host:
             if not args.location.host:
                 try:
                 try:
                     st = os.stat(args.location.path)
                     st = os.stat(args.location.path)
                     skip_inodes.add((st.st_ino, st.st_dev))
                     skip_inodes.add((st.st_ino, st.st_dev))
-                except IOError:
+                except OSError:
                     pass
                     pass
             for path in args.paths:
             for path in args.paths:
                 if path == '-':  # stdin
                 if path == '-':  # stdin
@@ -152,7 +152,7 @@ class Archiver:
                     if not dry_run:
                     if not dry_run:
                         try:
                         try:
                             status = archive.process_stdin(path, cache)
                             status = archive.process_stdin(path, cache)
-                        except IOError as e:
+                        except OSError as e:
                             status = 'E'
                             status = 'E'
                             self.print_warning('%s: %s', path, e)
                             self.print_warning('%s: %s', path, e)
                     else:
                     else:
@@ -229,7 +229,7 @@ class Archiver:
             if not dry_run:
             if not dry_run:
                 try:
                 try:
                     status = archive.process_file(path, st, cache)
                     status = archive.process_file(path, st, cache)
-                except IOError as e:
+                except OSError as e:
                     status = 'E'
                     status = 'E'
                     self.print_warning('%s: %s', path, e)
                     self.print_warning('%s: %s', path, e)
         elif stat.S_ISDIR(st.st_mode):
         elif stat.S_ISDIR(st.st_mode):
@@ -326,7 +326,7 @@ class Archiver:
                         archive.extract_item(item, restore_attrs=False)
                         archive.extract_item(item, restore_attrs=False)
                     else:
                     else:
                         archive.extract_item(item, stdout=stdout, sparse=sparse)
                         archive.extract_item(item, stdout=stdout, sparse=sparse)
-            except IOError as e:
+            except OSError as e:
                 self.print_warning('%s: %s', remove_surrogates(orig_path), e)
                 self.print_warning('%s: %s', remove_surrogates(orig_path), e)
 
 
         if not args.dry_run:
         if not args.dry_run:

+ 10 - 16
borg/locking.py

@@ -132,14 +132,13 @@ class ExclusiveLock:
         while True:
         while True:
             try:
             try:
                 os.mkdir(self.path)
                 os.mkdir(self.path)
+            except FileExistsError:  # already locked
+                if self.by_me():
+                    return self
+                if timer.timed_out_or_sleep():
+                    raise LockTimeout(self.path)
             except OSError as err:
             except OSError as err:
-                if err.errno == errno.EEXIST:  # already locked
-                    if self.by_me():
-                        return self
-                    if timer.timed_out_or_sleep():
-                        raise LockTimeout(self.path)
-                else:
-                    raise LockFailed(self.path, str(err))
+                raise LockFailed(self.path, str(err))
             else:
             else:
                 with open(self.unique_name, "wb"):
                 with open(self.unique_name, "wb"):
                     pass
                     pass
@@ -181,12 +180,8 @@ class LockRoster:
         try:
         try:
             with open(self.path) as f:
             with open(self.path) as f:
                 data = json.load(f)
                 data = json.load(f)
-        except IOError as err:
-            if err.errno != errno.ENOENT:
-                raise
-            data = {}
-        except ValueError:
-            # corrupt/empty roster file?
+        except (FileNotFoundError, ValueError):
+            # no or corrupt/empty roster file?
             data = {}
             data = {}
         return data
         return data
 
 
@@ -197,9 +192,8 @@ class LockRoster:
     def remove(self):
     def remove(self):
         try:
         try:
             os.unlink(self.path)
             os.unlink(self.path)
-        except OSError as e:
-            if e.errno != errno.ENOENT:
-                raise
+        except FileNotFoundError:
+            pass
 
 
     def get(self, key):
     def get(self, key):
         roster = self.load()
         roster = self.load()

+ 1 - 1
borg/repository.py

@@ -567,7 +567,7 @@ class LoggedIO:
             del self.fds[segment]
             del self.fds[segment]
         try:
         try:
             os.unlink(self.segment_filename(segment))
             os.unlink(self.segment_filename(segment))
-        except OSError:
+        except FileNotFoundError:
             pass
             pass
 
 
     def segment_exists(self, segment):
     def segment_exists(self, segment):

+ 1 - 3
borg/testsuite/archiver.py

@@ -70,9 +70,7 @@ def exec_cmd(*args, archiver=None, fork=False, exe=None, **kw):
 try:
 try:
     exec_cmd('help', exe='borg.exe', fork=True)
     exec_cmd('help', exe='borg.exe', fork=True)
     BORG_EXES = ['python', 'binary', ]
     BORG_EXES = ['python', 'binary', ]
-except (IOError, OSError) as err:
-    if err.errno != errno.ENOENT:
-        raise
+except FileNotFoundError:
     BORG_EXES = ['python', ]
     BORG_EXES = ['python', ]