helmfile/pkg/flags
Hubertbits 6b587e15f0 Add flag registry for CLI commands
Signed-off-by: yxxhero <aiopsclub@163.com>
2025-04-17 07:30:37 +08:00
..
README.md Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
flag_handler.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
flag_handler_mock.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
flag_handler_test.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
flag_value.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
flags_value_test.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
initializer.go Run make fmt 2025-04-17 07:30:37 +08:00
registry.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_apply.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_diff.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_diff_test.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_mock.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_sync.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_template.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00
registry_test.go Add flag registry for CLI commands 2025-04-17 07:30:37 +08:00

README.md

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

// 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.