UNPKG

sourcecontrol

Version:

A modern TypeScript CLI application for source control

126 lines 6.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkIgnoreStatus = exports.editIgnoreFile = exports.listIgnorePatterns = exports.addPatternsToIgnore = exports.createDefaultIgnoreFile = void 0; const inquirer_1 = __importDefault(require("inquirer")); const path_1 = __importDefault(require("path")); const ignore_1 = require("../../core/ignore"); const ignore_display_1 = require("./ignore.display"); const fs_extra_1 = __importDefault(require("fs-extra")); const chalk_1 = __importDefault(require("chalk")); const child_process_1 = require("child_process"); const createDefaultIgnoreFile = async (repository) => { const ignorePath = path_1.default.join(repository.workingDirectory().toString(), ignore_1.IgnorePattern.DEFAULT_SOURCE); if (await fs_extra_1.default.pathExists(ignorePath)) { const answer = await inquirer_1.default.prompt([ { type: 'confirm', name: 'overwrite', message: chalk_1.default.yellow('.sourceignore already exists. Overwrite?'), default: false, }, ]); if (!answer.overwrite) { console.log(chalk_1.default.yellow('Cancelled')); return; } } await ignore_1.IgnoreManager.createDefaultIgnoreFile(repository.workingDirectory().toString()); (0, ignore_display_1.displayIgnoreFileCreated)(); }; exports.createDefaultIgnoreFile = createDefaultIgnoreFile; const addPatternsToIgnore = async (repository, ignoreManager, patterns) => { const ignorePath = path_1.default.join(repository.workingDirectory().toString(), ignore_1.IgnorePattern.DEFAULT_SOURCE); if (!(await fs_extra_1.default.pathExists(ignorePath))) { await fs_extra_1.default.writeFile(ignorePath, '# Source Control Ignore File\n\n', 'utf8'); } for (const pattern of patterns) { await ignoreManager.addPattern(pattern); } (0, ignore_display_1.displayPatternsAdded)(patterns); }; exports.addPatternsToIgnore = addPatternsToIgnore; const listIgnorePatterns = async (repository) => { const repoRoot = repository.workingDirectory().fullpath(); const files = []; const rootIgnore = path_1.default.join(repoRoot, ignore_1.IgnorePattern.DEFAULT_SOURCE); if (await fs_extra_1.default.pathExists(rootIgnore)) { const content = await fs_extra_1.default.readFile(rootIgnore, 'utf8'); const patterns = content.split('\n').filter((line) => line.trim() && !line.startsWith('#')); if (patterns.length > 0) { files.push({ path: ignore_1.IgnorePattern.DEFAULT_SOURCE, patterns }); } } const findIgnoreFiles = async (dir, prefix = '') => { const entries = await fs_extra_1.default.readdir(dir, { withFileTypes: true }); for (const entry of entries) { if (entry.isDirectory()) { const fullPath = path_1.default.join(dir, entry.name); const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name; if (entry.name === '.source' || entry.name === '.git') continue; const ignorePath = path_1.default.join(fullPath, ignore_1.IgnorePattern.DEFAULT_SOURCE); if (await fs_extra_1.default.pathExists(ignorePath)) { const content = await fs_extra_1.default.readFile(ignorePath, 'utf8'); const patterns = content .split('\n') .filter((line) => line.trim() && !line.startsWith('#')); if (patterns.length > 0) { files.push({ path: path_1.default.join(relativePath, ignore_1.IgnorePattern.DEFAULT_SOURCE), patterns, }); } } await findIgnoreFiles(fullPath, relativePath); } } }; await findIgnoreFiles(repoRoot); (0, ignore_display_1.displayIgnorePatterns)(files); }; exports.listIgnorePatterns = listIgnorePatterns; const editIgnoreFile = async (repository) => { const ignorePath = path_1.default.join(repository.workingDirectory().toString(), ignore_1.IgnorePattern.DEFAULT_SOURCE); if (!(await fs_extra_1.default.pathExists(ignorePath))) { const answer = await inquirer_1.default.prompt([ { type: 'confirm', name: 'create', message: chalk_1.default.yellow('.sourceignore does not exist. Create it?'), default: true, }, ]); if (answer.create) { await ignore_1.IgnoreManager.createDefaultIgnoreFile(repository.workingDirectory().toString()); } else { return; } } const editor = process.env['EDITOR'] || 'nano'; console.log(chalk_1.default.blue(`Opening ${ignorePath} in ${editor}...`)); const child = (0, child_process_1.spawn)(editor, [ignorePath], { stdio: 'inherit', }); child.on('exit', (code) => { if (code === 0) { console.log(chalk_1.default.green('✓ File saved')); } }); }; exports.editIgnoreFile = editIgnoreFile; const checkIgnoreStatus = async (ignoreManager, filePaths) => { const results = []; filePaths.forEach(async (filePath) => { const normalizedPath = path_1.default.normalize(filePath).replace(/\\/g, '/'); const isDir = (await fs_extra_1.default.pathExists(filePath)) && (await fs_extra_1.default.stat(filePath)).isDirectory(); const ignored = ignoreManager.isIgnored(normalizedPath, isDir); results.push({ path: filePath, ignored }); }); (0, ignore_display_1.displayIgnoreCheckResults)(results); }; exports.checkIgnoreStatus = checkIgnoreStatus; //# sourceMappingURL=ignore.handler.js.map