Skip to content

Commit 4442eb5

Browse files
AndreaV-Lsiclaude
andcommitted
chore: Rename project from LsiGitCheckout to RepoHerd
Rename all files and update all content references across the codebase: - Renamed LsiGitCheckout.ps1/psm1/psd1 → RepoHerd.ps1/psm1/psd1 - Renamed test files and workspace file - Updated all internal references (module name, function Initialize-RepoHerd, error file path, module import calls, Get-Module calls) - Updated docs/, examples/, README, CHANGELOG, CLAUDE.md, index.html, tasks/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent c83b9e6 commit 4442eb5

25 files changed

Lines changed: 279 additions & 272 deletions

CHANGELOG.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Changelog
22

3-
All notable changes to LsiGitCheckout will be documented in this file.
3+
All notable changes to RepoHerd will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
@@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
### Changed
1717

1818
- **BREAKING**: Requires PowerShell 7.6 LTS or later (previously 5.1). PowerShell 7.6 installs side-by-side with Windows PowerShell 5.1.
19-
- Refactored monolithic script into module architecture: `LsiGitCheckout.psm1` (functions) + `LsiGitCheckout.ps1` (entry point)
19+
- Refactored monolithic script into module architecture: `RepoHerd.psm1` (functions) + `RepoHerd.ps1` (entry point)
2020
- Post-checkout scripts now execute via `pwsh` instead of `powershell.exe`
2121
- Replaced verbose null-check patterns with `??` null-coalescing operator
2222
- Entry point refactored to `try/catch/finally` pattern for guaranteed output file writing
@@ -32,11 +32,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3232
- `Set-GitSshKeyOpenSsh` for Unix: validates key format, checks permissions, sets `GIT_SSH_COMMAND`
3333
- `Set-GitSshKeyPlink` for Windows: existing PuTTY/Pageant logic (unchanged behavior)
3434
- `Read-CredentialsFile` now warns about wrong key format for the current platform
35-
- `LsiGitCheckout.psm1` module file containing all function definitions
36-
- `LsiGitCheckout.psd1` module manifest
37-
- `Initialize-LsiGitCheckout` function for module state initialization
38-
- Automated unit tests using Pester 5.x (`tests/LsiGitCheckout.Unit.Tests.ps1`)
39-
- Automated integration tests for all 16 test configs (`tests/LsiGitCheckout.Integration.Tests.ps1`)
35+
- `RepoHerd.psm1` module file containing all function definitions
36+
- `RepoHerd.psd1` module manifest
37+
- `Initialize-RepoHerd` function for module state initialization
38+
- Automated unit tests using Pester 5.x (`tests/RepoHerd.Unit.Tests.ps1`)
39+
- Automated integration tests for all 16 test configs (`tests/RepoHerd.Integration.Tests.ps1`)
4040
- **Structured JSON output** via `-OutputFile` parameter for CI/CD pipeline integration
4141
- Schema version 1.0.0 with execution metadata, per-repository results, summary counters, and error messages
4242
- `Export-CheckoutResults` function generates the JSON output
@@ -169,7 +169,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
169169
- `LSIGIT_REPOSITORY_URL`: Empty string
170170
- `LSIGIT_REPOSITORY_PATH`: Input dependency file directory path
171171
- `LSIGIT_TAG`: Empty string
172-
- `LSIGIT_SCRIPT_VERSION`: Current LsiGitCheckout version
172+
- `LSIGIT_SCRIPT_VERSION`: Current RepoHerd version
173173

174174
**Working Directory:** Input dependency file directory
175175

@@ -224,7 +224,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
224224
- **Working Directory Management**: Ensures scripts always execute from the correct repository root directory
225225

226226
### Benefits
227-
- **Multi-System Integration**: Seamlessly integrate LsiGitCheckout with existing package managers and build systems
227+
- **Multi-System Integration**: Seamlessly integrate RepoHerd with existing package managers and build systems
228228
- **Automated Setup**: Automatically configure development environments after repository checkout
229229
- **Flexible Extensibility**: Support for custom post-checkout workflows via PowerShell scripting
230230
- **Zero Breaking Changes**: All existing dependency files continue to work without modification
@@ -298,7 +298,7 @@ Write-Host "Environment setup completed for $env:LSIGIT_REPOSITORY_PATH"
298298
- **Build Environment Setup**: Configure development environments after checkout
299299
- **License and Security Scanning**: Run automated compliance checks on checked-out code
300300
- **Custom Initialization**: Execute project-specific setup procedures
301-
- **Multi-System Orchestration**: Coordinate between LsiGitCheckout and other tools
301+
- **Multi-System Orchestration**: Coordinate between RepoHerd and other tools
302302

