bash prompt: return early from __git_ps1() when not in a git repository

... to gain one level of indentation for the bulk of the function. (The patch looks quite unreadable, you'd better check it with 'git diff -w'.) Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>

SZEDER Gábor committed Sep 5, 2011 at 20:53 UTC 96ea404757ac3f97335277062a7d7c6e8975cc4f
1 file changed +101 -100
contrib/completion/git-prompt.sh
+101 -100
@@ -341,121 +341,122 @@ __git_ps1 ()
341 #In PC mode PS1 always needs to be set
342 PS1="$ps1pc_start$ps1pc_end"
343 fi
344 + return
345 + fi
346 +
347 + local r=""
348 + local b=""
349 + local step=""
350 + local total=""
351 + if [ -d "$g/rebase-merge" ]; then
352 + b="$(cat "$g/rebase-merge/head-name" 2>/dev/null)"
353 + step=$(cat "$g/rebase-merge/msgnum" 2>/dev/null)
354 + total=$(cat "$g/rebase-merge/end" 2>/dev/null)
355 + if [ -f "$g/rebase-merge/interactive" ]; then
356 + r="|REBASE-i"
357 + else
358 + r="|REBASE-m"
359 + fi
360 else
345 - local r=""
346 - local b=""
347 - local step=""
348 - local total=""
349 - if [ -d "$g/rebase-merge" ]; then
350 - b="$(cat "$g/rebase-merge/head-name" 2>/dev/null)"
351 - step=$(cat "$g/rebase-merge/msgnum" 2>/dev/null)
352 - total=$(cat "$g/rebase-merge/end" 2>/dev/null)
353 - if [ -f "$g/rebase-merge/interactive" ]; then
354 - r="|REBASE-i"
361 + if [ -d "$g/rebase-apply" ]; then
362 + step=$(cat "$g/rebase-apply/next" 2>/dev/null)
363 + total=$(cat "$g/rebase-apply/last" 2>/dev/null)
364 + if [ -f "$g/rebase-apply/rebasing" ]; then
365 + b="$(cat "$g/rebase-apply/head-name" 2>/dev/null)"
366 + r="|REBASE"
367 + elif [ -f "$g/rebase-apply/applying" ]; then
368 + r="|AM"
369 else
356 - r="|REBASE-m"
357 - fi
358 - else
359 - if [ -d "$g/rebase-apply" ]; then
360 - step=$(cat "$g/rebase-apply/next" 2>/dev/null)
361 - total=$(cat "$g/rebase-apply/last" 2>/dev/null)
362 - if [ -f "$g/rebase-apply/rebasing" ]; then
363 - b="$(cat "$g/rebase-apply/head-name" 2>/dev/null)"
364 - r="|REBASE"
365 - elif [ -f "$g/rebase-apply/applying" ]; then
366 - r="|AM"
367 - else
368 - r="|AM/REBASE"
369 - fi
370 - elif [ -f "$g/MERGE_HEAD" ]; then
371 - r="|MERGING"
372 - elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
373 - r="|CHERRY-PICKING"
374 - elif [ -f "$g/REVERT_HEAD" ]; then
375 - r="|REVERTING"
376 - elif [ -f "$g/BISECT_LOG" ]; then
377 - r="|BISECTING"
370 + r="|AM/REBASE"
371 fi
372 + elif [ -f "$g/MERGE_HEAD" ]; then
373 + r="|MERGING"
374 + elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
375 + r="|CHERRY-PICKING"
376 + elif [ -f "$g/REVERT_HEAD" ]; then
377 + r="|REVERTING"
378 + elif [ -f "$g/BISECT_LOG" ]; then
379 + r="|BISECTING"
380 + fi
381
380 - test -n "$b" ||
381 - b="$(git symbolic-ref HEAD 2>/dev/null)" || {
382 - detached=yes
383 - b="$(
384 - case "${GIT_PS1_DESCRIBE_STYLE-}" in
385 - (contains)
386 - git describe --contains HEAD ;;
387 - (branch)
388 - git describe --contains --all HEAD ;;
389 - (describe)
390 - git describe HEAD ;;
391 - (* | default)
392 - git describe --tags --exact-match HEAD ;;
393 - esac 2>/dev/null)" ||
382 + test -n "$b" ||
383 + b="$(git symbolic-ref HEAD 2>/dev/null)" || {
384 + detached=yes
385 + b="$(
386 + case "${GIT_PS1_DESCRIBE_STYLE-}" in
387 + (contains)
388 + git describe --contains HEAD ;;
389 + (branch)
390 + git describe --contains --all HEAD ;;
391 + (describe)
392 + git describe HEAD ;;
393 + (* | default)
394 + git describe --tags --exact-match HEAD ;;
395 + esac 2>/dev/null)" ||
396
395 - b="$(git rev-parse --short HEAD 2>/dev/null)..." ||
396 - b="unknown"
397 - b="($b)"
398 - }
399 - fi
397 + b="$(git rev-parse --short HEAD 2>/dev/null)..." ||
398 + b="unknown"
399 + b="($b)"
400 + }
401 + fi
402
401 - if [ -n "$step" ] && [ -n "$total" ]; then
402 - r="$r $step/$total"
403 - fi
403 + if [ -n "$step" ] && [ -n "$total" ]; then
404 + r="$r $step/$total"
405 + fi
406
405 - local w=""
406 - local i=""
407 - local s=""
408 - local u=""
409 - local c=""
410 - local p=""
407 + local w=""
408 + local i=""
409 + local s=""
410 + local u=""
411 + local c=""
412 + local p=""
413
412 - if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
413 - if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
414 - c="BARE:"
414 + if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
415 + if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
416 + c="BARE:"
417 + else
418 + b="GIT_DIR!"
419 + fi
420 + elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
421 + if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
422 + [ "$(git config --bool bash.showDirtyState)" != "false" ]
423 + then
424 + git diff --no-ext-diff --quiet --exit-code || w="*"
425 + if git rev-parse --quiet --verify HEAD >/dev/null; then
426 + git diff-index --cached --quiet HEAD -- || i="+"
427 else
416 - b="GIT_DIR!"
417 - fi
418 - elif [ "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" ]; then
419 - if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
420 - [ "$(git config --bool bash.showDirtyState)" != "false" ]
421 - then
422 - git diff --no-ext-diff --quiet --exit-code || w="*"
423 - if git rev-parse --quiet --verify HEAD >/dev/null; then
424 - git diff-index --cached --quiet HEAD -- || i="+"
425 - else
426 - i="#"
427 - fi
428 - fi
429 - if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
430 - git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
428 + i="#"
429 fi
430 + fi
431 + if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ]; then
432 + git rev-parse --verify refs/stash >/dev/null 2>&1 && s="$"
433 + fi
434
433 - if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
434 - [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
435 - [ -n "$(git ls-files --others --exclude-standard)" ]
436 - then
437 - u="%${ZSH_VERSION+%}"
438 - fi
435 + if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
436 + [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
437 + [ -n "$(git ls-files --others --exclude-standard)" ]
438 + then
439 + u="%${ZSH_VERSION+%}"
440 + fi
441
440 - if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
441 - __git_ps1_show_upstream
442 - fi
442 + if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
443 + __git_ps1_show_upstream
444 fi
445 + fi
446
445 - local z="${GIT_PS1_STATESEPARATOR-" "}"
446 - local f="$w$i$s$u"
447 - if [ $pcmode = yes ]; then
448 - local gitstring=
449 - if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
450 - __git_ps1_colorize_gitstring
451 - else
452 - gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
453 - fi
454 - gitstring=$(printf -- "$printf_format" "$gitstring")
455 - PS1="$ps1pc_start$gitstring$ps1pc_end"
447 + local z="${GIT_PS1_STATESEPARATOR-" "}"
448 + local f="$w$i$s$u"
449 + if [ $pcmode = yes ]; then
450 + local gitstring=
451 + if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
452 + __git_ps1_colorize_gitstring
453 else
457 - # NO color option unless in PROMPT_COMMAND mode
458 - printf -- "$printf_format" "$c${b##refs/heads/}${f:+$z$f}$r$p"
454 + gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
455 fi
456 + gitstring=$(printf -- "$printf_format" "$gitstring")
457 + PS1="$ps1pc_start$gitstring$ps1pc_end"
458 + else
459 + # NO color option unless in PROMPT_COMMAND mode
460 + printf -- "$printf_format" "$c${b##refs/heads/}${f:+$z$f}$r$p"
461 fi
462 }