github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/filesystem/util/copyMtimes.go (about) 1 package util 2 3 import ( 4 "github.com/Cloud-Foundations/Dominator/lib/filesystem" 5 ) 6 7 func copyMtimes(sourceFs, destFs *filesystem.FileSystem) { 8 sourceFilenameToInodeTable := sourceFs.FilenameToInodeTable() 9 destInodeToFilenamesTable := destFs.InodeToFilenamesTable() 10 for inum, destInode := range destFs.InodeTable { 11 filenames := destInodeToFilenamesTable[inum] 12 var sourceInode filesystem.GenericInode 13 for _, filename := range filenames { // Search for source inode. 14 if sourceInum, ok := sourceFilenameToInodeTable[filename]; ok { 15 sourceInode = sourceFs.InodeTable[sourceInum] 16 break 17 } 18 } 19 if sourceInode == nil { 20 continue 21 } 22 if destInode, ok := destInode.(*filesystem.RegularInode); ok { 23 if sourceInode, ok := sourceInode.(*filesystem.RegularInode); ok { 24 newIno := *destInode 25 newIno.MtimeNanoSeconds = sourceInode.MtimeNanoSeconds 26 newIno.MtimeSeconds = sourceInode.MtimeSeconds 27 if filesystem.CompareRegularInodes(&newIno, sourceInode, nil) { 28 destFs.InodeTable[inum] = &newIno 29 } 30 } 31 } 32 if destInode, ok := destInode.(*filesystem.SpecialInode); ok { 33 if sourceInode, ok := sourceInode.(*filesystem.SpecialInode); ok { 34 newIno := *destInode 35 newIno.MtimeNanoSeconds = sourceInode.MtimeNanoSeconds 36 newIno.MtimeSeconds = sourceInode.MtimeSeconds 37 if filesystem.CompareSpecialInodes(&newIno, sourceInode, nil) { 38 destFs.InodeTable[inum] = &newIno 39 } 40 } 41 } 42 } 43 }