fix tracking of removed files/dirs

This commit is contained in:
Christian Zangl 2024-08-22 11:33:35 +02:00
parent 9cd60dc8eb
commit b9326ba7ab
No known key found for this signature in database
GPG Key ID: 6D468AC36E2A4B3D
2 changed files with 37 additions and 34 deletions

View File

@ -5,7 +5,6 @@ import (
"errors" "errors"
"os" "os"
"path/filepath" "path/filepath"
"reflect"
"slices" "slices"
) )
@ -69,10 +68,6 @@ func (i *Index) getIndexFilepath() string {
return filepath.Join(i.path, i.context.IndexFilename) return filepath.Join(i.path, i.context.IndexFilename)
} }
func (i *Index) setMod(value bool) {
i.modified = value
}
func (i *Index) logFilePanic(name string, message string) { func (i *Index) logFilePanic(name string, message string) {
i.context.log(STATUS_PANIC, filepath.Join(i.path, name)+": "+message) i.context.log(STATUS_PANIC, filepath.Join(i.path, name)+": "+message)
} }
@ -137,14 +132,14 @@ func (i *Index) checkFix(forceUpdateDmg bool) {
for name, b := range i.new { for name, b := range i.new {
if a, ok := i.cur[name]; !ok { if a, ok := i.cur[name]; !ok {
i.logFile(STATUS_NEW, name) i.logFile(STATUS_NEW, name)
i.setMod(true) i.modified = true
} else { } else {
amod := int64(a.ModTime) amod := int64(a.ModTime)
bmod := int64(b.ModTime) bmod := int64(b.ModTime)
if a.Hash != nil && b.Hash != nil && *a.Hash == *b.Hash { if a.Hash != nil && b.Hash != nil && *a.Hash == *b.Hash {
i.logFile(STATUS_OK, name) i.logFile(STATUS_OK, name)
if amod != bmod { if amod != bmod {
i.setMod(true) i.modified = true
} }
continue continue
} }
@ -155,37 +150,45 @@ func (i *Index) checkFix(forceUpdateDmg bool) {
// keep DMG entry // keep DMG entry
i.new[name] = a i.new[name] = a
} else { } else {
i.setMod(true) i.modified = true
} }
} else if amod < bmod { } else if amod < bmod {
i.logFile(STATUS_UPDATE, name) i.logFile(STATUS_UPDATE, name)
i.setMod(true) i.modified = true
} else if amod > bmod { } else if amod > bmod {
i.logFile(STATUS_UP_WARN_OLD, name) i.logFile(STATUS_UP_WARN_OLD, name)
i.setMod(true) i.modified = true
} }
} }
} }
if i.context.ShowMissing { // track missing
for name := range i.cur { for name := range i.cur {
if _, ok := i.new[name]; !ok { if _, ok := i.new[name]; !ok {
i.modified = true
if i.context.ShowMissing {
i.logFile(STATUS_MISSING, name) i.logFile(STATUS_MISSING, name)
i.setMod(true)
} }
} }
// dirs
m := make(map[string]bool)
for _, n := range i.newDirList {
m[n] = true
}
for _, name := range i.curDirList {
if !m[name] {
i.logDir(STATUS_MISSING, name+"/")
i.setMod(true)
}
}
} }
// dirs
m := make(map[string]bool)
for _, n := range i.newDirList {
m[n] = true
}
for _, name := range i.curDirList {
if !m[name] {
i.modified = true
if i.context.ShowMissing {
i.logDir(STATUS_MISSING, name+"/")
}
}
}
if len(i.newDirList) != len(i.curDirList) {
// added
i.modified = true
}
} }
func (i *Index) calcFile(name string, a string) (*idxInfo, error) { func (i *Index) calcFile(name string, a string) (*idxInfo, error) {
@ -231,7 +234,7 @@ func (i *Index) save() (bool, error) {
if err != nil { if err != nil {
return false, err return false, err
} }
i.setMod(false) i.modified = false
return true, nil return true, nil
} else { } else {
return false, nil return false, nil
@ -241,13 +244,11 @@ func (i *Index) save() (bool, error) {
func (i *Index) load() error { func (i *Index) load() error {
if _, err := os.Stat(i.getIndexFilepath()); err != nil { if _, err := os.Stat(i.getIndexFilepath()); err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
// todo
i.setMod(true)
return nil return nil
} }
return err return err
} }
i.setMod(false) i.modified = false
file, err := os.ReadFile(i.getIndexFilepath()) file, err := os.ReadFile(i.getIndexFilepath())
if err != nil { if err != nil {
return err return err
@ -269,7 +270,7 @@ func (i *Index) load() error {
} else { } else {
} }
if data.IdxHash != hashMd5(text) { if data.IdxHash != hashMd5(text) {
i.setMod(true) i.modified = true
i.logFile(STATUS_ERR_IDX, i.getIndexFilepath()) i.logFile(STATUS_ERR_IDX, i.getIndexFilepath())
} }
} else { } else {
@ -286,12 +287,12 @@ func (i *Index) load() error {
} }
} }
} }
// dirs
if data.Dir != nil { if data.Dir != nil {
slices.Sort(data.Dir) slices.Sort(data.Dir)
i.curDirList = data.Dir i.curDirList = data.Dir
if i.context.TrackDirectories && !reflect.DeepEqual(i.curDirList, i.newDirList) {
i.setMod(true)
}
} }
return nil return nil
} }

View File

@ -115,6 +115,8 @@ func setupMiscFiles() {
genDir(root) genDir(root)
os.MkdirAll(filepath.Join(root, "day/car/empty"), 0755)
rootPeople := filepath.Join(root, "people") rootPeople := filepath.Join(root, "people")
testPeople := filepath.Join(testDir, "people") testPeople := filepath.Join(testDir, "people")