Spaces:
Running
Running
/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*/ | |
const fs = require('fs'); | |
const preamble = require('./preamble'); | |
const pathTool = require('path'); | |
const chalk = require('chalk'); | |
// In the `.headerignore`, each line is a pattern in RegExp. | |
// all relative path (based on the echarts base directory) is tested. | |
// The pattern should match the relative path completely. | |
const excludesPath = pathTool.join(__dirname, '../.headerignore'); | |
const ecBasePath = pathTool.join(__dirname, '../'); | |
const isVerbose = process.argv[2] === '--verbose'; | |
// const lists = [ | |
// '../src/**/*.js', | |
// '../build/*.js', | |
// '../benchmark/src/*.js', | |
// '../benchmark/src/gulpfile.js', | |
// '../extension-src/**/*.js', | |
// '../extension/**/*.js', | |
// '../map/js/**/*.js', | |
// '../test/build/**/*.js', | |
// '../test/node/**/*.js', | |
// '../test/ut/core/*.js', | |
// '../test/ut/spe/*.js', | |
// '../test/ut/ut.js', | |
// '../test/*.js', | |
// '../theme/*.js', | |
// '../theme/tool/**/*.js', | |
// '../echarts.all.js', | |
// '../echarts.blank.js', | |
// '../echarts.common.js', | |
// '../echarts.simple.js', | |
// '../index.js', | |
// '../index.common.js', | |
// '../index.simple.js' | |
// ]; | |
function run() { | |
const updatedFiles = []; | |
const passFiles = []; | |
const pendingFiles = []; | |
eachFile(function (absolutePath, fileExt) { | |
const fileStr = fs.readFileSync(absolutePath, 'utf-8'); | |
const existLicense = preamble.extractLicense(fileStr, fileExt); | |
if (existLicense) { | |
passFiles.push(absolutePath); | |
return; | |
} | |
// Conside binary files, only add for files with known ext. | |
if (!preamble.hasPreamble(fileExt)) { | |
pendingFiles.push(absolutePath); | |
return; | |
} | |
fs.writeFileSync(absolutePath, preamble.addPreamble(fileStr, fileExt), 'utf-8'); | |
updatedFiles.push(absolutePath); | |
}); | |
console.log('\n'); | |
console.log('----------------------------'); | |
console.log(' Files that exists license: '); | |
console.log('----------------------------'); | |
if (passFiles.length) { | |
if (isVerbose) { | |
passFiles.forEach(function (path) { | |
console.log(chalk.green(path)); | |
}); | |
} | |
else { | |
console.log(chalk.green(passFiles.length + ' files. (use argument "--verbose" see details)')); | |
} | |
} | |
else { | |
console.log('Nothing.'); | |
} | |
console.log('\n'); | |
console.log('--------------------'); | |
console.log(' License added for: '); | |
console.log('--------------------'); | |
if (updatedFiles.length) { | |
updatedFiles.forEach(function (path) { | |
console.log(chalk.green(path)); | |
}); | |
} | |
else { | |
console.log('Nothing.'); | |
} | |
console.log('\n'); | |
console.log('----------------'); | |
console.log(' Pending files: '); | |
console.log('----------------'); | |
if (pendingFiles.length) { | |
pendingFiles.forEach(function (path) { | |
console.log(chalk.red(path)); | |
}); | |
} | |
else { | |
console.log('Nothing.'); | |
} | |
console.log('\nDone.'); | |
} | |
function eachFile(visit) { | |
const excludePatterns = []; | |
const extReg = /\.([a-zA-Z0-9_-]+)$/; | |
prepareExcludePatterns(); | |
travel('./'); | |
function travel(relativePath) { | |
if (isExclude(relativePath)) { | |
return; | |
} | |
const absolutePath = pathTool.join(ecBasePath, relativePath); | |
const stat = fs.statSync(absolutePath); | |
if (stat.isFile()) { | |
visit(absolutePath, getExt(absolutePath)); | |
} | |
else if (stat.isDirectory()) { | |
fs.readdirSync(relativePath).forEach(function (file) { | |
travel(pathTool.join(relativePath, file)); | |
}); | |
} | |
} | |
function prepareExcludePatterns() { | |
const content = fs.readFileSync(excludesPath, {encoding: 'utf-8'}); | |
content.replace(/\r/g, '\n').split('\n').forEach(function (line) { | |
line = line.trim(); | |
if (line && line.charAt(0) !== '#') { | |
excludePatterns.push(new RegExp(line)); | |
} | |
}); | |
} | |
function isExclude(relativePath) { | |
for (let i = 0; i < excludePatterns.length; i++) { | |
if (excludePatterns[i].test(relativePath)) { | |
return true; | |
} | |
} | |
} | |
function getExt(path) { | |
if (path) { | |
const mathResult = path.match(extReg); | |
return mathResult && mathResult[1]; | |
} | |
} | |
} | |
run(); | |