Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit 5da0fcc

Browse files
committed
remote: avoid expensive revlist operation when only deleting refs
1 parent 2f58c82 commit 5da0fcc

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

remote.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,14 @@ func (r *Remote) PushContext(ctx context.Context, o *PushOptions) error {
9292
}
9393

9494
isDelete := false
95+
allDelete := true
9596
for _, rs := range o.RefSpecs {
9697
if rs.IsDelete() {
9798
isDelete = true
99+
} else {
100+
allDelete = false
101+
}
102+
if isDelete && !allDelete {
98103
break
99104
}
100105
}
@@ -132,9 +137,13 @@ func (r *Remote) PushContext(ctx context.Context, o *PushOptions) error {
132137
// we are aware.
133138
haves = append(haves, stop...)
134139

135-
hashesToPush, err := revlist.Objects(r.s, objects, haves)
136-
if err != nil {
137-
return err
140+
var hashesToPush []plumbing.Hash
141+
// Avoid the expensive revlist operation if we're only doing deletes.
142+
if !allDelete {
143+
hashesToPush, err = revlist.Objects(r.s, objects, haves)
144+
if err != nil {
145+
return err
146+
}
138147
}
139148

140149
rs, err := pushHashes(ctx, s, r.s, req, hashesToPush)

0 commit comments

Comments
 (0)