1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
|