Skip to content

Enhance file system abstraction with timestamps, Unix modes, and performance improvements #4636

@devlead

Description

@devlead

This issue outlines comprehensive enhancements needed for the Cake file system abstraction layer to improve functionality, performance, and test coverage.

Key Areas for Implementation

1. File System Interface Enhancements

  • Add comprehensive timestamp support across IFile/IDirectory interfaces
  • Implement LastWriteTimeUtc, CreationTimeUtc, LastAccessTimeUtc properties
  • Add UnixFileMode property for cross-platform file permissions
  • Implement Set* methods for timestamp and Unix file mode manipulation
  • Add SetCreationTime, SetCreationTimeUtc, SetLastAccessTime, SetLastAccessTimeUtc, SetLastWriteTime, SetLastWriteTimeUtc methods
  • Add SetUnixFileMode method with proper OS platform attributes

2. Performance Improvements

  • Replace GetFiles/GetDirectories with EnumerateFiles/EnumerateDirectories in Directory.cs
  • Refactor FakeDirectory to use yield return for lazy evaluation
  • Implement performance optimizations for large directory operations

3. Test Infrastructure

  • Create dedicated Cake.Testing.Tests project
  • Add comprehensive unit test coverage for FakeFile and FakeDirectory operations
  • Implement snapshot testing with Verify library
  • Add cross-platform test coverage (Windows, Linux, OSX, FreeBSD)
  • Integrate Microsoft.Extensions.TimeProvider.Testing for reliable time handling

4. Test Coverage Gaps

  • Add tests for Create(), Move(), Delete() operations
  • Add tests for GetDirectories() and GetFiles() with various filters and search scopes
  • Add tests for timestamp and Unix file mode operations
  • Add tests for error scenarios and edge cases

5. Cross-Platform Support

  • Ensure Unix file mode support works correctly across platforms
  • Add proper OS platform attributes for Windows-specific limitations
  • Test file system operations on different operating systems

Expected Benefits

  • Performance: Lazy evaluation and enumeration-based operations for better memory usage
  • Functionality: Complete timestamp and Unix file mode support
  • Reliability: Comprehensive test coverage with snapshot testing
  • Maintainability: Dedicated test project with clear separation of concerns

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions