# Handle v2 fetch remote ERR packets

`6097620`→[main](/content/gh/entireio/git-sync/commits/main/index.html)·

pjbgf·2mo ago·2 files·+36 added/-0 removed

## Changes

2

- internal/gitproto

- Mfetch.go+6

- Mfetch_test.go+30

```
264 unmodified lines

265
266
267
268
269
270
271
272
273
30 unmodified lines

304
305
306
307
308
309
310
311
312

264 unmodified lines

continue
		case PacketData:
			line := string(payload)
			if strings.HasPrefix(line, "ERR ") {
				return errors.New("remote: " + line[4:])
			}
			switch line {
			case "packfile\n":
				demux := sideband.NewDemuxer(sideband.Sideband64k, reader.BufReader())
30 unmodified lines

continue
			case PacketData:
				line := string(payload)
				if strings.HasPrefix(line, "ERR ") {
					return nil, errors.New("remote: " + line[4:])
				}
			switch line {
			case "packfile\n":
				demux := sideband.NewDemuxer(sideband.Sideband64k, reader.BufReader())
```

Minternal/gitproto/fetch.go+6

```
781 unmodified lines

782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817

781 unmodified lines

}
}

func TestStoreV2FetchPackReturnsRemoteError(t *testing.T) {
	var wire bytes.Buffer
	if _, err := pktline.WriteString(&wire, "ERR upload-pack: not our ref"); err != nil {
		t.Fatalf("write remote error: %v", err)
	}

err := storeV2FetchPack(memory.NewStorage(), &wire, false)
	if err == nil {
		t.Fatal("expected remote error")
	}
	if got, want := err.Error(), "remote: upload-pack: not our ref"; got != want {
		t.Fatalf("error = %q, want %q", got, want)
	}
}

func TestOpenV2PackStreamReturnsRemoteError(t *testing.T) {
	var wire bytes.Buffer
	if _, err := pktline.WriteString(&wire, "ERR upload-pack: not our ref"); err != nil {
		t.Fatalf("write remote error: %v", err)
	}

_, err := openV2PackStream(io.NopCloser(&wire), false)
	if err == nil {
		t.Fatal("expected remote error")
	}
	if got, want := err.Error(), "remote: upload-pack: not our ref"; got != want {
		t.Fatalf("error = %q, want %q", got, want)
	}
}

func TestFetchPackV2ReturnedReaderClosesBodyOnInterruption(t *testing.T) {
	ep, err := transport.ParseURL("https://example.com/repo.git")
	if err != nil {
