git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 13/21] i18n: git-sh-setup.sh: mark strings for translation

From
Vasco Almeida <vascomalmeida@sapo.pt>
Date
May 18, 2016, 15:27 UTC
Message-ID
<1463585274-9027-14-git-send-email-vascomalmeida@sapo.pt>
In-Reply-To
<1463585274-9027-1-git-send-email-vascomalmeida@sapo.pt>

Positional arguments, such as $0, $1, etc, need to be stored on shell variables for use in translatable strings, according to gettext manual.

Add git-sh-setup.sh to LOCALIZED_SH variable in Makefile to enable extraction of string marked for translation by xgettext.

Although git-sh-setup.sh is a shell library to be sourced by other shell scripts, it is necessary to source git-sh-i18n at this point, because some scripts don't do it themselves. Not sourcing git-sh-i18n would lead to failure due to, for instance, gettextln not being found.

Source "$(git --exec-path)"/git-sh-i18n instead of simply git-sh-i18n, because latter case would fail test t2300-cd-to-toplevel.sh.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
---
 Makefile        |  4 +++-
 git-sh-setup.sh | 56 ++++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 45 insertions(+), 15 deletions(-)
diff --git a/Makefile b/Makefile
index bc3d41e..d31fcf2 100644
--- a/Makefile
+++ b/Makefile
@@ -2062,7 +2062,9 @@ XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
 	--keyword=gettextln --keyword=eval_gettextln
 XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
 LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
-LOCALIZED_SH = $(SCRIPT_SH) git-parse-remote.sh
+LOCALIZED_SH = $(SCRIPT_SH)
+LOCALIZED_SH += git-parse-remote.sh
+LOCALIZED_SH += git-sh-setup.sh
 LOCALIZED_PERL = $(SCRIPT_PERL)
 
 ifdef XGETTEXT_INCLUDE_TESTS
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index c48139a..55efa23 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -2,6 +2,10 @@
 # to set up some variables pointing at the normal git directories and
 # a few helper shell functions.
 
+# Some shell scripts source git-sh-setup (i.e. this scriplet) but
+# don't source git-sh-i18n which is needed here for gettext support.
+. "$(git --exec-path)"/git-sh-i18n
+
 # Having this variable in your environment would break scripts because
 # you would cause "cd" to be taken to unexpected places.  If you
 # like CDPATH, define it for your interactive shell sessions without
@@ -83,14 +87,14 @@ if test -n "$OPTIONS_SPEC"; then
 else
 	dashless=$(basename -- "$0" | sed -e 's/-/ /')
 	usage() {
-		die "usage: $dashless $USAGE"
+		die "$(gettext usage:) $dashless $USAGE"
 	}
 
 	if [ -z "$LONG_USAGE" ]
 	then
-		LONG_USAGE="usage: $dashless $USAGE"
+		LONG_USAGE="$(gettext usage:) $dashless $USAGE"
 	else
-		LONG_USAGE="usage: $dashless $USAGE
+		LONG_USAGE="$(gettext usage:) $dashless $USAGE
 
 $LONG_USAGE"
 	fi
@@ -182,48 +186,72 @@ is_bare_repository () {
 cd_to_toplevel () {
 	cdup=$(git rev-parse --show-toplevel) &&
 	cd "$cdup" || {
-		echo >&2 "Cannot chdir to $cdup, the toplevel of the working tree"
+		gettextln "Cannot chdir to \$cdup, the toplevel of the working tree" >&2
 		exit 1
 	}
 }
 
 require_work_tree_exists () {
+	program_name=$0
 	if test "z$(git rev-parse --is-bare-repository)" != zfalse
 	then
-		die "fatal: $0 cannot be used without a working tree."
+		die "$(gettext "fatal: \$program_name cannot be used without a working tree.")"
 	fi
 }
 
 require_work_tree () {
+	program_name=$0
 	test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true ||
-	die "fatal: $0 cannot be used without a working tree."
+		die "$(gettext "fatal: \$program_name cannot be used without a working tree.")"
 }
 
 require_clean_work_tree () {
+	action=$1
+	hint=$2
 	git rev-parse --verify HEAD >/dev/null || exit 1
 	git update-index -q --ignore-submodules --refresh
 	err=0
 
 	if ! git diff-files --quiet --ignore-submodules
 	then
-		echo >&2 "Cannot $1: You have unstaged changes."
+		case "$action" in
+		rebase)
+			gettextln "Cannot rebase: You have unstaged changes." >&2
+			;;
+		"pull with rebase")
+			gettextln "Cannot pull with rebase: You have unstaged changes." >&2
+			;;
+		*)
+			eval_gettextln "Cannot \$action: You have unstaged changes." >&2
+			;;
+		esac
 		err=1
 	fi
 
 	if ! git diff-index --cached --quiet --ignore-submodules HEAD --
 	then
-		if [ $err = 0 ]
+		if test $err = 0
 		then
