|
|
|
@@ -746,7 +746,12 @@ func writePlan(ctx context.Context, tx pgx.Tx, p *Plan, epoch *int64) (int64, ti
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, time.Time{}, err
|
|
|
|
|
}
|
|
|
|
|
var release, delivery, commits, times []byte
|
|
|
|
|
var release, delivery, commits, times, backups []byte
|
|
|
|
|
if p.Backups != nil {
|
|
|
|
|
if backups, err = json.Marshal(p.Backups); err != nil {
|
|
|
|
|
return 0, time.Time{}, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if p.Times != nil {
|
|
|
|
|
if times, err = json.Marshal(p.Times); err != nil {
|
|
|
|
|
return 0, time.Time{}, err
|
|
|
|
@@ -774,18 +779,18 @@ func writePlan(ctx context.Context, tx pgx.Tx, p *Plan, epoch *int64) (int64, ti
|
|
|
|
|
var revision int64
|
|
|
|
|
err = tx.QueryRow(ctx,
|
|
|
|
|
`insert into release_plan (id, repository, commit_hash, created, updated, state, tier, tiers, modules, note,
|
|
|
|
|
branch, tier_entered, revision, epoch, release, delivery, merged_at, commits, times)
|
|
|
|
|
values ($1, $2, $3, $4, now(), $5, $6, $7, $8, $9, $10, $11, 1, $13, $14, $15, $16, $17, $18)
|
|
|
|
|
branch, tier_entered, revision, epoch, release, delivery, merged_at, commits, times, backups)
|
|
|
|
|
values ($1, $2, $3, $4, now(), $5, $6, $7, $8, $9, $10, $11, 1, $13, $14, $15, $16, $17, $18, $19)
|
|
|
|
|
on conflict (id) do update set updated = now(), state = excluded.state, tier = excluded.tier,
|
|
|
|
|
tiers = excluded.tiers, modules = excluded.modules, note = excluded.note, branch = excluded.branch,
|
|
|
|
|
tier_entered = excluded.tier_entered, revision = release_plan.revision + 1, epoch = excluded.epoch,
|
|
|
|
|
release = excluded.release, delivery = excluded.delivery, repository = excluded.repository,
|
|
|
|
|
commit_hash = excluded.commit_hash, merged_at = excluded.merged_at, commits = excluded.commits,
|
|
|
|
|
created = excluded.created, times = excluded.times
|
|
|
|
|
created = excluded.created, times = excluded.times, backups = excluded.backups
|
|
|
|
|
where release_plan.revision = $12
|
|
|
|
|
returning revision`,
|
|
|
|
|
p.ID, p.Repository, p.Commit, p.Created, p.State, p.Tier, tiers, modules, p.Note, p.Branch, entered,
|
|
|
|
|
p.Revision, epoch, release, delivery, mergedAt(p.Merged), commits, times).Scan(&revision)
|
|
|
|
|
p.Revision, epoch, release, delivery, mergedAt(p.Merged), commits, times, backups).Scan(&revision)
|
|
|
|
|
if errors.Is(err, pgx.ErrNoRows) {
|
|
|
|
|
// The row is there and at another revision — moved since this was read, or there already
|
|
|
|
|
// when this one is new: either way not this writer's to overwrite. (A plan saved before plans
|
|
|
|
@@ -854,7 +859,7 @@ func (i *Inventory) PlanByID(ctx context.Context, id string) (Plan, error) {
|
|
|
|
|
func (i *Inventory) plans(ctx context.Context, tail string, args ...any) ([]Plan, error) {
|
|
|
|
|
rows, err := i.store.Pool().Query(ctx,
|
|
|
|
|
`select id, repository, commit_hash, created, updated, state, tier, tiers, modules, note, branch,
|
|
|
|
|
coalesce(tier_entered, created), revision, coalesce(epoch, 0), release, delivery, merged_at, commits, times
|
|
|
|
|
coalesce(tier_entered, created), revision, coalesce(epoch, 0), release, delivery, merged_at, commits, times, backups
|
|
|
|
|
from release_plan `+tail, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
@@ -863,14 +868,19 @@ func (i *Inventory) plans(ctx context.Context, tail string, args ...any) ([]Plan
|
|
|
|
|
var out []Plan
|
|
|
|
|
for rows.Next() {
|
|
|
|
|
var p Plan
|
|
|
|
|
var tiers, modules, release, delivery, commits, times []byte
|
|
|
|
|
var tiers, modules, release, delivery, commits, times, backups []byte
|
|
|
|
|
var epoch int64
|
|
|
|
|
var merged *time.Time
|
|
|
|
|
if err := rows.Scan(&p.ID, &p.Repository, &p.Commit, &p.Created, &p.Updated, &p.State,
|
|
|
|
|
&p.Tier, &tiers, &modules, &p.Note, &p.Branch, &p.TierEntered, &p.Revision, &epoch, &release,
|
|
|
|
|
&delivery, &merged, &commits, ×); err != nil {
|
|
|
|
|
&delivery, &merged, &commits, ×, &backups); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if len(backups) > 0 {
|
|
|
|
|
if err := json.Unmarshal(backups, &p.Backups); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if len(times) > 0 {
|
|
|
|
|
if err := json.Unmarshal(times, &p.Times); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|