Index

resty-gitweb / master

A git web interface for Lua/OpenResty (you're on it right now!)

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
703 Jan 2021 10:11609d330libgit2 binding updates, README updatesJosh Stockin1420G

Blob @ resty-gitweb / git / read_blob.lua

text/plain1319 bytesdownload raw
1-- resty-gitweb@git/read_blob.lua
2-- Opens and reads blob by filename and rev
3
4-- Copyright (c) 2020 Joshua 'joshuas3' Stockin
5-- <https://git.joshstock.in/resty-gitweb>
6-- This software is licensed under the MIT License.
7
8local ffi = require("ffi")
9local bit = require("bit")
10local git2_error = require("git/git2_error")
11
12local _M = function(repo_obj, rev, file_path)
13 local err = 0
14
15 -- Get tree root
16 local tree = ffi.new("git_object*[1]")
17 err = git2.git_revparse_single(ffi.cast("git_object**", tree), repo_obj, rev)
18 git2_error(err, "Failed to look up tree from rev name")
19 tree = tree[0]
20
21 -- Get tree entry object (blob)
22 local blob = ffi.new("git_object*[1]")
23 err = git2.git_object_lookup_bypath(ffi.cast("git_object**", blob), tree, file_path, git2.GIT_OBJECT_BLOB)
24 git2_error(err, "Failed to look up blob")
25 blob = ffi.cast("git_blob*", blob[0])
26
27 -- Get blob content
28 local buf = ffi.new("git_buf")
29 err = git2.git_blob_filtered_content(buf, blob, file_path, 0)
30 git2_error(err, "Failed to filter blob")
31 local raw = ffi.string(buf.ptr, buf.size)
32 local is_binary = git2.git_blob_is_binary(blob) == 1
33
34 -- Free everything
35 git2.git_buf_free(buf)
36 git2.git_blob_free(blob)
37 git2.git_object_free(tree)
38
39 return raw, is_binary
40end
41
42return _M
43