helmfile/pkg/flags/README.md

78 lines
2.8 KiB
Markdown

# Flags Package
## Overview
The `pkg/flags` package provides utilities for registering, handling, and transferring command-line flags. It serves as the bridge between the command-line interface and the configuration options.
## File Structure
```
pkg/flags/
├── README.md # This documentation file
├── registry.go # Core interface and generic implementation
├── registry_mock.go # Mock implementation for testing
├── registry_diff.go # Diff-specific registry
├── registry_apply.go # Apply-specific registry
├── registry_sync.go # Sync-specific registry
├── registry_template.go # Template-specific registry
├── registry_lint.go # Lint-specific registry
├── registry_destroy.go # Destroy-specific registry
├── registry_fetch.go # Fetch-specific registry
├── registry_list.go # List-specific registry
├── registry_status.go # Status-specific registry
├── registry_test.go # Tests for registry implementation
├── flag_handler.go # FlagHandler interface
├── flag_handler_mock.go # Mock implementation of FlagHandler
├── flag_handler_test.go # Tests for flag handler implementations
├── flag_value.go # Generic flag value retrieval functions
└── flag_value_test.go # Tests for flag value functions
```
## Components
- **FlagHandler Interface**: Defines how components handle flag values with boolean return for success
- **FlagRegistry**: Manages flag registration and transfer
- **Command-specific Registries**: Specialized registries for each command
- **Helper Functions**: Utilities for getting flag values of different types
## Key Features
- **Type Safety**: Helper functions for safely retrieving typed flag values
- **Flag Registration**: Centralized registration of flags to command objects
- **Flag Transfer**: Mechanism to transfer flag values to option objects
- **Flag Existence Checking**: Methods to check if flags are registered or handled
- **Success Indication**: Boolean return values to indicate if flags were successfully handled
## Usage
```go
// Create a registry
registry := flags.NewGenericFlagRegistry()
// Register flags to a command
registry.RegisterFlags(cmd)
// Transfer flags to options
registry.TransferFlags(cmd, opts)
// Check if a flag is registered
if registry.IsFlagRegistered("my-flag") {
// Do something
}
// Handle a flag with success indication
handled := opts.HandleFlag("flag-name", value, changed)
if !handled {
// Flag wasn't recognized
}
```
## Testing
The package includes mock implementations for testing:
- `MockFlagHandler`: For testing flag handling logic
- `MockFlagRegistry`: For testing flag registration and transfer
These mocks can be used to verify flag handling behavior without needing real command objects.