summaryrefslogtreecommitdiff
path: root/packages/core/src/utils/gitIgnoreParser.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/utils/gitIgnoreParser.ts')
-rw-r--r--packages/core/src/utils/gitIgnoreParser.ts53
1 files changed, 31 insertions, 22 deletions
diff --git a/packages/core/src/utils/gitIgnoreParser.ts b/packages/core/src/utils/gitIgnoreParser.ts
index d5d013a8..eeee9f48 100644
--- a/packages/core/src/utils/gitIgnoreParser.ts
+++ b/packages/core/src/utils/gitIgnoreParser.ts
@@ -17,43 +17,53 @@ export class GitIgnoreParser implements GitIgnoreFilter {
private projectRoot: string;
private isGitRepo: boolean = false;
private ig: Ignore = ignore();
+ private patterns: string[] = [];
constructor(projectRoot: string) {
this.projectRoot = path.resolve(projectRoot);
}
- async initialize(): Promise<void> {
+ async initialize(patternsFileName?: string): Promise<void> {
+ const patternFiles = [];
+ if (patternsFileName && patternsFileName !== '') {
+ patternFiles.push(patternsFileName);
+ }
+
this.isGitRepo = isGitRepository(this.projectRoot);
if (this.isGitRepo) {
- const gitIgnoreFiles = [
- path.join(this.projectRoot, '.gitignore'),
- path.join(this.projectRoot, '.git', 'info', 'exclude'),
- ];
+ patternFiles.push('.gitignore');
+ patternFiles.push(path.join('.git', 'info', 'exclude'));
// Always ignore .git directory regardless of .gitignore content
this.addPatterns(['.git']);
-
- for (const gitIgnoreFile of gitIgnoreFiles) {
- try {
- const content = await fs.readFile(gitIgnoreFile, 'utf-8');
- const patterns = content.split('\n').map((p) => p.trim());
- this.addPatterns(patterns);
- } catch (_error) {
- // File doesn't exist or can't be read, continue silently
- }
+ }
+ for (const pf of patternFiles) {
+ try {
+ await this.loadPatterns(pf);
+ } catch (_error) {
+ // File doesn't exist or can't be read, continue silently
}
}
}
+ async loadPatterns(patternsFileName: string): Promise<void> {
+ const content = await fs.readFile(
+ path.join(this.projectRoot, patternsFileName),
+ 'utf-8',
+ );
+ const patterns = content
+ .split('\n')
+ .map((p) => p.trim())
+ .filter((p) => p !== '' && !p.startsWith('#'));
+ this.addPatterns(patterns);
+ }
+
private addPatterns(patterns: string[]) {
this.ig.add(patterns);
+ this.patterns.push(...patterns);
}
isIgnored(filePath: string): boolean {
- if (!this.isGitRepo) {
- return false;
- }
-
const relativePath = path.isAbsolute(filePath)
? path.relative(this.projectRoot, filePath)
: filePath;
@@ -67,11 +77,10 @@ export class GitIgnoreParser implements GitIgnoreFilter {
normalizedPath = normalizedPath.substring(2);
}
- const ignored = this.ig.ignores(normalizedPath);
- return ignored;
+ return this.ig.ignores(normalizedPath);
}
- getGitRepoRoot(): string {
- return this.projectRoot;
+ getPatterns(): string[] {
+ return this.patterns;
}
}