303303
## [6.1.0] - 2025-01-24
304304

@@ -444,8 +444,8 @@ Correctly resolves to: /project/libs/shared (relative to repository root)
444444
- Enhanced user experience with no required parameters for optimal functionality
445445

446446
### Migration
447-
- **Old**: `.\LsiGitCheckout.ps1 -Recursive -EnableTagSorting`**New**: `.\LsiGitCheckout.ps1` (default)
448-
- **Old**: `.\LsiGitCheckout.ps1 -Recursive:$false -EnableTagSorting:$false`**New**: `.\LsiGitCheckout.ps1 -DisableRecursion -DisableTagSorting`
447+
- **Old**: `.\RepoHerd.ps1 -Recursive -EnableTagSorting`**New**: `.\RepoHerd.ps1` (default)
448+
- **Old**: `.\RepoHerd.ps1 -Recursive:$false -EnableTagSorting:$false`**New**: `.\RepoHerd.ps1 -DisableRecursion -DisableTagSorting`
449449
- All JSON configuration files work without modification
450450
- Functionality remains identical with improved parameter usability
451451

CLAUDE.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
# CLAUDE.md — LsiGitCheckout
1+
# CLAUDE.md — RepoHerd
22

33
## Project Overview
44

5-
PowerShell-based dependency management tool that checks out multiple Git repositories to specified versions. Module architecture: `LsiGitCheckout.psm1` (functions) + `LsiGitCheckout.ps1` (entry point). Version 8.0.1, by LS Instruments AG.
5+
PowerShell-based dependency management tool that checks out multiple Git repositories to specified versions. Module architecture: `RepoHerd.psm1` (functions) + `RepoHerd.ps1` (entry point). Version 8.0.1, by LS Instruments AG.
66

77
## Running the Tool
88

99
```powershell
10-
.\LsiGitCheckout.ps1 # defaults to dependencies.json
11-
.\LsiGitCheckout.ps1 -InputFile "path/to/deps.json" # custom config
12-
.\LsiGitCheckout.ps1 -DryRun # preview without executing
13-
.\LsiGitCheckout.ps1 -EnableDebug -EnableErrorContext # full debug output
14-
.\LsiGitCheckout.ps1 -OutputFile result.json # structured JSON output
10+
.\RepoHerd.ps1 # defaults to dependencies.json
11+
.\RepoHerd.ps1 -InputFile "path/to/deps.json" # custom config
12+
.\RepoHerd.ps1 -DryRun # preview without executing
13+
.\RepoHerd.ps1 -EnableDebug -EnableErrorContext # full debug output
14+
.\RepoHerd.ps1 -OutputFile result.json # structured JSON output
1515
```
1616

1717
Key parameters: `-InputFile`, `-CredentialsFile`, `-DryRun`, `-EnableDebug`, `-DisableRecursion`, `-MaxDepth` (default 5), `-ApiCompatibility` (Strict|Permissive), `-DisablePostCheckoutScripts`, `-EnableErrorContext`, `-OutputFile` (structured JSON results)
@@ -25,20 +25,20 @@ Key parameters: `-InputFile`, `-CredentialsFile`, `-DryRun`, `-EnableDebug`, `-D
2525
Install-Module Pester -Force -MinimumVersion 5.0
2626
2727
# Unit tests — fast, no network required
28-
Invoke-Pester ./tests/LsiGitCheckout.Unit.Tests.ps1 -Output Detailed
28+
Invoke-Pester ./tests/RepoHerd.Unit.Tests.ps1 -Output Detailed
2929
3030
# Integration tests — requires network access to GitHub test repos
31-
Invoke-Pester ./tests/LsiGitCheckout.Integration.Tests.ps1 -Output Detailed
31+
Invoke-Pester ./tests/RepoHerd.Integration.Tests.ps1 -Output Detailed
3232
```
3333

