b8622ddd60a831ec5e82333e8c47f4706d65253e / internal/git/commits_test.go · 1966 bytes · raw
package git
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestLogCommitAtShowPatch(t *testing.T) {
path := filepath.Join(t.TempDir(), "demo.git")
if err := InitBare(path, "main"); err != nil {
t.Fatalf("InitBare: %v", err)
}
seedBare(t, path)
work := filepath.Join(t.TempDir(), "work2")
runGit(t, "", "clone", "-q", path, work)
if err := os.WriteFile(filepath.Join(work, "new.txt"), []byte("new\n"), 0o644); err != nil {
t.Fatalf("write: %v", err)
}
runGit(t, work, "add", ".")
runGit(t, work, "-c", "user.email=t@t", "-c", "user.name=t", "commit", "-qm", "second")
runGit(t, work, "push", "-q", "origin", "main")
logs, err := Log(path, "main", 50)
if err != nil {
t.Fatalf("Log: %v", err)
}
if len(logs) != 2 {
t.Fatalf("log length = %d, want 2: %+v", len(logs), logs)
}
if logs[0].Subject != "second" || logs[1].Subject != "seed" {
t.Errorf("subjects = %q, %q, want second, seed", logs[0].Subject, logs[1].Subject)
}
if logs[0].Author != "t" || !strings.Contains(logs[0].Date, "T") {
t.Errorf("first commit author/date = %q %q", logs[0].Author, logs[0].Date)
}
// Log lists rows only; parents come from CommitAt.
head, err := CommitAt(path, logs[0].SHA)
if err != nil {
t.Fatalf("CommitAt head: %v", err)
}
if len(head.Parents) != 1 || head.Parents[0] != logs[1].SHA {
t.Errorf("head parents = %v, want [%s]", head.Parents, logs[1].SHA)
}
root, err := CommitAt(path, logs[1].SHA[:8])
if err != nil {
t.Fatalf("CommitAt short sha: %v", err)
}
if root.Subject != "seed" || len(root.Parents) != 0 {
t.Errorf("root commit = %+v, want seed with no parents", root)
}
patch, err := ShowPatch(path, logs[0].SHA, 1<<20)
if err != nil {
t.Fatalf("ShowPatch: %v", err)
}
if !strings.Contains(string(patch), "+++ b/new.txt") {
t.Errorf("patch lacks new file diff: %q", patch)
}
if _, err := Log(path, "nosuchref", 10); err == nil {
t.Error("Log on missing ref = nil error, want error")
}
}