From 738684097dfdd9a4a67cd217b0beda3e169bd85d Mon Sep 17 00:00:00 2001 From: William Boman Date: Wed, 5 Oct 2022 20:33:21 +0200 Subject: feat(cargo): improve handling of git-based crates (#512) This is all pretty overkill, especially considering the small amount of packages based on git-based crates. --- lua/mason-core/managers/github/client.lua | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'lua/mason-core/managers/github/client.lua') diff --git a/lua/mason-core/managers/github/client.lua b/lua/mason-core/managers/github/client.lua index 8f4545e8..788b402b 100644 --- a/lua/mason-core/managers/github/client.lua +++ b/lua/mason-core/managers/github/client.lua @@ -8,10 +8,16 @@ local M = {} ---@alias GitHubReleaseAsset {url: string, id: integer, name: string, browser_download_url: string, created_at: string, updated_at: string, size: integer, download_count: integer} ---@alias GitHubRelease {tag_name: string, prerelease: boolean, draft: boolean, assets:GitHubReleaseAsset[]} ---@alias GitHubTag {name: string} +---@alias GitHubCommit {sha: string} ---@param path string +---@param opts { params: table? }? ---@return Result # JSON decoded response. -local function api_call(path) +local function api_call(path, opts) + if opts and opts.params then + local params = _.join("&", _.map(_.join "=", _.sort_by(_.head, _.to_pairs(opts.params)))) + path = ("%s?%s"):format(path, params) + end return spawn .gh({ "api", path, env = { CLICOLOR_FORCE = 0 } }) :map(_.prop "stdout") @@ -21,6 +27,8 @@ local function api_call(path) :map_catching(vim.json.decode) end +M.api_call = api_call + ---@async ---@param repo string The GitHub repo ("username/repo"). ---@return Result # Result @@ -105,6 +113,22 @@ function M.fetch_latest_tag(repo) :map(_.prop "tag") end +---@async +---@param repo string The GitHub repo ("username/repo"). +---@param opts { page: integer?, per_page: integer? }? +---@return Result # Result +function M.fetch_commits(repo, opts) + local path = ("repos/%s/commits"):format(repo) + return api_call(path, { + params = { + page = opts and opts.page or 1, + per_page = opts and opts.per_page or 30, + }, + }):map_err(function() + return ("Failed to fetch commits for GitHub repository %s."):format(repo) + end) +end + ---@alias GitHubRateLimit {limit: integer, remaining: integer, reset: integer, used: integer} ---@alias GitHubRateLimitResponse {resources: { core: GitHubRateLimit }} -- cgit v1.2.3-70-g09d2