Skip to content
This repository was archived by the owner on Mar 22, 2020. It is now read-only.

Commit 117fb18

Browse files
committed
ok
1 parent fdbbef9 commit 117fb18

6 files changed

Lines changed: 156 additions & 120 deletions

File tree

bin/init.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
const config = require("../config");
3+
const fse = require('fs-extra');
4+
const path = require('path');
5+
const execSync = require('child_process').execSync;
6+
7+
fse.emptyDirSync(config.repoRoot);
8+
execSync(`touch .gitkeep`, {cwd: config.repoRoot});
9+
10+
for(let repoName in config.secret.repos) {
11+
let repo = config.secret.repos[repoName];
12+
13+
execSync(`git clone --depth 1 https://github.com/${repoName}.git`, {cwd: config.repoRoot})
14+
}

cache/.gitkeep

Whitespace-only changes.

lib/countTranslation.js

Lines changed: 76 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,86 @@
11
'use strict';
22

33
const glob = require('glob');
4-
const config = require('config');
4+
const config = require('../config');
5+
const debug = require('debug')('countTranslation');
56
const path = require('path');
67
const fs = require('fs');
78
const jsdiff = require('diff');
8-
const log = require('log')();
9-
10-
module.exports = function () {
11-
12-
return function () {
13-
let args = require('yargs')
14-
.demand(['lang'])
15-
.argv;
16-
17-
return async function () {
18-
19-
let root = path.dirname(config.tutorialRoot);
20-
let rootEn = path.join(root, 'javascript-tutorial-en');
21-
let rootLang = path.join(root, 'javascript-tutorial-' + args.lang);
22-
23-
log.debug(`Compare ${rootEn} vs ${rootLang}`);
24-
let filesFrom = glob.sync('**/*.md', {cwd: rootEn}).filter(f => parseInt(f));
25-
26-
let filesTranslated = 0;
27-
let filesMissing = 0;
28-
let filesSimilar = 0;
29-
30-
for (let relPath of filesFrom) {
31-
let fileFrom = path.join(rootEn, relPath);
32-
let fileLang = path.join(rootLang, relPath);
33-
34-
log.debug(relPath);
35-
if (!fs.existsSync(fileLang)) {
36-
filesMissing++;
37-
log.debug("MISSING");
38-
continue;
39-
}
40-
41-
if (fs.statSync(fileFrom).size === 0) {
42-
// ignore zero files, don't count as translated
43-
// this way new repo translation starts with zero
44-
continue;
45-
}
46-
47-
let fileFromContent = fs.readFileSync(fileFrom, {encoding: 'utf8'});
48-
let fileLangContent = fs.readFileSync(fileLang, {encoding: 'utf8'});
49-
50-
fileFromContent = stripYamlHeader(fileFromContent);
51-
fileLangContent = stripYamlHeader(fileLangContent);
52-
53-
fileFromContent = stripCode(fileFromContent);
54-
fileLangContent = stripCode(fileLangContent);
55-
56-
fileFromContent = fileFromContent.trim();
57-
fileLangContent = fileLangContent.trim();
58-
// log.debug(fileFromContent);
59-
60-
let linesTotal = (fileFromContent.match(/\n+/g) || []).length;
61-
62-
/*
63-
64-
let added = 0;
65-
let removed = 0;
66-
try {
67-
let cmd = `git diff --no-index --numstat --patience ${esc(fileFrom)} ${esc(fileLang)}`;
68-
log.debug(cmd);
69-
let compare = execSync(cmd, {encoding: 'utf8'});
70-
} catch(err) {
71-
if (err.status !== 1) {
72-
throw err;
73-
}
74-
[added, removed] = err.output[1].trim().split('\t');
75-
}
76-
*/
77-
let diff = jsdiff.diffLines(fileFromContent, fileLangContent);
78-
79-
80-
let added = 0;
81-
let removed = 0;
82-
for(let obj of diff) {
83-
if (obj.added) added += obj.count;
84-
if (obj.removed) removed += obj.count;
85-
}
86-
87-
if (added + removed > linesTotal / 3) {
88-
log.debug("TRANSLATED", added, removed, linesTotal);
89-
filesTranslated++;
90-
} else {
91-
log.debug("SIMILAR", added, removed, linesTotal);
92-
filesSimilar++;
93-
}
94-
95-
// log.debug("RESULT", added, removed, linesTotal);
96-
//return;
97-
// if (added == 0 && removed == 0)
98-
//log.debug("RESULT", added, removed, linesTotal);
99-
100-
}
101-
102-
log.info("TOTAL", { filesTranslated, filesMissing, filesSimilar });
103-
}();
104-
105-
};
106-
};
1079

