mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-01 19:54:17 +00:00
b06002f449
1. simplify "StorageRepo" code 2. simplify git.OpenRepository code 3. by the way, clean up some unused files in git test fixtures.
78 lines
2.4 KiB
Go
78 lines
2.4 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"gitea.dev/modules/util"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFollowLink(t *testing.T) {
|
|
r, err := OpenRepositoryLocal(filepath.Join(testReposDir, "repo1_bare"))
|
|
require.NoError(t, err)
|
|
defer r.Close()
|
|
|
|
commit, err := r.GetCommit(t.Context(), "37991dec2c8e592043f47155ce4808d4580f9123")
|
|
require.NoError(t, err)
|
|
|
|
// get the symlink
|
|
{
|
|
lnkFullPath := "foo/bar/link_to_hello"
|
|
lnk, err := commit.Tree().GetTreeEntryByPath(t.Context(), r, "foo/bar/link_to_hello")
|
|
require.NoError(t, err)
|
|
assert.True(t, lnk.IsLink())
|
|
|
|
// should be able to dereference to target
|
|
res, err := EntryFollowLink(t.Context(), r, commit, lnkFullPath, lnk)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "hello", res.TargetEntry.Name())
|
|
assert.Equal(t, "foo/nar/hello", res.TargetFullPath)
|
|
assert.False(t, res.TargetEntry.IsLink())
|
|
assert.Equal(t, "b14df6442ea5a1b382985a6549b85d435376c351", res.TargetEntry.ID.String())
|
|
}
|
|
|
|
{
|
|
// should error when called on a normal file
|
|
entry, err := commit.Tree().GetTreeEntryByPath(t.Context(), r, "file1.txt")
|
|
require.NoError(t, err)
|
|
res, err := EntryFollowLink(t.Context(), r, commit, "file1.txt", entry)
|
|
assert.ErrorIs(t, err, util.ErrUnprocessableContent)
|
|
assert.Nil(t, res)
|
|
}
|
|
|
|
{
|
|
// should error for broken links
|
|
entry, err := commit.Tree().GetTreeEntryByPath(t.Context(), r, "foo/broken_link")
|
|
require.NoError(t, err)
|
|
assert.True(t, entry.IsLink())
|
|
res, err := EntryFollowLink(t.Context(), r, commit, "foo/broken_link", entry)
|
|
assert.ErrorIs(t, err, util.ErrNotExist)
|
|
assert.Equal(t, "nar/broken_link", res.SymlinkContent)
|
|
}
|
|
|
|
{
|
|
// should error for external links
|
|
entry, err := commit.Tree().GetTreeEntryByPath(t.Context(), r, "foo/outside_repo")
|
|
require.NoError(t, err)
|
|
assert.True(t, entry.IsLink())
|
|
res, err := EntryFollowLink(t.Context(), r, commit, "foo/outside_repo", entry)
|
|
assert.ErrorIs(t, err, util.ErrNotExist)
|
|
assert.Equal(t, "../../outside_repo", res.SymlinkContent)
|
|
}
|
|
|
|
{
|
|
// testing fix for short link bug
|
|
entry, err := commit.Tree().GetTreeEntryByPath(t.Context(), r, "foo/link_short")
|
|
require.NoError(t, err)
|
|
res, err := EntryFollowLink(t.Context(), r, commit, "foo/link_short", entry)
|
|
assert.ErrorIs(t, err, util.ErrNotExist)
|
|
assert.Equal(t, "a", res.SymlinkContent)
|
|
}
|
|
}
|