Files
GitJournal/lib/apis/git.dart
Vishesh Handa acede95536 Dart: Add analysis_options
For now I've mostly tried to follow the same style guide as the flutter
repository, with many options disabled. Eventually, maybe it would make
sense to be far stricter.
2019-02-13 13:08:15 +01:00

181 lines
4.3 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
const _platform = const MethodChannel('gitjournal.io/git');
Future<Directory> getGitBaseDirectory() async {
final String path = await _platform.invokeMethod('getBaseDirectory');
if (path == null) {
return null;
}
return Directory(path);
}
Future<void> gitClone(String cloneUrl, String folderName) async {
print("Going to git clone");
try {
await _platform.invokeMethod('gitClone', {
'cloneUrl': cloneUrl,
'folderName': folderName,
});
print("Done");
} on PlatformException catch (e) {
print("gitClone Failed: '${e.message}'.");
throw createGitException(e.message);
}
return null;
}
Future<String> generateSSHKeys({@required String comment}) async {
print("generateSSHKeyss: " + comment);
try {
String publicKey = await _platform.invokeMethod('generateSSHKeys', {
'comment': comment,
});
print("Public Key " + publicKey);
return publicKey;
} on PlatformException catch (e) {
print("Failed to generateSSHKeys: '${e.message}'.");
}
try {
String publicKey = await _platform.invokeMethod('getSSHPublicKey');
print("Public Key " + publicKey);
return publicKey;
} on PlatformException catch (e) {
print("Failed to getSSHPublicKey: '${e.message}'.");
}
return "";
}
Future<void> setSshKeys({
@required String publicKey,
@required String privateKey,
}) async {
print("setSshKeys");
try {
await _platform.invokeMethod('setSshKeys', {
'publicKey': publicKey,
'privateKey': privateKey,
});
} on PlatformException catch (e) {
print("Failed to generateSSHKeys: '${e.message}'.");
rethrow;
}
}
class GitException implements Exception {
final String cause;
GitException(this.cause);
@override
String toString() {
return "GitException: " + cause;
}
}
GitException createGitException(String msg) {
if (msg.contains("ENETUNREACH")) {
return GitException("No Connection");
}
if (msg.contains("Remote origin did not advertise Ref for branch master")) {
return GitException("No master branch");
}
if (msg.contains("Nothing to push")) {
return GitException("Nothing to push.");
}
return GitException(msg);
}
Future gitPull(String folderName) async {
print("Going to git pull");
try {
await _platform.invokeMethod('gitPull', {
'folderName': folderName,
});
print("Done");
} on PlatformException catch (e) {
print("gitPull Failed: '${e.message}'.");
throw createGitException(e.message);
}
}
Future gitAdd(String gitFolder, String filePattern) async {
print("Going to git add: " + filePattern);
try {
await _platform.invokeMethod('gitAdd', {
'folderName': gitFolder,
'filePattern': filePattern,
});
print("Done");
} on PlatformException catch (e) {
print("gitAdd Failed: '${e.message}'.");
}
}
Future gitRm(String gitFolder, String filePattern) async {
print("Going to git rm");
try {
await _platform.invokeMethod('gitRm', {
'folderName': gitFolder,
'filePattern': filePattern,
});
print("Done");
} on PlatformException catch (e) {
print("gitRm Failed: '${e.message}'.");
}
}
Future gitPush(String folderName) async {
print("Going to git push");
try {
await _platform.invokeMethod('gitPush', {
'folderName': folderName,
});
print("Done");
} on PlatformException catch (e) {
print("gitPush Failed: '${e.message}'.");
throw createGitException(e.message);
}
}
Future gitCommit({
@required String gitFolder,
@required String authorName,
@required String authorEmail,
@required String message,
String when,
}) async {
print("Going to git commit");
try {
await _platform.invokeMethod('gitCommit', {
'folderName': gitFolder,
'authorName': authorName,
'authorEmail': authorEmail,
'message': message,
'when': when,
});
print("Done");
} on PlatformException catch (e) {
print("gitCommit Failed: '${e.message}'.");
}
}
Future gitInit(String folderName) async {
print("Going to git init");
try {
await _platform.invokeMethod('gitInit', {
'folderName': folderName,
});
print("Done");
} on PlatformException catch (e) {
print("gitInit Failed: '${e.message}'.");
throw createGitException(e.message);
}
}