@@ -238,8 +238,9 @@ func isWritable(path string) bool {
238238}
239239
240240func replaceBinary (src , dest string ) error {
241- // Backup current binary
242- backup := dest + ".old"
241+ // Backup current binary with version number
242+ currentVersion := strings .TrimPrefix (version .Version , "v" )
243+ backup := dest + "." + currentVersion
243244 if err := os .Rename (dest , backup ); err != nil {
244245 return fmt .Errorf ("failed to backup current binary: %w" , err )
245246 }
@@ -256,18 +257,32 @@ func replaceBinary(src, dest string) error {
256257 return fmt .Errorf ("failed to set permissions: %w" , err )
257258 }
258259
259- // Remove backup
260- os .Remove (backup )
260+ printInfo ("Backed up previous version to: %s" , backup )
261261
262262 return nil
263263}
264264
265265func replaceBinaryWithSudo (src , dest string ) error {
266- // Use sudo to replace the binary
267- cmd := exec .Command ("sudo" , "cp" , src , dest )
266+ // Backup current binary with version number
267+ currentVersion := strings .TrimPrefix (version .Version , "v" )
268+ backup := dest + "." + currentVersion
269+
270+ // Move current binary to backup
271+ cmd := exec .Command ("sudo" , "mv" , dest , backup )
272+ cmd .Stdout = os .Stdout
273+ cmd .Stderr = os .Stderr
274+ if err := cmd .Run (); err != nil {
275+ return fmt .Errorf ("failed to backup current binary: %w" , err )
276+ }
277+
278+ // Copy new binary
279+ cmd = exec .Command ("sudo" , "cp" , src , dest )
268280 cmd .Stdout = os .Stdout
269281 cmd .Stderr = os .Stderr
270282 if err := cmd .Run (); err != nil {
283+ // Restore backup on failure
284+ restoreCmd := exec .Command ("sudo" , "mv" , backup , dest )
285+ restoreCmd .Run ()
271286 return fmt .Errorf ("failed to copy with sudo: %w" , err )
272287 }
273288
@@ -277,6 +292,8 @@ func replaceBinaryWithSudo(src, dest string) error {
277292 return fmt .Errorf ("failed to set permissions: %w" , err )
278293 }
279294
295+ printInfo ("Backed up previous version to: %s" , backup )
296+
280297 return nil
281298}
282299
0 commit comments