Beispiel #1
0
        /// <summary>
        /// Lookup and return the git object in the repository as specified
        /// by the given ID.
        /// </summary>
        /// <param name="id">The object id to lookup</param>
        /// <returns>The Git object specified by the given ID</returns>
        public unsafe T Lookup <T>(ObjectId id) where T : GitObject
        {
            Ensure.ArgumentNotNull(id, "id");

            git_oid oid = id.ToNative();

            if (typeof(T) == typeof(Commit))
            {
                git_commit *obj = null;
                Ensure.NativeSuccess(() => libgit2.git_commit_lookup(out obj, repository.NativeRepository, ref oid), repository);
                return((T)(object)Commit.FromNative(obj, id));
            }
            else if (typeof(T) == typeof(Tree))
            {
                git_tree *obj = null;
                Ensure.NativeSuccess(() => libgit2.git_tree_lookup(out obj, repository.NativeRepository, ref oid), repository);
                return((T)(object)Tree.FromNative(obj, id));
            }
            else if (typeof(T) == typeof(Blob))
            {
                git_blob *obj = null;
                Ensure.NativeSuccess(() => libgit2.git_blob_lookup(out obj, repository.NativeRepository, ref oid), repository);
                return((T)(object)Blob.FromNative(obj, id));
            }
            else if (typeof(T) == typeof(GitObject))
            {
                return((T)(object)Lookup(id));
            }

            throw new InvalidOperationException("unknown object type");
        }
Beispiel #2
0
 private unsafe Commit(git_commit *nativeCommit, ObjectId id) :
     base((git_object *)nativeCommit, id)
 {
     author = new LazyNative <Signature>(() => {
         git_signature *author = libgit2.git_commit_author(NativeCommit);
         return(Signature.FromNative(author));
     }, this);
     committer = new LazyNative <Signature>(() => {
         git_signature *signature = libgit2.git_commit_committer(NativeCommit);
         return(Signature.FromNative(signature));
     }, this);
     treeId = new LazyNative <ObjectId>(() => {
         git_oid *oid = libgit2.git_commit_tree_id(NativeCommit);
         Ensure.NativePointerNotNull(oid);
         return(ObjectId.FromNative(*oid));
     }, this);
 }
Beispiel #3
0
 internal unsafe static Commit FromNative(git_commit *nativeCommit, ObjectId id)
 {
     return(new Commit(nativeCommit, id));
 }
Beispiel #4
0
 public static extern unsafe git_oid *git_commit_tree_id(git_commit *commit);
Beispiel #5
0
 public static extern unsafe int git_commit_tree(out git_tree *tree, git_commit *commit);
Beispiel #6
0
 public static extern unsafe int git_commit_lookup(out git_commit *obj, git_repository *repo, ref git_oid id);
Beispiel #7
0
 public static extern unsafe git_signature *git_commit_committer(git_commit *commit);