fork of go-git with some jj specific features
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v0.0.0 103 lines 2.9 kB view raw
1package main 2 3import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "time" 9 10 "github.com/go-git/go-git/v5" 11 . "github.com/go-git/go-git/v5/_examples" 12 "github.com/go-git/go-git/v5/plumbing/object" 13) 14 15func prepareRepo(w *git.Worktree, directory string) { 16 // We need a known state of files inside the worktree for testing revert a modify and delete 17 Info("echo \"hello world! Modify\" > for-modify") 18 err := ioutil.WriteFile(filepath.Join(directory, "for-modify"), []byte("hello world! Modify"), 0644) 19 CheckIfError(err) 20 Info("git add for-modify") 21 _, err = w.Add("for-modify") 22 CheckIfError(err) 23 24 Info("echo \"hello world! Delete\" > for-delete") 25 err = ioutil.WriteFile(filepath.Join(directory, "for-delete"), []byte("hello world! Delete"), 0644) 26 CheckIfError(err) 27 Info("git add for-delete") 28 _, err = w.Add("for-delete") 29 CheckIfError(err) 30 31 Info("git commit -m \"example go-git commit\"") 32 _, err = w.Commit("example go-git commit", &git.CommitOptions{ 33 Author: &object.Signature{ 34 Name: "John Doe", 35 Email: "john@doe.org", 36 When: time.Now(), 37 }, 38 }) 39 CheckIfError(err) 40} 41 42// An example of how to restore AKA unstage files 43func main() { 44 CheckArgs("<directory>") 45 directory := os.Args[1] 46 47 // Opens an already existing repository. 48 r, err := git.PlainOpen(directory) 49 CheckIfError(err) 50 51 w, err := r.Worktree() 52 CheckIfError(err) 53 54 prepareRepo(w, directory) 55 56 // Perform the operation and stage them 57 Info("echo \"hello world! Modify 2\" > for-modify") 58 err = ioutil.WriteFile(filepath.Join(directory, "for-modify"), []byte("hello world! Modify 2"), 0644) 59 CheckIfError(err) 60 Info("git add for-modify") 61 _, err = w.Add("for-modify") 62 CheckIfError(err) 63 64 Info("echo \"hello world! Add\" > for-add") 65 err = ioutil.WriteFile(filepath.Join(directory, "for-add"), []byte("hello world! Add"), 0644) 66 CheckIfError(err) 67 Info("git add for-add") 68 _, err = w.Add("for-add") 69 CheckIfError(err) 70 71 Info("rm for-delete") 72 err = os.Remove(filepath.Join(directory, "for-delete")) 73 CheckIfError(err) 74 Info("git add for-delete") 75 _, err = w.Add("for-delete") 76 CheckIfError(err) 77 78 // We can verify the current status of the worktree using the method Status. 79 Info("git status --porcelain") 80 status, err := w.Status() 81 CheckIfError(err) 82 fmt.Println(status) 83 84 // Unstage a single file and see the status 85 Info("git restore --staged for-modify") 86 err = w.Restore(&git.RestoreOptions{Staged: true, Files: []string{"for-modify"}}) 87 CheckIfError(err) 88 89 Info("git status --porcelain") 90 status, err = w.Status() 91 CheckIfError(err) 92 fmt.Println(status) 93 94 // Unstage the other 2 files and see the status 95 Info("git restore --staged for-add for-delete") 96 err = w.Restore(&git.RestoreOptions{Staged: true, Files: []string{"for-add", "for-delete"}}) 97 CheckIfError(err) 98 99 Info("git status --porcelain") 100 status, err = w.Status() 101 CheckIfError(err) 102 fmt.Println(status) 103}