.gitignore includes files flagged as ignored.

If a file is ignored in the project builder, it is now persisted
into the .gitignore file in the project.

Change-Id: Ic8e5d08b82da5809b1dc2a8427f6563dc9acf00b
This commit is contained in:
Michael Krotscheck 2016-05-26 10:24:15 -07:00
parent 1ee651fd0e
commit 57c560e7d5
3 changed files with 61 additions and 9 deletions

4
.gitignore vendored
View File

@ -12,8 +12,8 @@ dist
lib-cov lib-cov
logs logs
node_modules node_modules
npm-debug.log* npm-debug.log
package package
pids pids
reports reports
www www

View File

@ -53,17 +53,34 @@
* @returns {generator} The passed generator, for promise chaining. * @returns {generator} The passed generator, for promise chaining.
*/ */
function configureGitIgnore (generator) { function configureGitIgnore (generator) {
var ignoreContent = Object.keys(excludedPaths).sort().join('\n'); var ignoreContent = buildGitignore();
if (ignoreContent.length === 0) { if (ignoreContent.length === 0) {
// Delete the file if there's nothing to ignore. // Delete the file if there's nothing to ignore.
projectBuilder.removeFile(filePath); projectBuilder.removeFile(filePath);
} else { } else {
projectBuilder.writeFile(filePath, ignoreContent); projectBuilder.writeFile(filePath, buildGitignore);
} }
return generator; return generator;
} }
/**
* Generate the content of our .gitignore file from the configured list of excluded paths,
* as well as any project-level configured ignoreFiles.
*
* @returns {string} The content of the .eslintignore file.
*/
function buildGitignore () {
var ignoredFiles = projectBuilder.getIgnoredFiles();
for (var i = 0; i < ignoredFiles.length; i++) {
if (!excludedPaths.hasOwnProperty(ignoredFiles[i])) {
excludedPaths[ignoredFiles[i]] = true;
}
}
return Object.keys(excludedPaths).sort().join('\n');
}
module.exports = { module.exports = {
init: initGitignore, init: initGitignore,
prompt: noop, prompt: noop,

View File

@ -84,13 +84,48 @@
var files = projectBuilder.getIncludedFiles(); var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n'); var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(2); expect(ignoreContent.length).toBe(2);
expect(ignoreContent[0]).toEqual('one'); expect(ignoreContent[0]).toEqual('one');
expect(ignoreContent[1]).toEqual('two'); expect(ignoreContent[1]).toEqual('two');
}); });
it('should include any files flagged as ignored in the project builder.',
function () {
mockGenerator.fs.write('.gitignore', '');
projectBuilder.ignoreFile('foo/bar.json');
gitignore.init(mockGenerator);
gitignore.prompt(mockGenerator);
gitignore.configure(mockGenerator);
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; // There should only be one file.
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(1);
expect(ignoreContent[0]).toBe('foo/bar.json');
});
it('should de-duplicate file paths from multiple locations.',
function () {
// include 'node_modules' from both an existing file and from the project builder.
mockGenerator.fs.write('.gitignore', ['node_modules'].join('\n'));
projectBuilder.ignoreFile('node_modules');
gitignore.init(mockGenerator);
gitignore.prompt(mockGenerator);
gitignore.configure(mockGenerator);
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; // There should only be one file.
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(1);
expect(ignoreContent[0]).toBe('node_modules');
});
it('should sort the ignored files.', it('should sort the ignored files.',
function () { function () {
mockGenerator.fs.write('.gitignore', ['b_line', 'a_line'].join('\n')); mockGenerator.fs.write('.gitignore', ['b_line', 'a_line'].join('\n'));
@ -101,7 +136,7 @@
var files = projectBuilder.getIncludedFiles(); var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n'); var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(2); expect(ignoreContent.length).toBe(2);
expect(ignoreContent[0]).toBe('a_line'); expect(ignoreContent[0]).toBe('a_line');
expect(ignoreContent[1]).toBe('b_line'); expect(ignoreContent[1]).toBe('b_line');
@ -117,7 +152,7 @@
var files = projectBuilder.getIncludedFiles(); var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n'); var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(2); expect(ignoreContent.length).toBe(2);
expect(ignoreContent[0]).toBe('1_one'); expect(ignoreContent[0]).toBe('1_one');
expect(ignoreContent[1]).toBe('2_two'); expect(ignoreContent[1]).toBe('2_two');
@ -133,7 +168,7 @@
var files = projectBuilder.getIncludedFiles(); var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n'); var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(1); expect(ignoreContent.length).toBe(1);
expect(ignoreContent[0]).toBe('1_one'); expect(ignoreContent[0]).toBe('1_one');
}); });
@ -148,7 +183,7 @@
var files = projectBuilder.getIncludedFiles(); var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0]; var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n'); var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(1); expect(ignoreContent.length).toBe(1);
expect(ignoreContent[0]).toBe('1_one'); expect(ignoreContent[0]).toBe('1_one');
}); });