llb: add timestamp override to fileop

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
docker-19.03
Tonis Tiigi 2019-02-01 10:52:53 -08:00
parent 5b4841f308
commit 431d11dda3
4 changed files with 353 additions and 165 deletions

View File

@ -4,6 +4,7 @@ import (
_ "crypto/sha256"
"os"
"path"
"time"
"github.com/moby/buildkit/solver/pb"
digest "github.com/opencontainers/go-digest"
@ -149,6 +150,7 @@ func (a *fileActionMkdir) toProtoAction(parent string, base pb.InputIndex) pb.Is
Mode: int32(a.mode & 0777),
MakeParents: a.info.MakeParents,
Owner: a.info.ChownOpt.marshal(base),
Timestamp: marshalTime(a.info.CreatedTime),
},
}
}
@ -180,6 +182,7 @@ func WithParents(b bool) MkdirOption {
type MkdirInfo struct {
MakeParents bool
ChownOpt *ChownOpt
CreatedTime *time.Time
}
func (mi *MkdirInfo) SetMkdirOption(mi2 *MkdirInfo) {
@ -260,7 +263,8 @@ type MkfileOption interface {
}
type MkfileInfo struct {
ChownOpt *ChownOpt
ChownOpt *ChownOpt
CreatedTime *time.Time
}
func (mi *MkfileInfo) SetMkfileOption(mi2 *MkfileInfo) {
@ -279,10 +283,11 @@ type fileActionMkfile struct {
func (a *fileActionMkfile) toProtoAction(parent string, base pb.InputIndex) pb.IsFileAction {
return &pb.FileAction_Mkfile{
Mkfile: &pb.FileActionMkFile{
Path: normalizePath(parent, a.file),
Mode: int32(a.mode & 0777),
Data: a.dt,
Owner: a.info.ChownOpt.marshal(base),
Path: normalizePath(parent, a.file),
Mode: int32(a.mode & 0777),
Data: a.dt,
Owner: a.info.ChownOpt.marshal(base),
Timestamp: marshalTime(a.info.CreatedTime),
},
}
}
@ -391,6 +396,7 @@ type CopyInfo struct {
AllowWildcard bool
AllowEmptyWildcard bool
ChownOpt *ChownOpt
CreatedTime *time.Time
}
func (mi *CopyInfo) SetCopyOption(mi2 *CopyInfo) {
@ -418,6 +424,7 @@ func (a *fileActionCopy) toProtoAction(parent string, base pb.InputIndex) pb.IsF
DirCopyContents: a.info.CopyDirContentsOnly,
AttemptUnpack: a.info.AttemptUnpack,
CreateDestPath: a.info.CreateDestPath,
Timestamp: marshalTime(a.info.CreatedTime),
}
if a.info.Mode != nil {
c.Mode = int32(*a.info.Mode)
@ -441,6 +448,31 @@ func (c *fileActionCopy) sourcePath() string {
return p
}
type CreatedTime time.Time
func WithCreatedTime(t time.Time) CreatedTime {
return CreatedTime(t)
}
func (c CreatedTime) SetMkdirOption(mi *MkdirInfo) {
mi.CreatedTime = (*time.Time)(&c)
}
func (c CreatedTime) SetMkfileOption(mi *MkfileInfo) {
mi.CreatedTime = (*time.Time)(&c)
}
func (c CreatedTime) SetCopyOption(mi *CopyInfo) {
mi.CreatedTime = (*time.Time)(&c)
}
func marshalTime(t *time.Time) int64 {
if t == nil {
return -1
}
return t.UnixNano()
}
type FileOp struct {
MarshalCache
action *FileAction

View File

@ -2,6 +2,7 @@ package llb
import (
"testing"
"time"
"github.com/moby/buildkit/solver/pb"
digest "github.com/opencontainers/go-digest"
@ -39,6 +40,7 @@ func TestFileMkdir(t *testing.T) {
require.Equal(t, "/foo", mkdir.Path)
require.Equal(t, 0700, int(mkdir.Mode))
require.Equal(t, int64(-1), mkdir.Timestamp)
}
func TestFileMkdirChain(t *testing.T) {
@ -126,6 +128,7 @@ func TestFileMkfile(t *testing.T) {
require.Equal(t, "/foo", mkdir.Path)
require.Equal(t, 0700, int(mkdir.Mode))
require.Equal(t, "data", string(mkdir.Data))
require.Equal(t, int64(-1), mkdir.Timestamp)
}
func TestFileRm(t *testing.T) {
@ -270,6 +273,7 @@ func TestFileCopy(t *testing.T) {
require.Equal(t, "/etc/foo", copy.Src)
require.Equal(t, "/tmp/bar", copy.Dest)
require.Equal(t, int64(-1), copy.Timestamp)
}
func TestFileCopyFromAction(t *testing.T) {
@ -560,6 +564,48 @@ func TestFileCopyOwner(t *testing.T) {
require.Equal(t, -1, int(copy.Owner.Group.Input))
}
func TestFileCreatedTime(t *testing.T) {
t.Parallel()
dt := time.Now()
dt2 := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
dt3 := time.Date(2019, time.November, 10, 23, 0, 0, 0, time.UTC)
st := Image("foo").File(
Mkdir("/foo", 0700, WithCreatedTime(dt)).
Mkfile("bar", 0600, []byte{}, WithCreatedTime(dt2)).
Copy(Scratch(), "src", "dst", WithCreatedTime(dt3)))
def, err := st.Marshal()
require.NoError(t, err)
m, arr := parseDef(t, def.Def)
require.Equal(t, 3, len(arr))
dgst, idx := last(t, arr)
require.Equal(t, 0, idx)
require.Equal(t, m[dgst], arr[1])
f := arr[1].Op.(*pb.Op_File).File
require.Equal(t, len(arr[1].Inputs), 1)
require.Equal(t, m[arr[1].Inputs[0].Digest], arr[0])
require.Equal(t, 0, int(arr[1].Inputs[0].Index))
require.Equal(t, 3, len(f.Actions))
action := f.Actions[0]
mkdir := action.Action.(*pb.FileAction_Mkdir).Mkdir
require.Equal(t, dt.UnixNano(), mkdir.Timestamp)
action = f.Actions[1]
mkfile := action.Action.(*pb.FileAction_Mkfile).Mkfile
require.Equal(t, dt2.UnixNano(), mkfile.Timestamp)
action = f.Actions[2]
copy := action.Action.(*pb.FileAction_Copy).Copy
require.Equal(t, dt3.UnixNano(), copy.Timestamp)
}
func parseDef(t *testing.T, def [][]byte) (map[digest.Digest]pb.Op, []pb.Op) {
m := map[digest.Digest]pb.Op{}
arr := make([]pb.Op, 0, len(def))

View File

@ -54,7 +54,7 @@ func (x NetMode) String() string {
return proto.EnumName(NetMode_name, int32(x))
}
func (NetMode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{0}
return fileDescriptor_ops_5b0fc877b949f769, []int{0}
}
// MountType defines a type of a mount from a supported set
@ -87,7 +87,7 @@ func (x MountType) String() string {
return proto.EnumName(MountType_name, int32(x))
}
func (MountType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{1}
return fileDescriptor_ops_5b0fc877b949f769, []int{1}
}
// CacheSharingOpt defines different sharing modes for cache mount
@ -117,7 +117,7 @@ func (x CacheSharingOpt) String() string {
return proto.EnumName(CacheSharingOpt_name, int32(x))
}
func (CacheSharingOpt) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{2}
return fileDescriptor_ops_5b0fc877b949f769, []int{2}
}
// Op represents a vertex of the LLB DAG.
@ -138,7 +138,7 @@ func (m *Op) Reset() { *m = Op{} }
func (m *Op) String() string { return proto.CompactTextString(m) }
func (*Op) ProtoMessage() {}
func (*Op) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{0}
return fileDescriptor_ops_5b0fc877b949f769, []int{0}
}
func (m *Op) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -368,7 +368,7 @@ func (m *Platform) Reset() { *m = Platform{} }
func (m *Platform) String() string { return proto.CompactTextString(m) }
func (*Platform) ProtoMessage() {}
func (*Platform) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{1}
return fileDescriptor_ops_5b0fc877b949f769, []int{1}
}
func (m *Platform) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -440,7 +440,7 @@ func (m *Input) Reset() { *m = Input{} }
func (m *Input) String() string { return proto.CompactTextString(m) }
func (*Input) ProtoMessage() {}
func (*Input) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{2}
return fileDescriptor_ops_5b0fc877b949f769, []int{2}
}
func (m *Input) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -476,7 +476,7 @@ func (m *ExecOp) Reset() { *m = ExecOp{} }
func (m *ExecOp) String() string { return proto.CompactTextString(m) }
func (*ExecOp) ProtoMessage() {}
func (*ExecOp) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{3}
return fileDescriptor_ops_5b0fc877b949f769, []int{3}
}
func (m *ExecOp) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -538,7 +538,7 @@ func (m *Meta) Reset() { *m = Meta{} }
func (m *Meta) String() string { return proto.CompactTextString(m) }
func (*Meta) ProtoMessage() {}
func (*Meta) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{4}
return fileDescriptor_ops_5b0fc877b949f769, []int{4}
}
func (m *Meta) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -622,7 +622,7 @@ func (m *Mount) Reset() { *m = Mount{} }
func (m *Mount) String() string { return proto.CompactTextString(m) }
func (*Mount) ProtoMessage() {}
func (*Mount) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{5}
return fileDescriptor_ops_5b0fc877b949f769, []int{5}
}
func (m *Mount) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -708,7 +708,7 @@ func (m *CacheOpt) Reset() { *m = CacheOpt{} }
func (m *CacheOpt) String() string { return proto.CompactTextString(m) }
func (*CacheOpt) ProtoMessage() {}
func (*CacheOpt) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{6}
return fileDescriptor_ops_5b0fc877b949f769, []int{6}
}
func (m *CacheOpt) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -766,7 +766,7 @@ func (m *SecretOpt) Reset() { *m = SecretOpt{} }
func (m *SecretOpt) String() string { return proto.CompactTextString(m) }
func (*SecretOpt) ProtoMessage() {}
func (*SecretOpt) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{7}
return fileDescriptor_ops_5b0fc877b949f769, []int{7}
}
func (m *SecretOpt) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -845,7 +845,7 @@ func (m *SSHOpt) Reset() { *m = SSHOpt{} }
func (m *SSHOpt) String() string { return proto.CompactTextString(m) }
func (*SSHOpt) ProtoMessage() {}
func (*SSHOpt) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{8}
return fileDescriptor_ops_5b0fc877b949f769, []int{8}
}
func (m *SSHOpt) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -918,7 +918,7 @@ func (m *SourceOp) Reset() { *m = SourceOp{} }
func (m *SourceOp) String() string { return proto.CompactTextString(m) }
func (*SourceOp) ProtoMessage() {}
func (*SourceOp) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{9}
return fileDescriptor_ops_5b0fc877b949f769, []int{9}
}
func (m *SourceOp) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -970,7 +970,7 @@ func (m *BuildOp) Reset() { *m = BuildOp{} }
func (m *BuildOp) String() string { return proto.CompactTextString(m) }
func (*BuildOp) ProtoMessage() {}
func (*BuildOp) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{10}
return fileDescriptor_ops_5b0fc877b949f769, []int{10}
}
func (m *BuildOp) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1025,7 +1025,7 @@ func (m *BuildInput) Reset() { *m = BuildInput{} }
func (m *BuildInput) String() string { return proto.CompactTextString(m) }
func (*BuildInput) ProtoMessage() {}
func (*BuildInput) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{11}
return fileDescriptor_ops_5b0fc877b949f769, []int{11}
}
func (m *BuildInput) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1066,7 +1066,7 @@ func (m *OpMetadata) Reset() { *m = OpMetadata{} }
func (m *OpMetadata) String() string { return proto.CompactTextString(m) }
func (*OpMetadata) ProtoMessage() {}
func (*OpMetadata) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{12}
return fileDescriptor_ops_5b0fc877b949f769, []int{12}
}
func (m *OpMetadata) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1127,7 +1127,7 @@ func (m *ExportCache) Reset() { *m = ExportCache{} }
func (m *ExportCache) String() string { return proto.CompactTextString(m) }
func (*ExportCache) ProtoMessage() {}
func (*ExportCache) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{13}
return fileDescriptor_ops_5b0fc877b949f769, []int{13}
}
func (m *ExportCache) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1170,7 +1170,7 @@ func (m *ProxyEnv) Reset() { *m = ProxyEnv{} }
func (m *ProxyEnv) String() string { return proto.CompactTextString(m) }
func (*ProxyEnv) ProtoMessage() {}
func (*ProxyEnv) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{14}
return fileDescriptor_ops_5b0fc877b949f769, []int{14}
}
func (m *ProxyEnv) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1232,7 +1232,7 @@ func (m *WorkerConstraints) Reset() { *m = WorkerConstraints{} }
func (m *WorkerConstraints) String() string { return proto.CompactTextString(m) }
func (*WorkerConstraints) ProtoMessage() {}
func (*WorkerConstraints) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{15}
return fileDescriptor_ops_5b0fc877b949f769, []int{15}
}
func (m *WorkerConstraints) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1277,7 +1277,7 @@ func (m *Definition) Reset() { *m = Definition{} }
func (m *Definition) String() string { return proto.CompactTextString(m) }
func (*Definition) ProtoMessage() {}
func (*Definition) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{16}
return fileDescriptor_ops_5b0fc877b949f769, []int{16}
}
func (m *Definition) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1325,7 +1325,7 @@ func (m *HostIP) Reset() { *m = HostIP{} }
func (m *HostIP) String() string { return proto.CompactTextString(m) }
func (*HostIP) ProtoMessage() {}
func (*HostIP) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{17}
return fileDescriptor_ops_5b0fc877b949f769, []int{17}
}
func (m *HostIP) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1372,7 +1372,7 @@ func (m *FileOp) Reset() { *m = FileOp{} }
func (m *FileOp) String() string { return proto.CompactTextString(m) }
func (*FileOp) ProtoMessage() {}
func (*FileOp) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{18}
return fileDescriptor_ops_5b0fc877b949f769, []int{18}
}
func (m *FileOp) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1420,7 +1420,7 @@ func (m *FileAction) Reset() { *m = FileAction{} }
func (m *FileAction) String() string { return proto.CompactTextString(m) }
func (*FileAction) ProtoMessage() {}
func (*FileAction) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{19}
return fileDescriptor_ops_5b0fc877b949f769, []int{19}
}
func (m *FileAction) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1627,13 +1627,14 @@ type FileActionCopy struct {
CreateDestPath bool `protobuf:"varint,9,opt,name=createDestPath,proto3" json:"createDestPath,omitempty"`
AllowWildcard bool `protobuf:"varint,10,opt,name=allowWildcard,proto3" json:"allowWildcard,omitempty"`
AllowEmptyWildcard bool `protobuf:"varint,11,opt,name=allowEmptyWildcard,proto3" json:"allowEmptyWildcard,omitempty"`
Timestamp int64 `protobuf:"varint,12,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
}
func (m *FileActionCopy) Reset() { *m = FileActionCopy{} }
func (m *FileActionCopy) String() string { return proto.CompactTextString(m) }
func (*FileActionCopy) ProtoMessage() {}
func (*FileActionCopy) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{20}
return fileDescriptor_ops_5b0fc877b949f769, []int{20}
}
func (m *FileActionCopy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1728,18 +1729,26 @@ func (m *FileActionCopy) GetAllowEmptyWildcard() bool {
return false
}
func (m *FileActionCopy) GetTimestamp() int64 {
if m != nil {
return m.Timestamp
}
return 0
}
type FileActionMkFile struct {
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Mode int32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"`
Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
Owner *ChownOpt `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Mode int32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"`
Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
Owner *ChownOpt `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
}
func (m *FileActionMkFile) Reset() { *m = FileActionMkFile{} }
func (m *FileActionMkFile) String() string { return proto.CompactTextString(m) }
func (*FileActionMkFile) ProtoMessage() {}
func (*FileActionMkFile) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{21}
return fileDescriptor_ops_5b0fc877b949f769, []int{21}
}
func (m *FileActionMkFile) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1792,18 +1801,26 @@ func (m *FileActionMkFile) GetOwner() *ChownOpt {
return nil
}
func (m *FileActionMkFile) GetTimestamp() int64 {
if m != nil {
return m.Timestamp
}
return 0
}
type FileActionMkDir struct {
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
Mode int32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"`
MakeParents bool `protobuf:"varint,3,opt,name=makeParents,proto3" json:"makeParents,omitempty"`
Owner *ChownOpt `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
}
func (m *FileActionMkDir) Reset() { *m = FileActionMkDir{} }
func (m *FileActionMkDir) String() string { return proto.CompactTextString(m) }
func (*FileActionMkDir) ProtoMessage() {}
func (*FileActionMkDir) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{22}
return fileDescriptor_ops_5b0fc877b949f769, []int{22}
}
func (m *FileActionMkDir) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1856,6 +1873,13 @@ func (m *FileActionMkDir) GetOwner() *ChownOpt {
return nil
}
func (m *FileActionMkDir) GetTimestamp() int64 {
if m != nil {
return m.Timestamp
}
return 0
}
type FileActionRm struct {
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
AllowNotFound bool `protobuf:"varint,2,opt,name=allowNotFound,proto3" json:"allowNotFound,omitempty"`
@ -1866,7 +1890,7 @@ func (m *FileActionRm) Reset() { *m = FileActionRm{} }
func (m *FileActionRm) String() string { return proto.CompactTextString(m) }
func (*FileActionRm) ProtoMessage() {}
func (*FileActionRm) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{23}
return fileDescriptor_ops_5b0fc877b949f769, []int{23}
}
func (m *FileActionRm) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1921,7 +1945,7 @@ func (m *ChownOpt) Reset() { *m = ChownOpt{} }
func (m *ChownOpt) String() string { return proto.CompactTextString(m) }
func (*ChownOpt) ProtoMessage() {}
func (*ChownOpt) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{24}
return fileDescriptor_ops_5b0fc877b949f769, []int{24}
}
func (m *ChownOpt) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1970,7 +1994,7 @@ func (m *UserOpt) Reset() { *m = UserOpt{} }
func (m *UserOpt) String() string { return proto.CompactTextString(m) }
func (*UserOpt) ProtoMessage() {}
func (*UserOpt) Descriptor() ([]byte, []int) {
return fileDescriptor_ops_68b9efdb358e5df5, []int{25}
return fileDescriptor_ops_5b0fc877b949f769, []int{25}
}
func (m *UserOpt) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -3251,6 +3275,11 @@ func (m *FileActionCopy) MarshalTo(dAtA []byte) (int, error) {
}
i++
}
if m.Timestamp != 0 {
dAtA[i] = 0x60
i++
i = encodeVarintOps(dAtA, i, uint64(m.Timestamp))
}
return i, nil
}
@ -3296,6 +3325,11 @@ func (m *FileActionMkFile) MarshalTo(dAtA []byte) (int, error) {
}
i += n23
}
if m.Timestamp != 0 {
dAtA[i] = 0x28
i++
i = encodeVarintOps(dAtA, i, uint64(m.Timestamp))
}
return i, nil
}
@ -3345,6 +3379,11 @@ func (m *FileActionMkDir) MarshalTo(dAtA []byte) (int, error) {
}
i += n24
}
if m.Timestamp != 0 {
dAtA[i] = 0x28
i++
i = encodeVarintOps(dAtA, i, uint64(m.Timestamp))
}
return i, nil
}
@ -4080,6 +4119,9 @@ func (m *FileActionCopy) Size() (n int) {
if m.AllowEmptyWildcard {
n += 2
}
if m.Timestamp != 0 {
n += 1 + sovOps(uint64(m.Timestamp))
}
return n
}
@ -4104,6 +4146,9 @@ func (m *FileActionMkFile) Size() (n int) {
l = m.Owner.Size()
n += 1 + l + sovOps(uint64(l))
}
if m.Timestamp != 0 {
n += 1 + sovOps(uint64(m.Timestamp))
}
return n
}
@ -4127,6 +4172,9 @@ func (m *FileActionMkDir) Size() (n int) {
l = m.Owner.Size()
n += 1 + l + sovOps(uint64(l))
}
if m.Timestamp != 0 {
n += 1 + sovOps(uint64(m.Timestamp))
}
return n
}
@ -7962,6 +8010,25 @@ func (m *FileActionCopy) Unmarshal(dAtA []byte) error {
}
}
m.AllowEmptyWildcard = bool(v != 0)
case 12:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
}
m.Timestamp = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowOps
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Timestamp |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipOps(dAtA[iNdEx:])
@ -8124,6 +8191,25 @@ func (m *FileActionMkFile) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
}
m.Timestamp = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowOps
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Timestamp |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipOps(dAtA[iNdEx:])
@ -8275,6 +8361,25 @@ func (m *FileActionMkDir) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
}
m.Timestamp = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowOps
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Timestamp |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipOps(dAtA[iNdEx:])
@ -8753,124 +8858,126 @@ var (
ErrIntOverflowOps = fmt.Errorf("proto: integer overflow")
)
func init() { proto.RegisterFile("ops.proto", fileDescriptor_ops_68b9efdb358e5df5) }
func init() { proto.RegisterFile("ops.proto", fileDescriptor_ops_5b0fc877b949f769) }
var fileDescriptor_ops_68b9efdb358e5df5 = []byte{
// 1851 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6e, 0x23, 0xc7,
0x11, 0x16, 0x87, 0xff, 0x45, 0x49, 0xcb, 0xb4, 0xed, 0x0d, 0xa3, 0x6c, 0x24, 0x79, 0xec, 0x18,
0xf4, 0xfe, 0x50, 0x80, 0x0c, 0xd8, 0x86, 0x0f, 0x41, 0x24, 0x91, 0x0b, 0x31, 0xce, 0x8a, 0x42,
0x73, 0x7f, 0x8e, 0x8b, 0xd1, 0x4c, 0x93, 0x1a, 0x90, 0x9c, 0x1e, 0xf4, 0x34, 0x57, 0xe2, 0x25,
0x01, 0xf6, 0x09, 0x02, 0x04, 0xc8, 0x3d, 0xc7, 0x3c, 0x44, 0xee, 0x3e, 0x1a, 0x41, 0x0e, 0x4e,
0x0e, 0x4e, 0xa0, 0x7d, 0x91, 0xa0, 0xaa, 0x7b, 0x38, 0x43, 0xad, 0x82, 0xd5, 0x22, 0x40, 0x4e,
0xac, 0xae, 0xfa, 0xba, 0xba, 0xba, 0xaa, 0xba, 0xaa, 0x86, 0x50, 0x97, 0x71, 0xd2, 0x89, 0x95,
0xd4, 0x92, 0x39, 0xf1, 0xd9, 0xd6, 0xa3, 0x71, 0xa8, 0xcf, 0xe7, 0x67, 0x1d, 0x5f, 0xce, 0xf6,
0xc6, 0x72, 0x2c, 0xf7, 0x48, 0x74, 0x36, 0x1f, 0xd1, 0x8a, 0x16, 0x44, 0x99, 0x2d, 0xee, 0x9f,
0x1d, 0x70, 0x06, 0x31, 0xfb, 0x18, 0x2a, 0x61, 0x14, 0xcf, 0x75, 0xd2, 0x2a, 0xec, 0x16, 0xdb,
0x8d, 0xfd, 0x7a, 0x27, 0x3e, 0xeb, 0xf4, 0x91, 0xc3, 0xad, 0x80, 0xed, 0x42, 0x49, 0x5c, 0x0a,
0xbf, 0xe5, 0xec, 0x16, 0xda, 0x8d, 0x7d, 0x40, 0x40, 0xef, 0x52, 0xf8, 0x83, 0xf8, 0x78, 0x8d,
0x93, 0x84, 0x7d, 0x06, 0x95, 0x44, 0xce, 0x95, 0x2f, 0x5a, 0x45, 0xc2, 0xac, 0x23, 0x66, 0x48,
0x1c, 0x42, 0x59, 0x29, 0x6a, 0x1a, 0x85, 0x53, 0xd1, 0x2a, 0x65, 0x9a, 0x1e, 0x87, 0x53, 0x83,
0x21, 0x09, 0xfb, 0x04, 0xca, 0x67, 0xf3, 0x70, 0x1a, 0xb4, 0xca, 0x04, 0x69, 0x20, 0xe4, 0x10,
0x19, 0x84, 0x31, 0x32, 0xd6, 0x86, 0x5a, 0x3c, 0xf5, 0xf4, 0x48, 0xaa, 0x59, 0x0b, 0xb2, 0x03,
0x4f, 0x2d, 0x8f, 0x2f, 0xa5, 0xec, 0x2b, 0x68, 0xf8, 0x32, 0x4a, 0xb4, 0xf2, 0xc2, 0x48, 0x27,
0xad, 0x06, 0x81, 0x3f, 0x42, 0xf0, 0x0b, 0xa9, 0x26, 0x42, 0x1d, 0x65, 0x42, 0x9e, 0x47, 0x1e,
0x96, 0xc0, 0x91, 0xb1, 0xfb, 0xa7, 0x02, 0xd4, 0x52, 0xad, 0xcc, 0x85, 0xf5, 0x03, 0xe5, 0x9f,
0x87, 0x5a, 0xf8, 0x7a, 0xae, 0x44, 0xab, 0xb0, 0x5b, 0x68, 0xd7, 0xf9, 0x0a, 0x8f, 0x6d, 0x82,
0x33, 0x18, 0x92, 0xa3, 0xea, 0xdc, 0x19, 0x0c, 0x59, 0x0b, 0xaa, 0xcf, 0x3d, 0x15, 0x7a, 0x91,
0x26, 0xcf, 0xd4, 0x79, 0xba, 0x64, 0xf7, 0xa0, 0x3e, 0x18, 0x3e, 0x17, 0x2a, 0x09, 0x65, 0x44,
0xfe, 0xa8, 0xf3, 0x8c, 0xc1, 0xb6, 0x01, 0x06, 0xc3, 0xc7, 0xc2, 0x43, 0xa5, 0x49, 0xab, 0xbc,
0x5b, 0x6c, 0xd7, 0x79, 0x8e, 0xe3, 0xfe, 0x0e, 0xca, 0x14, 0x23, 0xf6, 0x1b, 0xa8, 0x04, 0xe1,
0x58, 0x24, 0xda, 0x98, 0x73, 0xb8, 0xff, 0xdd, 0x8f, 0x3b, 0x6b, 0xff, 0xfc, 0x71, 0xe7, 0x7e,
0x2e, 0x19, 0x64, 0x2c, 0x22, 0x5f, 0x46, 0xda, 0x0b, 0x23, 0xa1, 0x92, 0xbd, 0xb1, 0x7c, 0x64,
0xb6, 0x74, 0xba, 0xf4, 0xc3, 0xad, 0x06, 0xf6, 0x39, 0x94, 0xc3, 0x28, 0x10, 0x97, 0x64, 0x7f,
0xf1, 0xf0, 0x03, 0xab, 0xaa, 0x31, 0x98, 0xeb, 0x78, 0xae, 0xfb, 0x28, 0xe2, 0x06, 0xe1, 0xc6,
0x50, 0x31, 0x29, 0xc0, 0xee, 0x41, 0x69, 0x26, 0xb4, 0x47, 0xc7, 0x37, 0xf6, 0x6b, 0xe8, 0xda,
0x27, 0x42, 0x7b, 0x9c, 0xb8, 0x98, 0x5d, 0x33, 0x39, 0x47, 0xd7, 0x3b, 0x59, 0x76, 0x3d, 0x41,
0x0e, 0xb7, 0x02, 0xf6, 0x4b, 0xa8, 0x46, 0x42, 0x5f, 0x48, 0x35, 0x21, 0x17, 0x6d, 0x9a, 0x98,
0x9f, 0x08, 0xfd, 0x44, 0x06, 0x82, 0xa7, 0x32, 0xf7, 0x2f, 0x05, 0x28, 0xa1, 0x62, 0xc6, 0xa0,
0xe4, 0xa9, 0xb1, 0x49, 0xd7, 0x3a, 0x27, 0x9a, 0x35, 0xa1, 0x28, 0xa2, 0x57, 0x74, 0x46, 0x9d,
0x23, 0x89, 0x1c, 0xff, 0x22, 0xb0, 0x4e, 0x47, 0x12, 0xf7, 0xcd, 0x13, 0xa1, 0xac, 0xaf, 0x89,
0x66, 0x9f, 0x43, 0x3d, 0x56, 0xf2, 0x72, 0xf1, 0x12, 0x77, 0x97, 0x73, 0x99, 0x84, 0xcc, 0x5e,
0xf4, 0x8a, 0xd7, 0x62, 0x4b, 0xb1, 0xfb, 0x00, 0xe2, 0x52, 0x2b, 0xef, 0x58, 0x26, 0x3a, 0x69,
0x55, 0xe8, 0x36, 0x94, 0xc0, 0xc8, 0xe8, 0x9f, 0xf2, 0x9c, 0xd4, 0xfd, 0x9b, 0x03, 0x65, 0xba,
0x24, 0x6b, 0xa3, 0x4b, 0xe3, 0xb9, 0x89, 0x4e, 0xf1, 0x90, 0x59, 0x97, 0x02, 0x05, 0x6f, 0xe9,
0x51, 0x0c, 0xe4, 0x16, 0xd4, 0x12, 0x31, 0x15, 0xbe, 0x96, 0xca, 0xe6, 0xcf, 0x72, 0x8d, 0xa6,
0x07, 0x18, 0x62, 0x73, 0x1b, 0xa2, 0xd9, 0x03, 0xa8, 0x48, 0x8a, 0x0b, 0x5d, 0xe8, 0xbf, 0x44,
0xcb, 0x42, 0x50, 0xb9, 0x12, 0x5e, 0x20, 0xa3, 0xe9, 0x82, 0xae, 0x59, 0xe3, 0xcb, 0x35, 0x7b,
0x00, 0x75, 0x8a, 0xc4, 0xd3, 0x45, 0x2c, 0x5a, 0x15, 0x8a, 0xc0, 0xc6, 0x32, 0x4a, 0xc8, 0xe4,
0x99, 0x1c, 0x5f, 0x9e, 0xef, 0xf9, 0xe7, 0x62, 0x10, 0xeb, 0xd6, 0x87, 0x99, 0xbf, 0x8e, 0x2c,
0x8f, 0x2f, 0xa5, 0xa8, 0x36, 0x11, 0xbe, 0x12, 0x1a, 0xa1, 0x1f, 0x11, 0x94, 0xd4, 0x0e, 0x53,
0x26, 0xcf, 0xe4, 0xcc, 0x85, 0xca, 0x70, 0x78, 0x8c, 0xc8, 0xbb, 0x59, 0x65, 0x30, 0x1c, 0x6e,
0x25, 0x6e, 0x1f, 0x6a, 0xe9, 0x31, 0xf8, 0xcc, 0xfa, 0x5d, 0xfb, 0x00, 0x9d, 0x7e, 0x97, 0x3d,
0x82, 0x6a, 0x72, 0xee, 0xa9, 0x30, 0x1a, 0x93, 0xef, 0x36, 0xf7, 0x3f, 0x58, 0x5a, 0x35, 0x34,
0x7c, 0xd4, 0x94, 0x62, 0x5c, 0x09, 0xf5, 0xa5, 0x19, 0x6f, 0xe9, 0x6a, 0x42, 0x71, 0x1e, 0x06,
0xa4, 0x67, 0x83, 0x23, 0x89, 0x9c, 0x71, 0x68, 0x72, 0x69, 0x83, 0x23, 0x89, 0x01, 0x99, 0xc9,
0xc0, 0xd4, 0xb1, 0x0d, 0x4e, 0x34, 0xfa, 0x58, 0xc6, 0x3a, 0x94, 0x91, 0x37, 0x4d, 0x7d, 0x9c,
0xae, 0xdd, 0x69, 0x7a, 0xbf, 0xff, 0xcb, 0x69, 0x7f, 0x2c, 0x40, 0x2d, 0x2d, 0xbe, 0x58, 0x49,
0xc2, 0x40, 0x44, 0x3a, 0x1c, 0x85, 0x42, 0xd9, 0x83, 0x73, 0x1c, 0xf6, 0x08, 0xca, 0x9e, 0xd6,
0x2a, 0x7d, 0xa0, 0x3f, 0xcd, 0x57, 0xee, 0xce, 0x01, 0x4a, 0x7a, 0x91, 0x56, 0x0b, 0x6e, 0x50,
0x5b, 0x5f, 0x03, 0x64, 0x4c, 0xb4, 0x75, 0x22, 0x16, 0x56, 0x2b, 0x92, 0xec, 0x43, 0x28, 0xbf,
0xf2, 0xa6, 0x73, 0x61, 0x73, 0xd8, 0x2c, 0xbe, 0x71, 0xbe, 0x2e, 0xb8, 0x7f, 0x75, 0xa0, 0x6a,
0x2b, 0x39, 0x7b, 0x08, 0x55, 0xaa, 0xe4, 0xd6, 0xa2, 0x9b, 0x1f, 0x46, 0x0a, 0x61, 0x7b, 0xcb,
0x16, 0x95, 0xb3, 0xd1, 0xaa, 0x32, 0xad, 0xca, 0xda, 0x98, 0x35, 0xac, 0x62, 0x20, 0x46, 0xb6,
0x17, 0x6d, 0x22, 0xba, 0x2b, 0x46, 0x61, 0x14, 0xa2, 0x7f, 0x38, 0x8a, 0xd8, 0xc3, 0xf4, 0xd6,
0x25, 0xd2, 0x78, 0x37, 0xaf, 0xf1, 0xed, 0x4b, 0xf7, 0xa1, 0x91, 0x3b, 0xe6, 0x86, 0x5b, 0x7f,
0x9a, 0xbf, 0xb5, 0x3d, 0x92, 0xd4, 0x99, 0x46, 0x9a, 0x79, 0xe1, 0x7f, 0xf0, 0xdf, 0x97, 0x00,
0x99, 0xca, 0xdb, 0x17, 0x16, 0xf7, 0x75, 0x11, 0x60, 0x10, 0x63, 0xe9, 0x0c, 0x3c, 0xaa, 0xc8,
0xeb, 0xe1, 0x38, 0x92, 0x4a, 0xbc, 0xa4, 0xa7, 0x4a, 0xfb, 0x6b, 0xbc, 0x61, 0x78, 0xf4, 0x62,
0xd8, 0x01, 0x34, 0x02, 0x91, 0xf8, 0x2a, 0xa4, 0x84, 0xb2, 0x4e, 0xdf, 0xc1, 0x3b, 0x65, 0x7a,
0x3a, 0xdd, 0x0c, 0x61, 0x7c, 0x95, 0xdf, 0xc3, 0xf6, 0x61, 0x5d, 0x5c, 0xc6, 0x52, 0x69, 0x7b,
0x8a, 0x69, 0xf8, 0x77, 0xcc, 0xe8, 0x80, 0x7c, 0x3a, 0x89, 0x37, 0x44, 0xb6, 0x60, 0x1e, 0x94,
0x7c, 0x2f, 0x36, 0xdd, 0xae, 0xb1, 0xdf, 0xba, 0x76, 0xde, 0x91, 0x17, 0x1b, 0xa7, 0x1d, 0x7e,
0x81, 0x77, 0x7d, 0xfd, 0xaf, 0x9d, 0x07, 0xb9, 0x16, 0x37, 0x93, 0x67, 0x8b, 0x3d, 0xca, 0x97,
0x49, 0xa8, 0xf7, 0xe6, 0x3a, 0x9c, 0xee, 0x79, 0x71, 0x88, 0xea, 0x70, 0x63, 0xbf, 0xcb, 0x49,
0xf5, 0xd6, 0xaf, 0xa0, 0x79, 0xdd, 0xee, 0xf7, 0x89, 0xc1, 0xd6, 0x57, 0x50, 0x5f, 0xda, 0xf1,
0xae, 0x8d, 0xb5, 0x7c, 0xf0, 0x3e, 0x81, 0x46, 0xee, 0xde, 0x08, 0x7c, 0x4e, 0x40, 0xe3, 0x7d,
0xb3, 0x70, 0x5f, 0xe3, 0xb4, 0x91, 0xf6, 0x9b, 0x5f, 0x00, 0x9c, 0x6b, 0x1d, 0xbf, 0xa4, 0x06,
0x64, 0x0f, 0xa9, 0x23, 0x87, 0x10, 0x6c, 0x07, 0x1a, 0xb8, 0x48, 0xac, 0xdc, 0x58, 0x4a, 0x3b,
0x12, 0x03, 0xf8, 0x39, 0xd4, 0x47, 0xcb, 0xed, 0xa6, 0x71, 0xd4, 0x46, 0xe9, 0xee, 0x9f, 0x41,
0x2d, 0x92, 0x56, 0x66, 0xfa, 0x61, 0x35, 0x92, 0x24, 0x72, 0x1f, 0xc0, 0x4f, 0xde, 0x1a, 0x8d,
0xd8, 0x5d, 0xa8, 0x8c, 0xc2, 0xa9, 0xa6, 0xe7, 0x8a, 0x2d, 0xd6, 0xae, 0xdc, 0x7f, 0x14, 0x00,
0xb2, 0xa7, 0x85, 0x1e, 0xc1, 0x77, 0x87, 0x98, 0x75, 0xf3, 0xce, 0xa6, 0x50, 0x9b, 0xd9, 0x08,
0xda, 0x3c, 0xba, 0xb7, 0xfa, 0x1c, 0x3b, 0x69, 0x80, 0x4d, 0x6c, 0xf7, 0x6d, 0x6c, 0xdf, 0x67,
0x7c, 0x59, 0x9e, 0xb0, 0xf5, 0x2d, 0x6c, 0xac, 0xa8, 0xbb, 0xe5, 0x4b, 0xcd, 0xb2, 0x2c, 0x1f,
0xb2, 0x87, 0x50, 0x31, 0xad, 0x1d, 0xeb, 0x2f, 0x52, 0x56, 0x0d, 0xd1, 0x54, 0xc7, 0x4f, 0xd3,
0x41, 0xaf, 0x7f, 0xea, 0xee, 0x43, 0xc5, 0x4c, 0xb2, 0xac, 0x0d, 0x55, 0xcf, 0xc7, 0xab, 0xa5,
0xe5, 0x6a, 0x33, 0x1d, 0x73, 0x0f, 0x88, 0xcd, 0x53, 0xb1, 0xfb, 0x77, 0x07, 0x20, 0xe3, 0xbf,
0xc7, 0xac, 0xf0, 0x0d, 0x6c, 0x26, 0xc2, 0x97, 0x51, 0xe0, 0xa9, 0x05, 0x49, 0xed, 0xc4, 0x76,
0xd3, 0x96, 0x6b, 0xc8, 0xdc, 0xdc, 0x50, 0x7c, 0xf7, 0xdc, 0xd0, 0x86, 0x92, 0x2f, 0xe3, 0x85,
0x7d, 0xbe, 0x6c, 0xf5, 0x22, 0x47, 0x32, 0x5e, 0xe0, 0xdc, 0x8e, 0x08, 0xd6, 0x81, 0xca, 0x6c,
0x42, 0xb3, 0xbd, 0x19, 0xa3, 0x3e, 0x5c, 0xc5, 0x3e, 0x99, 0x20, 0x8d, 0x5f, 0x02, 0x06, 0xc5,
0x1e, 0x40, 0x79, 0x36, 0x09, 0x42, 0x45, 0x13, 0x47, 0xc3, 0xf4, 0xeb, 0x3c, 0xbc, 0x1b, 0x2a,
0x9c, 0xf7, 0x09, 0xc3, 0x5c, 0x70, 0xd4, 0xac, 0x55, 0x25, 0x64, 0xf3, 0x9a, 0x37, 0x67, 0xc7,
0x6b, 0xdc, 0x51, 0xb3, 0xc3, 0x1a, 0x54, 0x8c, 0x5f, 0xdd, 0x2b, 0x07, 0x36, 0x57, 0xad, 0xc4,
0x3c, 0x48, 0x94, 0x9f, 0xe6, 0x41, 0xa2, 0xfc, 0xe5, 0x48, 0xe5, 0xe4, 0x46, 0x2a, 0x17, 0xca,
0xf2, 0x22, 0xb2, 0x23, 0x62, 0x3a, 0xd9, 0x9c, 0xcb, 0x8b, 0x08, 0x87, 0x07, 0x23, 0x5a, 0xf6,
0x62, 0xbc, 0x65, 0xd9, 0xf6, 0xe2, 0x4f, 0x61, 0x63, 0x24, 0xa7, 0x53, 0x79, 0x31, 0x5c, 0xcc,
0xa6, 0x61, 0x34, 0xa1, 0x3b, 0xd5, 0xf8, 0x2a, 0x93, 0xb5, 0xe1, 0x4e, 0x10, 0x2a, 0x34, 0xe7,
0x48, 0x46, 0x5a, 0xe0, 0x4c, 0x5c, 0x25, 0xdc, 0x75, 0x36, 0xea, 0xf3, 0xb4, 0x16, 0xb3, 0x58,
0x3f, 0x8b, 0x62, 0xcf, 0x9f, 0xb4, 0x6a, 0x46, 0xdf, 0x0a, 0x93, 0x7d, 0x06, 0x9b, 0xbe, 0x12,
0x9e, 0x16, 0x5d, 0x91, 0xe8, 0x53, 0x4f, 0x9f, 0xb7, 0xea, 0x04, 0xbb, 0xc6, 0x25, 0x6d, 0x68,
0xc7, 0x8b, 0x70, 0x1a, 0xf8, 0x9e, 0x0a, 0xe8, 0x8b, 0x09, 0xb5, 0xe5, 0x99, 0xac, 0x03, 0x8c,
0x18, 0xbd, 0x59, 0xac, 0x17, 0x4b, 0x68, 0x83, 0xa0, 0x37, 0x48, 0x5c, 0x05, 0xcd, 0xeb, 0xd1,
0x45, 0xdf, 0xc4, 0x68, 0x87, 0x7d, 0x27, 0x48, 0x2f, 0xfd, 0xe5, 0xe4, 0xfc, 0x85, 0xbe, 0xc7,
0x82, 0x80, 0x09, 0xb8, 0xce, 0x89, 0xbe, 0x8d, 0xef, 0xdd, 0xdf, 0xc3, 0x9d, 0x6b, 0x29, 0x72,
0xeb, 0x23, 0x77, 0xa1, 0x31, 0xf3, 0x26, 0xe2, 0xd4, 0x53, 0xe4, 0xf8, 0xa2, 0x69, 0x7a, 0x39,
0xd6, 0xad, 0x0c, 0x88, 0x60, 0x3d, 0x9f, 0x79, 0x37, 0x9e, 0x9e, 0xba, 0xfb, 0x44, 0xea, 0xc7,
0x72, 0x1e, 0x05, 0xb6, 0x17, 0xac, 0x32, 0xdf, 0x0e, 0x4a, 0xf1, 0x86, 0xa0, 0xb8, 0x27, 0x50,
0x4b, 0x4d, 0x60, 0x3b, 0xf6, 0xf3, 0xa5, 0x90, 0x7d, 0x17, 0x3f, 0x4b, 0x84, 0x42, 0xeb, 0xcc,
0xb7, 0xcc, 0xc7, 0x50, 0x1e, 0x2b, 0x39, 0x8f, 0x6d, 0x65, 0x5b, 0x41, 0x18, 0x89, 0xfb, 0x02,
0xaa, 0x96, 0x83, 0xa6, 0x47, 0xde, 0x2c, 0xfd, 0x88, 0x25, 0x3a, 0x2b, 0x40, 0xce, 0xbb, 0x0a,
0xd0, 0x26, 0x38, 0x76, 0x44, 0x2d, 0x73, 0x27, 0x0c, 0xee, 0xb7, 0xa1, 0x6a, 0x3f, 0xd8, 0x58,
0x1d, 0xca, 0xcf, 0x4e, 0x86, 0xbd, 0xa7, 0xcd, 0x35, 0x56, 0x83, 0xd2, 0xf1, 0x60, 0xf8, 0xb4,
0x59, 0x40, 0xea, 0x64, 0x70, 0xd2, 0x6b, 0x3a, 0xf7, 0x7f, 0x0d, 0xf5, 0xe5, 0x87, 0x05, 0xb2,
0x0f, 0xfb, 0x27, 0xdd, 0xe6, 0x1a, 0x03, 0xa8, 0x0c, 0x7b, 0x47, 0xbc, 0x87, 0xe0, 0x2a, 0x14,
0x87, 0xc3, 0xe3, 0xa6, 0x83, 0xaa, 0x8e, 0x0e, 0x8e, 0x8e, 0x7b, 0xcd, 0x22, 0x92, 0x4f, 0x9f,
0x9c, 0x3e, 0x1e, 0x36, 0x4b, 0xf7, 0xbf, 0x84, 0x3b, 0xd7, 0x06, 0x7b, 0xda, 0x7d, 0x7c, 0xc0,
0x7b, 0xa8, 0xa9, 0x01, 0xd5, 0x53, 0xde, 0x7f, 0x7e, 0xf0, 0xb4, 0xd7, 0x2c, 0xa0, 0xe0, 0xb7,
0x83, 0xa3, 0x6f, 0x7b, 0xdd, 0xa6, 0x73, 0x78, 0xef, 0xbb, 0xab, 0xed, 0xc2, 0xf7, 0x57, 0xdb,
0x85, 0x1f, 0xae, 0xb6, 0x0b, 0xff, 0xbe, 0xda, 0x2e, 0xfc, 0xe1, 0xcd, 0xf6, 0xda, 0xf7, 0x6f,
0xb6, 0xd7, 0x7e, 0x78, 0xb3, 0xbd, 0x76, 0x56, 0xa1, 0x3f, 0x45, 0xbe, 0xf8, 0x4f, 0x00, 0x00,
0x00, 0xff, 0xff, 0xd1, 0xbc, 0xef, 0x81, 0x54, 0x11, 0x00, 0x00,
var fileDescriptor_ops_5b0fc877b949f769 = []byte{
// 1877 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0x1b, 0xc7,
0x15, 0x17, 0x97, 0x7f, 0xf7, 0x51, 0x92, 0xd9, 0x89, 0xe3, 0xb2, 0xaa, 0x2b, 0x29, 0x9b, 0x34,
0x60, 0x24, 0x9b, 0x02, 0x14, 0x20, 0x09, 0x72, 0x28, 0x2a, 0x91, 0x34, 0xc4, 0xa6, 0x12, 0x85,
0xa1, 0x6c, 0x1f, 0x8d, 0xd5, 0xee, 0x90, 0x5a, 0x90, 0xbb, 0xb3, 0x98, 0x1d, 0x5a, 0xe2, 0xa5,
0x28, 0xfc, 0x09, 0x02, 0x14, 0xe8, 0xad, 0x87, 0x1e, 0xfb, 0x21, 0x7a, 0xcf, 0x31, 0x28, 0x7a,
0x48, 0x7b, 0x70, 0x0b, 0xfb, 0x8b, 0x14, 0x6f, 0x66, 0x96, 0xbb, 0xa4, 0x55, 0xd8, 0x46, 0x8b,
0x9c, 0x38, 0xf3, 0x7b, 0xbf, 0x79, 0xf3, 0xe6, 0xbd, 0x37, 0xf3, 0xde, 0x12, 0x6c, 0x1e, 0x27,
0xed, 0x58, 0x70, 0xc9, 0x89, 0x15, 0x5f, 0x6e, 0x3d, 0x1c, 0x07, 0xf2, 0x6a, 0x76, 0xd9, 0xf6,
0x78, 0x78, 0x30, 0xe6, 0x63, 0x7e, 0xa0, 0x44, 0x97, 0xb3, 0x91, 0x9a, 0xa9, 0x89, 0x1a, 0xe9,
0x25, 0xce, 0x9f, 0x2d, 0xb0, 0x06, 0x31, 0xf9, 0x08, 0x2a, 0x41, 0x14, 0xcf, 0x64, 0xd2, 0x2c,
0xec, 0x16, 0x5b, 0xf5, 0x43, 0xbb, 0x1d, 0x5f, 0xb6, 0xfb, 0x88, 0x50, 0x23, 0x20, 0xbb, 0x50,
0x62, 0x37, 0xcc, 0x6b, 0x5a, 0xbb, 0x85, 0x56, 0xfd, 0x10, 0x90, 0xd0, 0xbb, 0x61, 0xde, 0x20,
0x3e, 0x59, 0xa3, 0x4a, 0x42, 0x3e, 0x85, 0x4a, 0xc2, 0x67, 0xc2, 0x63, 0xcd, 0xa2, 0xe2, 0xac,
0x23, 0x67, 0xa8, 0x10, 0xc5, 0x32, 0x52, 0xd4, 0x34, 0x0a, 0xa6, 0xac, 0x59, 0xca, 0x34, 0x3d,
0x0a, 0xa6, 0x9a, 0xa3, 0x24, 0xe4, 0x63, 0x28, 0x5f, 0xce, 0x82, 0xa9, 0xdf, 0x2c, 0x2b, 0x4a,
0x1d, 0x29, 0xc7, 0x08, 0x28, 0x8e, 0x96, 0x91, 0x16, 0xd4, 0xe2, 0xa9, 0x2b, 0x47, 0x5c, 0x84,
0x4d, 0xc8, 0x36, 0x3c, 0x37, 0x18, 0x5d, 0x48, 0xc9, 0x97, 0x50, 0xf7, 0x78, 0x94, 0x48, 0xe1,
0x06, 0x91, 0x4c, 0x9a, 0x75, 0x45, 0xfe, 0x10, 0xc9, 0x4f, 0xb9, 0x98, 0x30, 0xd1, 0xc9, 0x84,
0x34, 0xcf, 0x3c, 0x2e, 0x81, 0xc5, 0x63, 0xe7, 0x8f, 0x05, 0xa8, 0xa5, 0x5a, 0x89, 0x03, 0xeb,
0x47, 0xc2, 0xbb, 0x0a, 0x24, 0xf3, 0xe4, 0x4c, 0xb0, 0x66, 0x61, 0xb7, 0xd0, 0xb2, 0xe9, 0x12,
0x46, 0x36, 0xc1, 0x1a, 0x0c, 0x95, 0xa3, 0x6c, 0x6a, 0x0d, 0x86, 0xa4, 0x09, 0xd5, 0x27, 0xae,
0x08, 0xdc, 0x48, 0x2a, 0xcf, 0xd8, 0x34, 0x9d, 0x92, 0xfb, 0x60, 0x0f, 0x86, 0x4f, 0x98, 0x48,
0x02, 0x1e, 0x29, 0x7f, 0xd8, 0x34, 0x03, 0xc8, 0x36, 0xc0, 0x60, 0xf8, 0x88, 0xb9, 0xa8, 0x34,
0x69, 0x96, 0x77, 0x8b, 0x2d, 0x9b, 0xe6, 0x10, 0xe7, 0x77, 0x50, 0x56, 0x31, 0x22, 0xbf, 0x81,
0x8a, 0x1f, 0x8c, 0x59, 0x22, 0xb5, 0x39, 0xc7, 0x87, 0xdf, 0xbd, 0xdc, 0x59, 0xfb, 0xe7, 0xcb,
0x9d, 0xbd, 0x5c, 0x32, 0xf0, 0x98, 0x45, 0x1e, 0x8f, 0xa4, 0x1b, 0x44, 0x4c, 0x24, 0x07, 0x63,
0xfe, 0x50, 0x2f, 0x69, 0x77, 0xd5, 0x0f, 0x35, 0x1a, 0xc8, 0x67, 0x50, 0x0e, 0x22, 0x9f, 0xdd,
0x28, 0xfb, 0x8b, 0xc7, 0x1f, 0x18, 0x55, 0xf5, 0xc1, 0x4c, 0xc6, 0x33, 0xd9, 0x47, 0x11, 0xd5,
0x0c, 0x27, 0x86, 0x8a, 0x4e, 0x01, 0x72, 0x1f, 0x4a, 0x21, 0x93, 0xae, 0xda, 0xbe, 0x7e, 0x58,
0x43, 0xd7, 0x9e, 0x32, 0xe9, 0x52, 0x85, 0x62, 0x76, 0x85, 0x7c, 0x86, 0xae, 0xb7, 0xb2, 0xec,
0x3a, 0x45, 0x84, 0x1a, 0x01, 0xf9, 0x25, 0x54, 0x23, 0x26, 0xaf, 0xb9, 0x98, 0x28, 0x17, 0x6d,
0xea, 0x98, 0x9f, 0x31, 0x79, 0xca, 0x7d, 0x46, 0x53, 0x99, 0xf3, 0x97, 0x02, 0x94, 0x50, 0x31,
0x21, 0x50, 0x72, 0xc5, 0x58, 0xa7, 0xab, 0x4d, 0xd5, 0x98, 0x34, 0xa0, 0xc8, 0xa2, 0xe7, 0x6a,
0x0f, 0x9b, 0xe2, 0x10, 0x11, 0xef, 0xda, 0x37, 0x4e, 0xc7, 0x21, 0xae, 0x9b, 0x25, 0x4c, 0x18,
0x5f, 0xab, 0x31, 0xf9, 0x0c, 0xec, 0x58, 0xf0, 0x9b, 0xf9, 0x33, 0x5c, 0x5d, 0xce, 0x65, 0x12,
0x82, 0xbd, 0xe8, 0x39, 0xad, 0xc5, 0x66, 0x44, 0xf6, 0x00, 0xd8, 0x8d, 0x14, 0xee, 0x09, 0x4f,
0x64, 0xd2, 0xac, 0xa8, 0xd3, 0xa8, 0x04, 0x46, 0xa0, 0x7f, 0x4e, 0x73, 0x52, 0xe7, 0x6f, 0x16,
0x94, 0xd5, 0x21, 0x49, 0x0b, 0x5d, 0x1a, 0xcf, 0x74, 0x74, 0x8a, 0xc7, 0xc4, 0xb8, 0x14, 0x54,
0xf0, 0x16, 0x1e, 0xc5, 0x40, 0x6e, 0x41, 0x2d, 0x61, 0x53, 0xe6, 0x49, 0x2e, 0x4c, 0xfe, 0x2c,
0xe6, 0x68, 0xba, 0x8f, 0x21, 0xd6, 0xa7, 0x51, 0x63, 0xb2, 0x0f, 0x15, 0xae, 0xe2, 0xa2, 0x0e,
0xf4, 0x5f, 0xa2, 0x65, 0x28, 0xa8, 0x5c, 0x30, 0xd7, 0xe7, 0xd1, 0x74, 0xae, 0x8e, 0x59, 0xa3,
0x8b, 0x39, 0xd9, 0x07, 0x5b, 0x45, 0xe2, 0x62, 0x1e, 0xb3, 0x66, 0x45, 0x45, 0x60, 0x63, 0x11,
0x25, 0x04, 0x69, 0x26, 0xc7, 0x9b, 0xe7, 0xb9, 0xde, 0x15, 0x1b, 0xc4, 0xb2, 0x79, 0x37, 0xf3,
0x57, 0xc7, 0x60, 0x74, 0x21, 0x45, 0xb5, 0x09, 0xf3, 0x04, 0x93, 0x48, 0xfd, 0x50, 0x51, 0x95,
0xda, 0x61, 0x0a, 0xd2, 0x4c, 0x4e, 0x1c, 0xa8, 0x0c, 0x87, 0x27, 0xc8, 0xbc, 0x97, 0xbd, 0x0c,
0x1a, 0xa1, 0x46, 0xe2, 0xf4, 0xa1, 0x96, 0x6e, 0x83, 0xd7, 0xac, 0xdf, 0x35, 0x17, 0xd0, 0xea,
0x77, 0xc9, 0x43, 0xa8, 0x26, 0x57, 0xae, 0x08, 0xa2, 0xb1, 0xf2, 0xdd, 0xe6, 0xe1, 0x07, 0x0b,
0xab, 0x86, 0x1a, 0x47, 0x4d, 0x29, 0xc7, 0xe1, 0x60, 0x2f, 0xcc, 0x78, 0x43, 0x57, 0x03, 0x8a,
0xb3, 0xc0, 0x57, 0x7a, 0x36, 0x28, 0x0e, 0x11, 0x19, 0x07, 0x3a, 0x97, 0x36, 0x28, 0x0e, 0x31,
0x20, 0x21, 0xf7, 0xf5, 0x3b, 0xb6, 0x41, 0xd5, 0x18, 0x7d, 0xcc, 0x63, 0x19, 0xf0, 0xc8, 0x9d,
0xa6, 0x3e, 0x4e, 0xe7, 0xce, 0x34, 0x3d, 0xdf, 0x8f, 0xb2, 0xdb, 0x1f, 0x0a, 0x50, 0x4b, 0x1f,
0x5f, 0x7c, 0x49, 0x02, 0x9f, 0x45, 0x32, 0x18, 0x05, 0x4c, 0x98, 0x8d, 0x73, 0x08, 0x79, 0x08,
0x65, 0x57, 0x4a, 0x91, 0x5e, 0xd0, 0x9f, 0xe6, 0x5f, 0xee, 0xf6, 0x11, 0x4a, 0x7a, 0x91, 0x14,
0x73, 0xaa, 0x59, 0x5b, 0x5f, 0x01, 0x64, 0x20, 0xda, 0x3a, 0x61, 0x73, 0xa3, 0x15, 0x87, 0xe4,
0x2e, 0x94, 0x9f, 0xbb, 0xd3, 0x19, 0x33, 0x39, 0xac, 0x27, 0x5f, 0x5b, 0x5f, 0x15, 0x9c, 0xbf,
0x5a, 0x50, 0x35, 0x2f, 0x39, 0x79, 0x00, 0x55, 0xf5, 0x92, 0x1b, 0x8b, 0x6e, 0xbf, 0x18, 0x29,
0x85, 0x1c, 0x2c, 0x4a, 0x54, 0xce, 0x46, 0xa3, 0x4a, 0x97, 0x2a, 0x63, 0x63, 0x56, 0xb0, 0x8a,
0x3e, 0x1b, 0x99, 0x5a, 0xb4, 0x89, 0xec, 0x2e, 0x1b, 0x05, 0x51, 0x80, 0xfe, 0xa1, 0x28, 0x22,
0x0f, 0xd2, 0x53, 0x97, 0x94, 0xc6, 0x7b, 0x79, 0x8d, 0x6f, 0x1e, 0xba, 0x0f, 0xf5, 0xdc, 0x36,
0xb7, 0x9c, 0xfa, 0x93, 0xfc, 0xa9, 0xcd, 0x96, 0x4a, 0x9d, 0x2e, 0xa4, 0x99, 0x17, 0xfe, 0x07,
0xff, 0x7d, 0x01, 0x90, 0xa9, 0x7c, 0xf7, 0x87, 0xc5, 0x79, 0x51, 0x04, 0x18, 0xc4, 0xf8, 0x74,
0xfa, 0xae, 0x7a, 0x91, 0xd7, 0x83, 0x71, 0xc4, 0x05, 0x7b, 0xa6, 0xae, 0xaa, 0x5a, 0x5f, 0xa3,
0x75, 0x8d, 0xa9, 0x1b, 0x43, 0x8e, 0xa0, 0xee, 0xb3, 0xc4, 0x13, 0x81, 0x4a, 0x28, 0xe3, 0xf4,
0x1d, 0x3c, 0x53, 0xa6, 0xa7, 0xdd, 0xcd, 0x18, 0xda, 0x57, 0xf9, 0x35, 0xe4, 0x10, 0xd6, 0xd9,
0x4d, 0xcc, 0x85, 0x34, 0xbb, 0xe8, 0x82, 0x7f, 0x47, 0xb7, 0x0e, 0x88, 0xab, 0x9d, 0x68, 0x9d,
0x65, 0x13, 0xe2, 0x42, 0xc9, 0x73, 0x63, 0x5d, 0xed, 0xea, 0x87, 0xcd, 0x95, 0xfd, 0x3a, 0x6e,
0xac, 0x9d, 0x76, 0xfc, 0x39, 0x9e, 0xf5, 0xc5, 0xbf, 0x76, 0xf6, 0x73, 0x25, 0x2e, 0xe4, 0x97,
0xf3, 0x03, 0x95, 0x2f, 0x93, 0x40, 0x1e, 0xcc, 0x64, 0x30, 0x3d, 0x70, 0xe3, 0x00, 0xd5, 0xe1,
0xc2, 0x7e, 0x97, 0x2a, 0xd5, 0x5b, 0xbf, 0x82, 0xc6, 0xaa, 0xdd, 0xef, 0x13, 0x83, 0xad, 0x2f,
0xc1, 0x5e, 0xd8, 0xf1, 0xb6, 0x85, 0xb5, 0x7c, 0xf0, 0x3e, 0x86, 0x7a, 0xee, 0xdc, 0x48, 0x7c,
0xa2, 0x88, 0xda, 0xfb, 0x7a, 0xe2, 0xbc, 0xc0, 0x6e, 0x23, 0xad, 0x37, 0xbf, 0x00, 0xb8, 0x92,
0x32, 0x7e, 0xa6, 0x0a, 0x90, 0xd9, 0xc4, 0x46, 0x44, 0x31, 0xc8, 0x0e, 0xd4, 0x71, 0x92, 0x18,
0xb9, 0xb6, 0x54, 0xad, 0x48, 0x34, 0xe1, 0xe7, 0x60, 0x8f, 0x16, 0xcb, 0x75, 0xe1, 0xa8, 0x8d,
0xd2, 0xd5, 0x3f, 0x83, 0x5a, 0xc4, 0x8d, 0x4c, 0xd7, 0xc3, 0x6a, 0xc4, 0x95, 0xc8, 0xd9, 0x87,
0x9f, 0xbc, 0xd1, 0x1a, 0x91, 0x7b, 0x50, 0x19, 0x05, 0x53, 0xa9, 0xae, 0x2b, 0x96, 0x58, 0x33,
0x73, 0xfe, 0x51, 0x00, 0xc8, 0xae, 0x16, 0x7a, 0x04, 0xef, 0x1d, 0x72, 0xd6, 0xf5, 0x3d, 0x9b,
0x42, 0x2d, 0x34, 0x11, 0x34, 0x79, 0x74, 0x7f, 0xf9, 0x3a, 0xb6, 0xd3, 0x00, 0xeb, 0xd8, 0x1e,
0x9a, 0xd8, 0xbe, 0x4f, 0xfb, 0xb2, 0xd8, 0x61, 0xeb, 0x1b, 0xd8, 0x58, 0x52, 0xf7, 0x8e, 0x37,
0x35, 0xcb, 0xb2, 0x7c, 0xc8, 0x1e, 0x40, 0x45, 0x97, 0x76, 0x7c, 0x7f, 0x71, 0x64, 0xd4, 0xa8,
0xb1, 0x7a, 0xc7, 0xcf, 0xd3, 0x46, 0xaf, 0x7f, 0xee, 0x1c, 0x42, 0x45, 0x77, 0xb2, 0xa4, 0x05,
0x55, 0xd7, 0xc3, 0xa3, 0xa5, 0xcf, 0xd5, 0x66, 0xda, 0xe6, 0x1e, 0x29, 0x98, 0xa6, 0x62, 0xe7,
0xef, 0x16, 0x40, 0x86, 0xbf, 0x47, 0xaf, 0xf0, 0x35, 0x6c, 0x26, 0xcc, 0xe3, 0x91, 0xef, 0x8a,
0xb9, 0x92, 0x9a, 0x8e, 0xed, 0xb6, 0x25, 0x2b, 0xcc, 0x5c, 0xdf, 0x50, 0x7c, 0x7b, 0xdf, 0xd0,
0x82, 0x92, 0xc7, 0xe3, 0xb9, 0xb9, 0xbe, 0x64, 0xf9, 0x20, 0x1d, 0x1e, 0xcf, 0xb1, 0x6f, 0x47,
0x06, 0x69, 0x43, 0x25, 0x9c, 0xa8, 0xde, 0x5e, 0xb7, 0x51, 0x77, 0x97, 0xb9, 0xa7, 0x13, 0x1c,
0xe3, 0x97, 0x80, 0x66, 0x91, 0x7d, 0x28, 0x87, 0x13, 0x3f, 0x10, 0xaa, 0xe3, 0xa8, 0xeb, 0x7a,
0x9d, 0xa7, 0x77, 0x03, 0x81, 0xfd, 0xbe, 0xe2, 0x10, 0x07, 0x2c, 0x11, 0x36, 0xab, 0x8a, 0xd9,
0x58, 0xf1, 0x66, 0x78, 0xb2, 0x46, 0x2d, 0x11, 0x1e, 0xd7, 0xa0, 0xa2, 0xfd, 0xea, 0xfc, 0xbe,
0x08, 0x9b, 0xcb, 0x56, 0x62, 0x1e, 0x24, 0xc2, 0x4b, 0xf3, 0x20, 0x11, 0xde, 0xa2, 0xa5, 0xb2,
0x72, 0x2d, 0x95, 0x03, 0x65, 0x7e, 0x1d, 0x99, 0x16, 0x31, 0xed, 0x6c, 0xae, 0xf8, 0x75, 0x84,
0xcd, 0x83, 0x16, 0x2d, 0x6a, 0x31, 0x9e, 0xb2, 0x6c, 0x6a, 0xf1, 0x27, 0xb0, 0x31, 0xe2, 0xd3,
0x29, 0xbf, 0x1e, 0xce, 0xc3, 0x69, 0x10, 0x4d, 0xd4, 0x99, 0x6a, 0x74, 0x19, 0x24, 0x2d, 0xb8,
0xe3, 0x07, 0x02, 0xcd, 0xe9, 0xf0, 0x48, 0x32, 0xec, 0x89, 0xab, 0x8a, 0xb7, 0x0a, 0xa3, 0x3e,
0x57, 0x4a, 0x16, 0xc6, 0xf2, 0x71, 0x14, 0xbb, 0xde, 0xa4, 0x59, 0xd3, 0xfa, 0x96, 0x40, 0xf2,
0x29, 0x6c, 0x7a, 0x82, 0xb9, 0x92, 0x75, 0x59, 0x22, 0xcf, 0x5d, 0x79, 0xd5, 0xb4, 0x15, 0x6d,
0x05, 0x55, 0xda, 0xd0, 0x8e, 0xa7, 0xc1, 0xd4, 0xf7, 0x5c, 0xe1, 0xab, 0x2f, 0x26, 0xd4, 0x96,
0x07, 0x49, 0x1b, 0x88, 0x02, 0x7a, 0x61, 0x2c, 0xe7, 0x0b, 0x6a, 0x5d, 0x51, 0x6f, 0x91, 0xe0,
0xe7, 0x8b, 0x0c, 0x42, 0x96, 0x48, 0x37, 0x8c, 0x9b, 0xeb, 0x98, 0x49, 0x34, 0x03, 0x9c, 0x6f,
0x0b, 0xd0, 0x58, 0x0d, 0x3e, 0xba, 0x2e, 0x46, 0x33, 0xcd, 0x35, 0xc2, 0xf1, 0xc2, 0x9d, 0x56,
0xce, 0x9d, 0x18, 0x1a, 0x7c, 0x2f, 0x30, 0x3f, 0xd7, 0xa9, 0x1a, 0xbf, 0x53, 0x68, 0x96, 0x4c,
0x2a, 0xaf, 0x9a, 0xf4, 0xa7, 0x02, 0xdc, 0x59, 0x49, 0xb0, 0x77, 0xb6, 0x68, 0x17, 0xea, 0xa1,
0x3b, 0x61, 0xe7, 0xae, 0x50, 0x61, 0x2b, 0xea, 0x92, 0x99, 0x83, 0xfe, 0x0f, 0xf6, 0x45, 0xb0,
0x9e, 0xcf, 0xea, 0x5b, 0x6d, 0x4b, 0x43, 0x79, 0xc6, 0xe5, 0x23, 0x3e, 0x8b, 0x7c, 0x53, 0x67,
0x96, 0xc1, 0x37, 0x03, 0x5e, 0xbc, 0x25, 0xe0, 0xce, 0x19, 0xd4, 0x52, 0x03, 0xc9, 0x8e, 0xf9,
0x34, 0x2a, 0x64, 0xdf, 0xdc, 0x8f, 0x13, 0x26, 0xd0, 0x76, 0xfd, 0x9d, 0xf4, 0x11, 0x94, 0xc7,
0x82, 0xcf, 0x62, 0xf3, 0x6a, 0x2e, 0x31, 0xb4, 0xc4, 0x79, 0x0a, 0x55, 0x83, 0xa0, 0xe9, 0x91,
0x1b, 0xa6, 0x1f, 0xc8, 0x6a, 0x9c, 0x3d, 0x6e, 0xd6, 0xdb, 0x1e, 0xb7, 0x4d, 0xb0, 0x4c, 0xfb,
0x5b, 0xa6, 0x56, 0xe0, 0xef, 0xb5, 0xa0, 0x6a, 0x3e, 0x06, 0x89, 0x0d, 0xe5, 0xc7, 0x67, 0xc3,
0xde, 0x45, 0x63, 0x8d, 0xd4, 0xa0, 0x74, 0x32, 0x18, 0x5e, 0x34, 0x0a, 0x38, 0x3a, 0x1b, 0x9c,
0xf5, 0x1a, 0xd6, 0xde, 0xaf, 0xc1, 0x5e, 0x7c, 0xb4, 0x20, 0x7c, 0xdc, 0x3f, 0xeb, 0x36, 0xd6,
0x08, 0x40, 0x65, 0xd8, 0xeb, 0xd0, 0x1e, 0x92, 0xab, 0x50, 0x1c, 0x0e, 0x4f, 0x1a, 0x16, 0xaa,
0xea, 0x1c, 0x75, 0x4e, 0x7a, 0x8d, 0x22, 0x0e, 0x2f, 0x4e, 0xcf, 0x1f, 0x0d, 0x1b, 0xa5, 0xbd,
0x2f, 0xe0, 0xce, 0xca, 0x47, 0x83, 0x5a, 0x7d, 0x72, 0x44, 0x7b, 0xa8, 0xa9, 0x0e, 0xd5, 0x73,
0xda, 0x7f, 0x72, 0x74, 0xd1, 0x6b, 0x14, 0x50, 0xf0, 0xdb, 0x41, 0xe7, 0x9b, 0x5e, 0xb7, 0x61,
0x1d, 0xdf, 0xff, 0xee, 0xd5, 0x76, 0xe1, 0xfb, 0x57, 0xdb, 0x85, 0x1f, 0x5e, 0x6d, 0x17, 0xfe,
0xfd, 0x6a, 0xbb, 0xf0, 0xed, 0xeb, 0xed, 0xb5, 0xef, 0x5f, 0x6f, 0xaf, 0xfd, 0xf0, 0x7a, 0x7b,
0xed, 0xb2, 0xa2, 0xfe, 0x70, 0xf9, 0xfc, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x80, 0xe3, 0x0a,
0xb5, 0xb0, 0x11, 0x00, 0x00,
}

View File

@ -221,13 +221,14 @@ message FileActionCopy {
string src = 1;
string dest = 2;
ChownOpt owner = 4;
int32 mode = 5;
int32 mode = 5;
bool followSymlink = 6;
bool dirCopyContents = 7;
bool attemptUnpack = 8;
bool createDestPath = 9;
bool allowWildcard = 10;
bool allowEmptyWildcard = 11;
bool attemptUnpack = 8;
bool createDestPath = 9;
bool allowWildcard = 10;
bool allowEmptyWildcard = 11;
int64 timestamp = 12;
}
message FileActionMkFile {
@ -235,19 +236,21 @@ message FileActionMkFile {
int32 mode = 2;
bytes data = 3;
ChownOpt owner = 4;
int64 timestamp = 5;
}
message FileActionMkDir {
string path = 1;
int32 mode = 2;
bool makeParents = 3;
bool makeParents = 3;
ChownOpt owner = 4;
int64 timestamp = 5;
}
message FileActionRm {
string path = 1;
bool allowNotFound = 2;
bool allowWildcard = 3;
bool allowNotFound = 2;
bool allowWildcard = 3;
}
message ChownOpt {