// servePatchFile is the API hook for returning raw patch contents func servePatchFile(w http.ResponseWriter, r *http.Request) { fileId := mux.Vars(r)["patchfile_id"] data, err := db.GetGridFile(patch.GridFSPrefix, fileId) if err != nil { http.Error(w, fmt.Sprintf("Error reading file from db: %v", err), http.StatusInternalServerError) return } defer data.Close() io.Copy(w, data) }
// FetchPatchFiles dereferences externally-stored patch diffs by fetching them from gridfs // and placing their contents into the patch object. func (p *Patch) FetchPatchFiles() error { for i, patchPart := range p.Patches { // If the patch isn't stored externally, no need to do anything. if patchPart.PatchSet.PatchFileId == "" { continue } file, err := db.GetGridFile(GridFSPrefix, patchPart.PatchSet.PatchFileId) if err != nil { return err } defer file.Close() raw, err := ioutil.ReadAll(file) if err != nil { return err } p.Patches[i].PatchSet.Patch = string(raw) } return nil }