git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Vasco Almeida <vascomalmeida@sapo.pt>
To: git@vger.kernel.org
Cc: "Vasco Almeida" <vascomalmeida@sapo.pt>,
	"Jiang Xin" <worldhello.net@gmail.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	Sunshine <sunshine@sunshineco.com>,
	"Junio C Hamano" <gitster@pobox.com>
Subject: [PATCH v4 13/38] i18n: git-sh-setup.sh: mark strings for translation
Date: Tue,  7 Jun 2016 11:52:12 +0000	[thread overview]
Message-ID: <1465300357-7557-14-git-send-email-vascomalmeida@sapo.pt> (raw)
In-Reply-To: <1465300357-7557-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
[1].

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

Source git-sh-i18n in git-sh-setup.sh for gettext support.
git-sh-setup.sh is a shell library to be sourced by other shell scripts.
In order to avoid other scripts from sourcing git-sh-i18n twice, remove
line that sources it from them.  Not sourcing git-sh-i18n in any script
that uses gettext would lead to failure due to, for instance, gettextln
not being found.

[1] http://www.gnu.org/software/gettext/manual/html_node/Preparing-Shell-Scripts.html

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
---

I don't know if we want to copy the text from git-sh-i18n.sh into
git-sh-setup.sh file or sourcing the former in the latter is enough.

 Makefile             |  4 +++-
 git-bisect.sh        |  1 -
 git-merge-octopus.sh |  1 -
 git-rebase.sh        |  1 -
 git-sh-setup.sh      | 63 +++++++++++++++++++++++++++++++++++++++-------------
 git-stash.sh         |  1 -
 git-submodule.sh     |  1 -
 7 files changed, 50 insertions(+), 22 deletions(-)

diff --git a/Makefile b/Makefile
index de5a030..6169389 100644
--- a/Makefile
+++ b/Makefile
@@ -2063,7 +2063,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-bisect.sh b/git-bisect.sh
index 737bf05..30d01bb 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -33,7 +33,6 @@ Please use "git help bisect" to get the full man page.'
 
 OPTIONS_SPEC=
 . git-sh-setup
-. git-sh-i18n
 
 _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/git-merge-octopus.sh b/git-merge-octopus.sh
index d79fc84..308eafd 100755
--- a/git-merge-octopus.sh
+++ b/git-merge-octopus.sh
@@ -6,7 +6,6 @@
 #
 
 . git-sh-setup
-. git-sh-i18n
 
 LF='
 '
diff --git a/git-rebase.sh b/git-rebase.sh
index 9ba21ab..04f6e44 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -45,7 +45,6 @@ skip!              skip current patch and continue
 edit-todo!         edit the todo list during an interactive rebase
 "
 . git-sh-setup
-. git-sh-i18n
 set_reflog_action rebase
 require_work_tree_exists
 cd_to_toplevel
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index c48139a..2eda134 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -2,6 +2,9 @@
 # to set up some variables pointing at the normal git directories and
 # a few helper shell functions.
 
+# Source git-sh-i18n for gettext support.
+. 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,16 +86,16 @@ if test -n "$OPTIONS_SPEC"; then
 else
 	dashless=$(basename -- "$0" | sed -e 's/-/ /')
 	usage() {
-		die "usage: $dashless $USAGE"
+		die "$(eval_gettext "usage: \$dashless \$USAGE")"
 	}
 
 	if [ -z "$LONG_USAGE" ]
 	then
-		LONG_USAGE="usage: $dashless $USAGE"
+		LONG_USAGE="$(eval_gettext "usage: \$dashless \$USAGE")"
 	else
-		LONG_USAGE="usage: $dashless $USAGE
+		LONG_USAGE="$(eval_gettext "usage: \$dashless \$USAGE
 
-$LONG_USAGE"
+$LONG_USAGE")"
 	fi
 
 	case "$1" in
@@ -182,7 +185,7 @@ 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
 	}
 }
@@ -190,13 +193,16 @@ cd_to_toplevel () {
 require_work_tree_exists () {
 	if test "z$(git rev-parse --is-bare-repository)" != zfalse
 	then
-		die "fatal: $0 cannot be used without a working tree."
+		program_name=$0
+		die "$(gettext "fatal: \$program_name cannot be used without a working tree.")"
 	fi
 }
 
 require_work_tree () {
-	test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true ||
-	die "fatal: $0 cannot be used without a working tree."
+	test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true || {
+		program_name=$0
+		die "$(gettext "fatal: \$program_name cannot be used without a working tree.")"
+	}
 }
 
 require_clean_work_tree () {
@@ -206,24 +212,49 @@ require_clean_work_tree () {
 
 	if ! git diff-files --quiet --ignore-submodules
 	then
-		echo >&2 "Cannot $1: You have unstaged changes."
+		action=$1
+		case "$action" in
+		rebase)
+			gettextln "Cannot rebase: You have unstaged changes." >&2
+			;;
+		"rewrite branches")
+			gettextln "Cannot rewrite branches: 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."
+			action=$1
+			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 "$2" && echo "$2" >&2
 		exit 1
 	fi
 }
@@ -336,12 +367,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)"}
diff --git a/git-stash.sh b/git-stash.sh
index c7509e8..22fb8bc 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -15,7 +15,6 @@ SUBDIRECTORY_OK=Yes
 OPTIONS_SPEC=
 START_DIR=$(pwd)
 . git-sh-setup
-. git-sh-i18n
 require_work_tree
 cd_to_toplevel
 
diff --git a/git-submodule.sh b/git-submodule.sh
index 7fe8a51..5b9674a 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -16,7 +16,6 @@ USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <re
 OPTIONS_SPEC=
 SUBDIRECTORY_OK=Yes
 . git-sh-setup
-. git-sh-i18n
 . git-parse-remote
 require_work_tree
 wt_prefix=$(git rev-parse --show-prefix)
-- 
2.7.3

  parent reply	other threads:[~2016-06-07 11:54 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-07 11:51 [PATCH v4 00/38] i18n and test updates Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 01/38] i18n: builtin/remote.c: fix mark for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 02/38] i18n: advice: mark string about detached head " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 03/38] i18n: advice: internationalize message for conflicts Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 04/38] i18n: transport: mark strings for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 05/38] i18n: sequencer: mark entire sentences " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 06/38] i18n: sequencer: mark string " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 07/38] i18n: merge-octopus: mark messages " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 08/38] merge-octupus: use die shell function from git-sh-setup.sh Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 09/38] i18n: rebase: fix marked string to use eval_gettext variant Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 10/38] i18n: rebase: mark placeholder for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 11/38] i18n: bisect: simplify error message for i18n Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 12/38] t6030: update to use test_i18ncmp Vasco Almeida
2016-06-07 11:52 ` Vasco Almeida [this message]
2016-06-07 11:52 ` [PATCH v4 14/38] i18n: rebase-interactive: mark strings for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 15/38] i18n: rebase-interactive: mark here-doc " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 16/38] i18n: rebase-interactive: mark comments of squash " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 17/38] i18n: setup: mark strings " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 18/38] tests: use test_i18n* functions to suppress false positives Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 19/38] tests: unpack-trees: update to use test_i18n* functions Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 20/38] t9003: become resilient to GETTEXT_POISON Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 21/38] t4153: fix negated test_i18ngrep call Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 22/38] t5523: use test_i18ngrep for negation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 23/38] i18n: bisect: mark strings for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 24/38] i18n: transport-helper.c: change N_() call to _() Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 25/38] i18n: notes: mark strings for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 26/38] i18n: notes: mark options " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 27/38] i18n: config: unfold error messages marked " Vasco Almeida
2016-06-07 22:25   ` Junio C Hamano
2016-06-07 11:52 ` [PATCH v4 28/38] i18n: merge: mark messages " Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 29/38] i18n: merge: change command option help to lowercase Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 30/38] i18n: sequencer: add period to error message Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 31/38] i18n: standardise messages Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 32/38] i18n: remote: mark URL fallback text for translation Vasco Almeida
2016-06-07 11:52 ` [PATCH v4 33/38] i18n: remote: allow translations to reorder message Vasco Almeida
2016-06-07 12:55 ` [PATCH v4 34/38] i18n: init-db: join message pieces Vasco Almeida
2016-06-17 17:41   ` Vasco Almeida
2016-06-07 12:55 ` [PATCH v4 35/38] i18n: submodule: join strings marked for translation Vasco Almeida
2016-06-07 12:55 ` [PATCH v4 36/38] i18n: submodule: escape shell variables inside eval_gettext Vasco Almeida
2016-06-07 12:55 ` [PATCH v4 37/38] i18n: unmark die messages for translation Vasco Almeida
2016-06-07 22:07   ` Junio C Hamano
2016-06-08 11:51     ` Pranit Bauva
2016-06-07 12:55 ` [PATCH v4 38/38] i18n: branch: mark comment when editing branch description " Vasco Almeida

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465300357-7557-14-git-send-email-vascomalmeida@sapo.pt \
    --to=vascomalmeida@sapo.pt \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=sunshine@sunshineco.com \
    --cc=worldhello.net@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).