130 lines
No EOL
3.8 KiB
Dart
130 lines
No EOL
3.8 KiB
Dart
// ignore_for_file: avoid_init_to_null
|
|
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:oto_cli/oto/commands/command.dart';
|
|
import 'package:oto_cli/oto/data/command_data.dart';
|
|
import 'package:dart_framework/platform/process.dart';
|
|
|
|
class GitHub extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataGitHub.fromJson(getParam(command));
|
|
|
|
var shell = StringBuffer(getCDPath(workspace));
|
|
var commands = data.commands;
|
|
for (var item in commands) {
|
|
shell.write(' && gh ${Command.getPathNormal(item)}');
|
|
}
|
|
|
|
var process = await ProcessExecutor.start(shell);
|
|
|
|
return await completeProcess(process, command);
|
|
}
|
|
}
|
|
|
|
class GitHubPullRequestCreate extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataGitHubPullRequestCreate.fromJson(getParam(command));
|
|
|
|
var shell = StringBuffer(getCDPath(workspace));
|
|
shell.write(' && gh pr create --title "${data.title}" --body "${data.body}" -B ${data.branch}');
|
|
|
|
var process = await ProcessExecutor.start(shell);
|
|
var passExitCodes = [0, 1 /*already exists*/];
|
|
var exitCode = await process.process.exitCode;
|
|
if(passExitCodes.contains(exitCode))
|
|
{
|
|
var resultMessage = '';
|
|
if(exitCode == 1)
|
|
{
|
|
resultMessage = process.stderr.toString().replaceAll('\n', '');
|
|
var startIndex = resultMessage.indexOf(':') + 1;
|
|
resultMessage = resultMessage.substring(startIndex);
|
|
}
|
|
else
|
|
{
|
|
resultMessage = process.stdout.toString().replaceAll('\n', '');
|
|
}
|
|
|
|
String? url = null;
|
|
String? number = null;
|
|
if(!resultMessage.contains('GraphQL: No commits'))
|
|
{
|
|
var num = resultMessage.substring(resultMessage.lastIndexOf('/') + 1);
|
|
url = resultMessage;
|
|
number = num.toString();
|
|
}
|
|
await setProperty(data.setURL, url);
|
|
await setProperty(data.setNumber, number);
|
|
}
|
|
|
|
return await completeProcess(process, command, passExitCodes: passExitCodes);
|
|
}
|
|
}
|
|
|
|
class GitHubPullRequestList extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataGitHubPullRequestList.fromJson(getParam(command));
|
|
|
|
if(data.keys.isEmpty) throw Exception('keys not exist');
|
|
var keysString = data.keys.join(',');
|
|
|
|
var shell = StringBuffer(getCDPath(workspace));
|
|
shell.write(' && gh pr list --json $keysString');
|
|
|
|
var decorder = Platform.isWindows ? SystemEncoding().decoder : utf8.decoder;
|
|
var process = await ProcessExecutor.start(shell, decoder: decorder);
|
|
var exitCode = await process.process.exitCode;
|
|
|
|
if(exitCode == 0)
|
|
{
|
|
Map<String, dynamic>? target = null;
|
|
var jsonRaw = process.stdout.toString();
|
|
jsonRaw = jsonRaw.substring(jsonRaw.indexOf('['));
|
|
List<dynamic> list = jsonDecode(jsonRaw) as List<dynamic>;
|
|
for(Map<String, dynamic> item in list)
|
|
{
|
|
if(item.containsKey(data.targetKey))
|
|
{
|
|
if(item[data.targetKey] == data.targetValue)
|
|
{
|
|
target = item;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(target == null)
|
|
{
|
|
await setProperty(data.setValue, null);
|
|
}
|
|
else
|
|
{
|
|
await setProperty(data.setValue, jsonEncode(target));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
await setProperty(data.setValue, null);
|
|
}
|
|
return await completeProcess(process, command);
|
|
}
|
|
}
|
|
|
|
class GitHubPullRequestClose extends Command {
|
|
@override
|
|
Future execute(DataCommand command) async {
|
|
var data = DataGitHubPullRequestClose.fromJson(getParam(command));
|
|
|
|
var shell = StringBuffer(getCDPath(workspace));
|
|
shell.write(' && gh pr close ${data.number}');
|
|
|
|
var decorder = Platform.isWindows ? SystemEncoding().decoder : utf8.decoder;
|
|
var process = await ProcessExecutor.start(shell, decoder: decorder);
|
|
return await completeProcess(process, command);
|
|
}
|
|
} |