Skip to content

Commit e511566

Browse files
committed
fstype parsing for cifs can fail on Mac OS
1 parent 872d749 commit e511566

File tree

1 file changed

+29
-40
lines changed

1 file changed

+29
-40
lines changed

nipype/utils/filemanip.py

Lines changed: 29 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,6 @@
33
# vi: set ft=python sts=4 ts=4 sw=4 et:
44
"""Miscellaneous file manipulation functions
55
6-
.. testsetup::
7-
# Change directory to provide relative paths for doctests
8-
>>> import os
9-
>>> filepath = os.path.dirname(os.path.realpath( __file__ ))
10-
>>> datadir = os.path.realpath(os.path.join(filepath, '../testing/data'))
11-
>>> os.chdir(datadir)
12-
136
"""
147
from __future__ import (print_function, division, unicode_literals,
158
absolute_import)
@@ -229,38 +222,19 @@ def check_forhash(filename):
229222
return False, None
230223

231224

232-
def hash_infile(afile, chunk_len=8192, crypto=hashlib.md5,
233-
raise_notfound=False):
234-
"""
235-
Computes hash of a file using 'crypto' module
236-
237-
>>> hash_infile('smri_ants_registration_settings.json')
238-
'49b956387ed8d95a4eb44576fc5103b6'
239-
240-
>>> hash_infile('surf01.vtk')
241-
'fdf1cf359b4e346034372cdeb58f9a88'
242-
243-
>>> hash_infile('spminfo')
244-
'0dc55e3888c98a182dab179b976dfffc'
245-
246-
>>> hash_infile('fsl_motion_outliers_fd.txt')
247-
'defd1812c22405b1ee4431aac5bbdd73'
248-
249-
250-
"""
251-
if not op.isfile(afile):
252-
if raise_notfound:
253-
raise RuntimeError('File "%s" not found.' % afile)
254-
return None
255-
256-
crypto_obj = crypto()
257-
with open(afile, 'rb') as fp:
258-
while True:
259-
data = fp.read(chunk_len)
260-
if not data:
261-
break
262-
crypto_obj.update(data)
263-
return crypto_obj.hexdigest()
225+
def hash_infile(afile, chunk_len=8192, crypto=hashlib.md5):
226+
""" Computes hash of a file using 'crypto' module"""
227+
hex = None
228+
if op.isfile(afile):
229+
crypto_obj = crypto()
230+
with open(afile, 'rb') as fp:
231+
while True:
232+
data = fp.read(chunk_len)
233+
if not data:
234+
break
235+
crypto_obj.update(data)
236+
hex = crypto_obj.hexdigest()
237+
return hex
264238

265239

266240
def hash_timestamp(afile):
@@ -295,8 +269,23 @@ def _generate_cifs_table():
295269
(line.split()[2:5:2] for line in output.splitlines()),
296270
key=lambda x: len(x[0]),
297271
reverse=True)
298-
cifs_paths = [path for path, fstype in mount_info if fstype == 'cifs']
299272

273+
# find which mount points are CIFS
274+
# init to empty list
275+
cifs_paths = []
276+
277+
try:
278+
for path_and_fstype in mount_info:
279+
# need to check for tables that have only path and no fstype
280+
if len(path_and_fstype) == 2:
281+
# if this entry is cifs, add it to list
282+
if path_and_fstype[1] == 'cifs':
283+
cifs_paths.append(path_and_fstype[0])
284+
else:
285+
fmlogger.debug('mount file system types not described by fstype')
286+
except:
287+
fmlogger.debug('mount file system type check for CIFS error')
288+
return []
300289
return [
301290
mount for mount in mount_info
302291
if any(mount[0].startswith(path) for path in cifs_paths)

0 commit comments

Comments
 (0)