code.gitea.io/gitea@v1.22.3/modules/git/commit_sha256_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  //go:build !gogit
     5  
     6  package git
     7  
     8  import (
     9  	"path/filepath"
    10  	"strings"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestCommitsCountSha256(t *testing.T) {
    17  	bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
    18  
    19  	commitsCount, err := CommitsCount(DefaultContext,
    20  		CommitsCountOptions{
    21  			RepoPath: bareRepo1Path,
    22  			Revision: []string{"f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc"},
    23  		})
    24  
    25  	assert.NoError(t, err)
    26  	assert.Equal(t, int64(3), commitsCount)
    27  }
    28  
    29  func TestCommitsCountWithoutBaseSha256(t *testing.T) {
    30  	bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
    31  
    32  	commitsCount, err := CommitsCount(DefaultContext,
    33  		CommitsCountOptions{
    34  			RepoPath: bareRepo1Path,
    35  			Not:      "main",
    36  			Revision: []string{"branch1"},
    37  		})
    38  
    39  	assert.NoError(t, err)
    40  	assert.Equal(t, int64(2), commitsCount)
    41  }
    42  
    43  func TestGetFullCommitIDSha256(t *testing.T) {
    44  	bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
    45  
    46  	id, err := GetFullCommitID(DefaultContext, bareRepo1Path, "f004f4")
    47  	assert.NoError(t, err)
    48  	assert.Equal(t, "f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc", id)
    49  }
    50  
    51  func TestGetFullCommitIDErrorSha256(t *testing.T) {
    52  	bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
    53  
    54  	id, err := GetFullCommitID(DefaultContext, bareRepo1Path, "unknown")
    55  	assert.Empty(t, id)
    56  	if assert.Error(t, err) {
    57  		assert.EqualError(t, err, "object does not exist [id: unknown, rel_path: ]")
    58  	}
    59  }
    60  
    61  func TestCommitFromReaderSha256(t *testing.T) {
    62  	commitString := `9433b2a62b964c17a4485ae180f45f595d3e69d31b786087775e28c6b6399df0 commit 1114
    63  tree e7f9e96dd79c09b078cac8b303a7d3b9d65ff9b734e86060a4d20409fd379f9e
    64  parent 26e9ccc29fad747e9c5d9f4c9ddeb7eff61cc45ef6a8dc258cbeb181afc055e8
    65  author Adam Majer <amajer@suse.de> 1698676906 +0100
    66  committer Adam Majer <amajer@suse.de> 1698676906 +0100
    67  gpgsig-sha256 -----BEGIN PGP SIGNATURE-----
    68  ` + " " + `
    69   iQIrBAABCgAtFiEES+fB08xlgTrzSdQvhkUIsBsmec8FAmU/wKoPHGFtYWplckBz
    70   dXNlLmRlAAoJEIZFCLAbJnnP4s4PQIJATa++WPzR6/H4etT7bsOGoMyguEJYyWOd
    71   aTybplzT7QAL7h2to0QszGabtzMJPIA39xSFZNYNN30voK5YyyYibXluPKgjemfK
    72   WNXwF+gkwgZI38gSvKf+vlqI+EYyIFe19wOhiju0m8SIlB5NEPiWHa17q2mqmqqx
    73   1FWa2JdqLPYjAtSLFXeSZegrY5V1FxdemyMUONkg8YO9OSIMZiE0GsnnOXQ3xcT4
    74   JTCnmlUxIKw689UiEY80JopUIq+Wl7+qq9507IYYSUCyB6JazL42AKMzVCbD+qBP
    75   oOzh/hafYgk9H9qCQXaLbmvs17zXRpicig1bAzqgAy1FDelvpERyRTydEajSLIG6
    76   U1cRCkgXCZ0NfsYNPPmBa8b3+rnstypXYTbyMwTln7FfUAaGo6o9JYiPMkzxlmsy
    77   zfp/tcaY8+LlBL9aOJjtv+a0p+HrpCGd6CCa4ARfphTLq8QRSSh8uzlB9N+6HnRI
    78   VAEUo6ecdDxSpyt2naeg9pKus/BRi7P6g4B1hkk/zZstUX/QP4IQuAJbXjkvsC+X
    79   HKRr3NlRM/DygzTyj0gN74uoa0goCIbyAQhiT42nm0cuhM7uN/W0ayrlZjGF1cbR
    80   8NCJUL2Nwj0ywKIavC99Ipkb8AsFwpVT6U6effs6
    81   =xybZ
    82   -----END PGP SIGNATURE-----
    83  
    84  signed commit`
    85  
    86  	sha := &Sha256Hash{
    87  		0x94, 0x33, 0xb2, 0xa6, 0x2b, 0x96, 0x4c, 0x17, 0xa4, 0x48, 0x5a, 0xe1, 0x80, 0xf4, 0x5f, 0x59,
    88  		0x5d, 0x3e, 0x69, 0xd3, 0x1b, 0x78, 0x60, 0x87, 0x77, 0x5e, 0x28, 0xc6, 0xb6, 0x39, 0x9d, 0xf0,
    89  	}
    90  	gitRepo, err := openRepositoryWithDefaultContext(filepath.Join(testReposDir, "repo1_bare_sha256"))
    91  	assert.NoError(t, err)
    92  	assert.NotNil(t, gitRepo)
    93  	defer gitRepo.Close()
    94  
    95  	commitFromReader, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString))
    96  	assert.NoError(t, err)
    97  	if !assert.NotNil(t, commitFromReader) {
    98  		return
    99  	}
   100  	assert.EqualValues(t, sha, commitFromReader.ID)
   101  	assert.EqualValues(t, `-----BEGIN PGP SIGNATURE-----
   102  
   103  iQIrBAABCgAtFiEES+fB08xlgTrzSdQvhkUIsBsmec8FAmU/wKoPHGFtYWplckBz
   104  dXNlLmRlAAoJEIZFCLAbJnnP4s4PQIJATa++WPzR6/H4etT7bsOGoMyguEJYyWOd
   105  aTybplzT7QAL7h2to0QszGabtzMJPIA39xSFZNYNN30voK5YyyYibXluPKgjemfK
   106  WNXwF+gkwgZI38gSvKf+vlqI+EYyIFe19wOhiju0m8SIlB5NEPiWHa17q2mqmqqx
   107  1FWa2JdqLPYjAtSLFXeSZegrY5V1FxdemyMUONkg8YO9OSIMZiE0GsnnOXQ3xcT4
   108  JTCnmlUxIKw689UiEY80JopUIq+Wl7+qq9507IYYSUCyB6JazL42AKMzVCbD+qBP
   109  oOzh/hafYgk9H9qCQXaLbmvs17zXRpicig1bAzqgAy1FDelvpERyRTydEajSLIG6
   110  U1cRCkgXCZ0NfsYNPPmBa8b3+rnstypXYTbyMwTln7FfUAaGo6o9JYiPMkzxlmsy
   111  zfp/tcaY8+LlBL9aOJjtv+a0p+HrpCGd6CCa4ARfphTLq8QRSSh8uzlB9N+6HnRI
   112  VAEUo6ecdDxSpyt2naeg9pKus/BRi7P6g4B1hkk/zZstUX/QP4IQuAJbXjkvsC+X
   113  HKRr3NlRM/DygzTyj0gN74uoa0goCIbyAQhiT42nm0cuhM7uN/W0ayrlZjGF1cbR
   114  8NCJUL2Nwj0ywKIavC99Ipkb8AsFwpVT6U6effs6
   115  =xybZ
   116  -----END PGP SIGNATURE-----
   117  `, commitFromReader.Signature.Signature)
   118  	assert.EqualValues(t, `tree e7f9e96dd79c09b078cac8b303a7d3b9d65ff9b734e86060a4d20409fd379f9e
   119  parent 26e9ccc29fad747e9c5d9f4c9ddeb7eff61cc45ef6a8dc258cbeb181afc055e8
   120  author Adam Majer <amajer@suse.de> 1698676906 +0100
   121  committer Adam Majer <amajer@suse.de> 1698676906 +0100
   122  
   123  signed commit`, commitFromReader.Signature.Payload)
   124  	assert.EqualValues(t, "Adam Majer <amajer@suse.de>", commitFromReader.Author.String())
   125  
   126  	commitFromReader2, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString+"\n\n"))
   127  	assert.NoError(t, err)
   128  	commitFromReader.CommitMessage += "\n\n"
   129  	commitFromReader.Signature.Payload += "\n\n"
   130  	assert.EqualValues(t, commitFromReader, commitFromReader2)
   131  }
   132  
   133  func TestHasPreviousCommitSha256(t *testing.T) {
   134  	bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
   135  
   136  	repo, err := openRepositoryWithDefaultContext(bareRepo1Path)
   137  	assert.NoError(t, err)
   138  	defer repo.Close()
   139  
   140  	commit, err := repo.GetCommit("f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc")
   141  	assert.NoError(t, err)
   142  
   143  	objectFormat, err := repo.GetObjectFormat()
   144  	assert.NoError(t, err)
   145  
   146  	parentSHA := MustIDFromString("b0ec7af4547047f12d5093e37ef8f1b3b5415ed8ee17894d43a34d7d34212e9c")
   147  	notParentSHA := MustIDFromString("42e334efd04cd36eea6da0599913333c26116e1a537ca76e5b6e4af4dda00236")
   148  	assert.Equal(t, objectFormat, parentSHA.Type())
   149  	assert.Equal(t, objectFormat.Name(), "sha256")
   150  
   151  	haz, err := commit.HasPreviousCommit(parentSHA)
   152  	assert.NoError(t, err)
   153  	assert.True(t, haz)
   154  
   155  	hazNot, err := commit.HasPreviousCommit(notParentSHA)
   156  	assert.NoError(t, err)
   157  	assert.False(t, hazNot)
   158  
   159  	selfNot, err := commit.HasPreviousCommit(commit.ID)
   160  	assert.NoError(t, err)
   161  	assert.False(t, selfNot)
   162  }
   163  
   164  func TestGetCommitFileStatusMergesSha256(t *testing.T) {
   165  	bareRepo1Path := filepath.Join(testReposDir, "repo6_merge_sha256")
   166  
   167  	commitFileStatus, err := GetCommitFileStatus(DefaultContext, bareRepo1Path, "d2e5609f630dd8db500f5298d05d16def282412e3e66ed68cc7d0833b29129a1")
   168  	assert.NoError(t, err)
   169  
   170  	expected := CommitFileStatus{
   171  		[]string{
   172  			"add_file.txt",
   173  		},
   174  		[]string{},
   175  		[]string{
   176  			"to_modify.txt",
   177  		},
   178  	}
   179  
   180  	assert.Equal(t, expected.Added, commitFileStatus.Added)
   181  	assert.Equal(t, expected.Removed, commitFileStatus.Removed)
   182  	assert.Equal(t, expected.Modified, commitFileStatus.Modified)
   183  
   184  	expected = CommitFileStatus{
   185  		[]string{},
   186  		[]string{
   187  			"to_remove.txt",
   188  		},
   189  		[]string{},
   190  	}
   191  
   192  	commitFileStatus, err = GetCommitFileStatus(DefaultContext, bareRepo1Path, "da1ded40dc8e5b7c564171f4bf2fc8370487decfb1cb6a99ef28f3ed73d09172")
   193  	assert.NoError(t, err)
   194  
   195  	assert.Equal(t, expected.Added, commitFileStatus.Added)
   196  	assert.Equal(t, expected.Removed, commitFileStatus.Removed)
   197  	assert.Equal(t, expected.Modified, commitFileStatus.Modified)
   198  }