From d3478808e885aa8d3ea15c1765f7b36f7c2fe0e2 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Mon, 7 Aug 2023 22:39:31 +0800 Subject: [PATCH] feat(git): add `:Git reset` command --- bundle/git.vim/lua/git/command/reset.lua | 48 ++++++++++++++++++++---- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/bundle/git.vim/lua/git/command/reset.lua b/bundle/git.vim/lua/git/command/reset.lua index ad5b54a13..74b5ccaee 100644 --- a/bundle/git.vim/lua/git/command/reset.lua +++ b/bundle/git.vim/lua/git/command/reset.lua @@ -1,7 +1,41 @@ ---============================================================================= --- reset.lua --- Git reset command --- Copyright (c) 2016-2023 Wang Shidong & Contributors --- Author: Wang Shidong < wsdjeg@outlook.com > --- URL: https://spacevim.org --- License: GPLv3 ---============================================================================= +--============================================================================= +-- reset.lua --- Git reset command +-- Copyright (c) 2016-2023 Wang Shidong & Contributors +-- Author: Wang Shidong < wsdjeg@outlook.com > +-- URL: https://spacevim.org +-- License: GPLv3 +--============================================================================= +local m = {} + +local job = require('spacevim.api.job') +local nt = require('spacevim.api.notify') +local log = require('git.log') + +local function on_exit(id, code, single) + log.debug('git-reset exit code:' .. code .. ' single:' .. single) + if code == 0 and single == 0 then + if vim.fn.exists(':GitGutter') == 2 then + vim.cmd('GitGutter') + end + nt.notify('git reset done!') + else + nt.notify('git reset failed!') + end +end + +function m.run(argv) + local cmd = { 'git', 'reset' } + if #argv == 1 and argv[1] == '%' then + cmd = { 'git', 'reset', 'HEAD', vim.fn.expand('%') } + else + for _, v in ipairs(argv) do + table.insert(cmd, v) + end + end + log.debug('git-reset cmd:' .. vim.inspect(cmd)) + job.start(cmd, { + on_exit = on_exit, + }) +end + +return m