diff --git a/nibabel/filebasedimages.py b/nibabel/filebasedimages.py index 8942982a2d..fa92ffbd7a 100644 --- a/nibabel/filebasedimages.py +++ b/nibabel/filebasedimages.py @@ -17,6 +17,13 @@ splitext_addext) from .openers import ImageOpener +# OS-specific path +_GIT_ANNEX_OBJECTS_PATH = os.path.join('.git', 'annex', 'objects') + +def _is_annex_symlink(path): + """Return True if file is a symlink to the git-annex objects""" + return os.path.islink(path) and _GIT_ANNEX_OBJECTS_PATH in os.path.realpath(path) + class ImageFileError(Exception): pass @@ -349,10 +356,11 @@ def to_filename(self, filename): None ''' self.file_map = file_map = self.filespec_to_file_map(filename) + remove_env = os.environ.get('NIBABEL_REMOVE_BEFORE_TO_FILENAME', None) for _, fh in file_map.items(): if not isinstance(fh, FileHolder): continue - if os.path.exists(fh.filename): + if os.path.lexists(fh.filename) and (remove_env or _is_annex_symlink(fh.filename)): # Remove previous file where new file would be saved # Necessary e.g. for cases where file is a symlink pointing # to some non-writable file (e.g. under git annex control)