mirror of
https://github.com/rclone/rclone.git
synced 2025-12-06 00:03:32 +00:00
Compare commits
2 Commits
v1.68.0
...
fix-vfs-mo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a66ed9315 | ||
|
|
f07abea072 |
@@ -322,7 +322,9 @@ func (f *File) ModTime() (modTime time.Time) {
|
||||
}
|
||||
// Read the modtime from a dirty item if it exists
|
||||
if f.d.vfs.Opt.CacheMode >= vfscommon.CacheModeMinimal {
|
||||
if item := f.d.vfs.cache.DirtyItem(f._path()); item != nil {
|
||||
item := f.d.vfs.cache.ItemOrNil(f._path())
|
||||
noModTime := f.d.f.Precision() == fs.ModTimeNotSupported
|
||||
if item != nil && (item.IsDirty() || noModTime) {
|
||||
modTime, err := item.GetModTime()
|
||||
if err != nil {
|
||||
fs.Errorf(f._path(), "ModTime: Item GetModTime failed: %v", err)
|
||||
|
||||
@@ -294,14 +294,22 @@ func (c *Cache) put(name string, item *Item) (oldItem *Item) {
|
||||
return oldItem
|
||||
}
|
||||
|
||||
// ItemOrNil returns the Item if it exists in the cache otherwise it
|
||||
// returns nil.
|
||||
//
|
||||
// name should be a remote path not an osPath
|
||||
func (c *Cache) ItemOrNil(name string) (item *Item) {
|
||||
name = clean(name)
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
return c.item[name]
|
||||
}
|
||||
|
||||
// InUse returns whether the name is in use in the cache
|
||||
//
|
||||
// name should be a remote path not an osPath
|
||||
func (c *Cache) InUse(name string) bool {
|
||||
name = clean(name)
|
||||
c.mu.Lock()
|
||||
item := c.item[name]
|
||||
c.mu.Unlock()
|
||||
item := c.ItemOrNil(name)
|
||||
if item == nil {
|
||||
return false
|
||||
}
|
||||
@@ -313,10 +321,7 @@ func (c *Cache) InUse(name string) bool {
|
||||
//
|
||||
// name should be a remote path not an osPath
|
||||
func (c *Cache) DirtyItem(name string) (item *Item) {
|
||||
name = clean(name)
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
item = c.item[name]
|
||||
item = c.ItemOrNil(name)
|
||||
if item != nil && !item.IsDirty() {
|
||||
item = nil
|
||||
}
|
||||
|
||||
@@ -1223,7 +1223,7 @@ func (item *Item) setModTime(modTime time.Time) {
|
||||
item.mu.Unlock()
|
||||
}
|
||||
|
||||
// GetModTime of the cache file
|
||||
// GetModTime of the cache item
|
||||
func (item *Item) GetModTime() (modTime time.Time, err error) {
|
||||
// defer log.Trace(item.name, "modTime=%v", modTime)("")
|
||||
item.mu.Lock()
|
||||
@@ -1231,6 +1231,9 @@ func (item *Item) GetModTime() (modTime time.Time, err error) {
|
||||
fi, err := item._stat()
|
||||
if err == nil {
|
||||
modTime = fi.ModTime()
|
||||
item.info.ModTime = modTime
|
||||
} else {
|
||||
modTime = item.info.ModTime
|
||||
}
|
||||
return modTime, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user