DotNetMateTool 0.1.12

dotnet tool install --global DotNetMateTool --version 0.1.12
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local DotNetMateTool --version 0.1.12
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=DotNetMateTool&version=0.1.12
                    
nuke :add-package DotNetMateTool --version 0.1.12
                    

DotNetMate

A .NET developer CLI tool for keeping your workspace clean and organized.

Installation

dotnet tool install -g DotNetMateTool

Requires .NET 10 runtime.

Commands

mate clean

Recursively scans and removes build artifacts, temporary directories, and generated files. Displays cleanup statistics with total size reclaimed.

Directories removed:

Pattern Description
bin/ Build output
obj/ Intermediate build files
.vs/ Visual Studio local settings
.tmp/ Temporary directories
TestResults/ Test result output
*Installer-cache/ Installer cache directories
.nuke/temp/ NUKE build system temp files

Files removed:

Pattern Description
*.binlog MSBuild binary logs
*_wpftmp.csproj WPF temporary project files

After deletion, empty directories left behind are automatically cleaned up.

mate clean                    # clean current directory
mate clean --folder C:\repos  # clean specific directory

mate removeEmpty

Recursively removes empty directories. Directories containing only system/metadata files are treated as empty and removed along with those files.

System files considered as empty content: desktop.ini, .DS_Store, Thumbs.db, metadata.opf, cover.jpg

.git directories are always protected and never deleted.

mate removeEmpty                    # current directory
mate removeEmpty --folder C:\repos  # specific directory

mate gitlog

Aggregates git commit logs across multiple repositories into a single report. Useful for timesheets and activity reports.

mate gitlog --from 2025-01-01                          # scan current directory
mate gitlog --root C:\repos --from 2025-01-01          # scan specific root
mate gitlog --from 2025-01-01 --exclude repo1,repo2   # exclude repos
mate gitlog --from 2025-01-01 --json                   # export to JSON
mate gitlog --from 2025-01-01 --csv                    # export to CSV
mate gitlog --from 2025-01-01 --with previous.json     # merge with existing data

mate resharper clean

Cleans ReSharper/Rider SolutionCaches directories under %LOCALAPPDATA%\JetBrains.

mate resharper clean

mate resharper config

Sorts entries in ReSharper .DotSettings files alphabetically by XAML key.

mate resharper config --sort MySettings.DotSettings

License

MIT

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.1.12 48 5/28/2026
0.1.11 50 5/28/2026
0.1.10 151 3/28/2026
0.1.9 106 3/26/2026
0.1.8 97 3/26/2026
0.1.7 104 3/24/2026
0.1.6 103 3/20/2026
0.1.5 112 3/16/2026
0.1.4 110 3/12/2026
0.1.3 104 3/12/2026
0.1.2 105 3/11/2026
0.1.1 101 3/11/2026
0.1.0 110 3/11/2026

# Changelog

All notable changes to DotNetMate will be documented in this file.

## [0.1.12] - 2026-05-28

Fixed:
- Update-available notification no longer appears in the middle of command output (was: the notification could tear the `--- SUMMARY ---` line and other Serilog output because the async log sink had not yet flushed when the message was written)

## [0.1.11] - 2026-05-28

Added:
- `mate clean --include-worktrees` (`-w`) flag to clean bin/obj inside linked git worktrees

Changed:
- `mate clean` now skips linked git worktrees by default and logs them once (was: silently cleaned them). Ephemeral worktrees under `.claude/worktrees/` (Claude Code agent isolation) are still cleaned automatically.
- `mate clean` statistics now include `Elapsed` time (ms / seconds / minutes depending on duration)

Fixed:
- `mate gitlog` crashing with `InvalidOperationException` when no commits from current user found - now logs a warning and exits gracefully
- `mate gitlog` leaking `LibGit2Sharp` repositories - `.git` files staying locked on Windows. Repositories are now properly disposed after each invocation
- `mate gitlog` progress percentage staying above 100% on repeated invocations - progress counter now resets at the start of each run
- `mate gitlog --exclude` silently ignoring repos when names had surrounding whitespace (`--exclude "a, b"` - `b` no longer excluded). Comma-separated values are now trimmed
- `mate gitlog` crashing on repositories without any remote configured - `Url` and `OriginRemote` are now null-safe
- `mate removeEmpty` accepting non-existent directories without a clear error - now validates the path like `mate clean` does
- NUKE `CommitChangelog` target reads the stamped version from the csproj instead of re-querying GitVersion after the tag is created, so the post-release commit message matches the actually released version (was: `Release 0.1.11: stamp CHANGELOG and Version` while shipping `0.1.10`)

