chore: sync from fn-registry agent
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"fn-registry/functions/infra"
|
||||
)
|
||||
|
||||
// persistCopiedCode runs infra.AuditCopiedCode and INSERT OR IGNOREs results
|
||||
// into the copied_code table. Returns (newly_inserted, total_detected, error).
|
||||
func persistCopiedCode(callDB *DB, registryRoot string) (int, int, error) {
|
||||
entries, err := infra.AuditCopiedCode(registryRoot)
|
||||
if err != nil {
|
||||
return 0, 0, fmt.Errorf("audit: %w", err)
|
||||
}
|
||||
now := time.Now().UTC().Unix()
|
||||
tx, err := callDB.conn.Begin()
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
stmt, err := tx.Prepare(`INSERT OR IGNORE INTO copied_code
|
||||
(app_file, app_function, registry_id, body_hash, similarity, kind, detected_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
||||
if err != nil {
|
||||
_ = tx.Rollback()
|
||||
return 0, 0, err
|
||||
}
|
||||
defer stmt.Close()
|
||||
inserted := 0
|
||||
for _, e := range entries {
|
||||
res, err := stmt.Exec(e.AppFile, e.AppFunction, e.RegistryID, e.BodyHash, e.Similarity, e.Kind, now)
|
||||
if err != nil {
|
||||
_ = tx.Rollback()
|
||||
return 0, 0, err
|
||||
}
|
||||
if n, _ := res.RowsAffected(); n > 0 {
|
||||
inserted++
|
||||
}
|
||||
}
|
||||
if err := tx.Commit(); err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
return inserted, len(entries), nil
|
||||
}
|
||||
Reference in New Issue
Block a user