Colorize filenames with conflicts when upgrading

Summary:
Visually show files merged with conflicts when running `react-native-git-upgrade`.

<!--
Thank you for sending the PR! We appreciate you spending the time to work on these changes.

Help us understand your motivation by explaining why you decided to make this change.

You can learn more about contributing to React Native here: http://facebook.github.io/react-native/docs/contributing.html

Happy contributing!

-->

After running `react-native-git-upgrade`, files with conflicts are not immediately recognised visually. With this patch, files with conflicts are highlighted in red.

![image](https://user-images.githubusercontent.com/771989/36086385-fc183baa-1006-11e8-8862-0867b82b7ec1.png)

<!--
Help reviewers and the release process by writing your own release notes

**INTERNAL and MINOR tagged notes will not be included in the next version's final release notes.**

  CATEGORY
[----------]        TYPE
[ CLI      ]   [-------------]      LOCATION
[ DOCS     ]   [ BREAKING    ]   [-------------]
[ GENERAL  ]   [ BUGFIX      ]   [-{Component}-]
[ INTERNAL ]   [ ENHANCEMENT ]   [ {File}      ]
[ IOS      ]   [ FEATURE     ]   [ {Directory} ]   |-----------|
[ ANDROID  ]   [ MINOR       ]   [ {Framework} ] - | {Message} |
[----------]   [-------------]   [-------------]   |-----------|

[CATEGORY] [TYPE] [LOCATION] - MESSAGE

 EXAMPLES:

 [IOS] [BREAKING] [FlatList] - Change a thing that breaks other things
 [ANDROID] [BUGFIX] [TextInput] - Did a thing to TextInput
 [CLI] [FEATURE] [local-cli/info/info.js] - CLI easier to do things with
 [DOCS] [BUGFIX] [GettingStarted.md] - Accidentally a thing/word
 [GENERAL] [ENHANCEMENT] [Yoga] - Added new yoga thing/position
 [INTERNAL] [FEATURE] [./scripts] - Added thing to script that nobody will see
-->
[CLI] [ENHANCEMENT] [react-native-git-upgrade/cliEntry.js] - Print files with conflicts in red.
Closes https://github.com/facebook/react-native/pull/17947

Differential Revision: D6977042

Pulled By: hramos

fbshipit-source-id: 3c67561ea3acbee227a7a0cf42857af4fb75c75c
This commit is contained in:
Yao Bin Then 2018-02-13 08:51:12 -08:00 committed by Facebook Github Bot
parent cc6d0937c3
commit e53a8f7097
1 changed files with 19 additions and 4 deletions

View File

@ -33,9 +33,10 @@ log.heading = 'git-upgrade';
/** /**
* Promisify the callback-based shelljs function exec * Promisify the callback-based shelljs function exec
* @param logOutput If true, log the stdout of the command. * @param logOutput If true, log the stdout of the command.
* @param logger Custom logger to modify the output, invoked with the data and the stream.
* @returns {Promise} * @returns {Promise}
*/ */
function exec(command, logOutput) { function exec(command, logOutput, logger = null) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let stderr, stdout = ''; let stderr, stdout = '';
const child = shell.exec(command, {async: true, silent: true}); const child = shell.exec(command, {async: true, silent: true});
@ -43,13 +44,21 @@ function exec(command, logOutput) {
child.stdout.on('data', data => { child.stdout.on('data', data => {
stdout += data; stdout += data;
if (logOutput) { if (logOutput) {
if (logger) {
logger(data, process.stdout);
} else {
process.stdout.write(data); process.stdout.write(data);
} }
}
}); });
child.stderr.on('data', data => { child.stderr.on('data', data => {
stderr += data; stderr += data;
if (logger) {
logger(data, process.stderr);
} else {
process.stderr.write(data); process.stderr.write(data);
}
}); });
child.on('exit', (code, signal) => { child.on('exit', (code, signal) => {
@ -359,7 +368,13 @@ async function run(requestedVersion, cliArgs) {
try { try {
log.info('Apply the patch'); log.info('Apply the patch');
await exec(`git apply --3way ${patchPath}`, true); await exec(`git apply --3way ${patchPath}`, true, (data, stream) => {
if (data.indexOf('conflicts') >= 0 || data.startsWith('U ')) {
stream.write(`\x1b[31m${data}\x1b[0m`);
} else {
stream.write(data);
}
});
} catch (err) { } catch (err) {
log.warn( log.warn(
'The upgrade process succeeded but there might be conflicts to be resolved. ' + 'The upgrade process succeeded but there might be conflicts to be resolved. ' +