Files
gitea-tea/tests/integration/git_branch_test.go
T
bircni c5f674111a revert: tea 1.0 rewrite (#1122–#1126) (#1146)
Reverts #1126, #1125, #1124, #1123 and #1122.

`go.mod` keeps the Go 1.26 line with toolchain `go1.26.9` (instead of the original `go1.26.6`) so the security fix from #1131 isn't lost.

reopens #69
reopens #141
reopens #162
reopens #172
reopens #197
reopens #232
reopens #240
reopens #246
reopens #323
reopens #325
reopens #326
reopens #328
reopens #344
reopens #351
reopens #373
reopens #403
reopens #406
reopens #417
reopens #430
reopens #457
reopens #480
reopens #482
reopens #489
reopens #490
reopens #498
reopens #500
reopens #504
reopens #510
reopens #516
reopens #523
reopens #556
reopens #560
reopens #569
reopens #571
reopens #602
reopens #632
reopens #633
reopens #643
reopens #666
reopens #670
reopens #672
reopens #677
reopens #683
reopens #697
reopens #726
reopens #737
reopens #770
reopens #779
reopens #804
reopens #817
reopens #831
reopens #833
reopens #834
reopens #908
reopens #966
reopens #1023
reopens #1029
reopens #1032
reopens #1050
reopens #1052
reopens #1069
reopens #1073
reopens #1087
reopens #1091
reopens #1094
reopens #1110
reopens #1115
reopens #1116
reopens #1118

Reviewed-on: https://gitea.com/gitea/tea/pulls/1146
Reviewed-by: TheFox0x7 <95654+thefox0x7@noreply.gitea.com>
2026-10-18 20:56:33 +00:00

99 lines
3.2 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package integration
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
teagit "gitea.dev/tea/modules/git"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTeaCheckoutRemoteReferenceKeepsWorktreeClean(t *testing.T) {
clonePath := setupGitCheckoutTestRepo(t)
t.Chdir(clonePath)
repo, err := teagit.RepoFromPath(clonePath)
require.NoError(t, err)
err = repo.TeaCheckout(teagit.NewRemoteReferenceName("origin", "feature/test-branch"))
require.NoError(t, err)
assert.Empty(t, gitOutput(t, clonePath, "status", "--porcelain"))
assert.Equal(t, "HEAD", gitOutput(t, clonePath, "rev-parse", "--abbrev-ref", "HEAD"))
}
func TestTeaCreateBranchTracksRemoteBranch(t *testing.T) {
clonePath := setupGitCheckoutTestRepo(t)
t.Chdir(clonePath)
repo, err := teagit.RepoFromPath(clonePath)
require.NoError(t, err)
err = repo.TeaCreateBranch("pulls/123", "feature/test-branch", "origin")
require.NoError(t, err)
err = repo.TeaCheckout(teagit.NewBranchReferenceName("pulls/123"))
require.NoError(t, err)
assert.Empty(t, gitOutput(t, clonePath, "status", "--porcelain"))
assert.Equal(t, "origin", gitOutput(t, clonePath, "config", "--get", "branch.pulls/123.remote"))
assert.Equal(t, "refs/heads/feature/test-branch", gitOutput(t, clonePath, "config", "--get", "branch.pulls/123.merge"))
assert.Equal(t, "pulls/123", gitOutput(t, clonePath, "rev-parse", "--abbrev-ref", "HEAD"))
}
func setupGitCheckoutTestRepo(t *testing.T) string {
t.Helper()
tmpDir := t.TempDir()
remotePath := filepath.Join(tmpDir, "remote.git")
seedPath := filepath.Join(tmpDir, "seed")
clonePath := filepath.Join(tmpDir, "clone")
runGit(t, tmpDir, "init", "--bare", remotePath)
runGit(t, tmpDir, "init", seedPath)
runGit(t, seedPath, "config", "user.email", "test@example.com")
runGit(t, seedPath, "config", "user.name", "Test User")
require.NoError(t, os.WriteFile(filepath.Join(seedPath, "README.md"), []byte("# Test Repo\n"), 0o644))
runGit(t, seedPath, "add", "README.md")
runGit(t, seedPath, "commit", "-m", "Initial commit")
runGit(t, seedPath, "branch", "-M", "main")
runGit(t, seedPath, "remote", "add", "origin", remotePath)
runGit(t, seedPath, "push", "-u", "origin", "main")
runGit(t, seedPath, "checkout", "-b", "feature/test-branch")
require.NoError(t, os.WriteFile(filepath.Join(seedPath, "feature.txt"), []byte("feature\n"), 0o644))
runGit(t, seedPath, "add", "feature.txt")
runGit(t, seedPath, "commit", "-m", "Add feature")
runGit(t, seedPath, "push", "-u", "origin", "feature/test-branch")
runGit(t, tmpDir, "clone", remotePath, clonePath)
return clonePath
}
func runGit(t *testing.T, dir string, args ...string) {
t.Helper()
cmd := exec.Command("git", args...)
cmd.Dir = dir
output, err := cmd.CombinedOutput()
require.NoErrorf(t, err, "git %s failed: %s", strings.Join(args, " "), strings.TrimSpace(string(output)))
}
func gitOutput(t *testing.T, dir string, args ...string) string {
t.Helper()
cmd := exec.Command("git", args...)
cmd.Dir = dir
output, err := cmd.CombinedOutput()
require.NoErrorf(t, err, "git %s failed: %s", strings.Join(args, " "), strings.TrimSpace(string(output)))
return strings.TrimSpace(string(output))
}