diff --git a/core/results.py b/core/results.py index 3606e38a..1ba728a9 100644 --- a/core/results.py +++ b/core/results.py @@ -10,6 +10,7 @@ import logging import re import os import os.path as op +from errno import EISDIR, EACCES from xml.etree import ElementTree as ET from hscommon.jobprogress.job import nulljob @@ -376,8 +377,8 @@ class Results(Markable): do_write(outfile) except OSError as e: # If our OSError is because dest is already a directory, we want to handle that. 21 is - # the code we get on OS X and Linux, 13 is what we get on Windows. - if e.errno in {21, 13}: + # the code we get on OS X and Linux (EISDIR), 13 is what we get on Windows (EACCES). + if e.errno in (EISDIR, EACCES): p = str(outfile) dirname, basename = op.split(p) otherfiles = os.listdir(dirname) diff --git a/hscommon/conflict.py b/hscommon/conflict.py index af133ac7..0675efd0 100644 --- a/hscommon/conflict.py +++ b/hscommon/conflict.py @@ -14,6 +14,7 @@ import re import os import shutil +from errno import EISDIR, EACCES from pathlib import Path from typing import Callable, List @@ -75,10 +76,8 @@ def smart_copy(source_path: Path, dest_path: Path) -> None: try: _smart_move_or_copy(shutil.copy, source_path, dest_path) except OSError as e: - if e.errno in { - 21, - 13, - }: # it's a directory, code is 21 on OS X / Linux and 13 on Windows + # It's a directory, code is 21 on OS X / Linux (EISDIR) and 13 on Windows (EACCES) + if e.errno in (EISDIR, EACCES): _smart_move_or_copy(shutil.copytree, source_path, dest_path) else: raise