@@ -631,21 +631,39 @@ func FillDefault(ctx context.Context, y, d, o *limatype.LimaYAML, filePath strin
631631	// Combine all mounts; highest priority entry determines writable status. 
632632	// Only works for exact matches; does not normalize case or resolve symlinks. 
633633	mounts  :=  make ([]limatype.Mount , 0 , len (d .Mounts )+ len (y .Mounts )+ len (o .Mounts ))
634- 	location  :=  make (map [string ]int )
634+ 	mountPoint  :=  make (map [string ]int )
635635	for  _ , mount  :=  range  slices .Concat (d .Mounts , y .Mounts , o .Mounts ) {
636636		if  out , err  :=  executeHostTemplate (mount .Location , instDir , y .Param ); err  ==  nil  {
637637			mount .Location  =  filepath .Clean (out .String ())
638638		} else  {
639639			logrus .WithError (err ).Warnf ("Couldn't process mount location %q as a template" , mount .Location )
640640		}
641- 		if  mount .MountPoint  !=  nil  {
641+ 		// Expand a path that begins with `~`. Relative paths are not modified, and rejected by Validate() later. 
642+ 		if  localpathutil .IsTildePath (mount .Location ) {
643+ 			if  location , err  :=  localpathutil .Expand (mount .Location ); err  ==  nil  {
644+ 				mount .Location  =  location 
645+ 			} else  {
646+ 				logrus .WithError (err ).Warnf ("Couldn't expand location %q" , mount .Location )
647+ 			}
648+ 		}
649+ 		if  mount .MountPoint  ==  nil  {
650+ 			mountLocation  :=  mount .Location 
651+ 			if  runtime .GOOS  ==  "windows"  {
652+ 				var  err  error 
653+ 				mountLocation , err  =  ioutilx .WindowsSubsystemPath (ctx , mountLocation )
654+ 				if  err  !=  nil  {
655+ 					logrus .WithError (err ).Warnf ("Couldn't convert location %q into mount target" , mount .Location )
656+ 				}
657+ 			}
658+ 			mount .MountPoint  =  ptr .Of (mountLocation )
659+ 		} else  {
642660			if  out , err  :=  executeGuestTemplate (* mount .MountPoint , instDir , y .User , y .Param ); err  ==  nil  {
643661				mount .MountPoint  =  ptr .Of (out .String ())
644662			} else  {
645663				logrus .WithError (err ).Warnf ("Couldn't process mount point %q as a template" , * mount .MountPoint )
646664			}
647665		}
648- 		if  i , ok  :=  location [ mount .Location ]; ok  {
666+ 		if  i , ok  :=  mountPoint [ * mount .MountPoint ]; ok  {
649667			if  mount .SSHFS .Cache  !=  nil  {
650668				mounts [i ].SSHFS .Cache  =  mount .SSHFS .Cache 
651669			}
@@ -677,7 +695,7 @@ func FillDefault(ctx context.Context, y, d, o *limatype.LimaYAML, filePath strin
677695				mounts [i ].MountPoint  =  mount .MountPoint 
678696			}
679697		} else  {
680- 			location [ mount .Location ] =  len (mounts )
698+ 			mountPoint [ * mount .MountPoint ] =  len (mounts )
681699			mounts  =  append (mounts , mount )
682700		}
683701	}
@@ -713,26 +731,6 @@ func FillDefault(ctx context.Context, y, d, o *limatype.LimaYAML, filePath strin
713731				mounts [i ].NineP .Cache  =  ptr .Of (Default9pCacheForRO )
714732			}
715733		}
716- 
717- 		// Expand a path that begins with `~`. Relative paths are not modified, and rejected by Validate() later. 
718- 		if  localpathutil .IsTildePath (mount .Location ) {
719- 			if  location , err  :=  localpathutil .Expand (mount .Location ); err  ==  nil  {
720- 				mounts [i ].Location  =  location 
721- 			} else  {
722- 				logrus .WithError (err ).Warnf ("Couldn't expand location %q" , mount .Location )
723- 			}
724- 		}
725- 		if  mount .MountPoint  ==  nil  {
726- 			mountLocation  :=  mounts [i ].Location 
727- 			if  runtime .GOOS  ==  "windows"  {
728- 				var  err  error 
729- 				mountLocation , err  =  ioutilx .WindowsSubsystemPath (ctx , mountLocation )
730- 				if  err  !=  nil  {
731- 					logrus .WithError (err ).Warnf ("Couldn't convert location %q into mount target" , mounts [i ].Location )
732- 				}
733- 			}
734- 			mounts [i ].MountPoint  =  ptr .Of (mountLocation )
735- 		}
736734	}
737735
738736	// Note: DNS lists are not combined; highest priority setting is picked 
0 commit comments