-		    echo >&2 "Cannot $1: Your index contains uncommitted changes."
+			case "$action" in
+			rebase)
+				gettextln "Cannot rebase: Your index contains uncommitted changes." >&2
+				;;
+			"pull with rebase")
+				gettextln "Cannot pull with rebase: Your index contains uncommitted changes." >&2
+				;;
+			*)
+				eval_gettextln "Cannot \$action: Your index contains uncommitted changes." >&2
+				;;
+			esac
 		else
-		    echo >&2 "Additionally, your index contains uncommitted changes."
+		    gettextln "Additionally, your index contains uncommitted changes." >&2
 		fi
 		err=1
 	fi
 
-	if [ $err = 1 ]
+	if test $err = 1
 	then
-		test -n "$2" && echo >&2 "$2"
+		test -n "$hint" && echo "$2" >&2
 		exit 1
 	fi
 }
@@ -336,12 +364,12 @@ git_dir_init () {
 	then
 		test -z "$(git rev-parse --show-cdup)" || {
 			exit=$?
-			echo >&2 "You need to run this command from the toplevel of the working tree."
+			gettextln "You need to run this command from the toplevel of the working tree." >&2
 			exit $exit
 		}
 	fi
 	test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd) || {
-		echo >&2 "Unable to determine absolute path of git directory"
+		gettextln "Unable to determine absolute path of git directory" >&2
 		exit 1
 	}
 	: ${GIT_OBJECT_DIRECTORY="$(git rev-parse --git-path objects)"}
-- 
2.7.3
Previous: Vasco AlmeidaNext: Vasco Almeida
Message 22 of 42 in “i18n and tests updates”
  1. 00/21 i18n and tests updatesVasco Almeida, May 18, 2016
  2. 01/21 i18n: builtin/remote.c: fix mark for translationVasco Almeida, May 18, 2016
  3. 02/21 i18n: advice: mark string about detached head for translationVasco Almeida, May 18, 2016
  4. 03/21 i18n: advice: internationalize message for conflictsVasco Almeida, May 18, 2016
  5. Eric SunshineMay 18, 2016
  6. Vasco AlmeidaMay 18, 2016
  7. Junio C HamanoMay 18, 2016
  8. 04/21 i18n: transport: mark strings for translationVasco Almeida, May 18, 2016
  9. 05/21 i18n: sequencer: mark entire sentences for translationVasco Almeida, May 18, 2016
  10. Eric SunshineMay 18, 2016
  11. Vasco AlmeidaMay 18, 2016
  12. Ævar Arnfjörð BjarmasonMay 21, 2016
  13. Junio C HamanoMay 23, 2016
  14. Eric SunshineMay 23, 2016
  15. 06/21 i18n: sequencer: mark string for translationVasco Almeida, May 18, 2016
  16. 07/21 i18n: merge-octopus: mark messages for translationVasco Almeida, May 18, 2016
  17. 08/21 merge-octupus: use die shell function from git-sh-setup.shVasco Almeida, May 18, 2016
  18. 09/21 i18n: rebase: fix marked string to use eval_gettext variantVasco Almeida, May 18, 2016
  19. 10/21 i18n: rebase: mark placeholder for translationVasco Almeida, May 18, 2016
  20. 11/21 i18n: bisect: simplify error message for i18nVasco Almeida, May 18, 2016
  21. 12/21 t6030: update to use test_i18ncmpVasco Almeida, May 18, 2016
  22. 13/21 i18n: git-sh-setup.sh: mark strings for translationVasco Almeida, May 18, 2016
  23. 14/21 i18n: rebase-interactive: mark strings for translationVasco Almeida, May 18, 2016
  24. Eric SunshineMay 19, 2016
  25. Ævar Arnfjörð BjarmasonMay 21, 2016
  26. Vasco AlmeidaMay 21, 2016
  27. 15/21 i18n: rebase-interactive: mark here-doc strings for translationVasco Almeida, May 18, 2016
  28. 16/21 i18n: rebase-interactive: mark comments of squash for translationVasco Almeida, May 18, 2016
  29. 17/21 tests: use test_i18n* functions to suppress false positivesVasco Almeida, May 18, 2016
  30. 18/21 tests: unpack-trees: update to use test_i18n* functionsVasco Almeida, May 18, 2016
  31. 19/21 t9003: become resilient to GETTEXT_POISONVasco Almeida, May 18, 2016
  32. Eric SunshineMay 19, 2016
  33. Vasco AlmeidaMay 19, 2016
  34. Eric SunshineMay 20, 2016
  35. Junio C HamanoMay 20, 2016
  36. Eric SunshineMay 20, 2016
  37. Vasco AlmeidaMay 20, 2016
  38. Junio C HamanoMay 20, 2016
  39. Junio C HamanoMay 20, 2016
  40. Vasco AlmeidaMay 20, 2016
  41. 20/21 t4153: fix negated test_i18ngrep callVasco Almeida, May 18, 2016
  42. 21/21 t5523: use test_i18ngrep for negationVasco Almeida, May 18, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.