sourcecontrol
Version:
A modern TypeScript CLI application for source control
126 lines • 6.01 kB
JavaScript
;
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