Skip to content

Working on PR for "Missing HEAD method when the code moved to chi" #14532

Closed
@faridtsl

Description

@faridtsl
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/data/testgitea(master*) # curl --head https://try.gitea.io/anyuser/anyrepo/raw/branch/master/anyfile.png                                                                                                                                                                                                                                                                                                                                        
HTTP/2 405
date: Sat, 30 Jan 2021 23:04:16 GMT
set-cookie: i_like_gitea=10985d2770de63e2; Path=/; HttpOnly
set-cookie: _csrf=kFz_ot6_LVT-Jsf6zgWksSWXVLU6MTYxMjA0Nzg1NjQ0NDU5MjM5MA; Path=/; Expires=Sun, 31 Jan 2021 23:04:16 GMT; HttpOnly
set-cookie: macaron_flash=; Path=/; Max-Age=0; HttpOnly
x-frame-options: SAMEORIGIN

Description

When I was trying to fix issue #8030 I had a look at the code base. Then two days later it moved from Macaron to Chi, the HEAD HTTP method no longer works automatically when GET is defined.

I already added and tested the code locally. Adding this line to WebRoutes function in 'routers/routes/web.go' fixes the issue.

r.Use(middleware.GetHead)

As for fixing issue #8030 :

This is a problem when trying to make a program download from Gitea. For example, Windows executables break when trying to download from Gitea /raw route as it does not give "Content-Length" in HEAD response.

The only function that needed to change is ServeData in 'routers/repo/download.go'. By changing the call to io.Copy to ioutil.ReadAll() + ctx.Resp.Write() . Then Writing the Content-Length explicitly by taking the length of the ioutil.ReadAll() byte array.

Questions :
1- Are the design decisions good ? should I make a PR ?
2- Should I make one or two PRs ?
3- I have no idea how to write tests these two functionalities ?

Related issues

#8030

Metadata

Metadata

Assignees

No one assigned

    Labels

    issue/needs-feedbackFor bugs, we need more details. For features, the feature must be described in more detail

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions