blob: c2616049bff2086ac627935269543de310303201 [file] [log] [blame]
package git
import (
"context"
"fmt"
"log"
)
// Example demonstrates how to use the Git interface
func Example() {
ctx := context.Background()
// Create a new Git instance
git := DefaultGit("/path/to/your/repo")
// Get repository status
status, err := git.Status(ctx)
if err != nil {
log.Fatalf("Failed to get status: %v", err)
}
fmt.Printf("Current branch: %s\n", status.Branch)
fmt.Printf("Repository is clean: %t\n", status.IsClean)
// List branches
branches, err := git.ListBranches(ctx)
if err != nil {
log.Fatalf("Failed to list branches: %v", err)
}
fmt.Println("Branches:")
for _, branch := range branches {
current := ""
if branch.IsCurrent {
current = " (current)"
}
fmt.Printf(" %s%s\n", branch.Name, current)
}
// Get recent commits
logOptions := LogOptions{
MaxCount: 5,
Oneline: true,
}
commits, err := git.Log(ctx, logOptions)
if err != nil {
log.Fatalf("Failed to get log: %v", err)
}
fmt.Println("Recent commits:")
for _, commit := range commits {
fmt.Printf(" %s: %s\n", commit.Hash[:8], commit.Message)
}
}
// ExampleWorkflow demonstrates a typical Git workflow
func ExampleWorkflow() {
ctx := context.Background()
// Initialize a new repository
git := DefaultGit("/path/to/new/repo")
// Initialize the repository
if err := git.Init(ctx, "/path/to/new/repo"); err != nil {
log.Fatalf("Failed to initialize repository: %v", err)
}
// Set user configuration
userConfig := UserConfig{
Name: "John Doe",
Email: "john@example.com",
}
if err := git.SetUserConfig(ctx, userConfig); err != nil {
log.Fatalf("Failed to set user config: %v", err)
}
// Create a new file and add it
// (In a real scenario, you would create the file here)
// Stage all changes
if err := git.AddAll(ctx); err != nil {
log.Fatalf("Failed to add files: %v", err)
}
// Commit the changes
commitOptions := CommitOptions{
AllowEmpty: false,
}
if err := git.Commit(ctx, "Initial commit", commitOptions); err != nil {
log.Fatalf("Failed to commit: %v", err)
}
// Create a new branch
if err := git.CreateBranch(ctx, "feature/new-feature", ""); err != nil {
log.Fatalf("Failed to create branch: %v", err)
}
// Switch to the new branch
if err := git.Checkout(ctx, "feature/new-feature"); err != nil {
log.Fatalf("Failed to checkout branch: %v", err)
}
fmt.Println("Repository initialized and feature branch created!")
}
// ExampleRemoteOperations demonstrates remote repository operations
func ExampleRemoteOperations() {
ctx := context.Background()
git := DefaultGit("/path/to/your/repo")
// Add a remote
if err := git.AddRemote(ctx, "origin", "https://github.com/user/repo.git"); err != nil {
log.Fatalf("Failed to add remote: %v", err)
}
// List remotes
remotes, err := git.ListRemotes(ctx)
if err != nil {
log.Fatalf("Failed to list remotes: %v", err)
}
fmt.Println("Remotes:")
for _, remote := range remotes {
fmt.Printf(" %s: %s\n", remote.Name, remote.URL)
}
// Fetch from remote
fetchOptions := FetchOptions{
All: true,
Tags: true,
}
if err := git.Fetch(ctx, "", fetchOptions); err != nil {
log.Fatalf("Failed to fetch: %v", err)
}
// Push to remote
pushOptions := PushOptions{
SetUpstream: true,
}
if err := git.Push(ctx, "origin", "main", pushOptions); err != nil {
log.Fatalf("Failed to push: %v", err)
}
}