-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdate.js
More file actions
98 lines (94 loc) · 2.93 KB
/
update.js
File metadata and controls
98 lines (94 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const fs = require('fs');
const path = require('path');
const crc32 = require('./crc32.js');
function getManifest(base_dir, next, base_mode) {
let manifest = [];
function doit(dir, next) {
let left = 1;
let any_err;
function done(err) {
if (err) {
any_err = err;
}
--left;
if (left === 0) {
return next(any_err);
}
}
fs.readdir(dir, function (err, files) {
if (err) {
console.warn(err);
}
files.forEach(function (filename) {
if (filename[0] === '.' && filename !== '.luacheckrc') {
return;
}
let fn = `${dir}/${filename}`;
++left;
fs.stat(fn, function (err, stat) {
if (err) {
return done(err);
}
if (stat.isDirectory()) {
++left;
doit(fn, done);
} else if (stat.isFile()) {
let ext = path.extname(fn).toLowerCase();
if (ext === '.png' || ext === '.wav' || fn.match(/\/scripts\//u) ||
base_mode && path.basename(fn) !== 'manifest.txt' ||
path.basename(path.dirname(fn)) === 'data' && path.basename(fn) === 'charTemplate.txt' ||
// carrot_config.txt, ThistleReference.txt
path.basename(path.dirname(fn)).startsWith('ATITD') && ext === '.txt'
) {
++left;
fs.readFile(fn, function (err, data) {
if (err) {
return done(err);
}
let crc = crc32.crc32(data);
fn = path.relative(base_dir, fn);
manifest.push({ fn: fn, crc: crc, mt: (Number(stat.mtime) / 1000), size: stat.size });
done();
});
} else {
if (fn.endsWith('README.md') || fn.endsWith('LICENSE')) {
// expected files, ignore
} else {
console.log(`Skipping ${fn}`, path.basename(path.dirname(fn)), path.dirname(fn));
}
}
}
done();
});
});
done();
});
}
doit(base_dir, function () {
let ii;
let data = [];
data.push('Version 1');
manifest.sort(function (a, b) {
if (a.fn.toLowerCase() < b.fn.toLowerCase()) {
return -1;
} else if (a.fn.toLowerCase() > b.fn.toLowerCase()) {
return 1;
}
return 0;
});
for (ii = 0; ii < manifest.length; ++ii) {
let m = manifest[ii];
data.push('ManifestFileEntry');
data.push(` filename "${m.fn}"`);
data.push(` crc ${m.crc}`);
//data.push(' time ' + m.mt);
data.push(` size ${m.size}`);
data.push('End');
}
next(data.join('\n'));
});
}
exports.getManifest = getManifest;
if (require.main === module) {
getManifest('.', console.log, process.argv[2] === '--base');
}