feat: Implement ReplacesName PAX record

This commit is contained in:
Felicitas Pojtinger
2021-11-25 17:38:13 +01:00
parent 9a673ff0f2
commit 6d4b3dfd93
3 changed files with 34 additions and 1 deletions

View File

@@ -13,6 +13,8 @@ const (
STFSReplacesContent = "STFS.ReplacesContent"
STFSReplacesContentTrue = "true"
STFSReplacesContentFalse = "false"
STFSReplacesName = "STFS.ReplacesName"
)
var (

View File

@@ -56,11 +56,15 @@ func (p *MetadataPersister) UpsertHeader(ctx context.Context, dbhdr *models.Head
func (p *MetadataPersister) UpdateHeaderMetadata(ctx context.Context, dbhdr *models.Header) error {
currentHdr, err := models.FindHeader(ctx, p.db, dbhdr.Name, models.HeaderColumns.Name, models.HeaderColumns.Record, models.HeaderColumns.Block)
if err == sql.ErrNoRows {
return nil // We may have renamed the header in a later, but indexed record/block, so we can skip this
}
if err != nil {
return err
}
// Update everything but the record & block
// Update everything but the name, record & block
dbhdr.Record = currentHdr.Record
dbhdr.Block = currentHdr.Block
@@ -71,6 +75,28 @@ func (p *MetadataPersister) UpdateHeaderMetadata(ctx context.Context, dbhdr *mod
return nil
}
func (p *MetadataPersister) MoveHeader(ctx context.Context, oldName string, newName string) error {
dbhdr, err := models.FindHeader(ctx, p.db, oldName, models.HeaderColumns.Name)
if err == sql.ErrNoRows {
return nil // We may have renamed the header in a later, but indexed record/block, so we can skip this
}
if err != nil {
return err
}
// Update the name
dbhdr.Name = newName
if _, err := dbhdr.Update(ctx, p.db, boil.Infer()); err != nil {
return err
}
// TODO: Update children's names too
return nil
}
func (p *MetadataPersister) GetHeaders(ctx context.Context) (models.HeaderSlice, error) {
return models.Headers().All(ctx, p.db)
}