summaryrefslogtreecommitdiff
path: root/mut/neovim/pack/plugins/start/blink.cmp/lua/blink/cmp/fuzzy/download/git.lua
blob: 63a76463b9cfc8a110b0bfc12bbfd84ed66e3bed (plain)
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