blob: ba4d319d0c7ebf641d8b2aed24cda2cb5e98e258 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
class HostFileSystemIterator(object):
'''Provides methods for iterating through host file systems, in both
ascending (oldest to newest version) and descending order.
'''
def __init__(self, file_system_provider, branch_utility):
self._file_system_provider = file_system_provider
self._branch_utility = branch_utility
def _ForEach(self, channel_info, callback, get_next):
'''Iterates through a sequence of file systems defined by |get_next| until
|callback| returns False, or until the end of the sequence of file systems
is reached. Returns the BranchUtility.ChannelInfo of the last file system
for which |callback| returned True.
'''
last_true = None
while channel_info is not None:
if channel_info.branch == 'trunk':
file_system = self._file_system_provider.GetTrunk()
else:
file_system = self._file_system_provider.GetBranch(channel_info.branch)
if not callback(file_system, channel_info):
return last_true
last_true = channel_info
channel_info = get_next(channel_info)
return last_true
def Ascending(self, channel_info, callback):
return self._ForEach(channel_info, callback, self._branch_utility.Newer)
def Descending(self, channel_info, callback):
return self._ForEach(channel_info, callback, self._branch_utility.Older)