@@ -412,6 +412,18 @@ func resolveIsloLeaseID(id, repoRoot string, reclaim bool) (string, string, stri
412412 if id == "" {
413413 return "" , "" , "" , exit (2 , "provider=islo requires a Crabbox-created sandbox name, lease id, or slug" )
414414 }
415+ if strings .HasPrefix (id , isloLeasePrefix ) {
416+ name := strings .TrimPrefix (id , isloLeasePrefix )
417+ if ! isCrabboxIsloSandboxName (name ) {
418+ return "" , "" , "" , exit (4 , "islo lease %q is not a Crabbox-owned sandbox" , id )
419+ }
420+ if claim , ok , err := resolveExactIsloLeaseClaim (id ); err != nil {
421+ return "" , "" , "" , err
422+ } else if ok {
423+ return claim .LeaseID , name , blank (claim .Slug , newLeaseSlug (claim .LeaseID )), nil
424+ }
425+ return id , name , newLeaseSlug (id ), nil
426+ }
415427 if claim , ok , err := resolveIsloClaim (id ); err != nil {
416428 return "" , "" , "" , err
417429 } else if ok {
@@ -422,20 +434,24 @@ func resolveIsloLeaseID(id, repoRoot string, reclaim bool) (string, string, stri
422434 }
423435 return claim .LeaseID , strings .TrimPrefix (claim .LeaseID , isloLeasePrefix ), blank (claim .Slug , newLeaseSlug (claim .LeaseID )), nil
424436 }
425- if strings .HasPrefix (id , isloLeasePrefix ) {
426- name := strings .TrimPrefix (id , isloLeasePrefix )
427- if ! isCrabboxIsloSandboxName (name ) {
428- return "" , "" , "" , exit (4 , "islo lease %q is not a Crabbox-owned sandbox" , id )
429- }
430- return id , name , newLeaseSlug (id ), nil
431- }
432437 if ! isCrabboxIsloSandboxName (id ) {
433438 return "" , "" , "" , exit (4 , "islo sandbox %q is not claimed by Crabbox; use a Crabbox slug or %s<crabbox-sandbox-name>" , id , isloLeasePrefix )
434439 }
435440 leaseID := isloLeasePrefix + id
436441 return leaseID , id , newLeaseSlug (leaseID ), nil
437442}
438443
444+ func resolveExactIsloLeaseClaim (leaseID string ) (core.LeaseClaim , bool , error ) {
445+ claim , ok , err := resolveLeaseClaim (leaseID )
446+ if err != nil {
447+ return claim , ok , err
448+ }
449+ if ok && claim .Provider == isloProvider && claim .LeaseID == leaseID {
450+ return claim , true , nil
451+ }
452+ return core.LeaseClaim {}, false , nil
453+ }
454+
439455func isloCleanupCommand (leaseID string ) string {
440456 return fmt .Sprintf ("crabbox stop --provider %s %s" , isloProvider , shellQuote (leaseID ))
441457}
0 commit comments