diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-07-11 06:37:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-11 06:37:32 -0700 |
commit | d42ecf655db7969fdaaa3e65be18e0c9be7ddb8f (patch) | |
tree | 7691e5817dee02594904786c7a9f3f6a990b39d0 /remote.go | |
parent | 09cd5ccfd384be79e8c49d0d0bccd22589098809 (diff) | |
parent | 09f5f2a35f0f4c42b2def0642540f32e59fdeeb3 (diff) | |
download | go-git-d42ecf655db7969fdaaa3e65be18e0c9be7ddb8f.tar.gz |
Merge pull request #472 from smola/fix-caps-delete-refs
improve delete support on push
Diffstat (limited to 'remote.go')
-rw-r--r-- | remote.go | 22 |
1 files changed, 18 insertions, 4 deletions
@@ -21,7 +21,10 @@ import ( "gopkg.in/src-d/go-git.v4/utils/ioutil" ) -var NoErrAlreadyUpToDate = errors.New("already up-to-date") +var ( + NoErrAlreadyUpToDate = errors.New("already up-to-date") + ErrDeleteRefNotSupported = errors.New("server does not support delete-refs") +) // Remote represents a connection to a remote repository. type Remote struct { @@ -56,7 +59,6 @@ func (r *Remote) Fetch(o *FetchOptions) error { // Push performs a push to the remote. Returns NoErrAlreadyUpToDate if the // remote was already up-to-date. func (r *Remote) Push(o *PushOptions) (err error) { - // TODO: Support deletes. // TODO: Sideband support if o.RemoteName == "" { @@ -88,6 +90,18 @@ func (r *Remote) Push(o *PushOptions) (err error) { return err } + isDelete := false + for _, rs := range o.RefSpecs { + if rs.IsDelete() { + isDelete = true + break + } + } + + if isDelete && !ar.Capabilities.Supports(capability.DeleteRefs) { + return ErrDeleteRefNotSupported + } + req := packp.NewReferenceUpdateRequestFromCapabilities(ar.Capabilities) if err := r.addReferencesToUpdate(o.RefSpecs, remoteRefs, req); err != nil { return err @@ -284,8 +298,8 @@ func (r *Remote) deleteReferences(rs config.RefSpec, cmd := &packp.Command{ Name: ref.Name(), - Old: ref.Hash(), - New: plumbing.ZeroHash, + Old: ref.Hash(), + New: plumbing.ZeroHash, } req.Commands = append(req.Commands, cmd) return nil |