(ctx context.Context, src, rollup []*data.Object, rollupVecs []ksuid.KSUID, author, message, meta string)
| 235 | } |
| 236 | |
| 237 | func (b *Branch) CommitCompact(ctx context.Context, src, rollup []*data.Object, rollupVecs []ksuid.KSUID, author, message, meta string) (ksuid.KSUID, error) { |
| 238 | if len(rollup) < 1 { |
| 239 | return ksuid.Nil, errors.New("compact: one or more rollup objects required") |
| 240 | } |
| 241 | sctx := super.NewContext() |
| 242 | appMeta, err := loadMeta(sctx, meta) |
| 243 | if err != nil { |
| 244 | return ksuid.Nil, err |
| 245 | } |
| 246 | return b.commit(ctx, func(parent *branches.Config, retries int) (*commits.Object, error) { |
| 247 | base, err := b.pool.commits.Snapshot(ctx, parent.Commit) |
| 248 | if err != nil { |
| 249 | return nil, err |
| 250 | } |
| 251 | patch := commits.NewPatch(base) |
| 252 | for _, o := range rollup { |
| 253 | if err := patch.AddDataObject(o); err != nil { |
| 254 | return nil, err |
| 255 | } |
| 256 | } |
| 257 | for _, id := range rollupVecs { |
| 258 | if err := patch.AddVector(id); err != nil { |
| 259 | return nil, err |
| 260 | } |
| 261 | } |
| 262 | for _, o := range src { |
| 263 | if err := patch.DeleteObject(o.ID); err != nil { |
| 264 | return nil, err |
| 265 | } |
| 266 | } |
| 267 | if message == "" { |
| 268 | var b strings.Builder |
| 269 | fmt.Fprintf(&b, "compacted %d object%s\n\n", len(src), plural.Slice(src, "s")) |
| 270 | printObjects(&b, src, maxMessageObjects) |
| 271 | fmt.Fprintf(&b, "\ncreated %d object%s\n\n", len(rollup), plural.Slice(rollup, "s")) |
| 272 | printObjects(&b, rollup, maxMessageObjects-len(src)) |
| 273 | message = b.String() |
| 274 | } |
| 275 | commit := patch.NewCommitObject(parent.Commit, retries, author, message, appMeta) |
| 276 | return commit, nil |
| 277 | }) |
| 278 | } |
| 279 | |
| 280 | func (b *Branch) mergeInto(ctx context.Context, parent *Branch, author, message string) (ksuid.KSUID, error) { |
| 281 | if b == parent { |
no test coverage detected