github.com/vchain-us/vcn@v0.9.11-0.20210921212052-a2484d23c0b3/pkg/extractor/git/commit.go (about)

     1  /*
     2   * Copyright (c) 2018-2020 vChain, Inc. All Rights Reserved.
     3   * This software is released under GPL3.
     4   * The full license information can be found under:
     5   * https://www.gnu.org/licenses/gpl-3.0.en.html
     6   *
     7   */
     8  
     9  package git
    10  
    11  import (
    12  	"crypto/sha256"
    13  	"encoding/hex"
    14  	"io"
    15  
    16  	git "gopkg.in/src-d/go-git.v4"
    17  	"gopkg.in/src-d/go-git.v4/plumbing"
    18  	"gopkg.in/src-d/go-git.v4/plumbing/object"
    19  )
    20  
    21  func lastCommit(repo *git.Repository) (*object.Commit, error) {
    22  	ref, err := repo.Head()
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	return repo.CommitObject(ref.Hash())
    28  }
    29  
    30  func digestCommit(c object.Commit) (hash string, size uint64, err error) {
    31  	o := &plumbing.MemoryObject{}
    32  	c.Encode(o)
    33  
    34  	reader, err := o.Reader()
    35  	if err != nil {
    36  		return
    37  	}
    38  	defer reader.Close()
    39  
    40  	h := sha256.New()
    41  	n, err := io.Copy(h, reader)
    42  	if err != nil {
    43  		return
    44  	}
    45  	return hex.EncodeToString(h.Sum(nil)), uint64(n), nil
    46  }