From f7bef25052820d4d7604a296c739ba9d885117f8 Mon Sep 17 00:00:00 2001 From: Liam Dyer Date: Mon, 23 Dec 2024 14:57:17 -0500 Subject: [PATCH] fix: add missing git.lua for downloader --- lua/blink/cmp/fuzzy/download/git.lua | 70 ++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 lua/blink/cmp/fuzzy/download/git.lua diff --git a/lua/blink/cmp/fuzzy/download/git.lua b/lua/blink/cmp/fuzzy/download/git.lua new file mode 100644 index 00000000..63a76463 --- /dev/null +++ b/lua/blink/cmp/fuzzy/download/git.lua @@ -0,0 +1,70 @@ +local async = require('blink.cmp.lib.async') +local files = require('blink.cmp.fuzzy.download.files') +local git = {} + +function git.get_version() + return async.task.await_all({ git.get_tag(), git.get_sha() }):map( + function(results) + return { + tag = results[1], + sha = results[2], + } + end + ) +end + +function git.get_tag() + return async.task.new(function(resolve, reject) + -- If repo_dir is nil, no git reposiory is found, similar to `out.code == 128` + local repo_dir = vim.fs.root(files.root_dir, '.git') + if not repo_dir then resolve() end + + vim.system({ + 'git', + '--git-dir', + vim.fs.joinpath(repo_dir, '.git'), + '--work-tree', + repo_dir, + 'describe', + '--tags', + '--exact-match', + }, { cwd = files.root_dir }, function(out) + if out.code == 128 then return resolve() end + if out.code ~= 0 then + return reject('While getting git tag, git exited with code ' .. out.code .. ': ' .. out.stderr) + end + + local lines = vim.split(out.stdout, '\n') + if not lines[1] then return reject('Expected atleast 1 line of output from git describe') end + return resolve(lines[1]) + end) + end) +end + +function git.get_sha() + return async.task.new(function(resolve, reject) + -- If repo_dir is nil, no git reposiory is found, similar to `out.code == 128` + local repo_dir = vim.fs.root(files.root_dir, '.git') + if not repo_dir then resolve() end + + vim.system({ + 'git', + '--git-dir', + vim.fs.joinpath(repo_dir, '.git'), + '--work-tree', + repo_dir, + 'rev-parse', + 'HEAD', + }, { cwd = files.root_dir }, function(out) + if out.code == 128 then return resolve() end + if out.code ~= 0 then + return reject('While getting git sha, git exited with code ' .. out.code .. ': ' .. out.stderr) + end + + local sha = vim.split(out.stdout, '\n')[1] + return resolve(sha) + end) + end) +end + +return git