code.gitea.io/gitea@v1.19.3/modules/git/tree_entry_test.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build gogit 5 6 package git 7 8 import ( 9 "testing" 10 11 "github.com/go-git/go-git/v5/plumbing/filemode" 12 "github.com/go-git/go-git/v5/plumbing/object" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func getTestEntries() Entries { 17 return Entries{ 18 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "v1.0", Mode: filemode.Dir}}, 19 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "v2.0", Mode: filemode.Dir}}, 20 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "v2.1", Mode: filemode.Dir}}, 21 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "v2.12", Mode: filemode.Dir}}, 22 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "v2.2", Mode: filemode.Dir}}, 23 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "v12.0", Mode: filemode.Dir}}, 24 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "abc", Mode: filemode.Regular}}, 25 &TreeEntry{gogitTreeEntry: &object.TreeEntry{Name: "bcd", Mode: filemode.Regular}}, 26 } 27 } 28 29 func TestEntriesSort(t *testing.T) { 30 entries := getTestEntries() 31 entries.Sort() 32 assert.Equal(t, "v1.0", entries[0].Name()) 33 assert.Equal(t, "v12.0", entries[1].Name()) 34 assert.Equal(t, "v2.0", entries[2].Name()) 35 assert.Equal(t, "v2.1", entries[3].Name()) 36 assert.Equal(t, "v2.12", entries[4].Name()) 37 assert.Equal(t, "v2.2", entries[5].Name()) 38 assert.Equal(t, "abc", entries[6].Name()) 39 assert.Equal(t, "bcd", entries[7].Name()) 40 } 41 42 func TestEntriesCustomSort(t *testing.T) { 43 entries := getTestEntries() 44 entries.CustomSort(func(s1, s2 string) bool { 45 return s1 > s2 46 }) 47 assert.Equal(t, "v2.2", entries[0].Name()) 48 assert.Equal(t, "v2.12", entries[1].Name()) 49 assert.Equal(t, "v2.1", entries[2].Name()) 50 assert.Equal(t, "v2.0", entries[3].Name()) 51 assert.Equal(t, "v12.0", entries[4].Name()) 52 assert.Equal(t, "v1.0", entries[5].Name()) 53 assert.Equal(t, "bcd", entries[6].Name()) 54 assert.Equal(t, "abc", entries[7].Name()) 55 } 56 57 func TestFollowLink(t *testing.T) { 58 r, err := openRepositoryWithDefaultContext("tests/repos/repo1_bare") 59 assert.NoError(t, err) 60 defer r.Close() 61 62 commit, err := r.GetCommit("37991dec2c8e592043f47155ce4808d4580f9123") 63 assert.NoError(t, err) 64 65 // get the symlink 66 lnk, err := commit.Tree.GetTreeEntryByPath("foo/bar/link_to_hello") 67 assert.NoError(t, err) 68 assert.True(t, lnk.IsLink()) 69 70 // should be able to dereference to target 71 target, err := lnk.FollowLink() 72 assert.NoError(t, err) 73 assert.Equal(t, "hello", target.Name()) 74 assert.False(t, target.IsLink()) 75 assert.Equal(t, "b14df6442ea5a1b382985a6549b85d435376c351", target.ID.String()) 76 77 // should error when called on normal file 78 target, err = commit.Tree.GetTreeEntryByPath("file1.txt") 79 assert.NoError(t, err) 80 _, err = target.FollowLink() 81 assert.EqualError(t, err, "file1.txt: not a symlink") 82 83 // should error for broken links 84 target, err = commit.Tree.GetTreeEntryByPath("foo/broken_link") 85 assert.NoError(t, err) 86 assert.True(t, target.IsLink()) 87 _, err = target.FollowLink() 88 assert.EqualError(t, err, "broken_link: broken link") 89 90 // should error for external links 91 target, err = commit.Tree.GetTreeEntryByPath("foo/outside_repo") 92 assert.NoError(t, err) 93 assert.True(t, target.IsLink()) 94 _, err = target.FollowLink() 95 assert.EqualError(t, err, "outside_repo: points outside of repo") 96 97 // testing fix for short link bug 98 target, err = commit.Tree.GetTreeEntryByPath("foo/link_short") 99 assert.NoError(t, err) 100 _, err = target.FollowLink() 101 assert.EqualError(t, err, "link_short: broken link") 102 }