Skip to content

Commit f5c45c7

Browse files
committed
closing unhandled tar
1 parent 87c16b3 commit f5c45c7

File tree

6 files changed

+24
-19
lines changed

6 files changed

+24
-19
lines changed

singularity/analysis/compare.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,13 @@ def compare_singularity_images(image_paths1,image_paths2=None):
128128
members2 = [x.name for x in tar2]
129129
c = compare_lists(members1,members2)
130130
sim = information_coefficient(c['total1'],c['total2'],c['intersect'])
131-
delete_image_tar(fileobj2)
131+
delete_image_tar(fileobj2, tar2)
132132

133133
dfs.loc[image1,image2] = sim
134134
if repeat:
135135
dfs.loc[image2,image1] = sim
136136
comparisons_done.append(comparison_id)
137-
delete_image_tar(fileobj1)
137+
delete_image_tar(fileobj1, tar1)
138138
return dfs
139139

140140

singularity/analysis/reproduce/hash.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def get_image_hash(image_path,
9999
include_files=include_files)
100100

101101
cli = Singularity()
102-
file_obj,tar = get_image_tar(image_path)
102+
file_obj, tar = get_image_tar(image_path)
103103
hasher = hashlib.md5()
104104

105105
for member in tar:
@@ -117,11 +117,14 @@ def get_image_hash(image_path,
117117

118118
digest = hasher.hexdigest()
119119

120-
if isinstance(file_obj,io.BytesIO):
120+
# Close up / remove files
121+
try:
121122
file_obj.close()
122-
else:
123-
if os.path.exists(file_obj):
124-
os.remove(file_obj)
123+
except:
124+
tar.close()
125+
126+
if os.path.exists(file_obj):
127+
os.remove(file_obj)
125128

126129
return digest
127130

@@ -163,7 +166,7 @@ def get_content_hashes(image_path,
163166
tag_root=tag_root,
164167
include_sizes=include_sizes)
165168

166-
deleted = delete_image_tar(file_obj)
169+
delete_image_tar(file_obj, tar)
167170
return results
168171

169172

singularity/analysis/reproduce/utils.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,17 @@ def get_image_tar(image_path,S=None):
114114
return file_obj, tar
115115

116116

117-
def delete_image_tar(file_obj):
117+
def delete_image_tar(file_obj, tar):
118118
'''delete image tar will close a file object (if extracted into
119119
memory) or delete from the file system (if saved to disk)'''
120-
deleted = False
121-
if isinstance(file_obj,io.BytesIO):
120+
try:
122121
file_obj.close()
122+
except:
123+
tar.close()
124+
if os.path.exists(file_obj):
125+
os.remove(file_obj)
123126
deleted = True
124-
bot.debug('Closed memory tar.')
125-
else:
126-
if os.path.exists(file_obj):
127-
os.remove(file_obj)
128-
deleted = True
129-
bot.debug('Deleted temporary tar.')
127+
bot.debug('Deleted temporary tar.')
130128
return deleted
131129

132130

singularity/cli/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ def run_command(self, cmd, sudo=False, quiet=False):
6161
try:
6262
message=message.decode('utf-8')
6363
except UnicodeDecodeError:
64-
message = unicode(message, errors='replace')
64+
try:
65+
message = unicode(message, errors='replace')
66+
except NameError:
67+
message = str(message, errors='replace')
6568
return message
6669
if quiet is False:
6770
bot.error("Return Code %s: %s" %(return_code,

singularity/package/build.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def package(image_path,
164164
zipfile = zip_up(to_package,zip_name=zip_name,output_folder=output_folder)
165165
bot.debug("Package created at %s" %(zipfile))
166166

167-
if not delete_image_tar(file_obj):
167+
if not delete_image_tar(file_obj, tar):
168168
bot.warning("Could not clean up temporary tarfile.")
169169

170170
# return package to user

singularity/tests/test_reproduce.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ def test_extract_guts(self):
146146
file_filter=levels['REPLICATE'])
147147
for key in ['root_owned','sizes','hashes']:
148148
self.assertTrue(key in guts)
149+
tar.close()
149150

150151
def test_get_image_file_hash(self):
151152
from singularity.analysis.reproduce import get_image_file_hash

0 commit comments

Comments
 (0)