package git import ( "log" "os" "testing" "time" ) func Test_Push_ToRemote(t *testing.T) { repo := createBareTestRepo(t) defer os.RemoveAll(repo.Path()) repo2 := createTestRepo(t) defer os.RemoveAll(repo2.Workdir()) remote, err := repo2.CreateRemote("test_push", repo.Path()) checkFatal(t, err) index, err := repo2.Index() checkFatal(t, err) index.AddByPath("README") err = index.Write() checkFatal(t, err) newTreeId, err := index.WriteTree() checkFatal(t, err) tree, err := repo2.LookupTree(newTreeId) checkFatal(t, err) sig := &Signature{Name: "Rand Om Hacker", Email: "random@hacker.com", When: time.Now()} // this should cause master branch to be created if it does not already exist _, err = repo2.CreateCommit("HEAD", sig, sig, "message", tree) checkFatal(t, err) push, err := remote.NewPush() checkFatal(t, err) err = push.AddRefspec("refs/heads/master") checkFatal(t, err) err = push.Finish() checkFatal(t, err) err = push.StatusForeach(func(ref string, msg string) int { log.Printf("%s -> %s", ref, msg) return 0 }) checkFatal(t, err) if !push.UnpackOk() { t.Fatalf("unable to unpack") } defer remote.Free() defer repo.Free() }