mirror of
https://github.com/rclone/rclone.git
synced 2025-12-15 15:53:41 +00:00
Compare commits
2 Commits
fix-9037-m
...
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
|
// Read the modtime from a dirty item if it exists
|
||||||
if f.d.vfs.Opt.CacheMode >= vfscommon.CacheModeMinimal {
|
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()
|
modTime, err := item.GetModTime()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fs.Errorf(f._path(), "ModTime: Item GetModTime failed: %v", err)
|
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
|
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
|
// InUse returns whether the name is in use in the cache
|
||||||
//
|
//
|
||||||
// name should be a remote path not an osPath
|
// name should be a remote path not an osPath
|
||||||
func (c *Cache) InUse(name string) bool {
|
func (c *Cache) InUse(name string) bool {
|
||||||
name = clean(name)
|
item := c.ItemOrNil(name)
|
||||||
c.mu.Lock()
|
|
||||||
item := c.item[name]
|
|
||||||
c.mu.Unlock()
|
|
||||||
if item == nil {
|
if item == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -313,10 +321,7 @@ func (c *Cache) InUse(name string) bool {
|
|||||||
//
|
//
|
||||||
// name should be a remote path not an osPath
|
// name should be a remote path not an osPath
|
||||||
func (c *Cache) DirtyItem(name string) (item *Item) {
|
func (c *Cache) DirtyItem(name string) (item *Item) {
|
||||||
name = clean(name)
|
item = c.ItemOrNil(name)
|
||||||
c.mu.Lock()
|
|
||||||
defer c.mu.Unlock()
|
|
||||||
item = c.item[name]
|
|
||||||
if item != nil && !item.IsDirty() {
|
if item != nil && !item.IsDirty() {
|
||||||
item = nil
|
item = nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1223,7 +1223,7 @@ func (item *Item) setModTime(modTime time.Time) {
|
|||||||
item.mu.Unlock()
|
item.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetModTime of the cache file
|
// GetModTime of the cache item
|
||||||
func (item *Item) GetModTime() (modTime time.Time, err error) {
|
func (item *Item) GetModTime() (modTime time.Time, err error) {
|
||||||
// defer log.Trace(item.name, "modTime=%v", modTime)("")
|
// defer log.Trace(item.name, "modTime=%v", modTime)("")
|
||||||
item.mu.Lock()
|
item.mu.Lock()
|
||||||
@@ -1231,6 +1231,9 @@ func (item *Item) GetModTime() (modTime time.Time, err error) {
|
|||||||
fi, err := item._stat()
|
fi, err := item._stat()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
modTime = fi.ModTime()
|
modTime = fi.ModTime()
|
||||||
|
item.info.ModTime = modTime
|
||||||
|
} else {
|
||||||
|
modTime = item.info.ModTime
|
||||||
}
|
}
|
||||||
return modTime, nil
|
return modTime, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user