oto/lib/oto/commands/git/git.dart

112 lines
3.3 KiB
Dart

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 Git extends Command {
@override
Future execute(DataCommand command) async {
var data = DataGit.fromJson(getParam(command));
print(workspace);
var shell = StringBuffer(getCDPath(workspace));
var commands = data.commands;
for (var item in commands) {
shell.write(' && git ${Command.getPathNormal(item)}');
}
var process = await ProcessExecutor.start(shell);
return await completeProcess(process, command);
}
}
//무시가가능한 에러 무시
class GitPush extends Command {
@override
Future execute(DataCommand command) async {
var data = DataGitPush.fromJson(getParam(command));
var shell = StringBuffer(getCDPath(workspace));
if(data.branch == null)
{
shell.write(' && git push');
}
else
{
shell.write(' && git push origin ${data.branch!}');
}
var process = await ProcessExecutor.start(shell);
return await completeProcess(process, command, passExitCodes: [1 /*Everything up-to-date*/]);
}
}
//로컬에 체크아웃이 없을시 체크아웃하고, 체크아웃이 있을시 이동, 원할시 pull수행
class GitCheckout extends Git {
@override
Future execute(DataCommand command) async {
var data = DataGitCheckout.fromJson(getParam(command));
var branch = data.branch;
var shell = StringBuffer(getCDPath(workspace));
shell.write(' && git checkout origin/$branch');
shell.write(' && git checkout -b $branch');
var process = await ProcessExecutor.start(shell);
var exitCode = await process.process.exitCode;
var ignores = [128/*Already exists*/];
if(ignores.contains(exitCode))
{
exitCode = 0;
}
if(exitCode == 0)
{
shell = StringBuffer(getCDPath(workspace));
shell.write(' && git checkout $branch');
if(data.executePull == null ? true : data.executePull!)
{
shell.write(' && git pull origin $branch');
}
process = await ProcessExecutor.start(shell);
exitCode = await process.process.exitCode;
}
return await completeProcess(process, command);
}
}
//Git commit에 대한 count 값을 리턴 해준다
class GitCount extends Command {
@override
Future execute(DataCommand command) async {
var data = DataGitCount.fromJson(getParam(command));
var shell = StringBuffer(getCDPath(workspace));
shell.write(' && git rev-list --all HEAD --all --count');
var process = await ProcessExecutor.start(shell, printStderr: false);
var number = int.parse(process.stdoutArr.last);
await setProperty(data.setValue, number);
return await completeProcess(process, command);
}
}
//git의 리비전에 대해 돌려준다
class GitRev extends Command {
@override
Future execute(DataCommand command) async {
var data = DataGitRev.fromJson(getParam(command));
var shell = StringBuffer(getCDPath(workspace));
var target = data.branch ?? 'HEAD';
shell.write(' && git fetch origin');
shell.write(' && git rev-parse $target');
var process = await ProcessExecutor.start(shell, printStderr: false);
var hash = process.stdoutArr.last;
await setProperty(data.setValue, hash);
return await completeProcess(process, command);
}
}