mirror of
https://github.com/HeyPuter/puter
synced 2024-11-14 22:06:00 +00:00
dev(tools): add missing header adding to license-headers
This commit is contained in:
parent
fac08c4152
commit
713b1f5889
@ -235,7 +235,7 @@ const CommentParser = () => {
|
|||||||
}],
|
}],
|
||||||
block: ['block', {
|
block: ['block', {
|
||||||
start: '/*',
|
start: '/*',
|
||||||
end: '*/',
|
end: ' */',
|
||||||
prefix: ' * ',
|
prefix: ' * ',
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
|
@ -28,8 +28,10 @@ const EXCLUDE_LISTS = {
|
|||||||
/\/node_modules$/,
|
/\/node_modules$/,
|
||||||
/^node_modules$/,
|
/^node_modules$/,
|
||||||
/package-lock\.json/,
|
/package-lock\.json/,
|
||||||
|
/^src\/dev-center\/js/,
|
||||||
/src\/backend\/src\/public\/assets/,
|
/src\/backend\/src\/public\/assets/,
|
||||||
/^src\/gui\/src\/lib/
|
/^src\/gui\/src\/lib/,
|
||||||
|
/^src\/puter\.js/,
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Puter Technologies Inc.
|
||||||
|
*
|
||||||
|
* This file is part of Puter.
|
||||||
|
*
|
||||||
|
* Puter is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published
|
||||||
|
* by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
const levenshtein = require('js-levenshtein');
|
const levenshtein = require('js-levenshtein');
|
||||||
const DiffMatchPatch = require('diff-match-patch');
|
const DiffMatchPatch = require('diff-match-patch');
|
||||||
const dmp = new DiffMatchPatch();
|
const dmp = new DiffMatchPatch();
|
||||||
@ -307,6 +326,153 @@ const cmd_check_fn = async () => {
|
|||||||
t.printTable();
|
t.printTable();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const cmd_sync_fn = async () => {
|
||||||
|
const comment_parser = CommentParser();
|
||||||
|
const desired_header = fs.readFileSync(
|
||||||
|
path_.join(__dirname, '../../doc/license_header.txt'),
|
||||||
|
'utf-8',
|
||||||
|
);
|
||||||
|
const license_checker = LicenseChecker({
|
||||||
|
comment_parser,
|
||||||
|
desired_header,
|
||||||
|
});
|
||||||
|
|
||||||
|
const counts = {
|
||||||
|
ok: 0,
|
||||||
|
missing: 0,
|
||||||
|
conflict: 0,
|
||||||
|
error: 0,
|
||||||
|
unsupported: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
const walk_iterator = walk({
|
||||||
|
excludes: EXCLUDE_LISTS.NOT_SOURCE,
|
||||||
|
}, '.');
|
||||||
|
for await ( const value of walk_iterator ) {
|
||||||
|
if ( value.is_dir ) continue;
|
||||||
|
|
||||||
|
process.stdout.write(value.path + ' ... ');
|
||||||
|
|
||||||
|
if ( ! license_checker.supports({ filename: value.name }) ) {
|
||||||
|
process.stdout.write(`\x1B[37;1mUNSUPPORTED\x1B[0m\n`);
|
||||||
|
counts.unsupported++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const source = fs.readFileSync(value.path, 'utf-8');
|
||||||
|
const diff_info = await license_checker.compare({
|
||||||
|
filename: value.name,
|
||||||
|
source,
|
||||||
|
})
|
||||||
|
if ( ! diff_info ) {
|
||||||
|
counts.error++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( ! diff_info.has_header ) {
|
||||||
|
if ( false ) fs.writeFileSync(
|
||||||
|
value.path,
|
||||||
|
comment_parser.output_comment({
|
||||||
|
style: 'block',
|
||||||
|
filename: value.name,
|
||||||
|
text: desired_header,
|
||||||
|
}) +
|
||||||
|
'\n' +
|
||||||
|
source
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( diff_info ) {
|
||||||
|
if ( diff_info.distance !== 0 ) {
|
||||||
|
counts.conflict++;
|
||||||
|
process.stdout.write(`\x1B[31;1mCONFLICT\x1B[0m\n`);
|
||||||
|
} else {
|
||||||
|
counts.ok++;
|
||||||
|
process.stdout.write(`\x1B[32;1mOK\x1B[0m\n`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log('NO COMMENT');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const { Table } = require('console-table-printer');
|
||||||
|
const t = new Table({
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: 'License Header',
|
||||||
|
name: 'situation', alignment: 'left', color: 'white_bold' },
|
||||||
|
{
|
||||||
|
title: 'Number of Files',
|
||||||
|
name: 'count', alignment: 'right' },
|
||||||
|
],
|
||||||
|
colorMap: {
|
||||||
|
green: '\x1B[32;1m',
|
||||||
|
yellow: '\x1B[33;1m',
|
||||||
|
red: '\x1B[31;1m',
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
|
||||||
|
if ( counts.error > 0 ) {
|
||||||
|
console.log(`\x1B[31;1mTHERE WERE SOME ERRORS!\x1B[0m`);
|
||||||
|
console.log('check the log above for the stack trace');
|
||||||
|
console.log('');
|
||||||
|
t.addRow({ situation: 'error', count: counts.error },
|
||||||
|
{ color: 'red' });
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(dedent(`
|
||||||
|
\x1B[31;1mAny text below is mostly lies!\x1B[0m
|
||||||
|
This tool is still being developed and most of what's
|
||||||
|
described is "the plan" rather than a thing that will
|
||||||
|
actually happen.
|
||||||
|
\x1B[31;1m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\x1B[0m
|
||||||
|
`));
|
||||||
|
|
||||||
|
if ( counts.conflict ) {
|
||||||
|
console.log(dedent(`
|
||||||
|
\x1B[37;1mIt looks like you have some conflicts!\x1B[0m
|
||||||
|
Run the following command to update license headers:
|
||||||
|
|
||||||
|
\x1B[36;1maddlicense sync\x1B[0m
|
||||||
|
|
||||||
|
This will begin an interactive license update.
|
||||||
|
Any time the license doesn't quite match you will
|
||||||
|
be given the option to replace it or skip the file.
|
||||||
|
\x1B[90mSee \`addlicense help sync\` for other options.\x1B[0m
|
||||||
|
|
||||||
|
You will also be able to choose
|
||||||
|
"remember for headers matching this one"
|
||||||
|
if you know the same issue will come up later.
|
||||||
|
`));
|
||||||
|
} else if ( counts.missing ) {
|
||||||
|
console.log(dedent(`
|
||||||
|
\x1B[37;1mSome missing license headers!\x1B[0m
|
||||||
|
Run the following command to add the missing license headers:
|
||||||
|
|
||||||
|
\x1B[36;1maddlicense sync\x1B[0m
|
||||||
|
`));
|
||||||
|
} else {
|
||||||
|
console.log(dedent(`
|
||||||
|
\x1B[37;1mNo action to perform!\x1B[0m
|
||||||
|
Run the following command to do absolutely nothing:
|
||||||
|
|
||||||
|
\x1B[36;1maddlicense sync\x1B[0m
|
||||||
|
`));
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('');
|
||||||
|
|
||||||
|
t.addRow({ situation: 'ok', count: counts.ok },
|
||||||
|
{ color: 'green' });
|
||||||
|
t.addRow({ situation: 'missing', count: counts.missing },
|
||||||
|
{ color: 'yellow' });
|
||||||
|
t.addRow({ situation: 'conflict', count: counts.conflict },
|
||||||
|
{ color: 'red' });
|
||||||
|
t.addRow({ situation: 'unsupported', count: counts.unsupported });
|
||||||
|
t.printTable();
|
||||||
|
};
|
||||||
|
|
||||||
const main = async () => {
|
const main = async () => {
|
||||||
const { program } = require('commander');
|
const { program } = require('commander');
|
||||||
const helptext = dedent(`
|
const helptext = dedent(`
|
||||||
@ -343,9 +509,7 @@ const main = async () => {
|
|||||||
.description('synchronize files with license header rules')
|
.description('synchronize files with license header rules')
|
||||||
.option('-n, --non-interactive', 'disable prompting')
|
.option('-n, --non-interactive', 'disable prompting')
|
||||||
.action(() => {
|
.action(() => {
|
||||||
console.log('called sync');
|
run_command({ cmd: cmd_sync, cmd_fn: cmd_sync_fn })
|
||||||
console.log(program.opts());
|
|
||||||
console.log(cmd_sync.opts());
|
|
||||||
})
|
})
|
||||||
program.parse(process.argv);
|
program.parse(process.argv);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user