Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kentcdodds/lineage

src/inspect-commit.ts

45 lines · 1.4 KB · TypeScript
import { classifyPath } from './classify.ts'
import { getCommitDetail } from './github.ts'
import { loadIgnoreIndex } from './ignore-rules.ts'
import { getRepoSettings } from './storage.ts'

/**
 * Re-fetch one commit and show how Lineage classifies each file.
 * Use this to debug empty buckets or generated-file filters.
 *
 * @param input.sha - Commit SHA to inspect
 * @returns File classifications and countable totals
 *
 * @example
 * import inspectCommit from 'kody:@kentcdodds/lineage/inspect-commit'
 *
 * const report = await inspectCommit({ sha: '35878a47ef4aa3567eb6f6b5ea4d3d2c753934b5' })
 */
export default async function inspectCommit(input: { sha?: string } = {}) {
	const repo = await getRepoSettings()
	const sha = input.sha || '35878a47ef4aa3567eb6f6b5ea4d3d2c753934b5'
	const [detail, ignore] = await Promise.all([
		getCommitDetail(repo, sha),
		loadIgnoreIndex(),
	])
	const files = (detail.files ?? []).map((file) => {
		const classification = classifyPath(file.filename, {
			patch: file.patch,
			ignore,
		})
		return {
			filename: file.filename,
			additions: file.additions,
			deletions: file.deletions,
			...classification,
		}
	})
	return {
		sha: detail.sha,
		fileCount: files.length,
		dataKeys: Object.keys(detail),
		countable: files.filter((file) => file.countable).length,
		skipped: files.filter((file) => !file.countable),
		counted: files.filter((file) => file.countable),
	}
}