forked from firefox-devtools/debugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcopy.js
More file actions
118 lines (102 loc) · 3.16 KB
/
copy.js
File metadata and controls
118 lines (102 loc) · 3.16 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
/*
* copy files to mc
* node ./bin/copy --mc ../gecko-dev
*
* copy files per commit
* node ./bin/copy --mc ../gecko-dev --sha 123
*
* copy files per commit with a message
* node ./bin/copy --mc ../gecko-dev --sha 123 --message "bug 123 (release 106) __message__.r=dwalsh"
*/
const copyAssets = require("./copy-assets");
const copyModules = require("./copy-modules");
const minimist = require("minimist");
const fs = require("fs");
const chalk = require("chalk");
const shell = require("shelljs");
const path = require("path");
const args = minimist(process.argv.slice(1), {
string: ["mc", "sha", "message"],
boolean: ["watch", "symlink", "assets"]
});
const mc = args.mc || "./firefox";
const watch = args.watch;
const symlink = args.symlink;
const assets = args.assets;
const sha = args.sha;
const message = args.message || "";
const mcPath = path.join(__dirname, mc);
async function copy({ assets, mc, watch, symlink }) {
if (fs.existsSync(mc)) {
try {
await copyAssets({ assets, mc, watch, symlink });
await copyModules.run({ mc, watch });
} catch (e) {
console.error(e);
if (e.code === "ENOENT") {
missingFilesErrorMessage();
}
}
} else {
missingFilesErrorMessage();
}
}
async function start() {
console.log(`Copying Files to ${mc} with params: `, {
watch,
assets,
symlink
});
return copy({ watch, assets, mc, symlink });
}
function missingFilesErrorMessage() {
const errorMessage = [
"It looks like you are missing some files. The mozilla-central ",
"codebase may be missing at ${mc}. You can clone mozilla-central by ",
"running `./bin/prepare-mochitests-dev` from the root of the ",
"debugger.html repository. You can find more information on bundling ",
"or mochitests at ",
"https://github.com/firefox-devtools/debugger/blob/master/docs/bundling.md or ",
"https://github.com/firefox-devtools/debugger/blob/master/docs/mochitests.md"
].join("");
console.warn(chalk.yellow(errorMessage));
}
async function copyCommits() {
function exec(cmd) {
return shell.exec(cmd, { silent: true }).stdout;
}
function getMessage(sha) {
const msg = exec(`git log --format=%B -n 1 ${sha}`).split("\n")[0]
return message.replace('__message__', msg);
}
function getCommitsAfter(sha) {
return exec(`git rev-list --reverse ${sha}^..HEAD`)
.trim()
.split("\n");
}
function commitChanges(message, authorship) {
exec(
`git add devtools; git commit --author="${authorship}" -m "${message}"`
);
}
const commits = getCommitsAfter(sha);
for (const commit of commits) {
const message = getMessage(commit);
console.log(`Copying ${message}`);
exec(`git checkout ${commit}`);
const authorship = exec('git log -n1 --format="%aN <%aE>"');
await copy({ mc, assets: true });
shell.cd(mc);
commitChanges(message, authorship);
shell.cd("-");
exec("git checkout .");
}
}
if (sha) {
copyCommits();
} else {
start();
}