@@ -10,11 +10,10 @@ import (
1010
1111 "github.com/ImSingee/go-ex/ee"
1212 "github.com/ImSingee/go-ex/pp"
13- "github.com/ImSingee/semver"
1413 "github.com/spf13/cobra"
15- "github.com/ysmood/gson"
1614
1715 "github.com/ImSingee/kitty/internal/config"
16+ "github.com/ImSingee/kitty/internal/config/kittyversion"
1817 "github.com/ImSingee/kitty/internal/ext/format"
1918 lintstaged "github.com/ImSingee/kitty/internal/ext/lint-staged"
2019 "github.com/ImSingee/kitty/internal/hooks"
@@ -148,61 +147,22 @@ func mayUseAnotherKitty() error {
148147 }
149148 }
150149
151- requiredVersion := parseRequiredKittyVersion (c )
150+ requiredVersion := kittyversion . ParseRequired (c )
152151 if requiredVersion == "" {
153152 return nil // no required version
154153 }
155154
156- // TODO auto download new kitty version
157- if requiredVersion [0 ] == '=' {
158- sv , err := semver .NewVersion (requiredVersion [1 :])
159- if err != nil {
160- return ee .Wrapf (err , "invalid kitty required version %s" , requiredVersion )
161- }
162-
163- if ! sv .Equal (version .Semver ()) {
164- pp .Println ("Please use kitty " , requiredVersion [1 :], "to run this command" )
165- pp .Println ("Visit https://github.com/ImSingee/kitty/releases/tag/v" + requiredVersion [1 :] + " to download" )
166- return ee .Phantom
167- }
168- } else {
169- sv , err := semver .NewVersion (strings .TrimPrefix (requiredVersion , ">" ))
170- if err != nil {
171- return ee .Wrapf (err , "invalid kitty required version %s" , requiredVersion )
172- }
173-
174- if version .LessThan (sv ) {
175- pp .Println ("Please use kitty " , requiredVersion , "or later to run this command" )
176- pp .Println ("Visit https://github.com/ImSingee/kitty/releases to download" )
177- return ee .Phantom
178- }
179- }
180-
181- return nil
182- }
183-
184- func parseRequiredKittyVersion (c map [string ]gson.JSON ) string {
185- if c == nil {
186- return ""
155+ ok , err := kittyversion .CurrentSatisfies (requiredVersion )
156+ if err != nil {
157+ return ee .Wrapf (err , "invalid kitty required version %s" , requiredVersion )
187158 }
188-
189- kitty , kittyExists := c [ "kitty" ]
190- if ! kittyExists {
191- return ""
159+ if ! ok {
160+ pp . Println ( "Please use kitty version matching constraint" , requiredVersion , "to run this command" )
161+ pp . Println ( "Visit https://github.com/ImSingee/kitty/releases to download" )
162+ return ee . Phantom
192163 }
193164
194- switch kittyVal := kitty .Val ().(type ) {
195- case string :
196- return kittyVal
197- case map [string ]any :
198- if v , ok := kittyVal ["version" ].(string ); ok {
199- return v
200- }
201-
202- return ""
203- default :
204- return "" // unknown kitty config type
205- }
165+ return nil
206166}
207167
208168func runExtension (name string , args []string ) error {
0 commit comments