Add support for +refs
Change-Id: I828efe243c12c66c134a1f12f69499fa96860220
diff --git a/gitiles/client.go b/gitiles/client.go
index 7fec489..9ecf39b 100644
--- a/gitiles/client.go
+++ b/gitiles/client.go
@@ -365,3 +365,22 @@
panic("unreachable.")
}
+
+// Refs returns the refs of a repository, optionally filtered by prefix.
+func (s *RepoService) Refs(prefix string) (map[string]*RefData, error) {
+
+ jsonURL := s.service.addr
+ jsonURL.Path = path.Join(jsonURL.Path, s.Name, "+refs")
+ if prefix != "" {
+ jsonURL.Path = path.Join(jsonURL.Path, prefix)
+ }
+ jsonURL.RawQuery = "format=JSON"
+
+ result := map[string]*RefData{}
+ err := s.service.getJSON(&jsonURL, &result)
+ if err != nil {
+ return nil, err
+ }
+
+ return result, err
+}
diff --git a/gitiles/prod_test.go b/gitiles/prod_test.go
index c4fc68a..43ccbef 100644
--- a/gitiles/prod_test.go
+++ b/gitiles/prod_test.go
@@ -81,3 +81,25 @@
t.Fatalf("got %v, want %v", got, want)
}
}
+
+func TestProductionRefs(t *testing.T) {
+ gs, err := NewService(Options{
+ Address: "https://gerrit.googlesource.com",
+ })
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ repo := gs.NewRepoService("gitiles")
+ if err != nil {
+ t.Fatal(err)
+ }
+ got, err := repo.Refs("refs/heads")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if got["master"] == nil {
+ t.Errorf("got %v, want key 'master'", got)
+ }
+}
diff --git a/gitiles/types.go b/gitiles/types.go
index 56a3da5..ab9721d 100644
--- a/gitiles/types.go
+++ b/gitiles/types.go
@@ -117,3 +117,15 @@
return buf.String()
}
+
+// A git reference
+type RefData struct {
+ // The value to which a reference points.
+ Value string
+
+ // If the value points to a tag, the commit that the tag points to.
+ Peeled string
+
+ // If the ref is symbolic, eg. HEAD, the ref to which it points.
+ Target string
+}