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