mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-05 04:39:07 -04:00
feat(repository): add ability to initialize repository
This commit is contained in:
parent
543ebff223
commit
696d55bb3a
3 changed files with 59 additions and 1 deletions
|
@ -69,6 +69,22 @@ String discover(String startPath, String ceilingDirs) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a new Git repository in the given folder.
|
||||||
|
///
|
||||||
|
/// Throws a [LibGit2Error] if error occured.
|
||||||
|
Pointer<git_repository> init(String path, bool isBare) {
|
||||||
|
final out = calloc<Pointer<git_repository>>();
|
||||||
|
final pathC = path.toNativeUtf8().cast<Int8>();
|
||||||
|
final isBareC = isBare ? 1 : 0;
|
||||||
|
final error = libgit2.git_repository_init(out, pathC, isBareC);
|
||||||
|
|
||||||
|
if (error < 0) {
|
||||||
|
throw LibGit2Error(libgit2.git_error_last());
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.value;
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the path to the `.git` folder for normal repositories or the
|
/// Returns the path to the `.git` folder for normal repositories or the
|
||||||
/// repository itself for bare repositories.
|
/// repository itself for bare repositories.
|
||||||
String path(Pointer<git_repository> repo) {
|
String path(Pointer<git_repository> repo) {
|
||||||
|
|
|
@ -10,12 +10,24 @@ import 'util.dart';
|
||||||
|
|
||||||
/// A Repository is the primary interface into a git repository
|
/// A Repository is the primary interface into a git repository
|
||||||
class Repository {
|
class Repository {
|
||||||
|
/// Initializes a new instance of the [Repository] class by creating a new
|
||||||
|
/// Git repository in the given folder.
|
||||||
|
///
|
||||||
|
/// Should be freed with `free()` to release allocated memory.
|
||||||
|
///
|
||||||
|
/// Throws a [LibGit2Error] if error occured.
|
||||||
|
Repository.init(String path, {bool isBare = false}) {
|
||||||
|
libgit2.git_libgit2_init();
|
||||||
|
|
||||||
|
_repoPointer = bindings.init(path, isBare);
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes a new instance of the [Repository] class.
|
/// Initializes a new instance of the [Repository] class.
|
||||||
/// For a standard repository, [path] should either point to the `.git` folder
|
/// For a standard repository, [path] should either point to the `.git` folder
|
||||||
/// or to the working directory. For a bare repository, [path] should directly
|
/// or to the working directory. For a bare repository, [path] should directly
|
||||||
/// point to the repository folder.
|
/// point to the repository folder.
|
||||||
///
|
///
|
||||||
/// [Repository] object should be close with [free] function to release allocated memory.
|
/// Should be freed with `free()` to release allocated memory.
|
||||||
///
|
///
|
||||||
/// Throws a [LibGit2Error] if error occured.
|
/// Throws a [LibGit2Error] if error occured.
|
||||||
Repository.open(String path) {
|
Repository.open(String path) {
|
||||||
|
|
|
@ -14,6 +14,36 @@ void main() {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group('.init()', () {
|
||||||
|
final initDir = '${Directory.systemTemp.path}/init_repo/';
|
||||||
|
|
||||||
|
setUp(() async {
|
||||||
|
if (await Directory(initDir).exists()) {
|
||||||
|
await Directory(initDir).delete(recursive: true);
|
||||||
|
} else {
|
||||||
|
await Directory(initDir).create();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
tearDown(() async {
|
||||||
|
repo.free();
|
||||||
|
await Directory(initDir).delete(recursive: true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('successfully creates new bare repo at provided path', () {
|
||||||
|
repo = Repository.init(initDir, isBare: true);
|
||||||
|
expect(repo.path, initDir);
|
||||||
|
expect(repo.isBare, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('successfully creates new standard repo at provided path', () {
|
||||||
|
repo = Repository.init(initDir);
|
||||||
|
expect(repo.path, '$initDir.git/');
|
||||||
|
expect(repo.isBare, false);
|
||||||
|
expect(repo.isEmpty, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
group('empty', () {
|
group('empty', () {
|
||||||
group('bare', () {
|
group('bare', () {
|
||||||
setUp(() {
|
setUp(() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue