Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Add user defined columns #49

Merged
merged 8 commits into from
Feb 25, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove -v flag. Refactor parseColumns.
  • Loading branch information
Zweih committed Feb 25, 2025
commit 295e74212ce3aa5ef6b0850266d191bdc9a52b80
48 changes: 25 additions & 23 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,33 +45,31 @@ func ParseFlags(args []string) (Config, error) {
var allPackages bool
var showHelp bool
var showFullTimestamp bool
var showVersion bool
var disableProgress bool
var explicitOnly bool
var dependenciesOnly bool
var noDefaults bool
var dateFilter string
var sizeFilter string
var nameFilter string
var sortBy string
var columns string
var columnsInput string
var addColumnsInput string

pflag.IntVarP(&count, "number", "n", 20, "Number of packages to show")

pflag.BoolVarP(&allPackages, "all", "a", false, "Show all packages (ignores -n)")
pflag.BoolVarP(&showHelp, "help", "h", false, "Display help")
pflag.BoolVarP(&showFullTimestamp, "full-timestamp", "", false, "Show full timestamp instead of just the date")
pflag.BoolVarP(&showVersion, "", "v", false, "Show column for package versions")
pflag.BoolVarP(&disableProgress, "no-progress", "", false, "Force suppress progress output")
pflag.BoolVarP(&explicitOnly, "explicit", "e", false, "Show only explicitly installed packages")
pflag.BoolVarP(&dependenciesOnly, "dependencies", "d", false, "Show only packages installed as dependencies")
pflag.BoolVarP(&noDefaults, "no-defaults", "", false, "Show only columns specified by `--columns`")

pflag.StringVar(&dateFilter, "date", "", "Filter packages by installation date. Supports exact dates (YYYY-MM-DD), ranges (YYYY-MM-DD:YYYY-MM-DD), and open-ended filters (:YYYY-MM-DD or YYYY-MM-DD:).")
pflag.StringVar(&sizeFilter, "size", "", "Filter packages by size. Supports ranges (e.g., 10MB:20GB), exact matches (e.g., 5MB), and open-ended values (e.g., :2GB or 500KB:)")
pflag.StringVar(&nameFilter, "name", "", "Filter packages by name (or similar name)")
pflag.StringVar(&sortBy, "sort", "date", "Sort packages by: 'date', 'alphabetical', 'size:desc', 'size:asc'")
pflag.StringVar(&columns, "columns", "", "Comma-separated list of columns to display (overrides defaults)")
pflag.StringVar(&columnsInput, "columns", "", "Comma-separated list of columns to display (overrides defaults)")
pflag.StringVar(&addColumnsInput, "add-columns", "", "Comma-separated list of columns to add to defaults")

if err := pflag.CommandLine.Parse(args); err != nil {
return Config{}, fmt.Errorf("Error parsing flags: %v", err)
Expand All @@ -91,13 +89,7 @@ func ParseFlags(args []string) (Config, error) {
return Config{}, err
}

var otherColumns []string

if showVersion {
otherColumns = append(otherColumns, consts.VERSION)
}

columnsParsed, err := parseColumns(columns, !noDefaults, otherColumns)
columnsParsed, err := parseColumns(columnsInput, addColumnsInput)
if err != nil {
return Config{}, err
}
Expand All @@ -110,7 +102,6 @@ func ParseFlags(args []string) (Config, error) {
DisableProgress: disableProgress,
ExplicitOnly: explicitOnly,
DependenciesOnly: dependenciesOnly,
NoDefaults: noDefaults,
DateFilter: dateFilterParsed,
SizeFilter: sizeFilterParsed,
NameFilter: nameFilter,
Expand Down Expand Up @@ -239,24 +230,35 @@ func parseSizeInBytes(valueInput string, unitInput string) (sizeInBytes int64, e
return sizeInBytes, nil
}

func parseColumns(columnInput string, isDefault bool, otherColumns []string) ([]string, error) {
defaultColumns := []string{consts.DATE, consts.NAME, consts.REASON, consts.SIZE}
func parseColumns(columnsInput string, addColumnsInput string) ([]string, error) {
if columnsInput != "" && addColumnsInput != "" {
return nil, fmt.Errorf("cannot use --columns and --add-columns together. Use --columns to fully define the columns you want")
}

var specifiedColumnsRaw string
var columns []string

if isDefault {
columns = defaultColumns
switch {
case columnsInput != "":
specifiedColumnsRaw = columnsInput
case addColumnsInput != "":
specifiedColumnsRaw = addColumnsInput
fallthrough
default:
columns = []string{consts.DATE, consts.NAME, consts.REASON, consts.SIZE}
}

columns = append(columns, otherColumns...)

specifiedColumns, err := validateColumns(columnInput)
specifiedColumns, err := validateColumns(specifiedColumnsRaw)
if err != nil {
return specifiedColumns, err
return nil, err
}

columns = append(columns, specifiedColumns...)

if len(columns) < 1 {
return nil, fmt.Errorf("no columns selected: use --columns to specify at least one column")
}

return columns, nil
}

Expand All @@ -280,7 +282,7 @@ func validateColumns(columnInput string) ([]string, error) {
cleanColumn := strings.TrimSpace(column)

if !validColumns[strings.TrimSpace(column)] {
return []string{}, fmt.Errorf("%s is not a valid column", cleanColumn)
return nil, fmt.Errorf("%s is not a valid column", cleanColumn)
}

columns = append(columns, cleanColumn)
Expand Down