# RhodeCode VCSServer provides access to different vcs backends via network. # Copyright (C) 2014-2024 RhodeCode GmbH # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import os class ArchiveCacheLock(Exception): pass def archive_iterator(_reader, block_size: int = 4096 * 512): # 4096 * 64 = 64KB while 1: data = _reader.read(block_size) if not data: break yield data def get_directory_statistics(start_path): """ total_files, total_size, directory_stats = get_directory_statistics(start_path) print(f"Directory statistics for: {start_path}\n") print(f"Total files: {total_files}") print(f"Total size: {format_size(total_size)}\n") :param start_path: :return: """ total_files = 0 total_size = 0 directory_stats = {} for dir_path, dir_names, file_names in os.walk(start_path): dir_size = 0 file_count = len(file_names) for file in file_names: filepath = os.path.join(dir_path, file) file_size = os.path.getsize(filepath) dir_size += file_size directory_stats[dir_path] = {'file_count': file_count, 'size': dir_size} total_files += file_count total_size += dir_size return total_files, total_size, directory_stats def format_size(size): # Convert size in bytes to a human-readable format (e.g., KB, MB, GB) for unit in ['B', 'KB', 'MB', 'GB', 'TB']: if size < 1024: return f"{size:.2f} {unit}" size /= 1024