One of the advantages of having git-subtree out of contrib/ is being
able to treat it as a first-class citizen when it comes to
translations.

Mark those messages that make sense to translate for translation, and
add a comment to the ones that shouldn't be translated. This has been
tested under GIT_GETTEXT_POISON=1.

Signed-off-by: Ævar Arnfjörð Bjarmason <ava...@gmail.com>
---
 git-subtree.sh     | 90 +++++++++++++++++++++++++++-------------------
 t/t7900-subtree.sh |  4 +--
 2 files changed, 56 insertions(+), 38 deletions(-)

diff --git a/git-subtree.sh b/git-subtree.sh
index 1b8cd53c7f..03ef175428 100755
--- a/git-subtree.sh
+++ b/git-subtree.sh
@@ -141,7 +141,7 @@ do
                break
                ;;
        *)
-               die "Unexpected option: $opt"
+               die "$(eval_gettext "Unexpected option: \$opt")"
                ;;
        esac
 done
@@ -157,23 +157,23 @@ split|push)
        default="--default HEAD"
        ;;
 *)
-       die "Unknown command '$command'"
+       die "$(eval_gettext "Unknown command '\$command'")"
        ;;
 esac
 
 if test -z "$prefix"
 then
-       die "You must provide the --prefix option."
+       die "$(gettext "You must provide the --prefix option.")"
 fi
 
 case "$command" in
 add)
        test -e "$prefix" &&
-               die "prefix '$prefix' already exists."
+               die "$(eval_gettext "prefix '\$prefix' already exists.")"
        ;;
 *)
        test -e "$prefix" ||
-               die "'$prefix' does not exist; use 'git subtree add'"
+               die "$(eval_gettext "'\$prefix' does not exist; use 'git 
subtree add'")"
        ;;
 esac
 
@@ -187,7 +187,7 @@ then
        dirs=$(git rev-parse --no-revs --no-flags "$@") || exit $?
        if test -n "$dirs"
        then
-               die "Error: Use --prefix instead of bare filenames."
+               die "$(gettext "Error: Use --prefix instead of bare 
filenames.")"
        fi
 fi
 
@@ -201,12 +201,12 @@ debug
 cache_setup () {
        cachedir="$GIT_DIR/subtree-cache/$$"
        rm -rf "$cachedir" ||
-               die "Can't delete old cachedir: $cachedir"
+               die "$(eval_gettext "Can't delete old cachedir: \$cachedir")"
        mkdir -p "$cachedir" ||
-               die "Can't create new cachedir: $cachedir"
+               die "$(eval_gettext "Can't create new cachedir: \$cachedir")"
        mkdir -p "$cachedir/notree" ||
-               die "Can't create new cachedir: $cachedir/notree"
-       debug "Using cachedir: $cachedir" >&2
+               die "$(eval_gettext "Can't create new cachedir: 
\$cachedir/notree")"
+       debug "$(eval_gettext "Using cachedir: \$cachedir")" >&2
 }
 
 cache_get () {
@@ -252,7 +252,7 @@ cache_set () {
                test "$oldrev" != "latest_new" &&
                test -e "$cachedir/$oldrev"
        then
-               die "cache for $oldrev already exists!"
+               die "$(eval_gettext "cache for \$oldrev already exists!")"
        fi
        echo "$newrev" >"$cachedir/$oldrev"
 }
@@ -311,7 +311,7 @@ find_latest_squash () {
                        ;;
                git-subtree-split:)
                        sub="$(git rev-parse "$b^0")" ||
-                       die "could not rev-parse split hash $b from commit $sq"
+                       die "$(eval_gettext "could not rev-parse split hash \$b 
from commit \$sq")"
                        ;;
                END)
                        if test -n "$sub"
@@ -353,7 +353,7 @@ find_existing_splits () {
                        ;;
                git-subtree-split:)
                        sub="$(git rev-parse "$b^0")" ||
-                       die "could not rev-parse split hash $b from commit $sq"
+                       die "$(eval_gettext "could not rev-parse split hash \$b 
from commit \$sq")"
                        ;;
                END)
                        debug "  Main is: '$main'"
