48 lines
1.7 KiB
TypeScript
48 lines
1.7 KiB
TypeScript
import * as plugins from './mod.plugins.js';
|
|
import * as paths from '../paths.js';
|
|
|
|
import { Project } from '../classes.project.js';
|
|
|
|
import { logger } from '../gitzone.logging.js';
|
|
const gitignorePath = plugins.path.join(paths.cwd, './.gitignore');
|
|
|
|
export const run = async (projectArg: Project) => {
|
|
const gitignoreExists = await plugins.smartfile.fs.fileExists(gitignorePath);
|
|
let customContent = '';
|
|
|
|
if (gitignoreExists) {
|
|
// lets get the existing gitignore file
|
|
const existingGitIgnoreString =
|
|
plugins.smartfile.fs.toStringSync(gitignorePath);
|
|
|
|
// Check for different custom section markers
|
|
const customMarkers = ['#------# custom', '# custom'];
|
|
for (const marker of customMarkers) {
|
|
const splitResult = existingGitIgnoreString.split(marker);
|
|
if (splitResult.length > 1) {
|
|
// Get everything after the marker (excluding the marker itself)
|
|
customContent = splitResult[1].trim();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Write the template
|
|
const templateModule = await import('../mod_template/index.js');
|
|
const ciTemplate = await templateModule.getTemplate('gitignore');
|
|
await ciTemplate.writeToDisk(paths.cwd);
|
|
|
|
// Append the custom content if it exists
|
|
if (customContent) {
|
|
const newGitignoreContent =
|
|
plugins.smartfile.fs.toStringSync(gitignorePath);
|
|
// The template already ends with "#------# custom", so just append the content
|
|
const finalContent =
|
|
newGitignoreContent.trimEnd() + '\n' + customContent + '\n';
|
|
await plugins.smartfile.fs.toFs(finalContent, gitignorePath);
|
|
logger.log('info', 'Updated .gitignore while preserving custom section!');
|
|
} else {
|
|
logger.log('info', 'Added a .gitignore!');
|
|
}
|
|
};
|