Update folder entries
This commit is contained in:
parent
b75c58cc64
commit
ee701d9e02
@ -182,7 +182,7 @@ func (cp *corsoProgress) FinishedFile(relativePath string, err error) {
|
||||
parent = nextParent
|
||||
}
|
||||
|
||||
cp.deets.AddFolders(folders)
|
||||
cp.deets.AddFoldersForItem(folders, d.info)
|
||||
}
|
||||
|
||||
// Kopia interface function used as a callback when kopia finishes hashing a file.
|
||||
|
||||
@ -112,7 +112,7 @@ type Details struct {
|
||||
|
||||
// internal
|
||||
mu sync.Mutex `json:"-"`
|
||||
knownFolders map[string]struct{} `json:"-"`
|
||||
knownFolders map[string]FolderEntry `json:"-"`
|
||||
}
|
||||
|
||||
func (d *Details) Add(repoRef, shortRef, parentRef string, updated bool, info ItemInfo) {
|
||||
@ -127,23 +127,11 @@ func (d *Details) Add(repoRef, shortRef, parentRef string, updated bool, info It
|
||||
})
|
||||
}
|
||||
|
||||
// AddFolders adds entries for the given folders. It skips adding entries that
|
||||
// have been added by previous calls.
|
||||
func (d *Details) AddFolders(folders []FolderEntry) {
|
||||
func (d *Details) Finalize() {
|
||||
d.mu.Lock()
|
||||
defer d.mu.Unlock()
|
||||
|
||||
if d.knownFolders == nil {
|
||||
d.knownFolders = map[string]struct{}{}
|
||||
}
|
||||
|
||||
for _, folder := range folders {
|
||||
if _, ok := d.knownFolders[folder.ShortRef]; ok {
|
||||
// Entry already exists, nothing to do.
|
||||
continue
|
||||
}
|
||||
|
||||
d.knownFolders[folder.ShortRef] = struct{}{}
|
||||
for _, folder := range d.knownFolders {
|
||||
d.Entries = append(d.Entries, DetailsEntry{
|
||||
RepoRef: folder.RepoRef,
|
||||
ShortRef: folder.ShortRef,
|
||||
@ -153,6 +141,29 @@ func (d *Details) AddFolders(folders []FolderEntry) {
|
||||
}
|
||||
}
|
||||
|
||||
// AddFoldersForItem adds entries for the given folders. It skips adding entries that
|
||||
// have been added by previous calls.
|
||||
func (d *Details) AddFoldersForItem(folders []FolderEntry, itemInfo ItemInfo) {
|
||||
d.mu.Lock()
|
||||
defer d.mu.Unlock()
|
||||
|
||||
if d.knownFolders == nil {
|
||||
d.knownFolders = make(map[string]FolderEntry)
|
||||
}
|
||||
|
||||
for _, folder := range folders {
|
||||
if existing, ok := d.knownFolders[folder.ShortRef]; ok {
|
||||
folder = existing
|
||||
}
|
||||
folder.Info.Folder.Size += itemInfo.Exchange.Size
|
||||
if folder.Info.Folder.Modified.Before(itemInfo.Exchange.Modified) {
|
||||
folder.Info.Folder.Modified = itemInfo.Exchange.Modified
|
||||
}
|
||||
|
||||
d.knownFolders[folder.ShortRef] = folder
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
// Entry
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
@ -222,6 +222,12 @@ func (suite *DetailsUnitSuite) TestDetailsModel_Items() {
|
||||
}
|
||||
|
||||
func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
||||
itemInfo := details.ItemInfo{
|
||||
Exchange: &details.ExchangeInfo{
|
||||
Size: 1,
|
||||
},
|
||||
}
|
||||
|
||||
table := []struct {
|
||||
name string
|
||||
folders []details.FolderEntry
|
||||
@ -234,11 +240,17 @@ func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
||||
RepoRef: "rr1",
|
||||
ShortRef: "sr1",
|
||||
ParentRef: "pr1",
|
||||
Info: details.ItemInfo{
|
||||
Folder: &details.FolderInfo{},
|
||||
},
|
||||
},
|
||||
{
|
||||
RepoRef: "rr2",
|
||||
ShortRef: "sr2",
|
||||
ParentRef: "pr2",
|
||||
Info: details.ItemInfo{
|
||||
Folder: &details.FolderInfo{},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedShortRefs: []string{"sr1", "sr2"},
|
||||
@ -250,21 +262,33 @@ func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
||||
RepoRef: "rr1",
|
||||
ShortRef: "sr1",
|
||||
ParentRef: "pr1",
|
||||
Info: details.ItemInfo{
|
||||
Folder: &details.FolderInfo{},
|
||||
},
|
||||
},
|
||||
{
|
||||
RepoRef: "rr2",
|
||||
ShortRef: "sr2",
|
||||
ParentRef: "pr2",
|
||||
Info: details.ItemInfo{
|
||||
Folder: &details.FolderInfo{},
|
||||
},
|
||||
},
|
||||
{
|
||||
RepoRef: "rr1",
|
||||
ShortRef: "sr1",
|
||||
ParentRef: "pr1",
|
||||
Info: details.ItemInfo{
|
||||
Folder: &details.FolderInfo{},
|
||||
},
|
||||
},
|
||||
{
|
||||
RepoRef: "rr3",
|
||||
ShortRef: "sr3",
|
||||
ParentRef: "pr3",
|
||||
Info: details.ItemInfo{
|
||||
Folder: &details.FolderInfo{},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectedShortRefs: []string{"sr1", "sr2", "sr3"},
|
||||
@ -273,8 +297,8 @@ func (suite *DetailsUnitSuite) TestDetails_AddFolders() {
|
||||
for _, test := range table {
|
||||
suite.T().Run(test.name, func(t *testing.T) {
|
||||
deets := details.Details{}
|
||||
deets.AddFolders(test.folders)
|
||||
|
||||
deets.AddFoldersForItem(test.folders, itemInfo)
|
||||
deets.Finalize()
|
||||
assert.Len(t, deets.Entries, len(test.expectedShortRefs))
|
||||
|
||||
for _, e := range deets.Entries {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user