sourcebot/packages/backend/src/git.ts
2024-10-17 16:31:18 -04:00

51 lines
No EOL
1.2 KiB
TypeScript

import { Repository } from './types.js';
import { simpleGit, SimpleGitProgressEvent } from 'simple-git';
import { existsSync } from 'fs';
import { createLogger } from './logger.js';
const logger = createLogger('git');
export const cloneRepository = async (repo: Repository, onProgress?: (event: SimpleGitProgressEvent) => void) => {
if (existsSync(repo.path)) {
logger.warn(`${repo.id} already exists. Skipping clone.`)
return;
}
const git = simpleGit({
progress: onProgress,
});
const gitConfig = Object.entries(repo.gitConfigMetadata ?? {}).flatMap(
([key, value]) => ['--config', `${key}=${value}`]
);
await git.clone(
repo.cloneUrl,
repo.path,
[
"--bare",
...gitConfig
]
);
await git.cwd({
path: repo.path,
}).addConfig("remote.origin.fetch", "+refs/heads/*:refs/heads/*");
}
export const fetchRepository = async (repo: Repository, onProgress?: (event: SimpleGitProgressEvent) => void) => {
const git = simpleGit({
progress: onProgress,
});
await git.cwd({
path: repo.path,
}).fetch(
"origin",
[
"--prune",
"--progress"
]
);
}