-
Notifications
You must be signed in to change notification settings - Fork 1
/
git_pull.bat
116 lines (76 loc) · 2.95 KB
/
git_pull.bat
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
@ECHO OFF
CLS
SETLOCAL EnableDelayedExpansion
ECHO.
ECHO ====================================================
ECHO = Check if local copy of repositories needs to be =
ECHO = refreshed. This can be done only when no local =
ECHO = changes have been made. =
ECHO = Christophe Avonture - avonture.be =
ECHO = https://github.com/cavo789/github_scripts =
ECHO ====================================================
ECHO.
ECHO [32mScanning your repositories...[0m
REM Retrieve any subfolders of the current one (folder where this script
REM has been stored and started) and call the process subroutine
FOR /f "delims=" %%D IN ('dir /a:d /b') DO (
CALL :PROCESS %%~fD %%D
)
GOTO END:
REM --------------------------------------------------------------------------------------
:PROCESS
REM Parameters :
REM %1: full directory name (absolute); like C:\Christophe\repositories\github_scripts
REM %2: directory name; like github_scripts => name of the repository
IF EXIST %1\.git (
REM The subfolder contains a .git folder => it's a repository
REM %2 is the name of the repository
SET FOLDER=%1
CALL :GIT_CHECK !FOLDER!
)
GOTO :EOF
:GIT_CHECK
SET FOLDER=%1
PUSHD %FOLDER% >nul
REM "git status --porcelain" returns the list of files that was changed
REM And FIND /v /c "" will count non empty lines (2 in the example above)
git status --porcelain | FIND /v /c "" > %TMP%\git-status
REM Get the number of files in the Count variable
SET /P Count= < %TMP%\git-status
REM If equal to zero, no local changes have been made
REM Check with git remote update if the local repository is up-to-date
REM or not
IF %Count% EQU 0 (
git remote update >NUL
git status > %TMP%\git-status
REM Findstr will return 0 when the pattern has been found
findstr /C:"Your branch is behind" %TMP%\git-status >NUL
IF !ERRORLEVEL! EQU 0 (
ECHO [32m%FOLDER% need a refresh, a newer version is available; use `git pull`[0m
CHOICE /N /C:YNC /M "Press Y to refresh the repository, N for No or C for Cancel."
REM Third choice = cancel => quit
IF ERRORLEVEL ==3 (
GOTO:END
)
REM Second choice = no => do nothing
IF ERRORLEVEL ==2 (
REM Do nothing
) ELSE (
REM First choice = yes => refresh
IF ERRORLEVEL ==1 (
REM Get the latest version of the repository
git pull
)
)
) ELSE (
ECHO [37m%FOLDER% is up-to-date[0m
)
) ELSE (
ECHO [37m%FOLDER% is up-to-date[0m
)
DEL %TMP%\git-status
POPD
GOTO :EOF
:END
ENDLOCAl
exit /B