MCPcopy Index your code
hub / github.com/coder/coder / findContentChanges

Function findContentChanges

scripts/develop/dbrecovery.go:261–316  ·  view source on GitHub ↗

findContentChanges compares tracked up/down SQL against disk for all tracked versions whose files still exist.

(ctx context.Context, db *sql.DB, migrDir string)

Source from the content-addressed store, hash-verified

259// findContentChanges compares tracked up/down SQL against disk
260// for all tracked versions whose files still exist.
261func findContentChanges(ctx context.Context, db *sql.DB, migrDir string) ([]contentChange, error) {
262 rows, err := db.QueryContext(ctx, `
263 SELECT version, filename, up_sql, down_sql
264 FROM _develop.applied_migrations
265 ORDER BY version
266 `)
267 if err != nil {
268 return nil, xerrors.Errorf("query tracking table: %w", err)
269 }
270 defer rows.Close()
271
272 var changes []contentChange
273 for rows.Next() {
274 var version int
275 var filename, trackedUp, trackedDown string
276 if err := rows.Scan(&version, &filename, &trackedUp, &trackedDown); err != nil {
277 return nil, xerrors.Errorf("scan row: %w", err)
278 }
279
280 // Only check files that exist on disk (missing files
281 // are handled by findRollbacks).
282 downPath := filepath.Join(migrDir, filename)
283 if _, err := os.Stat(downPath); err != nil {
284 continue
285 }
286
287 // Derive up filename from down filename.
288 upFilename := strings.Replace(filename, ".down.sql", ".up.sql", 1)
289
290 diskDown, err := os.ReadFile(filepath.Join(migrDir, filename))
291 if err != nil {
292 continue
293 }
294 diskUp, err := os.ReadFile(filepath.Join(migrDir, upFilename))
295 if err != nil {
296 continue
297 }
298
299 upChanged := trackedUp != "" && trackedUp != string(diskUp)
300 downChanged := trackedDown != "" && trackedDown != string(diskDown)
301
302 if upChanged || downChanged {
303 changes = append(changes, contentChange{
304 version: version,
305 filename: filename,
306 upChanged: upChanged,
307 downChanged: downChanged,
308 trackedUp: trackedUp,
309 diskUp: string(diskUp),
310 trackedDown: trackedDown,
311 diskDown: string(diskDown),
312 })
313 }
314 }
315 return changes, rows.Err()
316}
317
318func maxTrackedVersion(ctx context.Context, db *sql.DB) (int, error) {

Callers 1

checkAndRecoverFunction · 0.85

Calls 8

QueryContextMethod · 0.80
ReplaceMethod · 0.80
ErrMethod · 0.80
CloseMethod · 0.65
NextMethod · 0.65
ReadFileMethod · 0.65
ErrorfMethod · 0.45
ScanMethod · 0.45

Tested by

no test coverage detected