mergetool: move main program flow into a main() function
Make it easier to follow the program's flow by isolating all logic into functions. Isolate the main execution code path into a single unit instead of having prompt_after_failed_merge() interrupt it partyway through. The use of a main() function is borrowing a convention from C, Python, Perl, and many other languages. This helps readers more familiar with other languages understand the purpose of each function when diving into the codebase with fresh eyes. Signed-off-by: David Aguilar <davvid@gmail.com> Reviewed-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
David Aguilar committed
Oct 7, 2016 at 16:58 UTC
08221e3fa27396aca30cb539f006f78636782951
1 file changed
+93
-87
git-mergetool.sh
+93
-87
@@ -366,51 +366,6 @@ merge_file () {
366
return 0
367
}
368
369
-prompt=$(git config --bool mergetool.prompt)
370
-guessed_merge_tool=false
371
-
372
-while test $# != 0
373
-do
374
- case "$1" in
375
- --tool-help=*)
376
- TOOL_MODE=${1#--tool-help=}
377
- show_tool_help
378
- ;;
379
- --tool-help)
380
- show_tool_help
381
- ;;
382
- -t|--tool*)
383
- case "$#,$1" in
384
- *,*=*)
385
- merge_tool=$(expr "z$1" : 'z-[^=]*=\(.*\)')
386
- ;;
387
- 1,*)
388
- usage ;;
389
- *)
390
- merge_tool="$2"
391
- shift ;;
392
- esac
393
- ;;
394
- -y|--no-prompt)
395
- prompt=false
396
- ;;
397
- --prompt)
398
- prompt=true
399
- ;;
400
- --)
401
- shift
402
- break
403
- ;;
404
- -*)
405
- usage
406
- ;;
407
- *)
408
- break
409
- ;;
410
- esac
411
- shift
412
-done
413
-
369
prompt_after_failed_merge () {
370
while true
371
do
@@ -427,57 +382,108 @@ prompt_after_failed_merge () {
382
done
383
}
384
430
-git_dir_init
431
-require_work_tree
385
+main () {
386
+ prompt=$(git config --bool mergetool.prompt)
387
+ guessed_merge_tool=false
388
+
389
+ while test $# != 0
390
+ do
391
+ case "$1" in
392
+ --tool-help=*)
393
+ TOOL_MODE=${1#--tool-help=}
394
+ show_tool_help
395
+ ;;
396
+ --tool-help)
397
+ show_tool_help
398
+ ;;
399
+ -t|--tool*)
400
+ case "$#,$1" in
401
+ *,*=*)
402
+ merge_tool=$(expr "z$1" : 'z-[^=]*=\(.*\)')
403
+ ;;
404
+ 1,*)
405
+ usage ;;
406
+ *)
407
+ merge_tool="$2"
408
+ shift ;;
409
+ esac
410
+ ;;
411
+ -y|--no-prompt)
412
+ prompt=false
413
+ ;;
414
+ --prompt)
415
+ prompt=true
416
+ ;;
417
+ --)
418
+ shift
419
+ break
420
+ ;;
421
+ -*)
422
+ usage
423
+ ;;
424
+ *)
425
+ break
426
+ ;;
427
+ esac
428
+ shift
429
+ done
430
+
431
+ git_dir_init
432
+ require_work_tree
433
433
-if test -z "$merge_tool"
434
-then
435
- # Check if a merge tool has been configured
436
- merge_tool=$(get_configured_merge_tool)
437
- # Try to guess an appropriate merge tool if no tool has been set.
434
if test -z "$merge_tool"
435
then
440
- merge_tool=$(guess_merge_tool) || exit
441
- guessed_merge_tool=true
436
+ # Check if a merge tool has been configured
437
+ merge_tool=$(get_configured_merge_tool)
438
+ # Try to guess an appropriate merge tool if no tool has been set.
439
+ if test -z "$merge_tool"
440
+ then
441
+ merge_tool=$(guess_merge_tool) || exit
442
+ guessed_merge_tool=true
443
+ fi
444
fi
443
-fi
444
-merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)"
445
-merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)"
446
-
447
-files=
445
+ merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)"
446
+ merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)"
447
449
-if test $# -eq 0
450
-then
451
- cd_to_toplevel
448
+ files=
449
453
- if test -e "$GIT_DIR/MERGE_RR"
450
+ if test $# -eq 0
451
then
455
- files=$(git rerere remaining)
452
+ cd_to_toplevel
453
+
454
+ if test -e "$GIT_DIR/MERGE_RR"
455
+ then
456
+ files=$(git rerere remaining)
457
+ else
458
+ files=$(git ls-files -u |
459
+ sed -e 's/^[^ ]* //' | sort -u)
460
+ fi
461
else
457
- files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u)
462
+ files=$(git ls-files -u -- "$@" |
463
+ sed -e 's/^[^ ]* //' | sort -u)
464
fi
459
-else
460
- files=$(git ls-files -u -- "$@" | sed -e 's/^[^ ]* //' | sort -u)
461
-fi
462
-
463
-if test -z "$files"
464
-then
465
- echo "No files need merging"
466
- exit 0
467
-fi
468
-
469
-printf "Merging:\n"
470
-printf "%s\n" "$files"
471
-
472
-rc=0
473
-for i in $files
474
-do
475
- printf "\n"
476
- if ! merge_file "$i"
465
+
466
+ if test -z "$files"
467
then
478
- rc=1
479
- prompt_after_failed_merge || exit 1
468
+ echo "No files need merging"
469
+ exit 0
470
fi
481
-done
471
483
-exit $rc
472
+ printf "Merging:\n"
473
+ printf "%s\n" "$files"
474
+
475
+ rc=0
476
+ for i in $files
477
+ do
478
+ printf "\n"
479
+ if ! merge_file "$i"
480
+ then
481
+ rc=1
482
+ prompt_after_failed_merge || exit 1
483
+ fi
484
+ done
485
+
486
+ exit $rc
487
+}
488
+
489
+main "$@"