## [0.1.10] - 2026-03-28

Fixed:
- `mate gitlog -t` showing overlapping time ranges per branch - now splits timeline into exclusive segments with correct duration

## [0.1.8] - 2026-03-26

Performance:
- `mate clean` directory deletion significantly faster for large projects - uses native OS recursive delete as fast path, falls back to per-file enumeration only when locked files are encountered
- `mate clean` folder size calculation no longer uses thread pool - reverts to sequential enumeration, eliminating scheduling overhead for typical workloads

Fixed:
- Published package banner showing `1.0.0` instead of actual version - assembly now compiled with version from GitVersion/csproj
- Banner displaying version with commit hash suffix (e.g. `0.1.8+Branch.main.Sha.abc...` instead of `0.1.8`)
- Update check never finding new versions - NuGet API requires lowercase package ID
- `mate resharper clean` crashing on locked cache files - now uses SafeDelete
- `gitlog` date filter logic inverted when `--from` is null (no runtime impact currently but incorrect semantics)
- `.mate.json` with invalid `gitLog.defaultAfter` date silently ignored - now logs warning and requires `--from` flag

## [0.1.7] - 2026-03-24

Added:
- Background update check: on each run, checks NuGet for a newer version and prints a notification after command output

Fixed:
- `mate clean` no longer reports errors for locked files - logs a warning instead of throwing (fixes DOTNETMATE-2, DOTNETMATE-3)
- Banner displaying wrong version (1.0.0) instead of installed version
- `gitlog` timezone normalization and duration calculation

## [0.1.6] - 2026-03-20

Added:
- Hierarchical `.mate.json` configuration file - directory traversal lookup (closest file wins, `~/.mate.json` as global fallback)
- Configurable defaults for `clean` (exclude patterns, custom directories), `gitLog` (default `--from`, `--tempo`), and `resharper` (DotSettings paths)
- `mate completions powershell|bash|zsh` command for shell completion scripts
- `mate clean` supports exclude patterns and custom directories via `.mate.json`

## [0.1.5] - 2026-03-16

Added:
- `--tempo` (`-t`) option in `gitlog` command - aggregates commits per day/branch with time range and estimated work time for Tempo/JIRA logging
- Recover commits from deleted/merged branches by walking merge commit second parents
- Extract original branch name from merge commit messages (e.g. "Merge branch 'feature/PM3-1305' into develop")

Fixed:
- `--tempo` sort order: oldest day first
- `--tempo` time calculation: use local time instead of UTC to avoid normalization across mixed offsets
- `--tempo` output alignment: consistent column formatting
- Branch attribution: feature branches now exclude base branch commits
- Branch attribution: prefer feature branch name over generic (main/master/develop) in duplicate resolution
- Filter out `origin/HEAD` symbolic ref from branch listing

## [0.1.4] - 2026-03-12

Fixed:
- `mate clean` performance: parallel folder size calculation
- `mate gitlog` handles repositories without main/master branch gracefully
- Improved console output formatting (structured logging)

## [0.1.3] - 2026-03-12

Fixed:
- Removed `sentry-test` CLI command (not intended for release)

## [0.1.2] - 2026-03-12

Fixed:
- Sentry error tracking configuration

## [0.1.1] - 2026-03-11

Fixed:
- Internal configuration fixes

## [0.1.0] - 2026-03-09

Added:
- `mate clean` - remove bin/obj/.vs/.tmp/TestResults directories
- `mate removeEmpty` - remove empty directories
- `mate gitlog` - aggregate git logs across repositories
- `mate resharper clean` - clean JetBrains SolutionCaches
- `mate resharper config --sort` - sort .DotSettings files by XAML key
- Sentry error tracking