move onedrive.MetadataItem to metadata.Item
In keeping with other changes that migrate shared metadata to the onedrive/metadata pkg for exported access.
This commit is contained in:
parent
d067a79483
commit
95e1af794d
@ -722,14 +722,14 @@ func permissionEqual(expected metadata.Permission, got metadata.Permission) bool
|
||||
return true
|
||||
}
|
||||
|
||||
func compareOneDriveItem(
|
||||
func compareDriveItem(
|
||||
t *testing.T,
|
||||
expected map[string][]byte,
|
||||
item data.Stream,
|
||||
restorePermissions bool,
|
||||
rootDir bool,
|
||||
) bool {
|
||||
// Skip OneDrive permissions in the folder that used to be the root. We don't
|
||||
// Skip Drive permissions in the folder that used to be the root. We don't
|
||||
// have a good way to materialize these in the test right now.
|
||||
if rootDir && item.UUID() == metadata.DirMetaFileSuffix {
|
||||
return false
|
||||
@ -747,7 +747,7 @@ func compareOneDriveItem(
|
||||
)
|
||||
|
||||
if isMeta {
|
||||
var itemType *onedrive.MetadataItem
|
||||
var itemType *metadata.Item
|
||||
|
||||
assert.IsType(t, itemType, item)
|
||||
} else {
|
||||
@ -824,8 +824,7 @@ func compareOneDriveItem(
|
||||
t,
|
||||
expectedMeta.Permissions,
|
||||
itemPerms,
|
||||
permissionEqual,
|
||||
)
|
||||
permissionEqual)
|
||||
|
||||
return true
|
||||
}
|
||||
@ -887,7 +886,7 @@ func compareItem(
|
||||
}
|
||||
|
||||
case path.OneDriveService:
|
||||
return compareOneDriveItem(t, expected, item, restorePermissions, rootDir)
|
||||
return compareDriveItem(t, expected, item, restorePermissions, rootDir)
|
||||
|
||||
case path.SharePointService:
|
||||
if category != path.LibrariesCategory {
|
||||
@ -895,7 +894,7 @@ func compareItem(
|
||||
}
|
||||
|
||||
// SharePoint libraries reuses OneDrive code.
|
||||
return compareOneDriveItem(t, expected, item, restorePermissions, rootDir)
|
||||
return compareDriveItem(t, expected, item, restorePermissions, rootDir)
|
||||
|
||||
default:
|
||||
assert.FailNowf(t, "unexpected service: %s", service.String())
|
||||
|
||||
@ -37,8 +37,8 @@ var (
|
||||
_ data.Stream = &Item{}
|
||||
_ data.StreamInfo = &Item{}
|
||||
_ data.StreamModTime = &Item{}
|
||||
_ data.Stream = &MetadataItem{}
|
||||
_ data.StreamModTime = &MetadataItem{}
|
||||
_ data.Stream = &metadata.Item{}
|
||||
_ data.StreamModTime = &metadata.Item{}
|
||||
)
|
||||
|
||||
// Collection represents a set of OneDrive objects retrieved from M365
|
||||
@ -306,53 +306,14 @@ type Item struct {
|
||||
info details.ItemInfo
|
||||
}
|
||||
|
||||
func (od *Item) UUID() string {
|
||||
return od.id
|
||||
}
|
||||
|
||||
func (od *Item) ToReader() io.ReadCloser {
|
||||
return od.data
|
||||
}
|
||||
|
||||
// Deleted implements an interface function. However, OneDrive items are marked
|
||||
// as deleted by adding them to the exclude list so this can always return
|
||||
// false.
|
||||
func (od Item) Deleted() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (od *Item) Info() details.ItemInfo {
|
||||
return od.info
|
||||
}
|
||||
|
||||
func (od *Item) ModTime() time.Time {
|
||||
return od.info.Modified()
|
||||
}
|
||||
|
||||
type MetadataItem struct {
|
||||
id string
|
||||
data io.ReadCloser
|
||||
modTime time.Time
|
||||
}
|
||||
|
||||
func (od *MetadataItem) UUID() string {
|
||||
return od.id
|
||||
}
|
||||
|
||||
func (od *MetadataItem) ToReader() io.ReadCloser {
|
||||
return od.data
|
||||
}
|
||||
|
||||
// Deleted implements an interface function. However, OneDrive items are marked
|
||||
// as deleted by adding them to the exclude list so this can always return
|
||||
// false.
|
||||
func (od MetadataItem) Deleted() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (od *MetadataItem) ModTime() time.Time {
|
||||
return od.modTime
|
||||
}
|
||||
func (i Item) Deleted() bool { return false }
|
||||
func (i *Item) UUID() string { return i.id }
|
||||
func (i *Item) ToReader() io.ReadCloser { return i.data }
|
||||
func (i *Item) Info() details.ItemInfo { return i.info }
|
||||
func (i *Item) ModTime() time.Time { return i.info.Modified() }
|
||||
|
||||
// getDriveItemContent fetch drive item's contents with retries
|
||||
func (oc *Collection) getDriveItemContent(
|
||||
@ -602,12 +563,12 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) {
|
||||
return progReader, nil
|
||||
})
|
||||
|
||||
oc.data <- &MetadataItem{
|
||||
id: metaFileName + metaSuffix,
|
||||
data: metaReader,
|
||||
oc.data <- &metadata.Item{
|
||||
ID: metaFileName + metaSuffix,
|
||||
Data: metaReader,
|
||||
// Metadata file should always use the latest time as
|
||||
// permissions change does not update mod time.
|
||||
modTime: time.Now(),
|
||||
Mod: time.Now(),
|
||||
}
|
||||
|
||||
// Item read successfully, add to collection
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
package metadata
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ItemMeta contains metadata about the Item. It gets stored in a
|
||||
// separate file in kopia
|
||||
type Metadata struct {
|
||||
@ -10,3 +15,17 @@ type Metadata struct {
|
||||
SharingMode SharingMode `json:"permissionMode,omitempty"`
|
||||
Permissions []Permission `json:"permissions,omitempty"`
|
||||
}
|
||||
|
||||
type Item struct {
|
||||
ID string
|
||||
Data io.ReadCloser
|
||||
Mod time.Time
|
||||
}
|
||||
|
||||
// Deleted implements an interface function. However, OneDrive items are marked
|
||||
// as deleted by adding them to the exclude list so this can always return
|
||||
// false.
|
||||
func (i *Item) Deleted() bool { return false }
|
||||
func (i *Item) UUID() string { return i.ID }
|
||||
func (i *Item) ToReader() io.ReadCloser { return i.Data }
|
||||
func (i *Item) ModTime() time.Time { return i.Mod }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user