@@ -401,7 +401,10 @@ copy_commit () {
                        cat
                ) |
                git commit-tree "$2" $3  # reads the rest of stdin
-       ) || die "Can't copy commit $1"
+       ) || {
+               commit="$1"
+               die "$(eval_gettext "Can't copy commit \$commit")"
+       }
 }
 
 add_msg () {
@@ -412,6 +415,7 @@ add_msg () {
        then
                commit_message="$message"
        else
+               # i18n: This message must not be translated!
                commit_message="Add '$dir/' from commit '$latest_new'"
        fi
        cat <<-EOF
@@ -428,6 +432,7 @@ add_squashed_msg () {
        then
                echo "$message"
        else
+               # i18n: This message must not be translated!
                echo "Merge commit '$1' as '$2'"
        fi
 }
@@ -440,6 +445,7 @@ rejoin_msg () {
        then
                commit_message="$message"
        else
+               # i18n: This message must not be translated!
                commit_message="Split '$dir/' into commit '$latest_new'"
        fi
        cat <<-EOF
@@ -460,12 +466,12 @@ squash_msg () {
        if test -n "$oldsub"
        then
                oldsub_short=$(git rev-parse --short "$oldsub")
-               echo "Squashed '$dir/' changes from 
$oldsub_short..$newsub_short"
+               echo "$(eval_gettext "Squashed '\$dir/' changes from 
\$oldsub_short..\$newsub_short")"
                echo
                git log --no-show-signature --pretty=tformat:'%h %s' 
"$oldsub..$newsub"
                git log --no-show-signature --pretty=tformat:'REVERT: %h %s' 
"$newsub..$oldsub"
        else
-               echo "Squashed '$dir/' content from commit $newsub_short"
+               echo "$(eval_gettext "Squashed '\$dir/' content from commit 
\$newsub_short")"
        fi
 
        echo
@@ -585,31 +591,35 @@ copy_or_skip () {
 ensure_clean () {
        if ! git diff-index HEAD --exit-code --quiet 2>&1
        then
-               die "Working tree has modifications.  Cannot add."
+               die "$(gettext "Working tree has modifications.  Cannot add.")"
        fi
        if ! git diff-index --cached HEAD --exit-code --quiet 2>&1
        then
-               die "Index has modifications.  Cannot add."
+               die "$(gettext "Index has modifications.  Cannot add.")"
        fi
 }
 
 ensure_valid_ref_format () {
-       git check-ref-format "refs/heads/$1" ||
-               die "'$1' does not look like a ref"
+       git check-ref-format "refs/heads/$1" || {
+               reference="$1"
+               die "$(eval_gettext "'\$reference' does not look like a ref")"
+       }
 }
 
 cmd_add () {
        if test -e "$dir"
        then
-               die "'$dir' already exists.  Cannot add."
+               die "$(eval_gettext "'\$dir' already exists.  Cannot add.")"
        fi
 
        ensure_clean
 
        if test $# -eq 1
        then
-               git rev-parse -q --verify "$1^{commit}" >/dev/null ||
-                       die "'$1' does not refer to a commit"
+               git rev-parse -q --verify "$1^{commit}" >/dev/null || {
+                       reference="$1"
+                       die "$(eval_gettext "'\$reference' does not refer to a 
commit")"
+               }
 
                cmd_add_commit "$@"
 
@@ -625,7 +635,7 @@ cmd_add () {
                cmd_add_repository "$@"
        else
                say "error: parameters were '$@'"
-               die "Provide either a commit or a repository and commit."
+               die "$(gettext "Provide either a commit or a repository and 
commit.")"
        fi
 }
 
@@ -669,7 +679,7 @@ cmd_add_commit () {
        fi
        git reset "$commit" || exit $?
 
-       say "Added dir '$dir'"
+       say "$(eval_gettext "Added dir '\$dir'")"
 }
 
 cmd_split () {
@@ -747,7 +757,7 @@ cmd_split () {
        latest_new=$(cache_get latest_new)
        if test -z "$latest_new"
        then
-               die "No new revisions were found"
+               die "$(gettext "No new revisions were found")"
        fi
 
        if test -n "$rejoin"
@@ -765,15 +775,23 @@ cmd_split () {
                then
                        if ! rev_is_descendant_of_branch "$latest_new" "$branch"
                        then
-                               die "Branch '$branch' is not an ancestor of 
commit '$latest_new'."
+                               die "$(eval_gettext "Branch '\$branch' is not 
an ancestor of commit '\$latest_new'.")"
                        fi
-                       action='Updated'
+                       action='updated'
                else
-                       action='Created'
+                       action='created'
                fi
                git update-ref -m 'subtree split' \
                        "refs/heads/$branch" "$latest_new" || exit $?
-               say "$action branch '$branch'"
+               if test $action = 'created'
+               then
+                       say "$(eval_gettext "Created branch '\$branch'")"
+               elif test $action = 'updated'
+               then
+                       say "$(eval_gettext "Updated branch '\$branch'")"
+               else
+                       die "BUG: Should have updated the created/updated 
if/else!"
+               fi
        fi
        echo "$latest_new"
        exit 0
@@ -786,7 +804,7 @@ cmd_merge () {
        set -- $revs
        if test $# -ne 1
        then
-               die "You must provide exactly one revision.  Got: '$revs'"
+               die "$(eval_gettext "You must provide exactly one revision.  
Got: '\$revs'")"
        fi
        rev="$1"
 
@@ -795,14 +813,14 @@ cmd_merge () {
                first_split="$(find_latest_squash "$dir")"
                if test -z "$first_split"
                then
-                       die "Can't squash-merge: '$dir' was never added."
+                       die "$(eval_gettext "Can't squash-merge: '\$dir' was 
never added.")"
                fi
                set $first_split
                old=$1
                sub=$2
                if test "$sub" = "$rev"
                then
-                       say "Subtree is already at commit $rev."
+                       say "$(eval_gettext "Subtree is already at commit 
\$rev.")"
                        exit 0
                fi
                new=$(new_squash_commit "$old" "$sub" "$rev") || exit $?
@@ -822,7 +840,7 @@ cmd_merge () {
 cmd_pull () {
        if test $# -ne 2
        then
-               die "You must provide <repository> <ref>"
+               die "$(gettext "You must provide <repository> <ref>")"
        fi
        ensure_clean
        ensure_valid_ref_format "$2"
@@ -835,7 +853,7 @@ cmd_pull () {
 cmd_push () {
        if test $# -ne 2
        then
-               die "You must provide <repository> <ref>"
+               die "$(gettext "You must provide <repository> <ref>")"
        fi
        ensure_valid_ref_format "$2"
        if test -e "$dir"
@@ -846,7 +864,7 @@ cmd_push () {
                localrev=$(git subtree split --prefix="$prefix") || die
                git push "$repository" "$localrev":"refs/heads/$refspec"
        else
-               die "'$dir' must already exist. Try 'git subtree add'."
+               die "$(eval_gettext "'\$dir' must already exist. Try 'git 
subtree add'.")"
        fi
 }
 
diff --git a/t/t7900-subtree.sh b/t/t7900-subtree.sh
index a6e7103f92..009daa0c84 100755
--- a/t/t7900-subtree.sh
+++ b/t/t7900-subtree.sh
@@ -304,7 +304,7 @@ test_expect_success 'split requires option --prefix' '
                test_debug "cat expected" &&
                test_debug "printf '"actual: "'" &&
                test_debug "cat actual" &&
-               test_cmp expected actual
+               test_i18ncmp expected actual
        )
 '
 
@@ -324,7 +324,7 @@ test_expect_success 'split requires path given by option 
--prefix must exist' '
                test_debug "cat expected" &&
                test_debug "printf '"actual: "'" &&
                test_debug "cat actual" &&
-               test_cmp expected actual
+               test_i18ncmp expected actual
        )
 '
 
-- 
2.17.0.290.gded63e768a

Reply via email to