From b502b7db60d2ff07602c5042809d728ababa4883 Mon Sep 17 00:00:00 2001 From: Paul Traylor Date: Sun, 24 May 2026 10:58:45 +0900 Subject: [PATCH 1/3] Fix for git-pkg update with package When updating a specific package, need to use --upgrade-package instead of just --update. Adding an extra test case to handle both with and without package. Fixes #20 --- definitions/uv.yaml | 7 +++++-- translator_test.go | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/definitions/uv.yaml b/definitions/uv.yaml index 2aadf60..2e95e88 100644 --- a/definitions/uv.yaml +++ b/definitions/uv.yaml @@ -106,10 +106,13 @@ commands: update: base: [sync] args: - package: {position: 0, required: false, validate: pypi_package} + package: + required: false + validate: pypi_package + flag: "--upgrade-package" flags: quiet: [--quiet] - default_flags: [--upgrade] + all: [--upgrade] exit_codes: 0: success 1: error diff --git a/translator_test.go b/translator_test.go index 3fc45e2..470b1de 100644 --- a/translator_test.go +++ b/translator_test.go @@ -703,7 +703,9 @@ func TestUvOutdated(t *testing.T) { func TestUvUpdate(t *testing.T) { tr := loadTranslator(t) - cmd, err := tr.BuildCommand("uv", "update", CommandInput{}) + cmd, err := tr.BuildCommand("uv", "update", CommandInput{ + Flags: map[string]any{"all": true}, + }) if err != nil { t.Fatalf("BuildCommand failed: %v", err) } @@ -713,6 +715,20 @@ func TestUvUpdate(t *testing.T) { } } +func TestUvUpdatePackage(t *testing.T) { + tr := loadTranslator(t) + cmd, err := tr.BuildCommand("uv", "update", CommandInput{ + Args: map[string]string{"package": "requests"}, + }) + if err != nil { + t.Fatalf("BuildCommand failed: %v", err) + } + expected := []string{"uv", "sync", "--upgrade-package", "requests"} + if !reflect.DeepEqual(cmd, expected) { + t.Errorf("got %v, want %v", cmd, expected) + } +} + // --- yarn tests --- func TestYarnInstall(t *testing.T) { From 7a256c565fc66d8b9f54f258cdeaf1525d6417a0 Mon Sep 17 00:00:00 2001 From: Paul Traylor Date: Mon, 25 May 2026 16:27:35 +0900 Subject: [PATCH 2/3] Add suppresses_default_flags to definitions There are cases when an argument is passed, that we will want to then skip the default flags. In the example of uv for python, with no args we want to use `uv sync --upgrade` to update everything, but in the case of a single package, we want to do `uv sync --upgrade-package ` --- definitions/schema.go | 15 ++++++++------- definitions/uv.yaml | 3 ++- translator.go | 9 ++++++++- translator_test.go | 4 +--- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/definitions/schema.go b/definitions/schema.go index ed96b56..08d342b 100644 --- a/definitions/schema.go +++ b/definitions/schema.go @@ -56,13 +56,14 @@ type Extract struct { } type Arg struct { - Position int `yaml:"position"` - Required bool `yaml:"required"` - Validate string `yaml:"validate,omitempty"` - Flag string `yaml:"flag,omitempty"` - Suffix string `yaml:"suffix,omitempty"` // append user value with this prefix, e.g. "@" for pkg@version - FixedSuffix string `yaml:"fixed_suffix,omitempty"` // always append this suffix, e.g. "@none" for go remove - ExtractionOnly bool `yaml:"extraction_only,omitempty"` // arg is only used for output extraction, not passed to command + Position int `yaml:"position"` + Required bool `yaml:"required"` + Validate string `yaml:"validate,omitempty"` + Flag string `yaml:"flag,omitempty"` + Suffix string `yaml:"suffix,omitempty"` // append user value with this prefix, e.g. "@" for pkg@version + FixedSuffix string `yaml:"fixed_suffix,omitempty"` // always append this suffix, e.g. "@none" for go remove + ExtractionOnly bool `yaml:"extraction_only,omitempty"` // arg is only used for output extraction, not passed to command + SuppressDefaultFlags bool `yaml:"suppresses_default_flags,omitempty"` // if this arg is passed, then we want to skip default flags } type Flag struct { diff --git a/definitions/uv.yaml b/definitions/uv.yaml index 2e95e88..fe0f203 100644 --- a/definitions/uv.yaml +++ b/definitions/uv.yaml @@ -110,9 +110,10 @@ commands: required: false validate: pypi_package flag: "--upgrade-package" + suppresses_default_flags: true flags: quiet: [--quiet] - all: [--upgrade] + default_flags: [--upgrade] exit_codes: 0: success 1: error diff --git a/translator.go b/translator.go index cbd0449..dcb4bb3 100644 --- a/translator.go +++ b/translator.go @@ -89,6 +89,8 @@ func (t *Translator) buildCommandChain(binary string, cmd definitions.Command, i func (t *Translator) buildSingleCommand(binary string, cmd definitions.Command, input CommandInput) ([]string, error) { args := []string{binary} + suppresses_default_flags := false + baseOverrideUsed := t.applyBaseOverrides(&args, cmd, input) packageVal := input.Args["package"] @@ -103,11 +105,16 @@ func (t *Translator) buildSingleCommand(binary string, cmd definitions.Command, if val == "" { continue } + if entry.argDef.SuppressDefaultFlags { + suppresses_default_flags = true + } } t.applyVersionSuffix(&args, cmd, input, packageVal) - args = append(args, cmd.DefaultFlags...) + if suppresses_default_flags == false { + args = append(args, cmd.DefaultFlags...) + } t.applyUserFlags(&args, cmd, input, baseOverrideUsed) diff --git a/translator_test.go b/translator_test.go index 470b1de..3477002 100644 --- a/translator_test.go +++ b/translator_test.go @@ -703,9 +703,7 @@ func TestUvOutdated(t *testing.T) { func TestUvUpdate(t *testing.T) { tr := loadTranslator(t) - cmd, err := tr.BuildCommand("uv", "update", CommandInput{ - Flags: map[string]any{"all": true}, - }) + cmd, err := tr.BuildCommand("uv", "update", CommandInput{}) if err != nil { t.Fatalf("BuildCommand failed: %v", err) } From 4d85da80cc33f9990e1957305adb37c9a0c14d96 Mon Sep 17 00:00:00 2001 From: Andrew Nesbitt Date: Mon, 25 May 2026 13:59:28 +0100 Subject: [PATCH 3/3] Fix lint: use camelCase and simplify bool comparison --- translator.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translator.go b/translator.go index dcb4bb3..54cfc86 100644 --- a/translator.go +++ b/translator.go @@ -89,7 +89,7 @@ func (t *Translator) buildCommandChain(binary string, cmd definitions.Command, i func (t *Translator) buildSingleCommand(binary string, cmd definitions.Command, input CommandInput) ([]string, error) { args := []string{binary} - suppresses_default_flags := false + suppressDefaultFlags := false baseOverrideUsed := t.applyBaseOverrides(&args, cmd, input) @@ -106,13 +106,13 @@ func (t *Translator) buildSingleCommand(binary string, cmd definitions.Command, continue } if entry.argDef.SuppressDefaultFlags { - suppresses_default_flags = true + suppressDefaultFlags = true } } t.applyVersionSuffix(&args, cmd, input, packageVal) - if suppresses_default_flags == false { + if !suppressDefaultFlags { args = append(args, cmd.DefaultFlags...) }