// shortcutFile sets file mode and modification time, when that's the only // thing that has changed. func (f *rwFolder) shortcutFile(file protocol.FileInfo) error { realName := filepath.Join(f.dir, file.Name) if !f.ignorePermissions(file) { if err := os.Chmod(realName, os.FileMode(file.Permissions&0777)); err != nil { l.Infof("Puller (folder %q, file %q): shortcut: chmod: %v", f.folderID, file.Name, err) f.newError(file.Name, err) return err } } f.mtimeFS.Chtimes(realName, file.ModTime(), file.ModTime()) // never fails // This may have been a conflict. We should merge the version vectors so // that our clock doesn't move backwards. if cur, ok := f.model.CurrentFolderFile(f.folderID, file.Name); ok { file.Version = file.Version.Merge(cur.Version) } return nil }