@@ -143,39 +143,45 @@ func (h *handler) mergeAlias(
143143 continue
144144 }
145145
146- var aliasSubItem os.FileInfo
147- matchExisted := false
146+ var fsItem os.FileInfo
148147 if isChildAlias { // reached second-deepest path of alias
149148 var err error
150- aliasSubItem , err = os .Stat (alias .fsPath ())
151- if err == nil {
152- aliasSubItem = newRenamedFileInfo (subName , aliasSubItem )
153- } else {
149+ fsItem , err = os .Stat (alias .fsPath ())
150+ if err != nil {
154151 errs = append (errs , err )
155- aliasSubItem = newFakeFileInfo (subName , true )
156152 }
157153 }
158154
155+ matchExisted := false
159156 for i , subItem := range subItems {
160157 if ! alias .namesEqual (subItem .Name (), subName ) {
161158 continue
162159 }
160+ if isVirtual (subItem ) {
161+ continue
162+ }
163163 matchExisted = true
164- if aliasSubItem == nil {
165- // use aliased item instead of original item
166- // to mark it as an alias, which results non-deletable
167- aliasSubItem = newRenamedFileInfo (subName , subItems [i ])
164+ var aliasSubItem os.FileInfo
165+ if fsItem != nil {
166+ aliasSubItem = newRenamedFileInfo (subItem .Name (), fsItem )
167+ } else {
168+ aliasSubItem = newRenamedFileInfo (subItem .Name (), subItem )
168169 }
170+ aliasSubItems = append (aliasSubItems , aliasSubItem )
169171 subItems [i ] = aliasSubItem
170- break
171- }
172-
173- if aliasSubItem == nil {
174- aliasSubItem = newFakeFileInfo (subName , true )
172+ if alias .caseSensitive () {
173+ break
174+ }
175175 }
176- aliasSubItems = append (aliasSubItems , aliasSubItem )
177176
178177 if ! matchExisted {
178+ var aliasSubItem os.FileInfo
179+ if fsItem != nil {
180+ aliasSubItem = newRenamedFileInfo (subName , fsItem )
181+ } else {
182+ aliasSubItem = newFakeFileInfo (subName , true )
183+ }
184+ aliasSubItems = append (aliasSubItems , aliasSubItem )
179185 subItems = append (subItems , aliasSubItem )
180186 }
181187 }
0 commit comments