3434
### Manual Testing
3535

3636
Test configs in `tests/` are organized in subdirectories, each containing a `dependencies.json`:
3737

3838
```powershell
39-
.\LsiGitCheckout.ps1 -InputFile tests/semver-basic/dependencies.json
40-
.\LsiGitCheckout.ps1 -InputFile tests/agnostic-recursive/dependencies.json
41-
.\LsiGitCheckout.ps1 -InputFile tests/api-incompatibility-agnostic/dependencies.json -ApiCompatibility Strict
39+
.\RepoHerd.ps1 -InputFile tests/semver-basic/dependencies.json
40+
.\RepoHerd.ps1 -InputFile tests/agnostic-recursive/dependencies.json
41+
.\RepoHerd.ps1 -InputFile tests/api-incompatibility-agnostic/dependencies.json -ApiCompatibility Strict
4242
```
4343

4444
There are 17 test cases across 16 test configs covering SemVer, Agnostic, API incompatibility (Permissive + Strict), custom paths, post-checkout scripts, and recursive dependencies. See `docs/testing_infrastructure.md` for the full test architecture.
@@ -47,9 +47,9 @@ There are 17 test cases across 16 test configs covering SemVer, Agnostic, API in
4747

4848
## Architecture
4949

50-
- **Module**: `LsiGitCheckout.psm1` — all function definitions (~35 functions)
51-
- **Entry point**: `LsiGitCheckout.ps1` — param block, module import, initialization, main execution
52-
- **Manifest**: `LsiGitCheckout.psd1` — module metadata, exported functions
50+
- **Module**: `RepoHerd.psm1` — all function definitions (~35 functions)
51+
- **Entry point**: `RepoHerd.ps1` — param block, module import, initialization, main execution
52+
- **Manifest**: `RepoHerd.psd1` — module metadata, exported functions
5353
- **Two dependency resolution modes**: SemVer (recommended, automatic version resolution) and Agnostic (explicit tag-based)
5454
- **Configuration**: JSON files — `dependencies.json` for repos, `git_credentials.json` for SSH keys
5555
- **Recursive processing**: walks dependency trees with conflict detection, max depth configurable
@@ -71,15 +71,15 @@ There are 17 test cases across 16 test configs covering SemVer, Agnostic, API in
7171
- **Logging**: use `Write-Log` with levels: Info, Warning, Error, Debug, Verbose
7272
- **Error handling**: wrap operations in `Invoke-WithErrorContext -Context "description" -ScriptBlock { ... }`
7373
- **Module state**: `$script:` prefix for module-scoped variables (e.g., `$script:RepositoryDictionary`, `$script:DryRun`)
74-
- **Initialization**: call `Initialize-LsiGitCheckout` to set module state from entry point parameters
74+
- **Initialization**: call `Initialize-RepoHerd` to set module state from entry point parameters
7575
- **CHANGELOG**: follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format with SemVer versioning
7676

7777
## Project Structure
7878

