Add git implementation
Change-Id: I3bb5986fe244b310038b7b2ec4359d8439a158de
diff --git a/server/git/example.go b/server/git/example.go
new file mode 100644
index 0000000..c261604
--- /dev/null
+++ b/server/git/example.go
@@ -0,0 +1,149 @@
+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)
+ }
+}