Description
Description
The contents API lists SHA of the LFS redirect, not SHA of the file, with no indication that the file is stored in LFS.
{'Access-Control-Expose-Headers': 'Content-Disposition', 'Cache-Control': 'private, max-age=300', 'Content-Disposition': 'inline; filename="config.tar.bz2"; filename*=UTF-8''config.tar.bz2', 'Content-Length': '131', 'Content-Type': 'text/plain; charset=utf-8', 'Etag': '"d948b9b700b0a9248e131b58f6544aebbda4e3c553602a4747330aa7b4391b4b"', 'Last-Modified': 'Fri, 20 Jun 2025 18:38:24 GMT', 'No-Gzip-Compression': '1', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-Gitea-Object-Type': 'file', 'Date': 'Sat, 21 Jun 2025 11:08:03 GMT'}
version https://git-lfs.github.com/spec/v1
oid sha256:9db9f10cacfc0121f762bba4dbe6572a51a09924245ec358a1b66abd9fb68888
size 306922
[{'name': 'config.tar.bz2', 'path': 'config.tar.bz2', 'sha': 'd948b9b700b0a9248e131b58f6544aebbda4e3c553602a4747330aa7b4391b4b', 'last_commit_sha': 'cecfa1db758fa52082558a5b0c05541a63bf46549441a625666822d6291c54ba', 'type': 'file', 'size': 131, 'encoding': None, 'content': None, 'target': None, 'url': 'https://src.opensuse.org/api/v1/repos/michals/kernel-source/contents/config.tar.bz2?ref=home%2Fmichals%2Fkernel-git', 'html_url': 'https://src.opensuse.org/michals/kernel-source/src/branch/home/michals/kernel-git/config.tar.bz2', 'git_url': 'https://src.opensuse.org/api/v1/repos/michals/kernel-source/git/blobs/d948b9b700b0a9248e131b58f6544aebbda4e3c553602a4747330aa7b4391b4b', 'download_url': 'https://src.opensuse.org/michals/kernel-source/raw/branch/home/michals/kernel-git/config.tar.bz2', 'submodule_git_url': None, '_links': {'self': 'https://src.opensuse.org/api/v1/repos/michals/kernel-source/contents/config.tar.bz2?ref=home%2Fmichals%2Fkernel-git', 'git': 'https://src.opensuse.org/api/v1/repos/michals/kernel-source/git/blobs/d948b9b700b0a9248e131b58f6544aebbda4e3c553602a4747330aa7b4391b4b', 'html': 'https://src.opensuse.org/michals/kernel-source/src/branch/home/michals/kernel-git/config.tar.bz2'}}]
The file can be retrieved through the media API so gitea knows that the file is stored in LFS:
{'Accept-Ranges': 'bytes', 'Access-Control-Expose-Headers': 'Content-Disposition', 'Cache-Control': 'private, max-age=300', 'Content-Disposition': 'inline; filename="config.tar.bz2"; filename*=UTF-8''config.tar.bz2', 'Content-Length': '306922', 'Content-Type': 'application/octet-stream', 'Etag': '"9db9f10cacfc0121f762bba4dbe6572a51a09924245ec358a1b66abd9fb68888"', 'Last-Modified': 'Fri, 20 Jun 2025 18:38:24 GMT', 'No-Gzip-Compression': '1', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-Gitea-Object-Type': 'file', 'Date': 'Sat, 21 Jun 2025 11:08:02 GMT'}
but then the whole file is sent. It does not seem feasible to get the actual file SHA without retrieving the whole file. The content API is already very time-consuming but does not provide the file SHA. HEAD on the media URL does not provide the SHA header.
https://demo.gitea.com/hramrach/kernel-source/src/branch/home/hramrach/kernel-git
https://src.opensuse.org/michals/kernel-source/src/branch/home/michals/kernel-git/
Gitea Version
1.23.8
Can you reproduce the bug on the Gitea demo site?
Yes
Log Gist
No response
Screenshots
No response
Git Version
unknown
Operating System
Linux
How are you running Gitea?
All of the above
Database
None