.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
logs
node_modules
npm-debug.log*
npm-debug.log
package
pids
reports
www
www

View File

@ -53,17 +53,34 @@
* @returns {generator} The passed generator, for promise chaining.
*/
function configureGitIgnore (generator) {
var ignoreContent = Object.keys(excludedPaths).sort().join('\n');
var ignoreContent = buildGitignore();
if (ignoreContent.length === 0) {
// Delete the file if there's nothing to ignore.
projectBuilder.removeFile(filePath);
} else {
projectBuilder.writeFile(filePath, ignoreContent);
projectBuilder.writeFile(filePath, buildGitignore);
}
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 = {
init: initGitignore,
prompt: noop,

View File

@ -84,13 +84,48 @@
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n');
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(2);
expect(ignoreContent[0]).toEqual('one');
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.',
function () {
mockGenerator.fs.write('.gitignore', ['b_line', 'a_line'].join('\n'));
@ -101,7 +136,7 @@
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n');
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(2);
expect(ignoreContent[0]).toBe('a_line');
expect(ignoreContent[1]).toBe('b_line');
@ -117,7 +152,7 @@
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n');
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(2);
expect(ignoreContent[0]).toBe('1_one');
expect(ignoreContent[1]).toBe('2_two');
@ -133,7 +168,7 @@
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n');
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(1);
expect(ignoreContent[0]).toBe('1_one');
});
@ -148,7 +183,7 @@
var files = projectBuilder.getIncludedFiles();
var ignoreRef = files[0];
var ignoreContent = ignoreRef.content.split('\n');
var ignoreContent = ignoreRef.content().split('\n');
expect(ignoreContent.length).toBe(1);
expect(ignoreContent[0]).toBe('1_one');
});