Для себя (в ConEmu, ага) я решил вопрос батником (прилагается) и выставлением в фаре промта в
Code: Select all
$p%gitbranch%
Code: Select all
@echo off
set TERM=msys
set check_br=NO
set git_fail=NO
if /I "%~1" == "branch" set check_br=YES
if /I "%~1" == "br" set check_br=YES
if /I "%~1" == "checkout" set check_br=YES
if /I "%~1" == "co" set check_br=YES
if /I "%~1" == "rebase" set check_br=YES
if /I "%~1" == "commit" set check_br=YES
if /I "%~1" == "stash" set check_br=YES
set ConEmuHooks=OFF
call "%~dp0..\bin\git" %*
if errorlevel 1 set git_fail=YES
goto done
:done
if NOT %check_br%==YES goto :EOF
if %git_fail%==YES (
set gitbranch=^>
"%ConEmuBaseDir%\ConEmuC.exe" /export=CON gitbranch
) else (
call "%~dp0ExportBranch.cmd"
)
Code: Select all
<PortableGit>\bin\git.exe
<PortableGit>\my\git.cmd
<PortableGit>\ExportBranch.cmd\git.cmd
Code: Select all
@echo off
goto run
:print
echo %~1
goto :EOF
:inc_add
set /A gitbranch_add=%gitbranch_add%+1
goto :EOF
:inc_chg
set /A gitbranch_chg=%gitbranch_chg%+1
goto :EOF
:inc_del
set /A gitbranch_del=%gitbranch_del%+1
goto :EOF
:eval
if "%gitbranch%" == "##" (
rem save first line, this must be branch
) else if "%gitbranch_ln:~0,2%" == "??" (
call :inc_add
) else if "%gitbranch_ln:~0,2%" == "D" (
call :inc_del
) else if "%gitbranch_ln:~0,2%" == "M" (
call :inc_chg
)
goto :EOF
:calc
rem setlocal ENABLEDELAYEDEXPANSION
rem set gitbranch_ln=%gitbranch%
rem echo '%gitbranch_ln%'
rem if NOT "%gitbranch_ln%"=="" goto calc
rem for /L %%i in (6,1,13) do call :eval "!gitbranch:~%%i,1!"
rem for /F %%l in (%git_out%) do call :eval `%%l`
set gitbranch_ln=%~1
call :eval
goto :EOF
:run
rem predefined dir where git binaries are stored
set gitpath=%~d0\Utils\Lans\GIT\bin
if NOT exist "%gitpath%\git.exe" (
call :print "git.exe not found!"
set gitbranch=^>
rem exit /B 1
goto export
)
rem let gitlogpath be folder to store git output
if "%TEMP:~-1%" == "\" (set gitlogpath=%TEMP:~0,-1%) else (set gitlogpath=%TEMP%)
set git_out=%gitlogpath%\conemu_git_1.log
set git_err=%gitlogpath%\conemu_git_2.log
"%gitpath%\git.exe" -c color.status=false status --short --branch 1>"%git_out%" 2>"%git_err%"
if errorlevel 1 (
del "%git_out%">nul
del "%git_err%">nul
set gitbranch=^>
rem exit /B 2
goto export
)
set gitbranch_add=0
set gitbranch_chg=0
set gitbranch_del=0
rem Set "gitbranch" to full contents of %git_out% file
set /P gitbranch=<"%git_out%"
rem But we need only first line of it
set gitbranch=%gitbranch%
rem echo `%gitbranch%`
rem echo calling ':calc'
rem To ensure that %git_out% does not contain brackets
pushd %gitlogpath%
for /F %%l in (conemu_git_1.log) do call :calc "%%l"
popd
rem echo done ':calc', br='%gitbranch%', ad='%gitbranch_add%', ch='%gitbranch_chg%', dl='%gitbranch_del%'
rem del "%git_out%">nul
del "%git_err%">nul
if NOT "%gitbranch:~0,3%" == "## " (
rem call :print "Not `## `?"
set gitbranch=^>
rem exit /B 3
goto export
)
rem echo %gitbranch:~3% +%gitbranch_add% ~%gitbranch_chg% -%gitbranch_del%
if "%gitbranch_add% %gitbranch_chg% %gitbranch_del%" == "0 0 0" (
set gitbranch= [%gitbranch:~3%]^>
) else (
set gitbranch= [%gitbranch:~3% +%gitbranch_add% ~%gitbranch_chg% -%gitbranch_del%]^>
)
rem echo "%gitbranch%"
rem Export to Far Manager process
:export
"%ConEmuBaseDir%\ConEmuC.exe" /export=CON gitbranch
Количество изменений подсчитывает "примерно", будет лажать если изменения были в индексе, а не в рабочей папке.