Monorepo for Tangled

appview/pulls: compress patch blobs using gzip

there is a very strange bug in the bluesky-pds implementation that
prevents blobs with the text `<svg` from being uploaded. it triggers a
500 because the underlying MIME type detection library assumes XML but
the provided MIME type does not match.

ref: https://github.com/bluesky-social/atproto/issues/3151

gzipping the content lets us upload this without any issues.

Signed-off-by: oppiliappan <me@oppi.li>

+16 -5
+16 -5
appview/pulls/pulls.go
··· 1 package pulls 2 3 import ( 4 "context" 5 "database/sql" 6 "encoding/json" 7 "errors" 8 "fmt" 9 "log" 10 "log/slog" 11 "net/http" ··· 1241 return 1242 } 1243 1244 - blob, err := comatproto.RepoUploadBlob(r.Context(), client, strings.NewReader(patch)) 1245 if err != nil { 1246 log.Println("failed to upload patch", err) 1247 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 1335 // apply all record creations at once 1336 var writes []*comatproto.RepoApplyWrites_Input_Writes_Elem 1337 for _, p := range stack { 1338 - blob, err := comatproto.RepoUploadBlob(r.Context(), client, strings.NewReader(p.LatestPatch())) 1339 if err != nil { 1340 log.Println("failed to upload patch blob", err) 1341 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 1885 return 1886 } 1887 1888 - blob, err := comatproto.RepoUploadBlob(r.Context(), client, strings.NewReader(patch)) 1889 if err != nil { 1890 log.Println("failed to upload patch blob", err) 1891 s.pages.Notice(w, "resubmit-error", "Failed to update pull request on the PDS. Try again later.") ··· 2027 return 2028 } 2029 2030 - blob, err := comatproto.RepoUploadBlob(r.Context(), client, strings.NewReader(patch)) 2031 if err != nil { 2032 log.Println("failed to upload patch blob", err) 2033 s.pages.Notice(w, "resubmit-error", "Failed to update pull request on the PDS. Try again later.") ··· 2069 return 2070 } 2071 2072 - blob, err := comatproto.RepoUploadBlob(r.Context(), client, strings.NewReader(patch)) 2073 if err != nil { 2074 log.Println("failed to upload patch blob", err) 2075 s.pages.Notice(w, "resubmit-error", "Failed to update pull request on the PDS. Try again later.") ··· 2452 2453 return stack, nil 2454 }
··· 1 package pulls 2 3 import ( 4 + "bytes" 5 + "compress/gzip" 6 "context" 7 "database/sql" 8 "encoding/json" 9 "errors" 10 "fmt" 11 + "io" 12 "log" 13 "log/slog" 14 "net/http" ··· 1244 return 1245 } 1246 1247 + blob, err := comatproto.RepoUploadBlob(r.Context(), client, gz(patch)) 1248 if err != nil { 1249 log.Println("failed to upload patch", err) 1250 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 1338 // apply all record creations at once 1339 var writes []*comatproto.RepoApplyWrites_Input_Writes_Elem 1340 for _, p := range stack { 1341 + blob, err := comatproto.RepoUploadBlob(r.Context(), client, gz(p.LatestPatch())) 1342 if err != nil { 1343 log.Println("failed to upload patch blob", err) 1344 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 1888 return 1889 } 1890 1891 + blob, err := comatproto.RepoUploadBlob(r.Context(), client, gz(patch)) 1892 if err != nil { 1893 log.Println("failed to upload patch blob", err) 1894 s.pages.Notice(w, "resubmit-error", "Failed to update pull request on the PDS. Try again later.") ··· 2030 return 2031 } 2032 2033 + blob, err := comatproto.RepoUploadBlob(r.Context(), client, gz(patch)) 2034 if err != nil { 2035 log.Println("failed to upload patch blob", err) 2036 s.pages.Notice(w, "resubmit-error", "Failed to update pull request on the PDS. Try again later.") ··· 2072 return 2073 } 2074 2075 + blob, err := comatproto.RepoUploadBlob(r.Context(), client, gz(patch)) 2076 if err != nil { 2077 log.Println("failed to upload patch blob", err) 2078 s.pages.Notice(w, "resubmit-error", "Failed to update pull request on the PDS. Try again later.") ··· 2455 2456 return stack, nil 2457 } 2458 + 2459 + func gz(s string) io.Reader { 2460 + var b bytes.Buffer 2461 + w := gzip.NewWriter(&b) 2462 + w.Write([]byte(s)) 2463 + w.Close() 2464 + return &b 2465 + }