inputToCommands method
Parses UserInput using a CommandParser to return a run list of contiguous commands to be run as a facade CommandFacade
Implementation
CommandFacade inputToCommands(
UserInput userInput,
CommandParser commandParser,
) {
if (userInput.isEmpty) return HelpInitializer();
ParsedCommands parsedCommands = commandParser.parseUserInput(userInput);
isVerboseMode = parsedCommands.getOption(CliCommandOptionsEnum.verbose);
debugPrintToConsole(
message: "Arguments: ${parsedCommands.toString()} \n",
style: CliStyle.bold,
newLine: true,
);
if (parsedCommands.hasOption(CliCommandOptionsEnum.help)) {
return HelpInitializer(command: parsedCommands.command);
}
switch (parsedCommands.command) {
case CliCommandsEnum.help:
return HelpInitializer();
case CliCommandsEnum.init:
if (parsedCommands.hasOption(CliCommandOptionsEnum.help)) {
return HelpInitializer(command: parsedCommands.command);
}
//Path
String path = parsedCommands.getOption(CliCommandOptionsEnum.path);
if (path == dot) path = Directory.current.path;
return RepositoryInitializer(path);
case CliCommandsEnum.add:
//Path
String path = parsedCommands.getOption(CliCommandOptionsEnum.filePattern);
return StageFilesInitializer(path);
case CliCommandsEnum.ignore:
//Path
String? patternToAdd = parsedCommands.getOption(
CliCommandOptionsEnum.add,
);
String? patternToRemove = parsedCommands.getOption(
CliCommandOptionsEnum.remove,
);
return ModifyIgnoreFileInitializer(
patternToAdd: patternToAdd,
patternToRemove: patternToRemove,
);
case CliCommandsEnum.branch:
String? branchName = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
if (branchName != null) {
return CreateBranchInitializer(branchName);
}
return ListBranchesInitializer();
case CliCommandsEnum.status:
return PrintStatusOfCurrentBranchInitializer();
case CliCommandsEnum.commit:
String? message = parsedCommands.getOption(
CliCommandOptionsEnum.message,
);
if (message == null) {
return ErrorInitializer("Commit message required");
}
return CommitStagedFilesInitializer(message);
case CliCommandsEnum.log:
String? branch = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
return GetCommitHistoryInitializer(branch);
case CliCommandsEnum.checkout:
String? branch = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
if (branch == null) {
debugPrintToConsole(message: "No branch name");
return ErrorInitializer("Branch required");
}
String? commitSha = parsedCommands.getOption(
CliCommandOptionsEnum.sha,
);
debugPrintToConsole(
message: "Branch $branch, commit $commitSha",
color: CliColor.white,
);
return CheckoutToBranchInitializer(branch, commitSha);
case CliCommandsEnum.merge:
String? branch = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
if (branch == null) {
debugPrintToConsole(message: "No branch name");
return ErrorInitializer("Branch required");
}
return MergeBranchInitializer(branch);
case CliCommandsEnum.diff:
String? thisBranchName = parsedCommands.getOption(
CliCommandOptionsEnum.thisBranch,
);
String? thisSha = parsedCommands.getOption(
CliCommandOptionsEnum.thisSha,
);
String? otherBranchName = parsedCommands.getOption(
CliCommandOptionsEnum.otherBranch,
);
if (otherBranchName == null) {
debugPrintToConsole(message: "No branch b name");
return ErrorInitializer("Branch b required");
}
String? otherSha = parsedCommands.getOption(
CliCommandOptionsEnum.otherSha,
);
return ShowDiffBetweenCommitsInitializer(
thisBranchName: thisBranchName,
otherBranchName: otherBranchName,
thisCommitSha: thisSha,
otherCommitSha: otherSha,
);
case CliCommandsEnum.remote:
if (!parsedCommands.hasOption(CliCommandOptionsEnum.add) && !parsedCommands.hasOption(CliCommandOptionsEnum.remove)) {
debugPrintToConsole(message: "Remote option is null");
return ListAllRemoteInitializer();
}
bool isAdding = parsedCommands.hasOption(CliCommandOptionsEnum.add);
String remoteName = parsedCommands.getOption(
isAdding ? CliCommandOptionsEnum.add : CliCommandOptionsEnum.remove,
);
String? remoteUrl = parsedCommands.getOption(
CliCommandOptionsEnum.remoteUrl,
);
if (isAdding && remoteUrl == null) {
debugPrintToConsole(message: "Remote url is null");
return ErrorInitializer("Remote option required url");
}
if (isAdding) {
return AddRemoteInitializer(remoteName, remoteUrl!);
} else {
return RemoveRemoteInitializer(remoteName);
}
case CliCommandsEnum.clone:
String? remoteUrl = parsedCommands.getOption(
CliCommandOptionsEnum.remoteUrl,
);
if (remoteUrl == null) {
debugPrintToConsole(message: "Remote url is null");
return ErrorInitializer("Remote option required url");
}
String? branchName = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
String localPath = parsedCommands.getOption(CliCommandOptionsEnum.path);
if (localPath == dot) localPath = Directory.current.path;
return CloneRepositoryInitializer(remoteUrl, branchName, localPath);
case CliCommandsEnum.push:
String? remoteName = parsedCommands.getOption(
CliCommandOptionsEnum.remoteName,
);
if (remoteName == null) {
debugPrintToConsole(message: "Remote name is null");
return ErrorInitializer("Remote option required url");
}
String? branchName = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
return PushRepositoryInitializer(remoteName, branchName);
case CliCommandsEnum.pull:
String? remoteName = parsedCommands.getOption(
CliCommandOptionsEnum.remoteName,
);
if (remoteName == null) {
debugPrintToConsole(message: "Remote name is null");
return ErrorInitializer("Remote option required url");
}
String? branchName = parsedCommands.getOption(
CliCommandOptionsEnum.branch,
);
return PullRepositoryInitializer(remoteName, branchName);
default:
return ErrorInitializer("Unknown command");
}
}