aboutsummaryrefslogtreecommitdiffstats
path: root/repository.go
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2015-10-26 01:23:18 +0100
committerMáximo Cuadros <mcuadros@gmail.com>2015-10-26 01:23:18 +0100
commita2e49a59782a50a9ff116c6d17c6e3888502f2ad (patch)
treefe423602d05ff2a0b7bf5550c21fee223de13f9b /repository.go
parent688e802814f791a8723874dc88437bd8d140e103 (diff)
downloadgo-git-a2e49a59782a50a9ff116c6d17c6e3888502f2ad.tar.gz
repository
Diffstat (limited to 'repository.go')
-rw-r--r--repository.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/repository.go b/repository.go
new file mode 100644
index 0000000..2dadcb6
--- /dev/null
+++ b/repository.go
@@ -0,0 +1,68 @@
+package git
+
+import (
+ "fmt"
+
+ "gopkg.in/src-d/go-git.v2/clients/common"
+ "gopkg.in/src-d/go-git.v2/formats/packfile"
+ "gopkg.in/src-d/go-git.v2/internal"
+)
+
+const (
+ DefaultRemoteName = "origin"
+)
+
+type Repository struct {
+ Remotes map[string]*Remote
+ Storage *internal.RAWObjectStorage
+}
+
+// NewRepository creates a new repository setting remote as default remote
+func NewRepository(url string) (*Repository, error) {
+ remote, err := NewRemote(url)
+ if err != nil {
+ return nil, err
+ }
+
+ r := NewPlainRepository()
+ r.Remotes[DefaultRemoteName] = remote
+
+ return r, nil
+}
+
+// NewPlainRepository creates a new repository without remotes
+func NewPlainRepository() *Repository {
+ return &Repository{
+ Remotes: map[string]*Remote{},
+ Storage: internal.NewRAWObjectStorage(),
+ }
+}
+
+func (r *Repository) Pull(remoteName, branch string) error {
+ remote, ok := r.Remotes[remoteName]
+ if !ok {
+ return fmt.Errorf("unable to find remote %q", remoteName)
+ }
+
+ if err := remote.Connect(); err != nil {
+ return err
+ }
+
+ ref, err := remote.Ref(branch)
+ if err != nil {
+ return err
+ }
+
+ reader, err := remote.Fetch(&common.GitUploadPackRequest{
+ Want: []internal.Hash{ref},
+ })
+
+ pr := packfile.NewReader(reader)
+ _, err = pr.Read(r.Storage)
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+}