10+
module.exports = async function(rootEn, rootLang) {
11+
12+
debug(`Compare ${rootEn} vs ${rootLang}`);
13+
14+
let filesFrom = glob.sync('**/*.md', {cwd: rootEn}).filter(f => parseInt(f));
15+
16+
debug("filesFrom", filesFrom);
17+
18+
let filesTranslated = 0;
19+
let filesMissing = 0;
20+
let filesSimilar = 0;
21+
22+
for (let relPath of filesFrom) {
23+
let fileFrom = path.join(rootEn, relPath);
24+
let fileLang = path.join(rootLang, relPath);
25+
26+
debug(relPath);
27+
if (!fs.existsSync(fileLang)) {
28+
filesMissing++;
29+
debug("MISSING");
30+
continue;
31+
}
32+
33+
if (fs.statSync(fileFrom).size === 0) {
34+
// ignore zero files, don't count as translated
35+
// this way new repo translation starts with zero
36+
continue;
37+
}
38+
39+
let fileFromContent = fs.readFileSync(fileFrom, {encoding: 'utf8'});
40+
let fileLangContent = fs.readFileSync(fileLang, {encoding: 'utf8'});
41+
42+
fileFromContent = stripYamlHeader(fileFromContent);
43+
fileLangContent = stripYamlHeader(fileLangContent);
44+
45+
fileFromContent = stripCode(fileFromContent);
46+
fileLangContent = stripCode(fileLangContent);
47+
48+
fileFromContent = fileFromContent.trim();
49+
fileLangContent = fileLangContent.trim();
50+
// debug(fileFromContent);
51+
52+
let linesTotal = (fileFromContent.match(/\n+/g) || []).length;
53+
54+
let diff = jsdiff.diffLines(fileFromContent, fileLangContent);
55+
56+
57+
let added = 0;
58+
let removed = 0;
59+
for (let obj of diff) {
60+
if (obj.added) added += obj.count;
61+
if (obj.removed) removed += obj.count;
62+
}
63+
64+
if (added + removed > linesTotal / 3) {
65+
debug("TRANSLATED", added, removed, linesTotal);
66+
filesTranslated++;
67+
} else {
68+
debug("SIMILAR", added, removed, linesTotal);
69+
filesSimilar++;
70+
}
71+
72+
// debug("RESULT", added, removed, linesTotal);
73+
//return;
74+
// if (added == 0 && removed == 0)
75+
//debug("RESULT", added, removed, linesTotal);
76+
77+
}
78+
79+
let result = {filesTranslated, filesMissing, filesSimilar, filesTotal: filesFrom.length};
80+
debug("TOTAL", result);
81+
82+
return result;
83+
};
10884

10985
function stripCode(content) {
11086
return content.replace(/(^|\n[ \t]*)```(js|css|html)[\s\S]+\n[ \t]*```/gim, '\n');

lib/onUpdateHook.js

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,48 @@
11

22
const config = require("../config");
33
const path = require("path");
4-
const git = require("nodegit");
5-
const exec = require('mz/child_process');
4+
const countTranslation = require("./countTranslation");
5+
const exec = require('mz/child_process').exec;
66
const debug = require('debug')('onUpdateRepo');
77
const fs = require('fs');
88

99
module.exports = async function(githubHookInfo) {
1010
let repoDir = path.join(config.repoRoot, githubHookInfo.repository.name);
1111

1212
if (!fs.existsSync(repoDir)) {
13-
debug("Clone " + githubHookInfo.repository.clone_url + " to " + repoDir);
14-
await git.Clone(githubHookInfo.repository.clone_url, repoDir);
13+
await run(`git clone --depth 1 "${githubHookInfo.repository.clone_url}" "${repoDir}"`);
1514
}
1615

17-
let repo = await git.Repository.open(repoDir);
16+
await run(`git fetch origin`, {cwd: repoDir});
1817

19-
await repo.fetch('origin');
20-
let head = await repo.getReferenceCommit("refs/remotes/origin/master");
18+
await run(`git checkout -f origin/master`, {cwd: repoDir});
2119

22-
debug("hard reset to " + head);
20+
let repoConfig = config.secret.repos[githubHookInfo.repository.full_name];
2321

24-
// 3 = hard reset
25-
await git.Reset.reset(repo, head, 3, {});
22+
if (repoConfig.lang == 'en') {
23+
// don't count translation for en, just update local copy
24+
return;
25+
}
26+
27+
let rootEn = path.join(config.repoRoot, 'javascript-tutorial-en');
28+
let rootLang = path.join(config.repoRoot, githubHookInfo.repository.name);
29+
30+
let stats = await countTranslation(rootEn, rootLang);
31+
32+
let
33+
34+
console.log(compare);
2635
};
2736

2837

38+
async function run(cmd, options = {}) {
39+
if (!options.encoding) {
40+
options.encoding = 'utf-8';
41+
}
42+
43+
debug(cmd);
44+
let result = await exec(cmd, options);
45+
debug(result);
46+
47+
return result;
48+
}

package-lock.json

Lines changed: 35 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"dependencies": {
1212
"debug": "^3.1.0",
1313
"diff": "^3.5.0",
14+
"fs-extra": "^6.0.1",
1415
"glob": "^7.1.2",
1516
"koa": "^2.5.2",
1617
"koa-bodyparser": "^4.2.1",

0 commit comments

Comments
 (0)