Skip to content

Conversation

@devlead
Copy link
Member

@devlead devlead commented Oct 27, 2025

Added timestamps, Unix modes, performance improvements and dedicated for Fake File/Directory.

  • Add comprehensive timestamp and Unix file mode support across IFile/IDirectory interfaces
  • Implement LastWriteTimeUtc, CreationTimeUtc, LastAccessTimeUtc, and UnixFileMode properties
  • Add Set* methods for timestamp and Unix file mode manipulation
  • Improve performance by replacing GetFiles/GetDirectories with EnumerateFiles/EnumerateDirectories
  • Create dedicated Cake.Testing.Tests project with comprehensive unit test coverage
  • Add snapshot testing with Verify for FakeFile and FakeDirectory operations
  • Fill gaps in file system abstraction with cross-platform Unix file mode support
  • Integrate Microsoft.Extensions.TimeProvider.Testing for reliable time handling in tests
  • Refactor FakeDirectory to use yield return for lazy evaluation performance benefits
  • Add extensive test coverage for Create, Move, Delete, GetDirectories, and GetFiles operations
  • fixes Enhance file system abstraction with timestamps, Unix modes, and performance improvements #4636

Breaking Changes

  • There shouldn't be any breaking changes identified, all new interface members have default implementations / values.

IFileSystemInfo Interface (Base interface)

  • DateTime? LastWriteTimeUtc - Default: null
  • DateTime? CreationTimeUtc - Default: null
  • DateTime? LastAccessTimeUtc - Default: null
  • UnixFileMode? UnixFileMode - Default: null

IDirectory Interface

  • IDirectory SetCreationTime(DateTime creationTime) - Default: return this
  • IDirectory SetCreationTimeUtc(DateTime creationTimeUtc) - Default: return this
  • IDirectory SetLastAccessTime(DateTime lastAccessTime) - Default: return this
  • IDirectory SetLastAccessTimeUtc(DateTime lastAccessTimeUtc) - Default: return this
  • IDirectory SetLastWriteTime(DateTime lastWriteTime) - Default: return this
  • IDirectory SetLastWriteTimeUtc(DateTime lastWriteTimeUtc) - Default: return this
  • IDirectory SetUnixFileMode(UnixFileMode unixFileMode) - Default: return this

IFile Interface

  • IFile SetUnixFileMode(UnixFileMode unixFileMode) - Default: return this

Key Changes Made

  • Added UTC time properties to IFileSystemInfo with default null values
  • Added Unix file mode support with UnixFileMode property and setter methods
  • Added time setter methods for both IDirectory and IFile interfaces
  • Performance improvement: Changed from GetDirectories()/GetFiles() to EnumerateDirectories()/EnumerateFiles()
  • Added _file.Refresh() calls after time-setting operations to ensure consistency
  • Added platform-specific attributes ([UnsupportedOSPlatform("windows")]) for Unix-specific methods

@devlead devlead force-pushed the feature/improvefilesystem branch 5 times, most recently from ffd8a82 to 184fc57 Compare October 27, 2025 08:32
@devlead devlead requested a review from a team October 27, 2025 09:01
@devlead devlead enabled auto-merge (squash) October 27, 2025 10:13
@devlead devlead force-pushed the feature/improvefilesystem branch from 184fc57 to cbe8e87 Compare October 27, 2025 20:42
@devlead devlead disabled auto-merge October 27, 2025 20:46
@devlead devlead enabled auto-merge October 27, 2025 20:46
Added timestamps, Unix modes, performance improvements and dedicated for Fake File/Directory.

- Add comprehensive timestamp and Unix file mode support across IFile/IDirectory interfaces
- Implement LastWriteTimeUtc, CreationTimeUtc, LastAccessTimeUtc, and UnixFileMode properties
- Add Set* methods for timestamp and Unix file mode manipulation
- Improve performance by replacing GetFiles/GetDirectories with EnumerateFiles/EnumerateDirectories
- Create dedicated Cake.Testing.Tests project with comprehensive unit test coverage
- Add snapshot testing with Verify for FakeFile and FakeDirectory operations
- Fill gaps in file system abstraction with cross-platform Unix file mode support
- Integrate Microsoft.Extensions.TimeProvider.Testing for reliable time handling in tests
- Refactor FakeDirectory to use yield return for lazy evaluation performance benefits
- Add extensive test coverage for Create, Move, Delete, GetDirectories, and GetFiles operations
- fixes cake-build#4636

### Breaking Changes
- [x] There shouldn't be any breaking changes identified, all new interface members have default implementations / values.

#### IFileSystemInfo Interface (Base interface)
- [x] `DateTime? LastWriteTimeUtc` - Default: `null`
- [x] `DateTime? CreationTimeUtc` - Default: `null`
- [x] `DateTime? LastAccessTimeUtc` - Default: `null`
- [x] `UnixFileMode? UnixFileMode` - Default: `null`

#### IDirectory Interface
- [x] `IDirectory SetCreationTime(DateTime creationTime)` - Default: `return this`
- [x] `IDirectory SetCreationTimeUtc(DateTime creationTimeUtc)` - Default: `return this`
- [x] `IDirectory SetLastAccessTime(DateTime lastAccessTime)` - Default: `return this`
- [x] `IDirectory SetLastAccessTimeUtc(DateTime lastAccessTimeUtc)` - Default: `return this`
- [x] `IDirectory SetLastWriteTime(DateTime lastWriteTime)` - Default: `return this`
- [x] `IDirectory SetLastWriteTimeUtc(DateTime lastWriteTimeUtc)` - Default: `return this`
- [x] `IDirectory SetUnixFileMode(UnixFileMode unixFileMode)` - Default: `return this`

#### IFile Interface
- [x] `IFile SetUnixFileMode(UnixFileMode unixFileMode)` - Default: `return this`

### Key Changes Made
- [x] Added UTC time properties to IFileSystemInfo with default null values
- [x] Added Unix file mode support with UnixFileMode property and setter methods
- [x] Added time setter methods for both IDirectory and IFile interfaces
- [x] Performance improvement: Changed from GetDirectories()/GetFiles() to EnumerateDirectories()/EnumerateFiles()
- [x] Added _file.Refresh() calls after time-setting operations to ensure consistency
- [x] Added platform-specific attributes ([UnsupportedOSPlatform("windows")]) for Unix-specific methods
@devlead devlead force-pushed the feature/improvefilesystem branch from cbe8e87 to f160300 Compare October 28, 2025 06:52
Copy link
Member

@gep13 gep13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@devlead devlead merged commit 2276633 into cake-build:develop Oct 28, 2025
17 checks passed
@gep13
Copy link
Member

gep13 commented Oct 28, 2025

@devlead thank you for getting this done!

This was referenced Nov 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

2 participants