7979
```
80-
LsiGitCheckout.ps1 # Entry point script (~230 lines)
81-
LsiGitCheckout.psm1 # Module with all functions (~2520 lines)
82-
LsiGitCheckout.psd1 # Module manifest
80+
RepoHerd.ps1 # Entry point script (~230 lines)
81+
RepoHerd.psm1 # Module with all functions (~2520 lines)
82+
RepoHerd.psd1 # Module manifest
8383
CHANGELOG.md # Version history
8484
README.md # Comprehensive user documentation
8585
docs/
@@ -90,8 +90,8 @@ docs/
9090
testing_infrastructure.md # Test architecture, constraints, and categories
9191
examples/ # 7 example dependency JSON configs
9292
tests/ # Pester test files + 16 test config subdirectories
93-
LsiGitCheckout.Unit.Tests.ps1 # 65 unit tests (no network)
94-
LsiGitCheckout.Integration.Tests.ps1 # 18 integration tests (needs network)
93+
RepoHerd.Unit.Tests.ps1 # 65 unit tests (no network)
94+
RepoHerd.Integration.Tests.ps1 # 18 integration tests (needs network)
9595
semver-basic/dependencies.json # Test configs in subdirectories
9696
agnostic-recursive/dependencies.json # (16 subdirectories total)
9797
api-incompatibility-*/dependencies.json

README.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# LsiGitCheckout
1+
# RepoHerd
22

33
A cross-platform Git dependency management tool that automates cloning, checking out, and version-pinning of multiple repositories from a single JSON configuration. Designed for multi-repo projects where teams need reproducible builds without the complexity of git submodules or monorepo tooling.
44

5-
LsiGitCheckout resolves recursive dependencies across repository trees, supports both Semantic Versioning (SemVer) and tag-based version pinning, and handles SSH authentication (PuTTY on Windows, OpenSSH on macOS/Linux), Git LFS, and post-checkout script execution.
5+
RepoHerd resolves recursive dependencies across repository trees, supports both Semantic Versioning (SemVer) and tag-based version pinning, and handles SSH authentication (PuTTY on Windows, OpenSSH on macOS/Linux), Git LFS, and post-checkout script execution.
66

77
## Table of Contents
88

@@ -80,7 +80,7 @@ LsiGitCheckout resolves recursive dependencies across repository trees, supports
8080

8181
4. **SSH setup** (only if accessing repositories via SSH URLs):
8282

83-
LsiGitCheckout uses PuTTY/plink on Windows. See [SSH Setup](docs/ssh_setup.md).
83+
RepoHerd uses PuTTY/plink on Windows. See [SSH Setup](docs/ssh_setup.md).
8484

8585
### macOS
8686

@@ -160,13 +160,13 @@ LsiGitCheckout resolves recursive dependencies across repository trees, supports
160160

161161
## Installation
162162

163-
1. Download `LsiGitCheckout.ps1`, `LsiGitCheckout.psm1`, and `LsiGitCheckout.psd1` to the same directory
163+
1. Download `RepoHerd.ps1`, `RepoHerd.psm1`, and `RepoHerd.psd1` to the same directory
164164
2. Create `dependencies.json` with your repository configuration
165165
3. Create `git_credentials.json` with your SSH key mappings (if using SSH repositories)
166166
4. Run with `pwsh`:
167167

168168
```bash
169-
pwsh ./LsiGitCheckout.ps1 -InputFile dependencies.json
169+
pwsh ./RepoHerd.ps1 -InputFile dependencies.json
170170
```
171171

172172
## Basic Usage (Non-Recursive)
@@ -179,34 +179,34 @@ In non-recursive mode, the script processes only the repositories listed in your
179179

180180
```powershell
181181
# Use default settings (recursive mode and intelligent tag sorting enabled by default)
182-
.\LsiGitCheckout.ps1
182+
.\RepoHerd.ps1
183183
184184
# Specify custom JSON files
185-
.\LsiGitCheckout.ps1 -InputFile "C:\configs\myrepos.json" -CredentialsFile "C:\configs\my_credentials.json"
185+
.\RepoHerd.ps1 -InputFile "C:\configs\myrepos.json" -CredentialsFile "C:\configs\my_credentials.json"
186186
187187
# Enable debug logging
188-
.\LsiGitCheckout.ps1 -EnableDebug
188+
.\RepoHerd.ps1 -EnableDebug
189189
190190
# Dry run mode (preview without changes)
191-
.\LsiGitCheckout.ps1 -DryRun
191+
.\RepoHerd.ps1 -DryRun
192192
193193
# Verbose output
194-
.\LsiGitCheckout.ps1 -Verbose
194+
.\RepoHerd.ps1 -Verbose
195195
196196
# Set default API compatibility mode (applies only to Agnostic mode repositories)
197-
.\LsiGitCheckout.ps1 -ApiCompatibility Strict
197+
.\RepoHerd.ps1 -ApiCompatibility Strict
198198
199199
# Disable recursive mode (non-recursive mode)
200-
.\LsiGitCheckout.ps1 -DisableRecursion
200+
.\RepoHerd.ps1 -DisableRecursion
201201
202202
# Disable post-checkout script execution
203-
.\LsiGitCheckout.ps1 -DisablePostCheckoutScripts
203+
.\RepoHerd.ps1 -DisablePostCheckoutScripts
204204
205205
# Enable detailed error context for debugging
206-
.\LsiGitCheckout.ps1 -EnableErrorContext
206+
.\RepoHerd.ps1 -EnableErrorContext
207207
208208
# Export structured JSON results for CI/CD pipelines
209-
.\LsiGitCheckout.ps1 -OutputFile result.json
209+
.\RepoHerd.ps1 -OutputFile result.json
210210
```
211211

212212
### Parameters
@@ -227,7 +227,7 @@ In non-recursive mode, the script processes only the repositories listed in your
227227
When `-OutputFile` is specified, a JSON file is written with the results of the checkout operation. The output is guaranteed to be written even on failure, making it safe for CI/CD pipelines. Schema version: **1.0.0**.
228228

229229
```powershell
230-
.\LsiGitCheckout.ps1 -InputFile deps.json -OutputFile result.json
230+
.\RepoHerd.ps1 -InputFile deps.json -OutputFile result.json
231231
```
232232

233233
**Output structure:**
@@ -261,7 +261,7 @@ When `-OutputFile` is specified, a JSON file is written with the results of the
261261

262262
### Understanding Dependency Resolution Modes
263263

264-
LsiGitCheckout provides two approaches for determining which git tag to checkout for each repository. Both modes examine the available git tags in each repository to make their selection decisions.
264+
RepoHerd provides two approaches for determining which git tag to checkout for each repository. Both modes examine the available git tags in each repository to make their selection decisions.
265265

266266
#### SemVer Mode (Recommended)
267267

@@ -469,19 +469,19 @@ Maps hostnames to SSH key file paths. The key format depends on your platform:
469469

470470
```powershell
471471
# Default behavior (recursive mode enabled with intelligent tag sorting)
472-
.\LsiGitCheckout.ps1
472+
.\RepoHerd.ps1
473473
474474
# Disable recursive mode for simple single-file processing
475-
.\LsiGitCheckout.ps1 -DisableRecursion
475+
.\RepoHerd.ps1 -DisableRecursion
476476
477477
# Customize recursive behavior
478-
.\LsiGitCheckout.ps1 -MaxDepth 10
478+
.\RepoHerd.ps1 -MaxDepth 10
479479
480480
# Use strict compatibility mode for Agnostic mode repositories
481-
.\LsiGitCheckout.ps1 -ApiCompatibility Strict
481+
.\RepoHerd.ps1 -ApiCompatibility Strict
482482
483483
# Disable post-checkout scripts
484-
.\LsiGitCheckout.ps1 -DisablePostCheckoutScripts
484+
.\RepoHerd.ps1 -DisablePostCheckoutScripts
485485
```
486486

487487
### Recursion and Discovering Common Dependencies
@@ -519,7 +519,7 @@ At this point, the script must determine:
519519

520520
## Dependency Resolution Modes
521521

522-
LsiGitCheckout provides two powerful approaches to solve the dependency resolution problem:
522+
RepoHerd provides two powerful approaches to solve the dependency resolution problem:
523523

524524
1. **SemVer Mode**: Automatically resolves compatible versions based on Semantic Versioning 2.0.0 rules with floating version support
525525
2. **Agnostic Mode**: Uses explicit "API Compatible Tags" lists with intelligent intersection/union algorithms
@@ -555,11 +555,11 @@ Common issues and solutions, debug mode instructions, and enhanced error context
555555

556556
## Version Migration Guide
557557

558-
Step-by-step instructions for upgrading between LsiGitCheckout versions (6.2.x to 7.0.0, 7.0.0 to 7.1.0). For details, see [Version Migration Guide](docs/version_migration.md).
558+
Step-by-step instructions for upgrading between RepoHerd versions (6.2.x to 7.0.0, 7.0.0 to 7.1.0). For details, see [Version Migration Guide](docs/version_migration.md).
559559

560560
## Advanced Topics
561561

562-
Links to in-depth guides on migrating dependency trees to LsiGitCheckout and tool comparisons. For details, see [Advanced Topics](docs/advanced_topics.md).
562+
Links to in-depth guides on migrating dependency trees to RepoHerd and tool comparisons. For details, see [Advanced Topics](docs/advanced_topics.md).
563563

564564
## License
565565

0 commit comments

Comments
 (0)