debian: new upstream point release
[git/debian.git] / contrib / vscode / init.sh
blobf2d61bb0e6a7b70e7c1d9f13ab77681c3ffff639
1 #!/bin/sh
3 die () {
4 echo "$*" >&2
5 exit 1
8 cd "$(dirname "$0")"/../.. ||
9 die "Could not cd to top-level directory"
11 mkdir -p .vscode ||
12 die "Could not create .vscode/"
14 # General settings
16 cat >.vscode/settings.json.new <<\EOF ||
18 "C_Cpp.intelliSenseEngine": "Default",
19 "C_Cpp.intelliSenseEngineFallback": "Disabled",
20 "[git-commit]": {
21 "editor.wordWrap": "wordWrapColumn",
22 "editor.wordWrapColumn": 72
24 "[c]": {
25 "editor.detectIndentation": false,
26 "editor.insertSpaces": false,
27 "editor.tabSize": 8,
28 "files.trimTrailingWhitespace": true
30 "[txt]": {
31 "editor.detectIndentation": false,
32 "editor.insertSpaces": false,
33 "editor.tabSize": 8,
34 "files.trimTrailingWhitespace": true
36 "files.associations": {
37 "*.h": "c",
38 "*.c": "c"
40 "cSpell.ignorePaths": [
42 "cSpell.words": [
43 "DATAW",
44 "DBCACHED",
45 "DFCHECK",
46 "DTYPE",
47 "Hamano",
48 "HCAST",
49 "HEXSZ",
50 "HKEY",
51 "HKLM",
52 "IFGITLINK",
53 "IFINVALID",
54 "ISBROKEN",
55 "ISGITLINK",
56 "ISSYMREF",
57 "Junio",
58 "LPDWORD",
59 "LPPROC",
60 "LPWSTR",
61 "MSVCRT",
62 "NOARG",
63 "NOCOMPLETE",
64 "NOINHERIT",
65 "RENORMALIZE",
66 "STARTF",
67 "STARTUPINFOEXW",
68 "Schindelin",
69 "UCRT",
70 "YESNO",
71 "argcp",
72 "beginthreadex",
73 "committish",
74 "contentp",
75 "cpath",
76 "cpidx",
77 "ctim",
78 "dequote",
79 "envw",
80 "ewah",
81 "fdata",
82 "fherr",
83 "fhin",
84 "fhout",
85 "fragp",
86 "fsmonitor",
87 "hnsec",
88 "idents",
89 "includeif",
90 "interpr",
91 "iprog",
92 "isexe",
93 "iskeychar",
94 "kompare",
95 "mktag",
96 "mktree",
97 "mmblob",
98 "mmbuffer",
99 "mmfile",
100 "noenv",
101 "nparents",
102 "ntpath",
103 "ondisk",
104 "ooid",
105 "oplen",
106 "osdl",
107 "pnew",
108 "pold",
109 "ppinfo",
110 "pushf",
111 "pushv",
112 "rawsz",
113 "rebasing",
114 "reencode",
115 "repo",
116 "rerere",
117 "scld",
118 "sharedrepo",
119 "spawnv",
120 "spawnve",
121 "spawnvpe",
122 "strdup'ing",
123 "submodule",
124 "submodules",
125 "topath",
126 "topo",
127 "tpatch",
128 "unexecutable",
129 "unhide",
130 "unkc",
131 "unkv",
132 "unmark",
133 "unmatch",
134 "unsets",
135 "unshown",
136 "untracked",
137 "untrackedcache",
138 "unuse",
139 "upos",
140 "uval",
141 "vreportf",
142 "wargs",
143 "wargv",
144 "wbuffer",
145 "wcmd",
146 "wcsnicmp",
147 "wcstoutfdup",
148 "wdeltaenv",
149 "wdir",
150 "wenv",
151 "wenvblk",
152 "wenvcmp",
153 "wenviron",
154 "wenvpos",
155 "wenvsz",
156 "wfile",
157 "wfilename",
158 "wfopen",
159 "wfreopen",
160 "wfullpath",
161 "which'll",
162 "wlink",
163 "wmain",
164 "wmkdir",
165 "wmktemp",
166 "wnewpath",
167 "wotype",
168 "wpath",
169 "wpathname",
170 "wpgmptr",
171 "wpnew",
172 "wpointer",
173 "wpold",
174 "wpos",
175 "wputenv",
176 "wrmdir",
177 "wship",
178 "wtarget",
179 "wtemplate",
180 "wunlink",
181 "xcalloc",
182 "xgetcwd",
183 "xmallocz",
184 "xmemdupz",
185 "xmmap",
186 "xopts",
187 "xrealloc",
188 "xsnprintf",
189 "xutftowcs",
190 "xutftowcsn",
191 "xwcstoutf"
193 "cSpell.ignoreRegExpList": [
194 "\\\"(DIRC|FSMN|REUC|UNTR)\\\"",
195 "\\\\u[0-9a-fA-Fx]{4}\\b",
196 "\\b(filfre|frotz|xyzzy)\\b",
197 "\\bCMIT_FMT_DEFAULT\\b",
198 "\\bde-munge\\b",
199 "\\bGET_OID_DISAMBIGUATORS\\b",
200 "\\bHASH_RENORMALIZE\\b",
201 "\\bTREESAMEness\\b",
202 "\\bUSE_STDEV\\b",
203 "\\Wchar *\\*\\W*utfs\\W",
204 "cURL's",
205 "nedmalloc'ed",
206 "ntifs\\.h",
210 die "Could not write settings.json"
212 # Infer some setup-specific locations/names
214 GCCPATH="$(which gcc)"
215 GDBPATH="$(which gdb)"
216 MAKECOMMAND="make -j5 DEVELOPER=1"
217 OSNAME=
219 case "$(uname -s)" in
220 MINGW*)
221 GCCPATH="$(cygpath -am "$GCCPATH")"
222 GDBPATH="$(cygpath -am "$GDBPATH")"
223 MAKE_BASH="$(cygpath -am /git-cmd.exe) --command=usr\\\\bin\\\\bash.exe"
224 MAKECOMMAND="$MAKE_BASH -lc \\\"$MAKECOMMAND\\\""
225 OSNAME=Win32
226 X=.exe
228 Linux)
229 OSNAME=Linux
231 Darwin)
232 OSNAME=macOS
234 esac
236 # Default build task
238 cat >.vscode/tasks.json.new <<EOF ||
240 // See https://go.microsoft.com/fwlink/?LinkId=733558
241 // for the documentation about the tasks.json format
242 "version": "2.0.0",
243 "tasks": [
245 "label": "make",
246 "type": "shell",
247 "command": "$MAKECOMMAND",
248 "group": {
249 "kind": "build",
250 "isDefault": true
256 die "Could not install default build task"
258 # Debugger settings
260 cat >.vscode/launch.json.new <<EOF ||
262 // Use IntelliSense to learn about possible attributes.
263 // Hover to view descriptions of existing attributes.
264 // For more information, visit:
265 // https://go.microsoft.com/fwlink/?linkid=830387
266 "version": "0.2.0",
267 "configurations": [
269 "name": "(gdb) Launch",
270 "type": "cppdbg",
271 "request": "launch",
272 "program": "\${workspaceFolder}/git$X",
273 "args": [],
274 "stopAtEntry": false,
275 "cwd": "\${workspaceFolder}",
276 "environment": [],
277 "MIMode": "gdb",
278 "miDebuggerPath": "$GDBPATH",
279 "setupCommands": [
281 "description": "Enable pretty-printing for gdb",
282 "text": "-enable-pretty-printing",
283 "ignoreFailures": true
290 die "Could not write launch configuration"
292 # C/C++ extension settings
294 make -f - OSNAME=$OSNAME GCCPATH="$GCCPATH" vscode-init \
295 >.vscode/c_cpp_properties.json <<\EOF ||
296 include Makefile
298 vscode-init:
299 @mkdir -p .vscode && \
300 incs= && defs= && \
301 for e in $(ALL_CFLAGS) \
302 '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
303 '-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \
304 '-DBINDIR="$(bindir_relative_SQ)"' \
305 '-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"' \
306 '-DDEFAULT_GIT_TEMPLATE_DIR="$(template_dir_SQ)"' \
307 '-DETC_GITCONFIG="$(ETC_GITCONFIG_SQ)"' \
308 '-DETC_GITATTRIBUTES="$(ETC_GITATTRIBUTES_SQ)"' \
309 '-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \
310 '-DCURL_DISABLE_TYPECHECK', \
311 '-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
312 '-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
313 '-DGIT_INFO_PATH="$(infodir_relative_SQ)"'; do \
314 case "$$e" in \
315 -I.) \
316 incs="$$(printf '% 16s"$${workspaceRoot}",\n%s' \
317 "" "$$incs")" \
318 ;; \
319 -I/*) \
320 incs="$$(printf '% 16s"%s",\n%s' \
321 "" "$${e#-I}" "$$incs")" \
322 ;; \
323 -I*) \
324 incs="$$(printf '% 16s"$${workspaceRoot}/%s",\n%s' \
325 "" "$${e#-I}" "$$incs")" \
326 ;; \
327 -D*) \
328 defs="$$(printf '% 16s"%s",\n%s' \
329 "" "$$(echo "$${e#-D}" | sed 's/"/\\&/g')" \
330 "$$defs")" \
331 ;; \
332 esac; \
333 done && \
334 echo '{' && \
335 echo ' "configurations": [' && \
336 echo ' {' && \
337 echo ' "name": "$(OSNAME)",' && \
338 echo ' "intelliSenseMode": "clang-x64",' && \
339 echo ' "includePath": [' && \
340 echo "$$incs" | sort | sed '$$s/,$$//' && \
341 echo ' ],' && \
342 echo ' "defines": [' && \
343 echo "$$defs" | sort | sed '$$s/,$$//' && \
344 echo ' ],' && \
345 echo ' "browse": {' && \
346 echo ' "limitSymbolsToIncludedHeaders": true,' && \
347 echo ' "databaseFilename": "",' && \
348 echo ' "path": [' && \
349 echo ' "$${workspaceRoot}"' && \
350 echo ' ]' && \
351 echo ' },' && \
352 echo ' "cStandard": "c11",' && \
353 echo ' "cppStandard": "c++17",' && \
354 echo ' "compilerPath": "$(GCCPATH)"' && \
355 echo ' }' && \
356 echo ' ],' && \
357 echo ' "version": 4' && \
358 echo '}'
360 die "Could not write settings for the C/C++ extension"
362 for file in .vscode/settings.json .vscode/tasks.json .vscode/launch.json
364 if test -f $file
365 then
366 if git diff --no-index --quiet --exit-code $file $file.new
367 then
368 rm $file.new
369 else
370 printf "The file $file.new has these changes:\n\n"
371 git --no-pager diff --no-index $file $file.new
372 printf "\n\nMaybe \`mv $file.new $file\`?\n\n"
374 else
375 mv $file.new $file
377 done