mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-05 04:39:07 -04:00
feat(commit): add ability to create commit
This commit is contained in:
parent
a78c38d8e3
commit
c90561ed8f
5 changed files with 233 additions and 5 deletions
|
@ -1,8 +1,11 @@
|
|||
import 'dart:ffi';
|
||||
|
||||
import 'bindings/libgit2_bindings.dart';
|
||||
import 'bindings/commit.dart' as bindings;
|
||||
import 'repository.dart';
|
||||
import 'oid.dart';
|
||||
import 'signature.dart';
|
||||
import 'tree.dart';
|
||||
import 'util.dart';
|
||||
|
||||
class Commit {
|
||||
|
@ -26,6 +29,58 @@ class Commit {
|
|||
/// Pointer to memory address for allocated commit object.
|
||||
late final Pointer<git_commit> _commitPointer;
|
||||
|
||||
/// Creates new commit in the repository.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
static Oid create({
|
||||
required Repository repo,
|
||||
required String message,
|
||||
required Signature author,
|
||||
required Signature commiter,
|
||||
required String treeSHA,
|
||||
required List<String> parentsSHA,
|
||||
String? updateRef,
|
||||
String? messageEncoding,
|
||||
}) {
|
||||
libgit2.git_libgit2_init();
|
||||
|
||||
final parentCount = parentsSHA.length;
|
||||
late final Tree tree;
|
||||
|
||||
if (treeSHA.length == 40) {
|
||||
final treeOid = Oid.fromSHA(treeSHA);
|
||||
tree = Tree.lookup(
|
||||
repo.pointer,
|
||||
treeOid.pointer,
|
||||
);
|
||||
} else {
|
||||
final odb = repo.odb;
|
||||
final treeOid = Oid.fromShortSHA(treeSHA, odb);
|
||||
tree = Tree.lookup(
|
||||
repo.pointer,
|
||||
treeOid.pointer,
|
||||
);
|
||||
odb.free();
|
||||
}
|
||||
|
||||
final result = Oid(bindings.create(
|
||||
repo.pointer,
|
||||
updateRef,
|
||||
author.pointer,
|
||||
commiter.pointer,
|
||||
messageEncoding,
|
||||
message,
|
||||
tree.pointer,
|
||||
parentCount,
|
||||
parentsSHA,
|
||||
));
|
||||
|
||||
tree.free();
|
||||
libgit2.git_libgit2_init();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// Returns the encoding for the message of a commit, as a string
|
||||
/// representing a standard encoding name.
|
||||
String get messageEncoding => bindings.messageEncoding(_commitPointer);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue