2014-03-19 01:54:52 -05:00
|
|
|
package git
|
|
|
|
|
|
|
|
import (
|
2015-01-05 13:58:36 -06:00
|
|
|
"fmt"
|
2014-03-19 01:54:52 -05:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2014-03-20 04:06:56 -05:00
|
|
|
func TestListRemotes(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2014-03-20 04:06:56 -05:00
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2014-03-20 04:06:56 -05:00
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
_, err := repo.Remotes.Create("test", "git://foo/bar")
|
2014-03-20 04:06:56 -05:00
|
|
|
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
expected := []string{
|
|
|
|
"test",
|
|
|
|
}
|
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
actual, err := repo.Remotes.List()
|
2014-03-20 04:06:56 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
compareStringList(t, expected, actual)
|
|
|
|
}
|
2014-10-15 08:43:02 -05:00
|
|
|
|
2014-10-27 09:12:18 -05:00
|
|
|
func assertHostname(cert *Certificate, valid bool, hostname string, t *testing.T) ErrorCode {
|
2014-10-15 08:43:02 -05:00
|
|
|
if hostname != "github.com" {
|
|
|
|
t.Fatal("Hostname does not match")
|
|
|
|
return ErrUser
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCertificateCheck(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2014-10-15 08:43:02 -05:00
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2014-10-15 08:43:02 -05:00
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
remote, err := repo.Remotes.Create("origin", "https://github.com/libgit2/TestGitRepository")
|
2014-10-15 08:43:02 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-08-31 13:22:17 -05:00
|
|
|
options := FetchOptions{
|
2015-06-07 21:11:21 -05:00
|
|
|
RemoteCallbacks: RemoteCallbacks{
|
|
|
|
CertificateCheckCallback: func(cert *Certificate, valid bool, hostname string) ErrorCode {
|
|
|
|
return assertHostname(cert, valid, hostname, t)
|
|
|
|
},
|
2014-10-15 08:43:02 -05:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2015-06-07 21:11:21 -05:00
|
|
|
err = remote.Fetch([]string{}, &options, "")
|
2014-10-15 08:43:02 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
}
|
2014-10-24 14:12:07 -05:00
|
|
|
|
2014-10-27 10:29:42 -05:00
|
|
|
func TestRemoteConnect(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2014-10-27 10:29:42 -05:00
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2014-10-27 10:29:42 -05:00
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
remote, err := repo.Remotes.Create("origin", "https://github.com/libgit2/TestGitRepository")
|
2014-10-27 10:29:42 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2016-04-21 09:34:51 -05:00
|
|
|
err = remote.ConnectFetch(nil, nil, nil)
|
2014-10-27 10:29:42 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
}
|
|
|
|
|
2014-10-24 14:12:07 -05:00
|
|
|
func TestRemoteLs(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2014-10-24 14:12:07 -05:00
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2014-10-24 14:12:07 -05:00
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
remote, err := repo.Remotes.Create("origin", "https://github.com/libgit2/TestGitRepository")
|
2014-10-24 14:12:07 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2016-04-21 09:34:51 -05:00
|
|
|
err = remote.ConnectFetch(nil, nil, nil)
|
2014-10-27 10:29:42 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2014-10-24 14:12:07 -05:00
|
|
|
heads, err := remote.Ls()
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
if len(heads) == 0 {
|
|
|
|
t.Error("Expected remote heads")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestRemoteLsFiltering(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2014-10-24 14:12:07 -05:00
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2014-10-24 14:12:07 -05:00
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
remote, err := repo.Remotes.Create("origin", "https://github.com/libgit2/TestGitRepository")
|
2014-10-24 14:12:07 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2016-04-21 09:34:51 -05:00
|
|
|
err = remote.ConnectFetch(nil, nil, nil)
|
2014-10-27 10:29:42 -05:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2014-10-24 14:12:07 -05:00
|
|
|
heads, err := remote.Ls("master")
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
if len(heads) != 1 {
|
|
|
|
t.Fatalf("Expected one head for master but I got %d", len(heads))
|
|
|
|
}
|
|
|
|
|
|
|
|
if heads[0].Id == nil {
|
|
|
|
t.Fatalf("Expected head to have an Id, but it's nil")
|
|
|
|
}
|
|
|
|
|
|
|
|
if heads[0].Name == "" {
|
|
|
|
t.Fatalf("Expected head to have a name, but it's empty")
|
|
|
|
}
|
|
|
|
}
|
2015-01-05 13:58:36 -06:00
|
|
|
|
|
|
|
func TestRemotePruneRefs(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2015-01-05 13:58:36 -06:00
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2015-01-05 13:58:36 -06:00
|
|
|
|
|
|
|
config, err := repo.Config()
|
|
|
|
checkFatal(t, err)
|
|
|
|
defer config.Free()
|
|
|
|
|
|
|
|
err = config.SetBool("remote.origin.prune", true)
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
_, err = repo.Remotes.Create("origin", "https://github.com/libgit2/TestGitRepository")
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
remote, err := repo.Remotes.Lookup("origin")
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
if !remote.PruneRefs() {
|
|
|
|
t.Fatal("Expected remote to be configured to prune references")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestRemotePrune(t *testing.T) {
|
2016-08-27 12:21:05 -05:00
|
|
|
t.Parallel()
|
2015-01-05 13:58:36 -06:00
|
|
|
remoteRepo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, remoteRepo)
|
2015-01-05 13:58:36 -06:00
|
|
|
|
|
|
|
head, _ := seedTestRepo(t, remoteRepo)
|
|
|
|
commit, err := remoteRepo.LookupCommit(head)
|
|
|
|
checkFatal(t, err)
|
|
|
|
defer commit.Free()
|
|
|
|
|
2015-03-14 19:49:32 -05:00
|
|
|
remoteRef, err := remoteRepo.CreateBranch("test-prune", commit, true)
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
2015-01-05 13:58:36 -06:00
|
|
|
|
|
|
|
config, err := repo.Config()
|
|
|
|
checkFatal(t, err)
|
|
|
|
defer config.Free()
|
|
|
|
|
|
|
|
remoteUrl := fmt.Sprintf("file://%s", remoteRepo.Workdir())
|
2015-06-27 17:51:17 -05:00
|
|
|
remote, err := repo.Remotes.Create("origin", remoteUrl)
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-07 21:11:21 -05:00
|
|
|
err = remote.Fetch([]string{"test-prune"}, nil, "")
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-27 18:12:32 -05:00
|
|
|
_, err = repo.References.Create("refs/remotes/origin/test-prune", head, true, "remote reference")
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
err = remoteRef.Delete()
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
err = config.SetBool("remote.origin.prune", true)
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-27 17:51:17 -05:00
|
|
|
rr, err := repo.Remotes.Lookup("origin")
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2016-04-21 09:34:51 -05:00
|
|
|
err = rr.ConnectFetch(nil, nil, nil)
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-07 21:11:21 -05:00
|
|
|
err = rr.Prune(nil)
|
2015-01-05 13:58:36 -06:00
|
|
|
checkFatal(t, err)
|
|
|
|
|
2015-06-27 18:12:32 -05:00
|
|
|
_, err = repo.References.Lookup("refs/remotes/origin/test-prune")
|
2015-01-05 13:58:36 -06:00
|
|
|
if err == nil {
|
|
|
|
t.Fatal("Expected error getting a pruned reference")
|
|
|
|
}
|
|
|
|
}
|