Merge #465 media-split: Print sensible message for unlimited size
This commit is contained in:
commit
9e52c68c82
@ -62,7 +62,7 @@ class MediaSplitter(object):
|
|||||||
possible minimum.
|
possible minimum.
|
||||||
"""
|
"""
|
||||||
def __init__(self, media_size, compose=None):
|
def __init__(self, media_size, compose=None):
|
||||||
self.media_size = convert_media_size(media_size)
|
self.media_size = media_size
|
||||||
self.files = [] # to preserve order
|
self.files = [] # to preserve order
|
||||||
self.file_sizes = {}
|
self.file_sizes = {}
|
||||||
self.sticky_files = set()
|
self.sticky_files = set()
|
||||||
@ -75,7 +75,7 @@ class MediaSplitter(object):
|
|||||||
|
|
||||||
if old_size is not None and old_size != size:
|
if old_size is not None and old_size != size:
|
||||||
raise ValueError("File size mismatch; file: %s; sizes: %s vs %s" % (name, old_size, size))
|
raise ValueError("File size mismatch; file: %s; sizes: %s vs %s" % (name, old_size, size))
|
||||||
if size > self.media_size:
|
if self.media_size and size > self.media_size:
|
||||||
raise ValueError("File is larger than media size: %s" % name)
|
raise ValueError("File is larger than media size: %s" % name)
|
||||||
|
|
||||||
self.files.append(name)
|
self.files.append(name)
|
||||||
@ -111,7 +111,7 @@ class MediaSplitter(object):
|
|||||||
name = all_files.pop(0)
|
name = all_files.pop(0)
|
||||||
size = convert_file_size(self.file_sizes[name])
|
size = convert_file_size(self.file_sizes[name])
|
||||||
|
|
||||||
if not disks or disk["size"] + size > self.media_size:
|
if not disks or (self.media_size and disk["size"] + size > self.media_size):
|
||||||
disk = {"size": sticky_files_size, "files": sticky_files[:]}
|
disk = {"size": sticky_files_size, "files": sticky_files[:]}
|
||||||
disks.append(disk)
|
disks.append(disk)
|
||||||
|
|
||||||
@ -119,5 +119,10 @@ class MediaSplitter(object):
|
|||||||
disk["size"] += size
|
disk["size"] += size
|
||||||
total_size_single += size
|
total_size_single += size
|
||||||
if self.compose:
|
if self.compose:
|
||||||
self.compose.log_debug("MediaSplitter: free space on single media would be %s. Total size of single medium: %s." % (self.media_size - total_size_single, total_size_single))
|
if self.media_size:
|
||||||
|
self.compose.log_debug("MediaSplitter: free space on single media would be %s. "
|
||||||
|
"Total size of single medium: %s."
|
||||||
|
% (self.media_size - total_size_single, total_size_single))
|
||||||
|
else:
|
||||||
|
self.compose.log_debug("MediaSplitter: Total size of single medium: %s." % total_size_single)
|
||||||
return disks
|
return disks
|
||||||
|
@ -7,6 +7,7 @@ except ImportError:
|
|||||||
import unittest
|
import unittest
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import mock
|
||||||
|
|
||||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
||||||
|
|
||||||
@ -59,6 +60,20 @@ def bl(s):
|
|||||||
|
|
||||||
class MediaSplitterTestCase(unittest.TestCase):
|
class MediaSplitterTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.compose = mock.Mock()
|
||||||
|
|
||||||
|
def assertFreeSpace(self, free, total):
|
||||||
|
self.assertEqual(
|
||||||
|
self.compose.mock_calls,
|
||||||
|
[mock.call.log_debug('MediaSplitter: free space on single media would be %s. '
|
||||||
|
'Total size of single medium: %s.' % (free, total))])
|
||||||
|
|
||||||
|
def assertUnlimited(self, total):
|
||||||
|
self.assertEqual(
|
||||||
|
self.compose.mock_calls,
|
||||||
|
[mock.call.log_debug('MediaSplitter: Total size of single medium: %s.' % total)])
|
||||||
|
|
||||||
def test_sum_size(self):
|
def test_sum_size(self):
|
||||||
ms = media_split.MediaSplitter(bl(100))
|
ms = media_split.MediaSplitter(bl(100))
|
||||||
ms.add_file('first', bl(20))
|
ms.add_file('first', bl(20))
|
||||||
@ -87,15 +102,16 @@ class MediaSplitterTestCase(unittest.TestCase):
|
|||||||
ms.add_file('too-big', bl(300))
|
ms.add_file('too-big', bl(300))
|
||||||
|
|
||||||
def test_fit_on_one(self):
|
def test_fit_on_one(self):
|
||||||
ms = media_split.MediaSplitter(bl(100))
|
ms = media_split.MediaSplitter(bl(100), compose=self.compose)
|
||||||
ms.add_file('first', bl(20))
|
ms.add_file('first', bl(20))
|
||||||
ms.add_file('second', bl(30))
|
ms.add_file('second', bl(30))
|
||||||
|
|
||||||
self.assertEqual(ms.split(),
|
self.assertEqual(ms.split(),
|
||||||
[{'files': ['first', 'second'], 'size': bl(50)}])
|
[{'files': ['first', 'second'], 'size': bl(50)}])
|
||||||
|
self.assertFreeSpace(bl(50), bl(50))
|
||||||
|
|
||||||
def test_split_on_two_discs(self):
|
def test_split_on_two_discs(self):
|
||||||
ms = media_split.MediaSplitter(bl(100))
|
ms = media_split.MediaSplitter(bl(100), compose=self.compose)
|
||||||
ms.add_file('first', bl(25))
|
ms.add_file('first', bl(25))
|
||||||
ms.add_file('second', bl(40))
|
ms.add_file('second', bl(40))
|
||||||
ms.add_file('third', bl(80))
|
ms.add_file('third', bl(80))
|
||||||
@ -103,6 +119,7 @@ class MediaSplitterTestCase(unittest.TestCase):
|
|||||||
self.assertEqual(ms.split(),
|
self.assertEqual(ms.split(),
|
||||||
[{'files': ['first', 'second'], 'size': bl(65)},
|
[{'files': ['first', 'second'], 'size': bl(65)},
|
||||||
{'files': ['third'], 'size': bl(80)}])
|
{'files': ['third'], 'size': bl(80)}])
|
||||||
|
self.assertFreeSpace(bl(100 - 25 - 40 - 80), bl(25 + 40 + 80))
|
||||||
|
|
||||||
def test_split_with_sticky_file(self):
|
def test_split_with_sticky_file(self):
|
||||||
ms = media_split.MediaSplitter(bl(100))
|
ms = media_split.MediaSplitter(bl(100))
|
||||||
@ -115,5 +132,16 @@ class MediaSplitterTestCase(unittest.TestCase):
|
|||||||
[{'files': ['sticky', 'first', 'second'], 'size': bl(80)},
|
[{'files': ['sticky', 'first', 'second'], 'size': bl(80)},
|
||||||
{'files': ['sticky', 'third'], 'size': bl(95)}])
|
{'files': ['sticky', 'third'], 'size': bl(95)}])
|
||||||
|
|
||||||
|
def test_split_unlimited_media(self):
|
||||||
|
ms = media_split.MediaSplitter(None, compose=self.compose)
|
||||||
|
ms.add_file('first', bl(25))
|
||||||
|
ms.add_file('second', bl(40))
|
||||||
|
ms.add_file('third', bl(80))
|
||||||
|
|
||||||
|
self.assertEqual(ms.split(),
|
||||||
|
[{'files': ['first', 'second', 'third'], 'size': bl(145)}])
|
||||||
|
self.assertUnlimited(bl(25 + 40 + 80))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user