mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-23 03:18:59 +00:00
Merge pull request #1357 from calmh/truncate-v3
Simplify FileInfoTruncated
This commit is contained in:
commit
dc05275670
@ -810,8 +810,7 @@ func toNeedSlice(fs []db.FileInfoTruncated) []map[string]interface{} {
|
|||||||
"Modified": file.Modified,
|
"Modified": file.Modified,
|
||||||
"Version": file.Version,
|
"Version": file.Version,
|
||||||
"LocalVersion": file.LocalVersion,
|
"LocalVersion": file.LocalVersion,
|
||||||
"NumBlocks": file.NumBlocks,
|
"Size": file.Size(),
|
||||||
"Size": db.BlocksToSize(int(file.NumBlocks)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return output
|
return output
|
||||||
|
@ -13,69 +13,33 @@
|
|||||||
// You should have received a copy of the GNU General Public License along
|
// You should have received a copy of the GNU General Public License along
|
||||||
// with this program. If not, see <http://www.gnu.org/licenses/>.
|
// with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
//go:generate -command genxdr go run ../../Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go
|
|
||||||
//go:generate genxdr -o truncated_xdr.go truncated.go
|
|
||||||
|
|
||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import "github.com/syncthing/protocol"
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/syncthing/protocol"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Used for unmarshalling a FileInfo structure but skipping the block list.
|
|
||||||
type FileInfoTruncated struct {
|
type FileInfoTruncated struct {
|
||||||
Name string // max:8192
|
protocol.FileInfo
|
||||||
Flags uint32
|
ActualSize int64
|
||||||
Modified int64
|
|
||||||
Version int64
|
|
||||||
LocalVersion int64
|
|
||||||
NumBlocks int32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToTruncated(file protocol.FileInfo) FileInfoTruncated {
|
func ToTruncated(file protocol.FileInfo) FileInfoTruncated {
|
||||||
return FileInfoTruncated{
|
t := FileInfoTruncated{
|
||||||
Name: file.Name,
|
FileInfo: file,
|
||||||
Flags: file.Flags,
|
ActualSize: file.Size(),
|
||||||
Modified: file.Modified,
|
|
||||||
Version: file.Version,
|
|
||||||
LocalVersion: file.LocalVersion,
|
|
||||||
NumBlocks: int32(len(file.Blocks)),
|
|
||||||
}
|
}
|
||||||
|
t.FileInfo.Blocks = nil
|
||||||
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f FileInfoTruncated) String() string {
|
func (f *FileInfoTruncated) UnmarshalXDR(bs []byte) error {
|
||||||
return fmt.Sprintf("File{Name:%q, Flags:0%o, Modified:%d, Version:%d, Size:%d, NumBlocks:%d}",
|
err := f.FileInfo.UnmarshalXDR(bs)
|
||||||
f.Name, f.Flags, f.Modified, f.Version, f.Size(), f.NumBlocks)
|
f.ActualSize = f.FileInfo.Size()
|
||||||
|
f.FileInfo.Blocks = nil
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a statistical guess on the size, not the exact figure
|
|
||||||
func (f FileInfoTruncated) Size() int64 {
|
func (f FileInfoTruncated) Size() int64 {
|
||||||
if f.IsDeleted() || f.IsDirectory() {
|
return f.ActualSize
|
||||||
return 128
|
|
||||||
}
|
|
||||||
return BlocksToSize(int(f.NumBlocks))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f FileInfoTruncated) IsDeleted() bool {
|
|
||||||
return f.Flags&protocol.FlagDeleted != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f FileInfoTruncated) IsInvalid() bool {
|
|
||||||
return f.Flags&protocol.FlagInvalid != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f FileInfoTruncated) IsDirectory() bool {
|
|
||||||
return f.Flags&protocol.FlagDirectory != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f FileInfoTruncated) IsSymlink() bool {
|
|
||||||
return f.Flags&protocol.FlagSymlink != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f FileInfoTruncated) HasPermissionBits() bool {
|
|
||||||
return f.Flags&protocol.FlagNoPermBits == 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func BlocksToSize(num int) int64 {
|
func BlocksToSize(num int) int64 {
|
||||||
|
@ -1,112 +0,0 @@
|
|||||||
// ************************************************************
|
|
||||||
// This file is automatically generated by genxdr. Do not edit.
|
|
||||||
// ************************************************************
|
|
||||||
|
|
||||||
package db
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/calmh/xdr"
|
|
||||||
)
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
FileInfoTruncated Structure:
|
|
||||||
|
|
||||||
0 1 2 3
|
|
||||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
| Length of Name |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
/ /
|
|
||||||
\ Name (variable length) \
|
|
||||||
/ /
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
| Flags |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
| |
|
|
||||||
+ Modified (64 bits) +
|
|
||||||
| |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
| |
|
|
||||||
+ Version (64 bits) +
|
|
||||||
| |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
| |
|
|
||||||
+ Local Version (64 bits) +
|
|
||||||
| |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
| Num Blocks |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
|
|
||||||
|
|
||||||
struct FileInfoTruncated {
|
|
||||||
string Name<8192>;
|
|
||||||
unsigned int Flags;
|
|
||||||
hyper Modified;
|
|
||||||
hyper Version;
|
|
||||||
hyper LocalVersion;
|
|
||||||
int NumBlocks;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
func (o FileInfoTruncated) EncodeXDR(w io.Writer) (int, error) {
|
|
||||||
var xw = xdr.NewWriter(w)
|
|
||||||
return o.encodeXDR(xw)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o FileInfoTruncated) MarshalXDR() ([]byte, error) {
|
|
||||||
return o.AppendXDR(make([]byte, 0, 128))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o FileInfoTruncated) MustMarshalXDR() []byte {
|
|
||||||
bs, err := o.MarshalXDR()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return bs
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o FileInfoTruncated) AppendXDR(bs []byte) ([]byte, error) {
|
|
||||||
var aw = xdr.AppendWriter(bs)
|
|
||||||
var xw = xdr.NewWriter(&aw)
|
|
||||||
_, err := o.encodeXDR(xw)
|
|
||||||
return []byte(aw), err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o FileInfoTruncated) encodeXDR(xw *xdr.Writer) (int, error) {
|
|
||||||
if l := len(o.Name); l > 8192 {
|
|
||||||
return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 8192)
|
|
||||||
}
|
|
||||||
xw.WriteString(o.Name)
|
|
||||||
xw.WriteUint32(o.Flags)
|
|
||||||
xw.WriteUint64(uint64(o.Modified))
|
|
||||||
xw.WriteUint64(uint64(o.Version))
|
|
||||||
xw.WriteUint64(uint64(o.LocalVersion))
|
|
||||||
xw.WriteUint32(uint32(o.NumBlocks))
|
|
||||||
return xw.Tot(), xw.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *FileInfoTruncated) DecodeXDR(r io.Reader) error {
|
|
||||||
xr := xdr.NewReader(r)
|
|
||||||
return o.decodeXDR(xr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *FileInfoTruncated) UnmarshalXDR(bs []byte) error {
|
|
||||||
var br = bytes.NewReader(bs)
|
|
||||||
var xr = xdr.NewReader(br)
|
|
||||||
return o.decodeXDR(xr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *FileInfoTruncated) decodeXDR(xr *xdr.Reader) error {
|
|
||||||
o.Name = xr.ReadStringMax(8192)
|
|
||||||
o.Flags = xr.ReadUint32()
|
|
||||||
o.Modified = int64(xr.ReadUint64())
|
|
||||||
o.Version = int64(xr.ReadUint64())
|
|
||||||
o.LocalVersion = int64(xr.ReadUint64())
|
|
||||||
o.NumBlocks = int32(xr.ReadUint32())
|
|
||||||
return xr.Error()
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user