webdav: fail soft on time parsing errors
The time format provided by webdav servers seems to vary wildly from that specified in the RFC - rclone already parses times in 5 different formats! If an unparseable time is found, then fail softly logging an ERROR (just once) but returning the epoch. This will mean that webdav servers with bad time formats will still be usable by rclone.
This commit is contained in:
parent
3de7ad5223
commit
df1faa9a8f
1 changed files with 14 additions and 0 deletions
|
@ -6,7 +6,10 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ncw/rclone/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -148,6 +151,8 @@ var timeFormats = []string{
|
||||||
time.RFC3339, // Wed, 31 Oct 2018 13:57:11 CET (as used by komfortcloud.de)
|
time.RFC3339, // Wed, 31 Oct 2018 13:57:11 CET (as used by komfortcloud.de)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var oneTimeError sync.Once
|
||||||
|
|
||||||
// UnmarshalXML turns XML into a Time
|
// UnmarshalXML turns XML into a Time
|
||||||
func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
||||||
var v string
|
var v string
|
||||||
|
@ -171,5 +176,14 @@ func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
oneTimeError.Do(func() {
|
||||||
|
fs.Errorf(nil, "Failed to parse time %q - using the epoch", v)
|
||||||
|
})
|
||||||
|
// Return the epoch instead
|
||||||
|
*t = Time(time.Unix(0, 0))
|
||||||
|
// ignore error
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue