mirror of
https://github.com/github/codeql-action.git
synced 2026-10-28 08:37:12 +00:00
71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
'use strict'
|
|
|
|
var hashFiles = require('./hash-files');
|
|
var jail = require('./jail');
|
|
var normalise = require('./normalise');
|
|
var q = require('q');
|
|
var resolveGlobs = require('./resolve-globs');
|
|
var validate = require('./validate');
|
|
|
|
/**
|
|
* Entry point into the module.
|
|
* Parses and validates the options,
|
|
* then performs the desired operation.
|
|
*
|
|
* @param {Object} options The desired options.
|
|
* @return {Promise} A promise to perform the desired operation.
|
|
*/
|
|
module.exports = function computeHash(options){
|
|
var deferred = q.defer();
|
|
var error = validate(options);
|
|
if (error) {
|
|
deferred.reject(error);
|
|
} else {
|
|
resolveGlobs(options.include)
|
|
.then(function(includes) {
|
|
options.include = includes;
|
|
return resolveGlobs(options.exclude);
|
|
})
|
|
.then(function(excludes) {
|
|
var files = options.include
|
|
// Remove excluded files
|
|
.filter(function(item) {
|
|
return excludes.indexOf(item) === -1;
|
|
})
|
|
// Remove duplicate entries
|
|
.reduce(function(memo, next){
|
|
if (memo.indexOf(next) < 0) {
|
|
memo.push(next);
|
|
}
|
|
return memo;
|
|
}, []);
|
|
var error = jail(files, options.jail);
|
|
if (error) {
|
|
deferred.reject(error);
|
|
} else if (files.length === 0) {
|
|
deferred.reject(
|
|
'No files were matched using the provided globs.'
|
|
);
|
|
} else {
|
|
files.sort();
|
|
if (options.files) {
|
|
if (options.jail) {
|
|
options.jail = normalise(options.jail);
|
|
files = files.map(function(file) {
|
|
return file.substr(options.jail.length + 1);
|
|
});
|
|
}
|
|
deferred.resolve(files);
|
|
} else {
|
|
deferred.resolve(
|
|
hashFiles(files, options)
|
|
);
|
|
}
|
|
}
|
|
})
|
|
.fail(function(error) {
|
|
deferred.reject(error);
|
|
});
|
|
}
|
|
return deferred.promise;
|
|
}; |