refactor: Disable broken symlink implementation for now to prepare for table-based reimplementation

This commit is contained in:
Felicitas Pojtinger
2022-01-20 23:48:59 +01:00
parent 204ed0b247
commit 9370ee4dd4
7 changed files with 867 additions and 868 deletions

View File

@@ -17,7 +17,7 @@ create table headers (
-- Name of file entry
name text not null primary key,
-- Target name of link (valid for TypeLink or TypeSymlink)
linkname text not null,
-- linkname text not null, -- FIXME: Handle linkname
-- Logical file size in bytes
size integer not null,
-- Permission and mode bits

View File

@@ -16,21 +16,21 @@ func ConfigHeaderToDBHeader(confighdr *config.Header) *models.Header {
Lastknownblock: confighdr.Lastknownblock,
Typeflag: confighdr.Typeflag,
Name: confighdr.Name,
Linkname: confighdr.Linkname,
Size: confighdr.Size,
Mode: confighdr.Mode,
UID: confighdr.UID,
Gid: confighdr.Gid,
Uname: confighdr.Uname,
Gname: confighdr.Gname,
Modtime: confighdr.Modtime,
Accesstime: confighdr.Accesstime,
Changetime: confighdr.Changetime,
Devmajor: confighdr.Devmajor,
Devminor: confighdr.Devminor,
Paxrecords: confighdr.Paxrecords,
Format: confighdr.Format,
Deleted: confighdr.Deleted,
// Linkname: confighdr.Linkname, // FIXME: Handle linkname
Size: confighdr.Size,
Mode: confighdr.Mode,
UID: confighdr.UID,
Gid: confighdr.Gid,
Uname: confighdr.Uname,
Gname: confighdr.Gname,
Modtime: confighdr.Modtime,
Accesstime: confighdr.Accesstime,
Changetime: confighdr.Changetime,
Devmajor: confighdr.Devmajor,
Devminor: confighdr.Devminor,
Paxrecords: confighdr.Paxrecords,
Format: confighdr.Format,
Deleted: confighdr.Deleted,
}
}
@@ -42,21 +42,21 @@ func DBHeaderToConfigHeader(dbhdr *models.Header) *config.Header {
Lastknownblock: dbhdr.Lastknownblock,
Typeflag: dbhdr.Typeflag,
Name: dbhdr.Name,
Linkname: dbhdr.Linkname,
Size: dbhdr.Size,
Mode: dbhdr.Mode,
UID: dbhdr.UID,
Gid: dbhdr.Gid,
Uname: dbhdr.Uname,
Gname: dbhdr.Gname,
Modtime: dbhdr.Modtime,
Accesstime: dbhdr.Accesstime,
Changetime: dbhdr.Changetime,
Devmajor: dbhdr.Devmajor,
Devminor: dbhdr.Devminor,
Paxrecords: dbhdr.Paxrecords,
Format: dbhdr.Format,
Deleted: dbhdr.Deleted,
// Linkname: dbhdr.Linkname, // FIXME: Handle linkname
Size: dbhdr.Size,
Mode: dbhdr.Mode,
UID: dbhdr.UID,
Gid: dbhdr.Gid,
Uname: dbhdr.Uname,
Gname: dbhdr.Gname,
Modtime: dbhdr.Modtime,
Accesstime: dbhdr.Accesstime,
Changetime: dbhdr.Changetime,
Devmajor: dbhdr.Devmajor,
Devminor: dbhdr.Devminor,
Paxrecords: dbhdr.Paxrecords,
Format: dbhdr.Format,
Deleted: dbhdr.Deleted,
}
}
@@ -70,9 +70,9 @@ func DBHeaderToTarHeader(dbhdr *models.Header) (*tar.Header, error) {
}
hdr := &tar.Header{
Typeflag: byte(dbhdr.Typeflag),
Name: dbhdr.Name,
Linkname: dbhdr.Linkname,
Typeflag: byte(dbhdr.Typeflag),
Name: dbhdr.Name,
// Linkname: dbhdr.Linkname, // FIXME: Handle linkname
Size: dbhdr.Size,
Mode: dbhdr.Mode,
Uid: int(dbhdr.UID),
@@ -104,20 +104,20 @@ func TarHeaderToDBHeader(record, lastKnownRecord, block, lastKnownBlock int64, t
Lastknownblock: lastKnownBlock,
Typeflag: int64(tarhdr.Typeflag),
Name: tarhdr.Name,
Linkname: tarhdr.Linkname,
Size: tarhdr.Size,
Mode: tarhdr.Mode,
UID: int64(tarhdr.Uid),
Gid: int64(tarhdr.Gid),
Uname: tarhdr.Uname,
Gname: tarhdr.Gname,
Modtime: tarhdr.ModTime,
Accesstime: tarhdr.AccessTime,
Changetime: tarhdr.ChangeTime,
Devmajor: tarhdr.Devmajor,
Devminor: tarhdr.Devminor,
Paxrecords: string(paxRecords),
Format: int64(tarhdr.Format),
// Linkname: tarhdr.Linkname, // FIXME: Handle linkname
Size: tarhdr.Size,
Mode: tarhdr.Mode,
UID: int64(tarhdr.Uid),
Gid: int64(tarhdr.Gid),
Uname: tarhdr.Uname,
Gname: tarhdr.Gname,
Modtime: tarhdr.ModTime,
Accesstime: tarhdr.AccessTime,
Changetime: tarhdr.ChangeTime,
Devmajor: tarhdr.Devmajor,
Devminor: tarhdr.Devminor,
Paxrecords: string(paxRecords),
Format: int64(tarhdr.Format),
}
return &hdr, nil

View File

@@ -25,7 +25,7 @@ func bindata_read(data []byte, name string) ([]byte, error) {
return buf.Bytes(), nil
}
var _db_sqlite_migrations_metadata_1637447083_sql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\xcd\x72\xdb\x36\x10\x3e\xd7\x4f\xb1\x93\x4b\xec\xa9\xa8\x73\xa7\x99\x1e\xdc\xb8\x71\x3d\x13\x3b\x19\xd9\xaa\x73\x34\x48\x2c\x49\x54\x20\x16\x5d\x80\x92\x99\xa7\xef\x2c\x40\x2a\xb2\x14\xc9\xe9\xf4\x24\x0a\xd8\xfd\xf6\xff\x5b\x14\x05\xfc\xdc\x99\x86\x55\x44\x58\xfa\xb3\x8a\x51\xbe\xa2\x2a\x2d\x42\x8b\x4a\x23\x07\x38\x3f\x03\x00\x28\x0a\x58\x60\x45\xac\x81\x6a\x88\xad\x09\xe3\x3d\x90\x83\xd8\x8a\x8e\xc7\x24\xc8\x59\xca\xb8\x88\x0d\x32\x38\x8a\xe0\x7a\x6b\x67\xdf\x43\x41\xb0\x2a\x44\xe8\xbd\x16\xb3\x13\xe0\x69\x7c\xd1\x58\x39\xda\xb8\xd7\x0c\xfd\x6e\xa9\x5a\xed\xa3\x99\x8c\x96\x75\x93\x64\x99\xc4\x7e\x04\xe5\x47\xbc\x3d\xc4\xdf\xfa\xfb\x8a\xa1\x9b\x1a\x02\xc6\x59\x52\x1f\xc1\x5a\x15\xa0\x44\x74\xa0\xd1\x62\x44\x9d\x72\xa1\x3c\xce\xa0\xec\x23\x3c\xed\x65\xe2\x09\x94\xd3\x3b\xa7\xc9\xde\x13\x28\x46\x08\xd1\x58\x2b\xae\x32\x5a\x5c\x2b\x57\xe5\x54\x4e\xb0\x47\x7d\x7a\x18\x3c\xd6\x56\x35\x60\x42\x2e\xc2\xe0\x51\x60\x46\xff\xd0\x45\x1e\xe6\x5b\xe1\x16\xe1\x2b\x32\xc1\x5a\xd9\x1e\x45\x45\xf5\x91\x3a\x15\x4d\xa5\xac\x1d\xc0\x33\x75\x24\xe6\x22\x01\x9a\xd8\x22\x27\xfc\x05\x36\x40\xf9\xf3\xca\xf0\x04\xa6\xd1\xa3\xd3\xc6\x35\x53\xfd\x3d\x63\x40\x57\x25\xf3\x0a\x22\x2b\x63\xe5\x36\x58\x15\x5a\xc9\xfa\x9d\xea\x30\xbb\x12\xb7\x4e\x1f\x0b\x4b\x64\x05\xa7\x36\x16\x73\x10\xe9\xc6\xc9\x71\xc4\xe7\xb8\xd5\x00\xcf\xa6\x53\x3c\xc0\x0a\x87\x6f\x49\x51\xdc\x60\xcc\xd2\x54\x83\x35\x6e\x05\xe7\x6b\x65\x8d\x86\x7a\x0c\xe4\xa3\x9c\x8d\xdf\xf7\x43\x27\x22\x17\xb9\x19\x8c\x5b\x1d\x9a\xd9\x42\x7f\xa4\x46\x92\x95\x1d\x0b\xe6\x2b\x4a\x64\xe5\x10\x31\x24\x89\xf1\xe4\x48\x54\x9f\x91\x3b\x13\x82\x21\x97\x1a\xa1\x23\x8d\x50\x9a\x98\x55\xd3\xbf\xa3\xaa\xcb\x80\x0c\x37\x57\x12\x0e\x6d\x1c\xe6\x2a\xf4\xe6\x44\x67\x5c\x33\xf5\xfe\x40\xa5\x39\xa5\x92\x8c\x4c\x59\xdb\x31\x73\x22\x1f\xd9\xca\xa1\x4e\x73\x42\xe7\x26\x8f\xea\x07\xe2\x4e\x45\xe9\xc2\xde\x05\x8f\x95\xa9\x0d\xea\x34\x5d\x0e\x1e\xd9\x44\xe4\x79\xfa\xf9\x33\xb7\x32\x53\xef\x74\x80\x5b\xd2\x0f\xa6\xc3\x09\x2b\x52\xc2\x72\xa8\x18\x43\x84\x80\x15\x39\x9d\xb2\x6b\x1a\x47\x8c\x79\x2a\x2e\xab\x0a\x43\x10\xbd\x74\xf5\xbe\x55\xae\xc1\xf4\xb7\x36\x68\x75\x98\x26\x64\xdb\x40\x04\x7d\x78\xa1\x46\xbc\xa3\x35\x83\xec\xef\xb0\x1b\x87\x0a\xf0\xf9\xf2\x8b\x08\x5e\xdf\x2d\xe7\x7b\x48\xa1\x2f\x8b\xd1\x37\xc6\x40\xb6\x8f\x86\xdc\x09\x98\xad\xfe\x2d\x69\x53\x9b\x4a\x89\x3c\xc4\x29\xf0\x8e\xb4\x7c\x43\xa2\xb9\x83\xfc\x66\xb7\x93\x34\x9c\x33\xfe\xd3\x1b\xc9\xc3\x38\xd0\xdf\x7c\x84\xd0\x7b\x4f\x1c\x73\xdf\xab\xa4\x74\x02\x35\x87\xff\x1f\x51\xab\xa4\x74\x02\xf5\x56\xfd\x4d\x0c\x1a\xd7\xa6\x42\x70\x7d\x57\x22\xef\x8f\xea\xfb\x56\xf1\x34\xaa\x89\xeb\x2f\x46\x6a\x5c\x77\x49\xf9\x68\x3b\xdf\x1a\xf7\x3f\xb0\x93\xf2\xf1\x51\xbe\xfc\x92\xd7\x64\x48\x34\x0a\x9d\xf2\x32\x00\x92\x07\x7c\x8e\xe8\x34\xea\x89\x83\x33\xf7\x1f\xf4\x98\x0c\x5b\xa1\xb1\x36\x0e\xf5\x24\x03\xa1\xa5\xde\x6a\x68\xd5\x1a\x85\xd1\xc2\xb4\xd6\x6a\xb2\x96\x36\x42\xa7\x35\x71\xf7\xeb\x88\xf1\xd3\x5f\x7f\xdc\x5d\x7d\x5a\xcc\x57\x38\x6c\xa6\x65\x56\x14\xf0\xd8\x22\x23\xe4\x3b\xf1\x2e\x50\x87\x69\x44\x83\x57\x55\x22\x2c\x65\x2d\xf4\xde\x23\x57\x2a\xe0\x2c\xcd\xc4\x88\x01\x9d\x1a\x26\x1c\x09\xba\x22\x17\xd5\xb8\x32\xdf\xfe\xf6\x56\x0a\xca\xaa\x8a\x92\x49\x9c\x37\xf3\x19\xbc\xb9\xfe\xf4\xf1\xf2\xee\x7a\xee\x57\xcd\x7c\x8d\x2c\xe4\xf6\xe6\xe2\xc5\xc6\x59\xe1\x90\x2c\xe4\xa5\x33\x46\x58\x4a\x2f\xb8\x02\x3b\x1f\x07\x58\x3e\x7c\x28\x7e\x81\x10\xd9\xb8\xe6\x20\x4f\x8f\x47\xf8\xc0\x04\x90\xad\x25\x94\x21\x59\x9f\x32\xa8\x91\xcd\x1a\x35\xd4\x4c\x9d\x78\x3d\xc1\x50\xea\xd3\x3c\xee\x92\x82\x11\x25\xaa\x55\xda\x5c\x15\xea\xbc\xbb\xd6\xb9\x9b\x17\xbb\x45\xf3\xea\x79\x82\xff\x3e\xa3\x8d\xb3\x3b\xb1\x58\x18\x6b\x96\x0e\xc7\x0a\x46\xc5\x63\x43\x1c\x90\x8d\x3c\x4e\xa4\x4c\x18\xa1\x1c\x60\x91\x85\xee\xc4\x90\x92\xd6\x2a\x31\xc4\x02\xeb\x9a\x38\x42\xd3\xcb\x64\xab\xb8\x63\x60\x9b\xeb\x7b\x23\x01\xc8\x45\x86\x00\x6b\x4a\xe4\xb4\xd8\x19\x95\x9e\xfa\x80\x5c\x51\x51\xe7\xad\x51\x2e\xa6\x35\x16\xb6\x61\x98\xc4\xc6\x9e\x42\x30\xf2\xbc\x94\x21\x49\x2f\xa7\x48\x52\xaf\x1c\xe4\xd2\xa5\xa7\xcb\x7e\x10\x37\xf5\x6e\xcc\x2f\x39\x1d\x36\xaf\x96\x70\x4b\xe7\x22\x69\xa2\x70\xe6\x98\x44\xc3\x21\x4e\xb0\xe7\x63\x23\x12\x8f\xef\xba\xe5\xfd\xc3\xe5\x22\xd5\x7f\x26\xdc\x73\x31\xc1\x54\xca\xa7\x07\x32\xd5\x80\xae\xa2\xf4\x4a\x49\x91\x8c\x86\xcf\x03\x4e\xf1\x8c\xbd\x3a\x39\xbe\x37\xef\x67\x17\xef\xce\x76\x5f\xe0\x57\xb4\x71\x67\x9a\xc9\xbf\x7c\x81\xbf\xfb\x37\x00\x00\xff\xff\x7a\x41\x6c\x96\xa6\x0b\x00\x00")
var _db_sqlite_migrations_metadata_1637447083_sql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x4d\x73\xdb\x36\x13\x3e\xbf\xfe\x15\x3b\xb9\xc4\x9e\x57\xd4\xb9\x93\x4c\x0f\x6e\x9c\x38\x9e\x89\x9d\x8c\x62\x35\x39\x06\x24\x96\x24\x2a\x10\x8b\x2e\x40\xc9\xcc\xaf\xef\x2c\x40\xca\xb2\x64\xc9\xe9\xf4\x24\x0a\xd8\xe7\xd9\xef\x5d\x14\x05\xfc\xbf\x33\x0d\xab\x88\xb0\xf4\x67\x15\xa3\x7c\x45\x55\x5a\x84\x16\x95\x46\x0e\x70\x7e\x06\x00\x50\x14\xb0\xc0\x8a\x58\x03\xd5\x10\x5b\x13\xc6\x7b\x20\x07\xb1\x15\x8c\xc7\x24\xc8\x59\xca\xb8\x88\x0d\x32\x38\x8a\xe0\x7a\x6b\x67\xcf\xb1\x20\x58\x15\x22\xf4\x5e\x8b\xda\x89\xf0\x34\xbf\x20\x56\x8e\x36\xee\x25\x45\x7f\x58\xaa\x56\xfb\x6c\x26\xb3\x65\x6c\x92\x2c\x93\xd8\xaf\xb0\xfc\x8a\xb5\x87\xfc\x5b\x7b\x5f\x50\x74\x53\x43\xc0\x38\x4b\xf0\x91\xac\x55\x01\x4a\x44\x07\x1a\x2d\x46\xd4\x29\x16\xca\xe3\x0c\xca\x3e\xc2\x8f\xbd\x48\xfc\x00\xe5\xf4\xce\x69\xd2\xf7\x03\x14\x23\x84\x68\xac\x15\x53\x19\x2d\xae\x95\xab\x72\x28\x27\xda\xa3\x36\xdd\x0f\x1e\x6b\xab\x1a\x30\x21\x27\x61\xf0\x28\x34\xa3\x7d\xe8\x22\x0f\xf3\xad\x70\x8b\xf0\x13\x99\x60\xad\x6c\x8f\x02\x51\x7d\xa4\x4e\x45\x53\x29\x6b\x07\xf0\x4c\x1d\x89\xba\x48\x80\x26\xb6\xc8\x89\x7f\x81\x0d\x50\xfe\xbc\x32\x3c\x91\x69\xf4\xe8\xb4\x71\xcd\x94\x7f\xcf\x18\xd0\x55\x49\xbd\x82\xc8\xca\x58\xb9\x0d\x56\x85\x56\xa2\x7e\xa7\x3a\xcc\xa6\xc4\xad\xd1\xc7\xdc\x12\x59\xe1\xa9\x8d\xc5\xec\x44\xba\x71\x72\x1c\xf1\x21\x6e\x11\xe0\xd9\x74\x8a\x07\x58\xe1\xf0\x18\x14\xc5\x0d\xc6\x2c\x4d\x35\x58\xe3\x56\x70\xbe\x56\xd6\x68\xa8\x47\x47\x3e\xc9\xd9\xf8\xfd\x75\xe8\x44\xe4\x62\x82\xcb\x9f\x43\x4d\x33\xb9\xfa\x70\xf3\xfd\xf6\xfd\x1b\xf8\xa8\x9c\xb6\xb8\x15\x9c\x80\x9f\xa8\x91\x48\x66\xab\x83\xf9\x89\xe2\x76\x39\x44\x0c\x49\x62\x3c\x39\xe2\xf2\x17\xe4\xce\x84\x60\xc8\xa5\x2a\xe9\x48\x23\x94\x26\x66\x68\xfa\x77\x14\xba\x0c\xc8\x70\x73\x25\xbe\xd2\xc6\x61\x4e\x51\x6f\x4e\x94\xcd\x35\x53\xef\x0f\x20\xcd\x29\x48\x52\x32\x85\x74\x47\xcd\x33\x91\x7a\xaa\xe5\x10\xd3\x9c\xc0\xdc\xe4\x3e\xfe\x40\xdc\xa9\x28\x25\xda\xbb\xe0\xb1\x32\xb5\x41\x9d\x5a\xcf\xc1\x37\x36\x11\x79\x9e\x7e\x3e\xe6\x3a\x67\xea\x9d\x0e\x70\x4b\xfa\xde\x3c\xe6\x23\x52\xe2\x72\xa8\x18\x43\x84\x80\x15\x39\x9d\xa2\x6b\x1a\x47\x8c\xb9\x65\x2e\xab\x0a\x43\x10\x5c\xba\x7a\xd7\x2a\xd7\x60\xfa\x5b\x1b\xb4\x3a\x4c\xed\xb3\xad\x2e\x82\x3e\x3c\x81\x11\xef\xa0\x66\x90\xed\x1d\x76\xfd\x50\x01\xbe\x5c\x7e\x17\xc1\xeb\xbb\xe5\x7c\x8f\x29\xf4\x65\x31\xda\xc6\x18\xc8\xf6\xd1\x90\x3b\x41\xb3\xc5\xdf\x92\x36\xb5\xa9\x94\xc8\x43\x9c\x1c\xef\x48\xcb\x37\xa4\x19\x78\x10\xdf\x6c\x76\x92\x86\x73\xc6\xbf\x7b\x23\x71\x18\xbb\xfd\xd1\x46\x08\xbd\xf7\xc4\x31\x37\x85\x4a\xa0\x13\xac\xd9\xfd\x7f\xc9\x5a\x25\xd0\x09\xd6\x5b\xf5\x17\x31\x68\x5c\x9b\x0a\xc1\xf5\x5d\x89\xbc\xdf\xc7\xef\x5a\xc5\x53\x1f\xa7\x45\x70\x31\xce\xcd\x75\x97\xc0\x47\xcb\xf9\xd6\xb8\xff\xc0\x9d\xc0\xc7\x5b\xf9\xf2\x7b\xde\xa1\x21\xcd\x58\xe8\x94\x97\x06\x90\x38\xe0\x43\x44\xa7\x51\x4f\x03\x3a\x2f\x86\x83\x1a\x93\x66\x2b\x34\xd6\xc6\xa1\x9e\x64\x20\xb4\xd4\x5b\x0d\xad\x5a\xa3\x8c\xbb\x30\xed\xbc\x9a\xac\xa5\x8d\xcc\xda\x9a\xb8\x7b\x33\x72\xfc\xef\xcf\xf7\x77\x57\x9f\x17\xf3\x15\x0e\x9b\x69\xd3\x15\x05\x7c\x6b\x91\x11\xf2\x9d\x58\x17\xa8\xc3\xd4\xa2\xc1\xab\x2a\x0d\x2c\x65\x2d\xf4\xde\x23\x57\x2a\xe0\x2c\xf5\xc4\xc8\x01\x9d\x1a\x26\x1e\x71\xba\x22\x17\xd5\xb8\x4f\x5f\xff\xfe\x5a\x12\xca\xaa\x8a\x12\x49\x9c\x37\xf3\x19\xbc\xba\xfe\xfc\xe9\xf2\xee\x7a\xee\x57\xcd\x7c\x8d\x2c\xc3\xed\xd5\xc5\x93\x75\xb4\xc2\x21\x69\xc8\x1b\x69\xf4\xb0\x94\x5a\x70\x05\x76\x3e\x0e\xb0\xbc\xff\x50\xfc\x06\x21\xb2\x71\xcd\x41\x9c\xbe\x1d\x99\x07\x26\x80\xac\x34\x19\x19\x12\xf5\x29\x82\x1a\xd9\xac\x51\x43\xcd\xd4\x89\xd5\x13\x0d\xa5\x3a\xcd\xed\x2e\x21\x18\x59\xa2\x5a\xa5\xb5\x56\xa1\xce\x8b\x6d\x9d\xab\x79\xb1\x9b\x34\xaf\x1e\x26\xfa\xe7\x27\xda\xd8\xbb\xd3\x14\x0b\x63\xce\xd2\xe1\x98\xc1\xa8\x78\x2c\x88\x83\x61\x23\x2f\x17\x49\x13\x46\x28\x07\x58\x64\xa1\x3b\x51\xa4\xa4\xb4\x4a\x0c\xb1\xc0\xba\x26\x8e\xd0\xf4\xd2\xd9\x2a\xee\x28\xd8\xc6\xfa\xab\x11\x07\xe4\x22\x53\x80\x35\x25\x72\xda\xfa\x8c\x4a\x4f\x75\x40\xae\xa8\xa8\xf3\xd6\x28\x17\xd3\x1a\x0b\x5b\x37\x4c\x9a\xc6\x9e\x42\x30\xf2\xf6\x94\x26\x49\xcf\xaa\x48\x92\xaf\xec\xe4\xd2\xa5\x77\xcd\xbe\x13\x37\xf5\xae\xcf\x4f\x67\x3a\x6c\x5e\x4c\xe1\x76\x9c\x8b\xa4\x89\x32\x33\xc7\x20\x1a\x0e\x71\xa2\x3d\x1f\x0b\x91\x78\x7c\xf4\x2d\xbf\xde\x5f\x2e\x52\xfe\x67\x32\x7b\xb6\xeb\xbd\x52\x3e\xbd\x9e\xa9\x06\x74\x15\xa5\x27\x4c\xf2\x64\x54\x7c\x1e\x70\xf2\x67\xac\xd5\xc9\xf0\xbd\x7e\x3f\xbb\x78\x7b\xb6\xfb\x3c\xbf\xa2\x8d\x3b\xd3\x4c\xfe\xe9\xf3\xfc\xed\x3f\x01\x00\x00\xff\xff\xf3\xc7\xc5\x5e\xc3\x0b\x00\x00")
func db_sqlite_migrations_metadata_1637447083_sql() ([]byte, error) {
return bindata_read(

View File

@@ -30,7 +30,6 @@ type Header struct {
Deleted int64 `boil:"deleted" json:"deleted" toml:"deleted" yaml:"deleted"`
Typeflag int64 `boil:"typeflag" json:"typeflag" toml:"typeflag" yaml:"typeflag"`
Name string `boil:"name" json:"name" toml:"name" yaml:"name"`
Linkname string `boil:"linkname" json:"linkname" toml:"linkname" yaml:"linkname"`
Size int64 `boil:"size" json:"size" toml:"size" yaml:"size"`
Mode int64 `boil:"mode" json:"mode" toml:"mode" yaml:"mode"`
UID int64 `boil:"uid" json:"uid" toml:"uid" yaml:"uid"`
@@ -57,7 +56,6 @@ var HeaderColumns = struct {
Deleted string
Typeflag string
Name string
Linkname string
Size string
Mode string
UID string
@@ -79,7 +77,6 @@ var HeaderColumns = struct {
Deleted: "deleted",
Typeflag: "typeflag",
Name: "name",
Linkname: "linkname",
Size: "size",
Mode: "mode",
UID: "uid",
@@ -103,7 +100,6 @@ var HeaderTableColumns = struct {
Deleted string
Typeflag string
Name string
Linkname string
Size string
Mode string
UID string
@@ -125,7 +121,6 @@ var HeaderTableColumns = struct {
Deleted: "headers.deleted",
Typeflag: "headers.typeflag",
Name: "headers.name",
Linkname: "headers.linkname",
Size: "headers.size",
Mode: "headers.mode",
UID: "headers.uid",
@@ -195,7 +190,6 @@ var HeaderWhere = struct {
Deleted whereHelperint64
Typeflag whereHelperint64
Name whereHelperstring
Linkname whereHelperstring
Size whereHelperint64
Mode whereHelperint64
UID whereHelperint64
@@ -217,7 +211,6 @@ var HeaderWhere = struct {
Deleted: whereHelperint64{field: "\"headers\".\"deleted\""},
Typeflag: whereHelperint64{field: "\"headers\".\"typeflag\""},
Name: whereHelperstring{field: "\"headers\".\"name\""},
Linkname: whereHelperstring{field: "\"headers\".\"linkname\""},
Size: whereHelperint64{field: "\"headers\".\"size\""},
Mode: whereHelperint64{field: "\"headers\".\"mode\""},
UID: whereHelperint64{field: "\"headers\".\"uid\""},
@@ -250,8 +243,8 @@ func (*headerR) NewStruct() *headerR {
type headerL struct{}
var (
headerAllColumns = []string{"record", "lastknownrecord", "block", "lastknownblock", "deleted", "typeflag", "name", "linkname", "size", "mode", "uid", "gid", "uname", "gname", "modtime", "accesstime", "changetime", "devmajor", "devminor", "paxrecords", "format"}
headerColumnsWithoutDefault = []string{"record", "lastknownrecord", "block", "lastknownblock", "deleted", "typeflag", "name", "linkname", "size", "mode", "uid", "gid", "uname", "gname", "modtime", "accesstime", "changetime", "devmajor", "devminor", "paxrecords", "format"}
headerAllColumns = []string{"record", "lastknownrecord", "block", "lastknownblock", "deleted", "typeflag", "name", "size", "mode", "uid", "gid", "uname", "gname", "modtime", "accesstime", "changetime", "devmajor", "devminor", "paxrecords", "format"}
headerColumnsWithoutDefault = []string{"record", "lastknownrecord", "block", "lastknownblock", "deleted", "typeflag", "name", "size", "mode", "uid", "gid", "uname", "gname", "modtime", "accesstime", "changetime", "devmajor", "devminor", "paxrecords", "format"}
headerColumnsWithDefault = []string{}
headerPrimaryKeyColumns = []string{"name"}
)

View File

@@ -1472,93 +1472,94 @@ var readTests = []struct {
false,
false,
},
{
"Can not read /brokensymlink into non-empty buffer",
"/brokensymlink",
true,
func(f afero.Fs) error {
symFs, ok := f.(symFs)
if !ok {
return nil
}
// FIXME: Handle linkname
// {
// "Can not read /brokensymlink into non-empty buffer",
// "/brokensymlink",
// true,
// func(f afero.Fs) error {
// symFs, ok := f.(symFs)
// if !ok {
// return nil
// }
if err := symFs.SymlinkIfPossible("/mydir", "/brokensymlink"); err != nil {
return err
}
// if err := symFs.SymlinkIfPossible("/mydir", "/brokensymlink"); err != nil {
// return err
// }
return nil
},
func(f afero.File) error {
gotContent := make([]byte, 10)
// return nil
// },
// func(f afero.File) error {
// gotContent := make([]byte, 10)
if _, err := f.Read(gotContent); err != io.EOF {
return err
}
// if _, err := f.Read(gotContent); err != io.EOF {
// return err
// }
return nil
},
true,
true,
false,
false,
},
{
"Can read /existingsymlink into non-empty buffer without readlink",
"/existingsymlink",
false,
func(f afero.Fs) error {
symFs, ok := f.(symFs)
if !ok {
return nil
}
// return nil
// },
// true,
// true,
// false,
// false,
// },
// {
// "Can read /existingsymlink into non-empty buffer without readlink",
// "/existingsymlink",
// false,
// func(f afero.Fs) error {
// symFs, ok := f.(symFs)
// if !ok {
// return nil
// }
file, err := f.Create("/test.txt")
if err != nil {
return err
}
// file, err := f.Create("/test.txt")
// if err != nil {
// return err
// }
r := newDeterministicReader(1000)
// r := newDeterministicReader(1000)
if _, err := io.Copy(file, r); err != nil {
return err
}
// if _, err := io.Copy(file, r); err != nil {
// return err
// }
if err := file.Close(); err != nil {
return err
}
// if err := file.Close(); err != nil {
// return err
// }
if err := symFs.SymlinkIfPossible("/test.txt", "/existingsymlink"); err != nil {
return err
}
// if err := symFs.SymlinkIfPossible("/test.txt", "/existingsymlink"); err != nil {
// return err
// }
return nil
},
func(f afero.File) error {
wantHash := "HTUi7GuNreHASha4hhl1xwuYk03pyTJ0IJbFLv04UdccT9m_NA2oBFTrnMxJhEu3VMGxDYk_04Th9C0zOj5MyA=="
wantLength := int64(32800768)
// return nil
// },
// func(f afero.File) error {
// wantHash := "HTUi7GuNreHASha4hhl1xwuYk03pyTJ0IJbFLv04UdccT9m_NA2oBFTrnMxJhEu3VMGxDYk_04Th9C0zOj5MyA=="
// wantLength := int64(32800768)
hasher := sha512.New()
gotLength, err := io.Copy(hasher, f)
if err != nil {
return err
}
gotHash := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
// hasher := sha512.New()
// gotLength, err := io.Copy(hasher, f)
// if err != nil {
// return err
// }
// gotHash := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
if gotLength != wantLength {
return fmt.Errorf("invalid read length, got %v, want %v", gotLength, wantLength)
}
// if gotLength != wantLength {
// return fmt.Errorf("invalid read length, got %v, want %v", gotLength, wantLength)
// }
if gotHash != wantHash {
return fmt.Errorf("invalid read hash, got %v, want %v", gotHash, wantHash)
}
// if gotHash != wantHash {
// return fmt.Errorf("invalid read hash, got %v, want %v", gotHash, wantHash)
// }
return nil
},
true,
false, // FIXME: This should not be required and BasePathFs fails if it is used
false, // FIXME: Allow resolving symlinks without using readlink`, which is what `BasePathFs` supports`
true,
},
// return nil
// },
// true,
// false, // FIXME: This should not be required and BasePathFs fails if it is used
// false, // FIXME: Allow resolving symlinks without using readlink`, which is what `BasePathFs` supports`
// true,
// },
}
func TestFile_Read(t *testing.T) {

File diff suppressed because it is too large Load Diff

View File

@@ -6,6 +6,7 @@ package persisters
import (
"context"
"database/sql"
"errors"
"fmt"
"path"
"path/filepath"
@@ -218,17 +219,21 @@ func (p *MetadataPersister) GetHeader(ctx context.Context, name string) (*config
}
func (p *MetadataPersister) GetHeaderByLinkname(ctx context.Context, linkname string) (*config.Header, error) {
linkname = p.getSanitizedPath(ctx, linkname)
return nil, errors.New("not implemented")
hdr, err := models.Headers(
qm.Where(models.HeaderColumns.Linkname+" = ?", linkname),
qm.Where(models.HeaderColumns.Deleted+" != 1"),
).One(ctx, p.sqlite.DB)
if err != nil {
return nil, err
}
// FIXME: Handle linkname
return converters.DBHeaderToConfigHeader(hdr), nil
// linkname = p.getSanitizedPath(ctx, linkname)
// hdr, err := models.Headers(
// qm.Where(models.HeaderColumns.Linkname+" = ?", linkname),
// qm.Where(models.HeaderColumns.Deleted+" != 1"),
// ).One(ctx, p.sqlite.DB)
// if err != nil {
// return nil, err
// }
// return converters.DBHeaderToConfigHeader(hdr), nil
}
func (p *MetadataPersister) GetHeaderChildren(ctx context.Context, name string) ([]*config.Header, error) {
@@ -290,7 +295,7 @@ func (p *MetadataPersister) GetHeaderDirectChildren(ctx context.Context, name st
getHeaders := func(prefix string) ([]*config.Header, error) {
query := fmt.Sprintf(
`select %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v,
`select %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v, %v,
length(replace(%v, ?, '')) - length(replace(replace(%v, ?, ''), '/', '')) as depth
from %v
where %v like ?
@@ -310,7 +315,7 @@ where %v like ?
models.HeaderColumns.Deleted,
models.HeaderColumns.Typeflag,
models.HeaderColumns.Name,
models.HeaderColumns.Linkname,
// models.HeaderColumns.Linkname, // FIXME: Handle linkname
models.HeaderColumns.Size,
models.HeaderColumns.Mode,
models.HeaderColumns.UID,