UNPKG

thegit

Version:

Implementation of git in node.js.

97 lines (85 loc) 2.36 kB
const globals = require("./../globals"); const { listPathsInDir, writeToFile, readFile, pathExists, isFile, } = require('../util/fs_util'); const { isInit, createObjectFromFileContent, hash } = require('../util/util'); function addCaller(...args) { if (["-A", "--all"].includes(args[0])) { addAll(); return; } // if(['.','./'].includes(args[0])){ // let files = listPathsInDir(globals.rootToWorkingPath).filter((file) => { // return isFile(globals.rootToWorkingPath+file) && !isIgnoredFromAdd(globals.rootToWorkingPath+file); // }).map(file=> { // return globals.rootToWorkingPath+file; // }); // console.log(files); // add(files); // return; // } // TODO need to add ../ resolution support let files = args.map((file) => { return globals.rootToWorkingPath + file; }); for (let file of files) { if (!(pathExists(file) && isFile(file))) { console.log(`fatal: pathspec '${file}' did not match any files`); return; } } add(files); } function add(files) { let fileToHash = {}; readFile(globals.indexDir) .split("\n") .filter(e=>e) .forEach(line=>{ let [fileHash,name] = line.split(' '); fileToHash[name] = fileHash; }) for (let file of files) { let fileContent = readFile(file); let fileHash = hash(fileContent); fileToHash[file] = fileHash; createObjectFromFileContent(fileContent); } let indexContent = ""; for(let file in fileToHash){ indexContent += `${fileToHash[file]} ${file}\n`; } writeToFile(globals.indexDir, indexContent); } function addAll() { let files = listPathsInDir("").filter((file) => { return isFile(file) && !isIgnoredFromAdd(file); }); writeToFile(globals.indexDir,""); add(files); } function isIgnoredFromAdd(file) { let ignored = [".legit/"]; if(pathExists('.legitignore') && isFile('.legitignore')) ignored = [...ignored,...readFile('.legitignore').split("\n").filter(e=>e)]; for(let path of ignored){ if(file.slice(0,path.length)==path || file.slice(0,path.length+1)==`${path}/`) return true; } return false; // return file.slice(0,7) == ".legit/"; } module.exports = { addCaller, add, addAll, isIgnoredFromAdd };