Merge branch 'va/i18n-even-more'

More markings of messages for i18n, with updates to various tests
to pass GETTEXT_POISON tests.

One patch from the original submission dropped due to conflicts
with jk/upload-pack-hook, which is still in flux.

* va/i18n-even-more: (38 commits)
  t5541: become resilient to GETTEXT_POISON
  i18n: branch: mark comment when editing branch description for translation
  i18n: unmark die messages for translation
  i18n: submodule: escape shell variables inside eval_gettext
  i18n: submodule: join strings marked for translation
  i18n: init-db: join message pieces
  i18n: remote: allow translations to reorder message
  i18n: remote: mark URL fallback text for translation
  i18n: standardise messages
  i18n: sequencer: add period to error message
  i18n: merge: change command option help to lowercase
  i18n: merge: mark messages for translation
  i18n: notes: mark options for translation
  i18n: notes: mark strings for translation
  i18n: transport-helper.c: change N_() call to _()
  i18n: bisect: mark strings for translation
  t5523: use test_i18ngrep for negation
  t4153: fix negated test_i18ngrep call
  t9003: become resilient to GETTEXT_POISON
  tests: unpack-trees: update to use test_i18n* functions
  ...
This commit is contained in:
Junio C Hamano 2016-07-13 11:24:10 -07:00
commit 2703572b3a
61 changed files with 516 additions and 380 deletions

View File

@ -2063,7 +2063,10 @@ 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-rebase--interactive.sh
LOCALIZED_SH += git-sh-setup.sh
LOCALIZED_PERL = $(SCRIPT_PERL)
ifdef XGETTEXT_INCLUDE_TESTS

View File

@ -79,7 +79,20 @@ int git_default_advice_config(const char *var, const char *value)
int error_resolve_conflict(const char *me)
{
error("%s is not possible because you have unmerged files.", me);
if (!strcmp(me, "cherry-pick"))
error(_("Cherry-picking is not possible because you have unmerged files."));
else if (!strcmp(me, "commit"))
error(_("Committing is not possible because you have unmerged files."));
else if (!strcmp(me, "merge"))
error(_("Merging is not possible because you have unmerged files."));
else if (!strcmp(me, "pull"))
error(_("Pulling is not possible because you have unmerged files."));
else if (!strcmp(me, "revert"))
error(_("Reverting is not possible because you have unmerged files."));
else
error(_("It is not possible to %s because you have unmerged files."),
me);
if (advice_resolve_conflict)
/*
* Message used both when 'git commit' fails and when
@ -93,7 +106,7 @@ int error_resolve_conflict(const char *me)
void NORETURN die_resolve_conflict(const char *me)
{
error_resolve_conflict(me);
die("Exiting because of an unresolved conflict.");
die(_("Exiting because of an unresolved conflict."));
}
void NORETURN die_conclude_merge(void)
@ -106,14 +119,14 @@ void NORETURN die_conclude_merge(void)
void detach_advice(const char *new_name)
{
const char fmt[] =
"Note: checking out '%s'.\n\n"
const char *fmt =
_("Note: checking out '%s'.\n\n"
"You are in 'detached HEAD' state. You can look around, make experimental\n"
"changes and commit them, and you can discard any commits you make in this\n"
"state without impacting any branches by performing another checkout.\n\n"
"If you want to create a new branch to retain commits you create, you may\n"
"do so (now or later) by using -b with the checkout command again. Example:\n\n"
" git checkout -b <new-branch-name>\n\n";
" git checkout -b <new-branch-name>\n\n");
fprintf(stderr, fmt, new_name);
}

View File

@ -438,12 +438,12 @@ static void read_bisect_paths(struct argv_array *array)
FILE *fp = fopen(filename, "r");
if (!fp)
die_errno("Could not open file '%s'", filename);
die_errno(_("Could not open file '%s'"), filename);
while (strbuf_getline_lf(&str, fp) != EOF) {
strbuf_trim(&str);
if (sq_dequote_to_argv_array(str.buf, array))
die("Badly quoted content in file '%s': %s",
die(_("Badly quoted content in file '%s': %s"),
filename, str.buf);
}
@ -649,7 +649,7 @@ static void exit_if_skipped_commits(struct commit_list *tried,
print_commit_list(tried, "%s\n", "%s\n");
if (bad)
printf("%s\n", oid_to_hex(bad));
printf("We cannot bisect more!\n");
printf(_("We cannot bisect more!\n"));
exit(2);
}
@ -702,7 +702,7 @@ static struct commit *get_commit_reference(const unsigned char *sha1)
{
struct commit *r = lookup_commit_reference(sha1);
if (!r)
die("Not a valid commit name %s", sha1_to_hex(sha1));
die(_("Not a valid commit name %s"), sha1_to_hex(sha1));
return r;
}
@ -726,27 +726,27 @@ static void handle_bad_merge_base(void)
char *bad_hex = oid_to_hex(current_bad_oid);
char *good_hex = join_sha1_array_hex(&good_revs, ' ');
if (!strcmp(term_bad, "bad") && !strcmp(term_good, "good")) {
fprintf(stderr, "The merge base %s is bad.\n"
fprintf(stderr, _("The merge base %s is bad.\n"
"This means the bug has been fixed "
"between %s and [%s].\n",
"between %s and [%s].\n"),
bad_hex, bad_hex, good_hex);
} else if (!strcmp(term_bad, "new") && !strcmp(term_good, "old")) {
fprintf(stderr, "The merge base %s is new.\n"
fprintf(stderr, _("The merge base %s is new.\n"
"The property has changed "
"between %s and [%s].\n",
"between %s and [%s].\n"),
bad_hex, bad_hex, good_hex);
} else {
fprintf(stderr, "The merge base %s is %s.\n"
fprintf(stderr, _("The merge base %s is %s.\n"
"This means the first '%s' commit is "
"between %s and [%s].\n",
"between %s and [%s].\n"),
bad_hex, term_bad, term_good, bad_hex, good_hex);
}
exit(3);
}
fprintf(stderr, "Some %s revs are not ancestor of the %s rev.\n"
fprintf(stderr, _("Some %s revs are not ancestor of the %s rev.\n"
"git bisect cannot work properly in this case.\n"
"Maybe you mistook %s and %s revs?\n",
"Maybe you mistook %s and %s revs?\n"),
term_good, term_bad, term_good, term_bad);
exit(1);
}
@ -757,11 +757,11 @@ static void handle_skipped_merge_base(const unsigned char *mb)
char *bad_hex = sha1_to_hex(current_bad_oid->hash);
char *good_hex = join_sha1_array_hex(&good_revs, ' ');
warning("the merge base between %s and [%s] "
warning(_("the merge base between %s and [%s] "
"must be skipped.\n"
"So we cannot be sure the first %s commit is "
"between %s and %s.\n"
"We continue anyway.",
"We continue anyway."),
bad_hex, good_hex, term_bad, mb_hex, bad_hex);
free(good_hex);
}
@ -792,7 +792,7 @@ static void check_merge_bases(int no_checkout)
} else if (0 <= sha1_array_lookup(&skipped_revs, mb)) {
handle_skipped_merge_base(mb);
} else {
printf("Bisecting: a merge base must be tested\n");
printf(_("Bisecting: a merge base must be tested\n"));
exit(bisect_checkout(mb, no_checkout));
}
}
@ -843,7 +843,7 @@ static void check_good_are_ancestors_of_bad(const char *prefix, int no_checkout)
int fd;
if (!current_bad_oid)
die("a %s revision is needed", term_bad);
die(_("a %s revision is needed"), term_bad);
/* Check if file BISECT_ANCESTORS_OK exists. */
if (!stat(filename, &st) && S_ISREG(st.st_mode))
@ -860,7 +860,7 @@ static void check_good_are_ancestors_of_bad(const char *prefix, int no_checkout)
/* Create file BISECT_ANCESTORS_OK. */
fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (fd < 0)
warning_errno("could not create file '%s'",
warning_errno(_("could not create file '%s'"),
filename);
else
close(fd);
@ -911,7 +911,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good)
*read_good = "good";
return;
} else {
die_errno("could not read file '%s'", filename);
die_errno(_("could not read file '%s'"), filename);
}
} else {
strbuf_getline_lf(&str, fp);
@ -937,10 +937,11 @@ int bisect_next_all(const char *prefix, int no_checkout)
struct commit_list *tried;
int reaches = 0, all = 0, nr, steps;
const unsigned char *bisect_rev;
char steps_msg[32];
read_bisect_terms(&term_bad, &term_good);
if (read_bisect_refs())
die("reading bisect refs failed");
die(_("reading bisect refs failed"));
check_good_are_ancestors_of_bad(prefix, no_checkout);
@ -960,7 +961,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
*/
exit_if_skipped_commits(tried, NULL);
printf("%s was both %s and %s\n",
printf(_("%s was both %s and %s\n"),
oid_to_hex(current_bad_oid),
term_good,
term_bad);
@ -968,8 +969,8 @@ int bisect_next_all(const char *prefix, int no_checkout)
}
if (!all) {
fprintf(stderr, "No testable commit found.\n"
"Maybe you started with bad path parameters?\n");
fprintf(stderr, _("No testable commit found.\n"
"Maybe you started with bad path parameters?\n"));
exit(4);
}
@ -986,9 +987,14 @@ int bisect_next_all(const char *prefix, int no_checkout)
nr = all - reaches - 1;
steps = estimate_bisect_steps(all);
printf("Bisecting: %d revision%s left to test after this "
"(roughly %d step%s)\n", nr, (nr == 1 ? "" : "s"),
steps, (steps == 1 ? "" : "s"));
xsnprintf(steps_msg, sizeof(steps_msg),
Q_("(roughly %d step)", "(roughly %d steps)", steps),
steps);
/* TRANSLATORS: the last %s will be replaced with
"(roughly %d steps)" translation */
printf(Q_("Bisecting: %d revision left to test after this %s\n",
"Bisecting: %d revisions left to test after this %s\n",
nr), nr, steps_msg);
return bisect_checkout(bisect_rev, no_checkout);
}

View File

@ -3359,7 +3359,7 @@ static int load_patch_target(struct apply_state *state,
{
if (state->cached || state->check_index) {
if (read_file_or_gitlink(ce, buf))
return error(_("read of %s failed"), name);
return error(_("failed to read %s"), name);
} else if (name) {
if (S_ISGITLINK(expected_mode)) {
if (ce)
@ -3370,7 +3370,7 @@ static int load_patch_target(struct apply_state *state,
return error(_("reading from '%s' beyond a symbolic link"), name);
} else {
if (read_old_data(st, name, buf))
return error(_("read of %s failed"), name);
return error(_("failed to read %s"), name);
}
}
return 0;
@ -3416,7 +3416,7 @@ static int load_preimage(struct apply_state *state,
free_fragment_list(patch->fragments);
patch->fragments = NULL;
} else if (status) {
return error(_("read of %s failed"), patch->old_name);
return error(_("failed to read %s"), patch->old_name);
}
}

View File

@ -614,9 +614,9 @@ static int edit_branch_description(const char *branch_name)
if (!buf.len || buf.buf[buf.len-1] != '\n')
strbuf_addch(&buf, '\n');
strbuf_commented_addf(&buf,
"Please edit the description for the branch\n"
" %s\n"
"Lines starting with '%c' will be stripped.\n",
_("Please edit the description for the branch\n"
" %s\n"
"Lines starting with '%c' will be stripped.\n"),
branch_name, comment_line_char);
if (write_file_gently(git_path(edit_description), "%s", buf.buf)) {
strbuf_release(&buf);

View File

@ -276,7 +276,7 @@ static int checkout_paths(const struct checkout_opts *opts,
hold_locked_index(lock_file, 1);
if (read_cache_preload(&opts->pathspec) < 0)
return error(_("corrupt index file"));
return error(_("index file corrupt"));
if (opts->source_tree)
read_tree_some(opts->source_tree, &opts->pathspec);
@ -470,7 +470,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
hold_locked_index(lock_file, 1);
if (read_cache_preload(NULL) < 0)
return error(_("corrupt index file"));
return error(_("index file corrupt"));
resolve_undo_clear();
if (opts->force) {
@ -1138,7 +1138,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
OPT_STRING('B', NULL, &opts.new_branch_force, N_("branch"),
N_("create/reset and checkout a branch")),
OPT_BOOL('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")),
OPT_BOOL(0, "detach", &opts.force_detach, N_("detach the HEAD at named commit")),
OPT_BOOL(0, "detach", &opts.force_detach, N_("detach HEAD at named commit")),
OPT_SET_INT('t', "track", &opts.track, N_("set upstream info for new branch"),
BRANCH_TRACK_EXPLICIT),
OPT_STRING(0, "orphan", &opts.new_orphan_branch, N_("new-branch"), N_("new unparented branch")),

View File

@ -397,13 +397,16 @@ int init_db(const char *template_dir, unsigned int flags)
if (!(flags & INIT_DB_QUIET)) {
int len = strlen(git_dir);
/* TRANSLATORS: The first '%s' is either "Reinitialized
existing" or "Initialized empty", the second " shared" or
"", and the last '%s%s' is the verbatim directory name. */
printf(_("%s%s Git repository in %s%s\n"),
reinit ? _("Reinitialized existing") : _("Initialized empty"),
get_shared_repository() ? _(" shared") : "",
git_dir, len && git_dir[len-1] != '/' ? "/" : "");
if (reinit)
printf(get_shared_repository()
? _("Reinitialized existing shared Git repository in %s%s\n")
: _("Reinitialized existing Git repository in %s%s\n"),
git_dir, len && git_dir[len-1] != '/' ? "/" : "");
else
printf(get_shared_repository()
? _("Initialized empty shared Git repository in %s%s\n")
: _("Initialized empty Git repository in %s%s\n"),
git_dir, len && git_dir[len-1] != '/' ? "/" : "");
}
return 0;

View File

@ -211,7 +211,7 @@ static struct option builtin_merge_options[] = {
PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, FF_ONLY },
OPT_RERERE_AUTOUPDATE(&allow_rerere_auto),
OPT_BOOL(0, "verify-signatures", &verify_signatures,
N_("Verify that the named commit has a valid GPG signature")),
N_("verify that the named commit has a valid GPG signature")),
OPT_CALLBACK('s', "strategy", &use_strategies, N_("strategy"),
N_("merge strategy to use"), option_parse_strategy),
OPT_CALLBACK('X', "strategy-option", &xopts, N_("option=value"),
@ -1014,7 +1014,7 @@ static int default_edit_option(void)
if (e) {
int v = git_config_maybe_bool(name, e);
if (v < 0)
die("Bad value '%s' in environment '%s'", e, name);
die(_("Bad value '%s' in environment '%s'"), e, name);
return v;
}
@ -1115,7 +1115,7 @@ static void handle_fetch_head(struct commit_list **remotes, struct strbuf *merge
if (!commit) {
if (ptr)
*ptr = '\0';
die("not something we can merge in %s: %s",
die(_("not something we can merge in %s: %s"),
filename, merge_names->buf + pos);
}
remotes = &commit_list_insert(commit, remotes)->next;
@ -1149,7 +1149,7 @@ static struct commit_list *collect_parents(struct commit *head_commit,
struct commit *commit = get_merge_parent(argv[i]);
if (!commit)
help_unknown_ref(argv[i], "merge",
"not something we can merge");
_("not something we can merge"));
remotes = &commit_list_insert(commit, remotes)->next;
}
remoteheads = reduce_parents(head_commit, head_subsumed, remoteheads);
@ -1421,7 +1421,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
* If head can reach all the merge then we are up to date.
* but first the most common case of merging one remote.
*/
finish_up_to_date("Already up-to-date.");
finish_up_to_date(_("Already up-to-date."));
goto done;
} else if (fast_forward != FF_NO && !remoteheads->next &&
!common->next &&
@ -1506,7 +1506,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
}
}
if (up_to_date) {
finish_up_to_date("Already up-to-date. Yeeah!");
finish_up_to_date(_("Already up-to-date. Yeeah!"));
goto done;
}
}

View File

@ -749,7 +749,7 @@ static int git_config_get_notes_strategy(const char *key,
if (git_config_get_string(key, &value))
return 1;
if (parse_notes_merge_strategy(value, strategy))
git_die_config(key, "unknown notes merge strategy %s", value);
git_die_config(key, _("unknown notes merge strategy %s"), value);
free(value);
return 0;
@ -788,15 +788,15 @@ static int merge(int argc, const char **argv, const char *prefix)
if (strategy || do_commit + do_abort == 0)
do_merge = 1;
if (do_merge + do_commit + do_abort != 1) {
error("cannot mix --commit, --abort or -s/--strategy");
error(_("cannot mix --commit, --abort or -s/--strategy"));
usage_with_options(git_notes_merge_usage, options);
}
if (do_merge && argc != 1) {
error("Must specify a notes ref to merge");
error(_("Must specify a notes ref to merge"));
usage_with_options(git_notes_merge_usage, options);
} else if (!do_merge && argc) {
error("too many parameters");
error(_("too many parameters"));
usage_with_options(git_notes_merge_usage, options);
}
@ -817,7 +817,7 @@ static int merge(int argc, const char **argv, const char *prefix)
if (strategy) {
if (parse_notes_merge_strategy(strategy, &o.strategy)) {
error("Unknown -s/--strategy: %s", strategy);
error(_("Unknown -s/--strategy: %s"), strategy);
usage_with_options(git_notes_merge_usage, options);
}
} else {
@ -857,11 +857,11 @@ static int merge(int argc, const char **argv, const char *prefix)
die(_("A notes merge into %s is already in-progress at %s"),
default_notes_ref(), wt->path);
if (create_symref("NOTES_MERGE_REF", default_notes_ref(), NULL))
die("Failed to store link to current notes ref (%s)",
die(_("Failed to store link to current notes ref (%s)"),
default_notes_ref());
printf("Automatic notes merge failed. Fix conflicts in %s and "
"commit the result with 'git notes merge --commit', or "
"abort the merge with 'git notes merge --abort'.\n",
printf(_("Automatic notes merge failed. Fix conflicts in %s and "
"commit the result with 'git notes merge --commit', or "
"abort the merge with 'git notes merge --abort'.\n"),
git_path(NOTES_MERGE_WORKTREE));
}
@ -934,8 +934,8 @@ static int prune(int argc, const char **argv, const char *prefix)
struct notes_tree *t;
int show_only = 0, verbose = 0;
struct option options[] = {
OPT__DRY_RUN(&show_only, "do not remove, show only"),
OPT__VERBOSE(&verbose, "report pruned notes"),
OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
OPT__VERBOSE(&verbose, N_("report pruned notes")),
OPT_END()
};
@ -964,7 +964,7 @@ static int get_ref(int argc, const char **argv, const char *prefix)
git_notes_get_ref_usage, 0);
if (argc) {
error("too many parameters");
error(_("too many parameters"));
usage_with_options(git_notes_get_ref_usage, options);
}

View File

@ -855,7 +855,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
git_config(git_pull_config, NULL);
if (read_cache_unmerged())
die_resolve_conflict("Pull");
die_resolve_conflict("pull");
if (file_exists(git_path("MERGE_HEAD")))
die_conclude_merge();

View File

@ -952,7 +952,7 @@ static int show_local_info_item(struct string_list_item *item, void *cb_data)
struct show_info *show_info = cb_data;
struct branch_info *branch_info = item->util;
struct string_list *merge = &branch_info->merge;
const char *also;
int width = show_info->width + 4;
int i;
if (branch_info->rebase && branch_info->merge.nr > 1) {
@ -963,19 +963,18 @@ static int show_local_info_item(struct string_list_item *item, void *cb_data)
printf(" %-*s ", show_info->width, item->string);
if (branch_info->rebase) {
printf_ln(_(branch_info->rebase == INTERACTIVE_REBASE ?
"rebases interactively onto remote %s" :
"rebases onto remote %s"), merge->items[0].string);
printf_ln(branch_info->rebase == INTERACTIVE_REBASE
? _("rebases interactively onto remote %s")
: _("rebases onto remote %s"), merge->items[0].string);
return 0;
} else if (show_info->any_rebase) {
printf_ln(_(" merges with remote %s"), merge->items[0].string);
also = _(" and with remote");
width++;
} else {
printf_ln(_("merges with remote %s"), merge->items[0].string);
also = _(" and with remote");
}
for (i = 1; i < merge->nr; i++)
printf(" %-*s %s %s\n", show_info->width, "", also,
printf(_("%-*s and with remote %s\n"), width, "",
merge->items[i].string);
return 0;
@ -1158,11 +1157,11 @@ static int show(int argc, const char **argv)
the one in " Fetch URL: %s" translation */
printf_ln(_(" Push URL: %s"), url[i]);
if (!i)
printf_ln(_(" Push URL: %s"), "(no URL)");
printf_ln(_(" Push URL: %s"), _("(no URL)"));
if (no_query)
printf_ln(_(" HEAD branch: %s"), "(not queried)");
printf_ln(_(" HEAD branch: %s"), _("(not queried)"));
else if (!states.heads.nr)
printf_ln(_(" HEAD branch: %s"), "(unknown)");
printf_ln(_(" HEAD branch: %s"), _("(unknown)"));
else if (states.heads.nr == 1)
printf_ln(_(" HEAD branch: %s"), states.heads.items[0].string);
else {

View File

@ -388,7 +388,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
item->string,
exts[ext].name);
if (remove_path(fname))
warning(_("removing '%s' failed"), fname);
warning(_("failed to remove '%s'"), fname);
free(fname);
}
}

View File

@ -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"
@ -275,10 +274,11 @@ bisect_state() {
check_and_set_terms $state
case "$#,$state" in
0,*)
die "$(gettext "Please call 'bisect_state' with at least one argument.")" ;;
die "Please call 'bisect_state' with at least one argument." ;;
1,"$TERM_BAD"|1,"$TERM_GOOD"|1,skip)
rev=$(git rev-parse --verify $(bisect_head)) ||
die "$(gettext "Bad rev input: $(bisect_head)")"
bisected_head=$(bisect_head)
rev=$(git rev-parse --verify "$bisected_head") ||
die "$(eval_gettext "Bad rev input: \$bisected_head")"
bisect_write "$state" "$rev"
check_expected_revs "$rev" ;;
2,"$TERM_BAD"|*,"$TERM_GOOD"|*,skip)

View File

@ -5,14 +5,11 @@
# Resolve two or more trees.
#
. git-sh-setup
LF='
'
die () {
echo >&2 "$*"
exit 1
}
# The first parameters up to -- are merge bases; the rest are heads.
bases= head= remotes= sep_seen=
for arg
@ -46,7 +43,7 @@ esac
if ! git diff-index --quiet --cached HEAD --
then
echo "Error: Your local changes to the following files would be overwritten by merge"
gettextln "Error: Your local changes to the following files would be overwritten by merge"
git diff-index --cached --name-only HEAD -- | sed -e 's/^/ /'
exit 2
fi
@ -61,8 +58,8 @@ do
# We allow only last one to have a hand-resolvable
# conflicts. Last round failed and we still had
# a head to merge.
echo "Automated merge did not work."
echo "Should not be doing an Octopus."
gettextln "Automated merge did not work."
gettextln "Should not be doing an Octopus."
exit 2
esac
@ -73,11 +70,11 @@ do
eval pretty_name=\${GITHEAD_$SHA1_UP:-$pretty_name}
fi
common=$(git merge-base --all $SHA1 $MRC) ||
die "Unable to find common commit with $pretty_name"
die "$(eval_gettext "Unable to find common commit with \$pretty_name")"
case "$LF$common$LF" in
*"$LF$SHA1$LF"*)
echo "Already up-to-date with $pretty_name"
eval_gettextln "Already up-to-date with \$pretty_name"
continue
;;
esac
@ -89,7 +86,7 @@ do
# tree as the intermediate result of the merge.
# We still need to count this as part of the parent set.
echo "Fast-forwarding to: $pretty_name"
eval_gettextln "Fast-forwarding to: \$pretty_name"
git read-tree -u -m $head $SHA1 || exit
MRC=$SHA1 MRT=$(git write-tree)
continue
@ -97,12 +94,12 @@ do
NON_FF_MERGE=1
echo "Trying simple merge with $pretty_name"
eval_gettextln "Trying simple merge with \$pretty_name"
git read-tree -u -m --aggressive $common $MRT $SHA1 || exit 2
next=$(git write-tree 2>/dev/null)
if test $? -ne 0
then
echo "Simple merge did not work, trying automatic merge."
gettextln "Simple merge did not work, trying automatic merge."
git-merge-index -o git-merge-one-file -a ||
OCTOPUS_FAILURE=1
next=$(git write-tree 2>/dev/null)

View File

@ -128,7 +128,7 @@ mark_action_done () {
if test "$last_count" != "$new_count"
then
last_count=$new_count
printf "Rebasing (%d/%d)\r" $new_count $total
eval_gettext "Rebasing (\$new_count/\$total)"; printf "\r"
test -z "$verbose" || echo
fi
}
@ -144,29 +144,28 @@ reschedule_last_action () {
}
append_todo_help () {
git stripspace --comment-lines >>"$todo" <<\EOF
gettext "
Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
f, fixup = like \"squash\", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit
These lines can be re-ordered; they are executed from top to bottom.
" | git stripspace --comment-lines >>"$todo"
EOF
if test $(get_missing_commit_check_level) = error
then
git stripspace --comment-lines >>"$todo" <<\EOF
gettext "
Do not remove any line. Use 'drop' explicitly to remove a commit.
EOF
" | git stripspace --comment-lines >>"$todo"
else
git stripspace --comment-lines >>"$todo" <<\EOF
gettext "
If you remove a line here THAT COMMIT WILL BE LOST.
EOF
" | git stripspace --comment-lines >>"$todo"
fi
}
@ -200,13 +199,14 @@ exit_with_patch () {
make_patch $1
git rev-parse --verify HEAD > "$amend"
gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
warn "You can amend the commit now, with"
warn
warn " git commit --amend $gpg_sign_opt_quoted"
warn
warn "Once you are satisfied with your changes, run"
warn
warn " git rebase --continue"
warn "$(eval_gettext "\
You can amend the commit now, with
git commit --amend \$gpg_sign_opt_quoted
Once you are satisfied with your changes, run
git rebase --continue")"
warn
exit $2
}
@ -221,10 +221,12 @@ has_action () {
}
is_empty_commit() {
tree=$(git rev-parse -q --verify "$1"^{tree} 2>/dev/null ||
die "$1: not a commit that can be picked")
ptree=$(git rev-parse -q --verify "$1"^^{tree} 2>/dev/null ||
ptree=4b825dc642cb6eb9a060e54bf8d69288fbee4904)
tree=$(git rev-parse -q --verify "$1"^{tree} 2>/dev/null) || {
sha1=$1
die "$(eval_gettext "\$sha1: not a commit that can be picked")"
}
ptree=$(git rev-parse -q --verify "$1"^^{tree} 2>/dev/null) ||
ptree=4b825dc642cb6eb9a060e54bf8d69288fbee4904
test "$tree" = "$ptree"
}
@ -260,7 +262,7 @@ pick_one () {
case "$1" in -n) sha1=$2; ff= ;; *) sha1=$1 ;; esac
case "$force_rebase" in '') ;; ?*) ff= ;; esac
output git rev-parse --verify $sha1 || die "Invalid commit name: $sha1"
output git rev-parse --verify $sha1 || die "$(eval_gettext "Invalid commit name: \$sha1")"
if is_empty_commit "$sha1"
then
@ -302,7 +304,7 @@ pick_one_preserving_merges () {
git rev-parse HEAD > "$rewritten"/$current_commit
done <"$state_dir"/current-commit
rm "$state_dir"/current-commit ||
die "Cannot write current commit's replacement sha1"
die "$(gettext "Cannot write current commit's replacement sha1")"
fi
fi
@ -354,9 +356,9 @@ pick_one_preserving_merges () {
done
case $fast_forward in
t)
output warn "Fast-forward to $sha1"
output warn "$(eval_gettext "Fast-forward to \$sha1")"
output git reset --hard $sha1 ||
die "Cannot fast-forward to $sha1"
die "$(eval_gettext "Cannot fast-forward to \$sha1")"
;;
f)
first_parent=$(expr "$new_parents" : ' \([^ ]*\)')
@ -365,12 +367,12 @@ pick_one_preserving_merges () {
then
# detach HEAD to current parent
output git checkout $first_parent 2> /dev/null ||
die "Cannot move HEAD to $first_parent"
die "$(eval_gettext "Cannot move HEAD to \$first_parent")"
fi
case "$new_parents" in
' '*' '*)
test "a$1" = a-n && die "Refusing to squash a merge: $sha1"
test "a$1" = a-n && die "$(eval_gettext "Refusing to squash a merge: \$sha1")"
# redo merge
author_script_content=$(get_author_ident_from_commit $sha1)
@ -384,7 +386,7 @@ pick_one_preserving_merges () {
$merge_args $strategy_args -m "$msg_content" $new_parents'
then
printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
die_with_patch $sha1 "Error redoing merge $sha1"
die_with_patch $sha1 "$(eval_gettext "Error redoing merge \$sha1")"
fi
echo "$sha1 $(git rev-parse HEAD^0)" >> "$rewritten_list"
;;
@ -392,19 +394,59 @@ pick_one_preserving_merges () {
output eval git cherry-pick \
${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
"$strategy_args" "$@" ||
die_with_patch $sha1 "Could not pick $sha1"
die_with_patch $sha1 "$(eval_gettext "Could not pick \$sha1")"
;;
esac
;;
esac
}
nth_string () {
case "$1" in
*1[0-9]|*[04-9]) echo "$1"th;;
*1) echo "$1"st;;
*2) echo "$1"nd;;
*3) echo "$1"rd;;
this_nth_commit_message () {
n=$1
case "$n" in
1) gettext "This is the 1st commit message:";;
2) gettext "This is the 2nd commit message:";;
3) gettext "This is the 3rd commit message:";;
4) gettext "This is the 4th commit message:";;
5) gettext "This is the 5th commit message:";;
6) gettext "This is the 6th commit message:";;
7) gettext "This is the 7th commit message:";;
8) gettext "This is the 8th commit message:";;
9) gettext "This is the 9th commit message:";;
10) gettext "This is the 10th commit message:";;
# TRANSLATORS: if the language you are translating into
# doesn't allow you to compose a sentence in this fashion,
# consider translating as if this and the following few strings
# were "This is the commit message ${n}:"
*1[0-9]|*[04-9]) eval_gettext "This is the \${n}th commit message:";;
*1) eval_gettext "This is the \${n}st commit message:";;
*2) eval_gettext "This is the \${n}nd commit message:";;
*3) eval_gettext "This is the \${n}rd commit message:";;
*) eval_gettext "This is the commit message \${n}:";;
esac
}
skip_nth_commit_message () {
n=$1
case "$n" in
1) gettext "The 1st commit message will be skipped:";;
2) gettext "The 2nd commit message will be skipped:";;
3) gettext "The 3rd commit message will be skipped:";;
4) gettext "The 4th commit message will be skipped:";;
5) gettext "The 5th commit message will be skipped:";;
6) gettext "The 6th commit message will be skipped:";;
7) gettext "The 7th commit message will be skipped:";;
8) gettext "The 8th commit message will be skipped:";;
9) gettext "The 9th commit message will be skipped:";;
10) gettext "The 10th commit message will be skipped:";;
# TRANSLATORS: if the language you are translating into
# doesn't allow you to compose a sentence in this fashion,
# consider translating as if this and the following few strings
# were "The commit message ${n} will be skipped:"
*1[0-9]|*[04-9]) eval_gettext "The \${n}th commit message will be skipped:";;
*1) eval_gettext "The \${n}st commit message will be skipped:";;
*2) eval_gettext "The \${n}nd commit message will be skipped:";;
*3) eval_gettext "The \${n}rd commit message will be skipped:";;
*) eval_gettext "The commit message \${n} will be skipped:";;
esac
}
@ -412,20 +454,23 @@ update_squash_messages () {
if test -f "$squash_msg"; then
mv "$squash_msg" "$squash_msg".bak || exit
count=$(($(sed -n \
-e "1s/^. This is a combination of \(.*\) commits\./\1/p" \
-e "1s/^$comment_char.*\([0-9][0-9]*\).*/\1/p" \
-e "q" < "$squash_msg".bak)+1))
{
printf '%s\n' "$comment_char This is a combination of $count commits."
printf '%s\n' "$comment_char $(eval_ngettext \
"This is a combination of \$count commit." \
"This is a combination of \$count commits." \
$count)"
sed -e 1d -e '2,/^./{
/^$/d
}' <"$squash_msg".bak
} >"$squash_msg"
else
commit_message HEAD > "$fixup_msg" || die "Cannot write $fixup_msg"
commit_message HEAD > "$fixup_msg" || die "$(gettext "Cannot write \$fixup_msg")"
count=2
{
printf '%s\n' "$comment_char This is a combination of 2 commits."
printf '%s\n' "$comment_char The first commit's message is:"
printf '%s\n' "$comment_char $(gettext "This is a combination of 2 commits.")"
printf '%s\n' "$comment_char $(gettext "This is the 1st commit message:")"
echo
cat "$fixup_msg"
} >"$squash_msg"
@ -434,13 +479,13 @@ update_squash_messages () {
squash)
rm -f "$fixup_msg"
echo
printf '%s\n' "$comment_char This is the $(nth_string $count) commit message:"
printf '%s\n' "$comment_char $(this_nth_commit_message $count)"
echo
commit_message $2
;;
fixup)
echo
printf '%s\n' "$comment_char The $(nth_string $count) commit message will be skipped:"
printf '%s\n' "$comment_char $(skip_nth_commit_message $count)"
echo
# Change the space after the comment character to TAB:
commit_message $2 | git stripspace --comment-lines | sed -e 's/ / /'
@ -459,12 +504,14 @@ peek_next_command () {
# messages, effectively causing the combined commit to be used as the
# new basis for any further squash/fixups. Args: sha1 rest
die_failed_squash() {
sha1=$1
rest=$2
mv "$squash_msg" "$msg" || exit
rm -f "$fixup_msg"
cp "$msg" "$GIT_DIR"/MERGE_MSG || exit
warn
warn "Could not apply $1... $2"
die_with_patch $1 ""
warn "$(eval_gettext "Could not apply \$sha1... \$rest")"
die_with_patch $sha1 ""
}
flush_rewritten_pending() {
@ -488,6 +535,8 @@ record_in_rewritten() {
}
do_pick () {
sha1=$1
rest=$2
if test "$(git rev-parse HEAD)" = "$squash_onto"
then
# Set the correct commit message and author info on the
@ -499,15 +548,15 @@ do_pick () {
# resolve before manually running git commit --amend then git
# rebase --continue.
git commit --allow-empty --allow-empty-message --amend \
--no-post-rewrite -n -q -C $1 &&
pick_one -n $1 &&
--no-post-rewrite -n -q -C $sha1 &&
pick_one -n $sha1 &&
git commit --allow-empty --allow-empty-message \
--amend --no-post-rewrite -n -q -C $1 \
--amend --no-post-rewrite -n -q -C $sha1 \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die_with_patch $1 "Could not apply $1... $2"
die_with_patch $sha1 "$(eval_gettext "Could not apply \$sha1... \$rest")"
else
pick_one $1 ||
die_with_patch $1 "Could not apply $1... $2"
pick_one $sha1 ||
die_with_patch $sha1 "$(eval_gettext "Could not apply \$sha1... \$rest")"
fi
}
@ -535,10 +584,11 @@ do_next () {
mark_action_done
do_pick $sha1 "$rest"
git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} || {
warn "Could not amend commit after successfully picking $sha1... $rest"
warn "This is most likely due to an empty commit message, or the pre-commit hook"
warn "failed. If the pre-commit hook failed, you may need to resolve the issue before"
warn "you are able to reword the commit."
warn "$(eval_gettext "\
Could not amend commit after successfully picking \$sha1... \$rest
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.")"
exit_with_patch $sha1 1
}
record_in_rewritten $sha1
@ -549,7 +599,7 @@ do_next () {
mark_action_done
do_pick $sha1 "$rest"
sha1_abbrev=$(git rev-parse --short $sha1)
warn "Stopped at $sha1_abbrev... $rest"
warn "$(eval_gettext "Stopped at \$sha1_abbrev... \$rest")"
exit_with_patch $sha1 0
;;
squash|s|fixup|f)
@ -564,7 +614,7 @@ do_next () {
comment_for_reflog $squash_style
test -f "$done" && has_action "$done" ||
die "Cannot '$squash_style' without a previous commit"
die "$(eval_gettext "Cannot '\$squash_style' without a previous commit")"
mark_action_done
update_squash_messages $squash_style $sha1
@ -606,7 +656,7 @@ do_next () {
x|"exec")
read -r command rest < "$todo"
mark_action_done
printf 'Executing: %s\n' "$rest"
eval_gettextln "Executing: \$rest"
"${SHELL:-@SHELL_PATH@}" -c "$rest" # Actual execution
status=$?
# Run in subshell because require_clean_work_tree can die.
@ -614,13 +664,14 @@ do_next () {
(require_clean_work_tree "rebase" 2>/dev/null) || dirty=t
if test "$status" -ne 0
then
warn "Execution failed: $rest"
warn "$(eval_gettext "Execution failed: \$rest")"
test "$dirty" = f ||
warn "and made changes to the index and/or the working tree"
warn "$(gettext "and made changes to the index and/or the working tree")"
warn "You can fix the problem, and then run"
warn
warn " git rebase --continue"
warn "$(gettext "\
You can fix the problem, and then run
git rebase --continue")"
warn
if test $status -eq 127 # command not found
then
@ -629,18 +680,20 @@ do_next () {
exit "$status"
elif test "$dirty" = t
then
warn "Execution succeeded: $rest"
warn "but left changes to the index and/or the working tree"
warn "Commit or stash your changes, and then run"
warn
warn " git rebase --continue"
# TRANSLATORS: after these lines is a command to be issued by the user
warn "$(eval_gettext "\
Execution succeeded: \$rest
but left changes to the index and/or the working tree
Commit or stash your changes, and then run
git rebase --continue")"
warn
exit 1
fi
;;
*)
warn "Unknown command: $command $sha1 $rest"
fixtodo="Please fix this using 'git rebase --edit-todo'."
warn "$(eval_gettext "Unknown command: \$command \$sha1 \$rest")"
fixtodo="$(gettext "Please fix this using 'git rebase --edit-todo'.")"
if git rev-parse --verify -q "$sha1" >/dev/null
then
die_with_patch $sha1 "$fixtodo"
@ -675,7 +728,7 @@ do_next () {
"$hook" rebase < "$rewritten_list"
true # we don't care if this hook failed
fi &&
warn "Successfully rebased and updated $head_name."
warn "$(eval_gettext "Successfully rebased and updated \$head_name.")"
return 1 # not failure; just to break the do_rest loop
}
@ -722,7 +775,7 @@ skip_unnecessary_picks () {
record_in_rewritten "$onto"
;;
esac ||
die "Could not skip unnecessary pick commands"
die "$(gettext "Could not skip unnecessary pick commands")"
}
transform_todo_ids () {
@ -880,9 +933,9 @@ check_commit_sha () {
if test $badsha -ne 0
then
line="$(sed -n -e "${2}p" "$3")"
warn "Warning: the SHA-1 is missing or isn't" \
"a commit in the following line:"
warn " - $line"
warn "$(eval_gettext "\
Warning: the SHA-1 is missing or isn't a commit in the following line:
- \$line")"
warn
fi
@ -913,9 +966,9 @@ check_bad_cmd_and_sha () {
;;
*)
line="$(sed -n -e "${lineno}p" "$1")"
warn "Warning: the command isn't recognized" \
"in the following line:"
warn " - $line"
warn "$(eval_gettext "\
Warning: the command isn't recognized in the following line:
- \$line")"
warn
retval=1
;;
@ -952,7 +1005,7 @@ warn_lines () {
# Switch to the branch in $into and notify it in the reflog
checkout_onto () {
GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
output git checkout $onto || die_abort "could not detach HEAD"
output git checkout $onto || die_abort "$(gettext "could not detach HEAD")"
git update-ref ORIG_HEAD $orig_head
}
@ -990,28 +1043,26 @@ check_todo_list () {
then
test "$check_level" = error && raise_error=t
warn "Warning: some commits may have been dropped" \
"accidentally."
warn "Dropped commits (newer to older):"
warn "$(gettext "\
Warning: some commits may have been dropped accidentally.
Dropped commits (newer to older):")"
# Make the list user-friendly and display
opt="--no-walk=sorted --format=oneline --abbrev-commit --stdin"
git rev-list $opt <"$todo".miss | warn_lines
warn "To avoid this message, use \"drop\" to" \
"explicitly remove a commit."
warn
warn "Use 'git config rebase.missingCommitsCheck' to change" \
"the level of warnings."
warn "The possible behaviours are: ignore, warn, error."
warn "$(gettext "\
To avoid this message, use \"drop\" to explicitly remove a commit.
Use 'git config rebase.missingCommitsCheck' to change the level of warnings.
The possible behaviours are: ignore, warn, error.")"
warn
fi
;;
ignore)
;;
*)
warn "Unrecognized setting $check_level for option" \
"rebase.missingCommitsCheck. Ignoring."
warn "$(eval_gettext "Unrecognized setting \$check_level for option rebase.missingCommitsCheck. Ignoring.")"
;;
esac
@ -1028,8 +1079,8 @@ check_todo_list () {
# placed before the commit of the next action
checkout_onto
warn "You can fix this with 'git rebase --edit-todo'."
die "Or you can abort the rebase with 'git rebase --abort'."
warn "$(gettext "You can fix this with 'git rebase --edit-todo'.")"
die "$(gettext "Or you can abort the rebase with 'git rebase --abort'.")"
fi
}
@ -1053,41 +1104,43 @@ continue)
test ! -f "$GIT_DIR"/CHERRY_PICK_HEAD ||
rm "$GIT_DIR"/CHERRY_PICK_HEAD ||
die "Could not remove CHERRY_PICK_HEAD"
die "$(gettext "Could not remove CHERRY_PICK_HEAD")"
else
if ! test -f "$author_script"
then
gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
die "You have staged changes in your working tree. If these changes are meant to be
die "$(eval_gettext "\
You have staged changes in your working tree.
If these changes are meant to be
squashed into the previous commit, run:
git commit --amend $gpg_sign_opt_quoted
git commit --amend \$gpg_sign_opt_quoted
If they are meant to go into a new commit, run:
git commit $gpg_sign_opt_quoted
git commit \$gpg_sign_opt_quoted
In both case, once you're done, continue with:
git rebase --continue
"
")"
fi
. "$author_script" ||
die "Error trying to find the author identity to amend commit"
die "$(gettext "Error trying to find the author identity to amend commit")"
if test -f "$amend"
then
current_head=$(git rev-parse --verify HEAD)
test "$current_head" = $(cat "$amend") ||
die "\
You have uncommitted changes in your working tree. Please, commit them
first and then run 'git rebase --continue' again."
die "$(gettext "\
You have uncommitted changes in your working tree. Please commit them
first and then run 'git rebase --continue' again.")"
do_with_author git commit --amend --no-verify -F "$msg" -e \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
die "$(gettext "Could not commit staged changes.")"
else
do_with_author git commit --no-verify -F "$msg" -e \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
die "$(gettext "Could not commit staged changes.")"
fi
fi
@ -1111,16 +1164,15 @@ edit-todo)
mv -f "$todo".new "$todo"
collapse_todo_ids
append_todo_help
git stripspace --comment-lines >>"$todo" <<\EOF
gettext "
You are editing the todo file of an ongoing interactive rebase.
To continue rebase after editing, run:
git rebase --continue
EOF
" | git stripspace --comment-lines >>"$todo"
git_sequence_editor "$todo" ||
die "Could not execute editor"
die "$(gettext "Could not execute editor")"
expand_todo_ids
exit
@ -1128,7 +1180,7 @@ EOF
esac
git var GIT_COMMITTER_IDENT >/dev/null ||
die "You need to set your committer info first"
die "$(gettext "You need to set your committer info first")"
comment_for_reflog start
@ -1136,15 +1188,15 @@ if test ! -z "$switch_to"
then
GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to"
output git checkout "$switch_to" -- ||
die "Could not checkout $switch_to"
die "$(eval_gettext "Could not checkout \$switch_to")"
comment_for_reflog start
fi
orig_head=$(git rev-parse --verify HEAD) || die "No HEAD?"
mkdir -p "$state_dir" || die "Could not create temporary $state_dir"
orig_head=$(git rev-parse --verify HEAD) || die "$(gettext "No HEAD?")"
mkdir -p "$state_dir" || die "$(eval_gettext "Could not create temporary \$state_dir")"
: > "$state_dir"/interactive || die "Could not mark as interactive"
: > "$state_dir"/interactive || die "$(gettext "Could not mark as interactive")"
write_basic_state
if test t = "$preserve_merges"
then
@ -1154,12 +1206,12 @@ then
for c in $(git merge-base --all $orig_head $upstream)
do
echo $onto > "$rewritten"/$c ||
die "Could not init rewritten commits"
die "$(gettext "Could not init rewritten commits")"
done
else
mkdir "$rewritten" &&
echo $onto > "$rewritten"/root ||
die "Could not init rewritten commits"
die "$(gettext "Could not init rewritten commits")"
fi
# No cherry-pick because our first pass is to determine
# parents to rewrite and skipping dropped commits would
@ -1258,18 +1310,20 @@ todocount=${todocount##* }
cat >>"$todo" <<EOF
$comment_char Rebase $shortrevisions onto $shortonto ($todocount command(s))
$comment_char $(eval_ngettext \
"Rebase \$shortrevisions onto \$shortonto (\$todocount command)" \
"Rebase \$shortrevisions onto \$shortonto (\$todocount commands)" \
"$todocount")
EOF
append_todo_help
git stripspace --comment-lines >>"$todo" <<\EOF
gettext "
However, if you remove everything, the rebase will be aborted.
EOF
" | git stripspace --comment-lines >>"$todo"
if test -z "$keep_empty"
then
printf '%s\n' "$comment_char Note that empty commits are commented out" >>"$todo"
printf '%s\n' "$comment_char $(gettext "Note that empty commits are commented out")" >>"$todo"
fi
@ -1279,7 +1333,7 @@ has_action "$todo" ||
cp "$todo" "$todo".backup
collapse_todo_ids
git_sequence_editor "$todo" ||
die_abort "Could not execute editor"
die_abort "$(gettext "Could not execute editor")"
has_action "$todo" ||
return 2

View File

@ -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
@ -154,7 +153,7 @@ move_to_original_branch () {
git symbolic-ref \
-m "rebase finished: returning to $head_name" \
HEAD $head_name ||
die "$(gettext "Could not move back to $head_name")"
die "$(eval_gettext "Could not move back to \$head_name")"
;;
esac
}
@ -449,7 +448,7 @@ then
then
. git-parse-remote
error_on_missing_default_upstream "rebase" "rebase" \
"against" "git rebase <branch>"
"against" "git rebase $(gettext '<branch>')"
fi
test "$fork_point" = auto && fork_point=t

View File

@ -53,6 +53,13 @@ gettext_without_eval_gettext)
git sh-i18n--envsubst "$1"
)
}
eval_ngettext () {
ngettext "$1" "$2" "$3" | (
export PATH $(git sh-i18n--envsubst --variables "$2");
git sh-i18n--envsubst "$2"
)
}
;;
poison)
# Emit garbage so that tests that incorrectly rely on translatable
@ -64,6 +71,10 @@ poison)
eval_gettext () {
printf "%s" "# GETTEXT POISON #"
}
eval_ngettext () {
printf "%s" "# GETTEXT POISON #"
}
;;
*)
gettext () {
@ -76,6 +87,13 @@ poison)
git sh-i18n--envsubst "$1"
)
}
eval_ngettext () {
(test "$3" = 1 && printf "%s" "$1" || printf "%s" "$2") | (
export PATH $(git sh-i18n--envsubst --variables "$2");
git sh-i18n--envsubst "$2"
)
}
;;
esac

View File

@ -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)"}"

View File

@ -15,7 +15,6 @@ SUBDIRECTORY_OK=Yes
OPTIONS_SPEC=
START_DIR=$(pwd)
. git-sh-setup
. git-sh-i18n
require_work_tree
cd_to_toplevel

View File

@ -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)
@ -240,14 +239,15 @@ Use -f if you really want to add it." >&2
then
if test -z "$force"
then
echo >&2 "$(eval_gettext "A git directory for '\$sm_name' is found locally with remote(s):")"
eval_gettextln >&2 "A git directory for '\$sm_name' is found locally with remote(s):"
GIT_DIR=".git/modules/$sm_name" GIT_WORK_TREE=. git remote -v | grep '(fetch)' | sed -e s,^," ", -e s,' (fetch)',, >&2
echo >&2 "$(eval_gettext "If you want to reuse this local git directory instead of cloning again from")"
echo >&2 " $realrepo"
echo >&2 "$(eval_gettext "use the '--force' option. If the local git directory is not the correct repo")"
die "$(eval_gettext "or you are unsure what this means choose another name with the '--name' option.")"
die "$(eval_gettextln "\
If you want to reuse this local git directory instead of cloning again from
\$realrepo
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.")"
else
echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
eval_gettextln "Reactivating local git directory for submodule '\$sm_name'."
fi
fi
git submodule--helper clone ${GIT_QUIET:+--quiet} --prefix "$wt_prefix" --path "$sm_path" --name "$sm_name" --url "$realrepo" ${reference:+"$reference"} ${depth:+"$depth"} || exit
@ -438,8 +438,9 @@ cmd_deinit()
# Protect submodules containing a .git directory
if test -d "$sm_path/.git"
then
echo >&2 "$(eval_gettext "Submodule work tree '\$displaypath' contains a .git directory")"
die "$(eval_gettext "(use 'rm -rf' if you really want to remove it including all of its history)")"
die "$(eval_gettext "\
Submodule work tree '\$displaypath' contains a .git directory
(use 'rm -rf' if you really want to remove it including all of its history)")"
fi
if test -z "$force"
@ -624,7 +625,7 @@ cmd_update()
remote_name=$(sanitize_submodule_env; cd "$sm_path" && get_default_remote)
sha1=$(sanitize_submodule_env; cd "$sm_path" &&
git rev-parse --verify "${remote_name}/${branch}") ||
die "$(eval_gettext "Unable to find current ${remote_name}/${branch} revision in submodule path '\$sm_path'")"
die "$(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
fi
if test "$subsha1" != "$sha1" || test -n "$force"
@ -648,7 +649,7 @@ cmd_update()
# not be reachable from any of the refs
is_tip_reachable "$sm_path" "$sha1" ||
fetch_in_submodule "$sm_path" "$sha1" ||
die "$(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain $sha1. Direct fetching of that commit failed.")"
die "$(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
fi
must_die_on_failure=

View File

@ -7,14 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
"POT-Creation-Date: 2010-09-20 14:44+0000\n"
"PO-Revision-Date: 2010-06-05 19:06 +0000\n"
"Last-Translator: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n"
"POT-Creation-Date: 2016-06-17 18:55+0000\n"
"PO-Revision-Date: 2016-06-17 19:17+0000\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Git Mailing List <git@vger.kernel.org>\n"
"Language: is\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.5\n"
#. TRANSLATORS: This is a test. You don't need to translate it.
#: t/t0200/test.c:5
@ -72,22 +73,31 @@ msgstr "TILRAUN: Perl tilraunastrengur"
msgid "TEST: A Perl test variable %s"
msgstr "TILRAUN: Perl tilraunastrengur með breytunni %s"
#. TRANSLATORS: The first '%s' is either "Reinitialized
#. existing" or "Initialized empty", the second " shared" or
#. "", and the last '%s%s' is the verbatim directory name.
#: builtin/init-db.c:355
#: builtin/init-db.c:402
#, c-format
msgid "%s%s Git repository in %s%s\n"
msgstr "%s%s Git lind í %s%s\n"
msgid "Reinitialized existing shared Git repository in %s%s\n"
msgstr "Endurgerði Git lind í %s%s\n"
#: builtin/init-db.c:356
msgid "Reinitialized existing"
msgstr "Endurgerði"
#: builtin/init-db.c:403
#, c-format
msgid "Reinitialized existing Git repository in %s%s\n"
msgstr "Endurgerði Git lind í %s%s\n"
#: builtin/init-db.c:356
msgid "Initialized empty"
msgstr "Bjó til tóma"
#: builtin/init-db.c:407
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
msgstr "Bjó til tóma sameiginlega Git lind í %s%s\n"
#: builtin/init-db.c:357
msgid " shared"
msgstr " sameiginlega"
#: builtin/init-db.c:408
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
msgstr "Bjó til tóma Git lind í %s%s\n"
#~ msgid "Reinitialized existing"
#~ msgstr "Endurgerði"
#~ msgid "Initialized empty"
#~ msgstr "Bjó til tóma"
#~ msgid " shared"
#~ msgstr " sameiginlega"

View File

@ -190,7 +190,7 @@ static void write_message(struct strbuf *msgbuf, const char *filename)
die_errno(_("Could not write to %s"), filename);
strbuf_release(msgbuf);
if (commit_lock_file(&msg_file) < 0)
die(_("Error wrapping up %s"), filename);
die(_("Error wrapping up %s."), filename);
}
static struct tree *empty_tree(void)
@ -225,7 +225,7 @@ static int fast_forward_to(const unsigned char *to, const unsigned char *from,
if (checkout_fast_forward(from, to, 1))
exit(128); /* the callee should have complained already */
strbuf_addf(&sb, "%s: fast-forward", action_name(opts));
strbuf_addf(&sb, _("%s: fast-forward"), action_name(opts));
transaction = ref_transaction_begin(&err);
if (!transaction ||
@ -695,9 +695,14 @@ static struct commit *parse_insn_line(char *bol, char *eol, struct replay_opts *
* opts; we don't support arbitrary instructions
*/
if (action != opts->action) {
const char *action_str;
action_str = action == REPLAY_REVERT ? "revert" : "cherry-pick";
error(_("Cannot %s during a %s"), action_str, action_name(opts));
if (action == REPLAY_REVERT)
error((opts->action == REPLAY_REVERT)
? _("Cannot revert during a another revert.")
: _("Cannot revert during a cherry-pick."));
else
error((opts->action == REPLAY_REVERT)
? _("Cannot cherry-pick during a revert.")
: _("Cannot cherry-pick during another cherry-pick."));
return NULL;
}

16
setup.c
View File

@ -157,8 +157,8 @@ static void NORETURN die_verify_filename(const char *prefix,
int diagnose_misspelt_rev)
{
if (!diagnose_misspelt_rev)
die("%s: no such path in the working tree.\n"
"Use 'git <command> -- <path>...' to specify paths that do not exist locally.",
die(_("%s: no such path in the working tree.\n"
"Use 'git <command> -- <path>...' to specify paths that do not exist locally."),
arg);
/*
* Saying "'(icase)foo' does not exist in the index" when the
@ -170,9 +170,9 @@ static void NORETURN die_verify_filename(const char *prefix,
maybe_die_on_misspelt_object_name(arg, prefix);
/* ... or fall back the most general message. */
die("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'", arg);
die(_("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'"), arg);
}
@ -220,9 +220,9 @@ void verify_non_filename(const char *prefix, const char *arg)
return; /* flag */
if (!check_filename(prefix, arg))
return;
die("ambiguous argument '%s': both revision and filename\n"
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'", arg);
die(_("ambiguous argument '%s': both revision and filename\n"
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'"), arg);
}
int get_common_dir(struct strbuf *sb, const char *gitdir)

View File

@ -29,6 +29,7 @@ set_fake_editor () {
*/COMMIT_EDITMSG)
test -z "$EXPECT_HEADER_COUNT" ||
test "$EXPECT_HEADER_COUNT" = "$(sed -n '1s/^# This is a combination of \(.*\) commits\./\1/p' < "$1")" ||
test "# # GETTEXT POISON #" = "$(sed -n '1p' < "$1")" ||
exit
test -z "$FAKE_COMMIT_MESSAGE" || echo "$FAKE_COMMIT_MESSAGE" > "$1"
test -z "$FAKE_COMMIT_AMEND" || echo "$FAKE_COMMIT_AMEND" >> "$1"

View File

@ -34,7 +34,7 @@ expect_from_stdin () {
test_stderr () {
expected="$1"
expect_in stderr "$1" &&
test_cmp "$HOME/expected-stderr" "$HOME/stderr"
test_i18ncmp "$HOME/expected-stderr" "$HOME/stderr"
}
broken_c_unquote () {
@ -47,7 +47,7 @@ broken_c_unquote_verbose () {
stderr_contains () {
regexp="$1"
if grep "$regexp" "$HOME/stderr"
if test_i18ngrep "$regexp" "$HOME/stderr"
then
return 0
else

View File

@ -247,7 +247,7 @@ error: The following untracked working tree files would be overwritten by checko
Please move or remove them before you can switch branches.
Aborting
EOF
test_cmp expected actual
test_i18ncmp expected actual
'
test_expect_success 'checkout without --ignore-skip-worktree-bits' '

View File

@ -886,7 +886,7 @@ test_expect_success !MINGW 'get --path copes with unset $HOME' '
git config --get --path path.normal >>result &&
git config --get --path path.trailingtilde >>result
) &&
grep "[Ff]ailed to expand.*~/" msg &&
test_i18ngrep "[Ff]ailed to expand.*~/" msg &&
test_cmp expect result
'
@ -1126,7 +1126,7 @@ test_expect_success 'barf on syntax error' '
key garbage
EOF
test_must_fail git config --get section.key >actual 2>error &&
grep " line 3 " error
test_i18ngrep " line 3 " error
'
test_expect_success 'barf on incomplete section header' '
@ -1136,7 +1136,7 @@ test_expect_success 'barf on incomplete section header' '
key = value
EOF
test_must_fail git config --get section.key >actual 2>error &&
grep " line 2 " error
test_i18ngrep " line 2 " error
'
test_expect_success 'barf on incomplete string' '
@ -1146,7 +1146,7 @@ test_expect_success 'barf on incomplete string' '
key = "value string
EOF
test_must_fail git config --get section.key >actual 2>error &&
grep " line 3 " error
test_i18ngrep " line 3 " error
'
test_expect_success 'urlmatch' '

View File

@ -61,10 +61,7 @@ test_expect_success 'parse errors in blobs are properly attributed' '
git commit -m broken &&
test_must_fail git config --blob=HEAD:config some.value 2>err &&
# just grep for our token as the exact error message is likely to
# change or be internationalized
grep "HEAD:config" err
test_i18ngrep "HEAD:config" err
'
test_expect_success 'can parse blob ending with CR' '

View File

@ -197,14 +197,14 @@ test_expect_success 'proper error on error in default config files' '
echo "[" >>.git/config &&
echo "fatal: bad config line 34 in file .git/config" >expect &&
test_expect_code 128 test-config get_value foo.bar 2>actual &&
test_cmp expect actual
test_i18ncmp expect actual
'
test_expect_success 'proper error on error in custom config files' '
echo "[" >>syntax-error &&
echo "fatal: bad config line 1 in file syntax-error" >expect &&
test_expect_code 128 test-config configset_get_value foo.bar syntax-error 2>actual &&
test_cmp expect actual
test_i18ncmp expect actual
'
test_expect_success 'check line errors for malformed values' '

View File

@ -361,7 +361,7 @@ test_expect_success 'stdin test setup' '
test_expect_success '-z fails without --stdin' '
test_must_fail git update-ref -z $m $m $m 2>err &&
grep "usage: git update-ref" err
test_i18ngrep "usage: git update-ref" err
'
test_expect_success 'stdin works with no input' '

View File

@ -106,7 +106,7 @@ test_expect_success 'incorrect revision id' '
test_must_fail git rev-parse foobar:file.txt 2>error &&
grep "Invalid object name '"'"'foobar'"'"'." error &&
test_must_fail git rev-parse foobar 2> error &&
grep "unknown revision or path not in the working tree." error
test_i18ngrep "unknown revision or path not in the working tree." error
'
test_expect_success 'incorrect file in sha1:path' '

View File

@ -49,7 +49,7 @@ test_expect_success 'disambiguate checking out from a tree-ish' '
test_expect_success 'accurate error message with more than one ref' '
test_must_fail git checkout HEAD master -- 2>actual &&
grep 2 actual &&
test_i18ngrep 2 actual &&
test_i18ngrep "one reference expected, 2 given" actual
'

View File

@ -124,7 +124,7 @@ test_expect_success 'checkout -b to @{-1} fails with the right branch name' '
git checkout branch2 &&
echo >expect "fatal: A branch named '\''branch1'\'' already exists." &&
test_must_fail git checkout -b @{-1} 2>actual &&
test_cmp expect actual
test_i18ncmp expect actual
'
test_expect_success 'checkout -B to an existing branch resets branch to HEAD' '

View File

@ -550,7 +550,7 @@ If you wanted to make '"'master'"' track '"'origin/master'"', do this:
git branch -d origin/master
git branch --set-upstream-to origin/master
EOF
test_cmp expected actual
test_i18ncmp expected actual
'
test_expect_success '--set-upstream with two args only shows the deprecation message' '
@ -559,7 +559,7 @@ test_expect_success '--set-upstream with two args only shows the deprecation mes
cat >expected <<EOF &&
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
EOF
test_cmp expected actual
test_i18ncmp expected actual
'
test_expect_success '--set-upstream with one arg only shows the deprecation message if the branch existed' '
@ -568,7 +568,7 @@ test_expect_success '--set-upstream with one arg only shows the deprecation mess
cat >expected <<EOF &&
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
EOF
test_cmp expected actual
test_i18ncmp expected actual
'
test_expect_success '--set-upstream-to notices an error to set branch as own upstream' '

View File

@ -156,7 +156,7 @@ test_expect_success 'branch --merged with --verbose' '
* topic 2c939f4 [ahead 1] foo
zzz c77a0a9 second on master
EOF
test_cmp expect actual
test_i18ncmp expect actual
'
test_done

View File

@ -178,7 +178,7 @@ test_expect_success 'merge z into m (== y) with default ("manual") resolver => C
git config core.notesRef refs/notes/m &&
test_must_fail git notes merge z >output &&
# Output should point to where to resolve conflicts
grep -q "\\.git/NOTES_MERGE_WORKTREE" output &&
test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
# Inspect merge conflicts
ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
test_cmp expect_conflicts output_conflicts &&
@ -381,7 +381,7 @@ test_expect_success 'redo merge of z into m (== y) with default ("manual") resol
git config core.notesRef refs/notes/m &&
test_must_fail git notes merge z >output &&
# Output should point to where to resolve conflicts
grep -q "\\.git/NOTES_MERGE_WORKTREE" output &&
test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
# Inspect merge conflicts
ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
test_cmp expect_conflicts output_conflicts &&
@ -415,7 +415,7 @@ git rev-parse refs/notes/z > pre_merge_z
test_expect_success 'redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge' '
test_must_fail git notes merge z >output &&
# Output should point to where to resolve conflicts
grep -q "\\.git/NOTES_MERGE_WORKTREE" output &&
test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
# Inspect merge conflicts
ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
test_cmp expect_conflicts output_conflicts &&
@ -496,7 +496,7 @@ test_expect_success 'redo merge of z into m (== y) with default ("manual") resol
git update-ref refs/notes/m refs/notes/y &&
test_must_fail git notes merge z >output &&
# Output should point to where to resolve conflicts
grep -q "\\.git/NOTES_MERGE_WORKTREE" output &&
test_i18ngrep "\\.git/NOTES_MERGE_WORKTREE" output &&
# Inspect merge conflicts
ls .git/NOTES_MERGE_WORKTREE >output_conflicts &&
test_cmp expect_conflicts output_conflicts &&

View File

@ -52,7 +52,7 @@ test_expect_success 'merge z into y while mid-merge in another workdir fails' '
cd worktree &&
git config core.notesRef refs/notes/y &&
test_must_fail git notes merge z 2>err &&
grep "A notes merge into refs/notes/y is already in-progress at" err
test_i18ngrep "A notes merge into refs/notes/y is already in-progress at" err
) &&
test_path_is_missing .git/worktrees/worktree/NOTES_MERGE_REF
'
@ -62,7 +62,7 @@ test_expect_success 'merge z into x while mid-merge on y succeeds' '
cd worktree2 &&
git config core.notesRef refs/notes/x &&
test_must_fail git notes merge z 2>&1 >out &&
grep "Automatic notes merge failed" out &&
test_i18ngrep "Automatic notes merge failed" out &&
grep -v "A notes merge into refs/notes/x is already in-progress in" out
) &&
echo "ref: refs/notes/x" >expect &&

View File

@ -136,8 +136,8 @@ test_expect_success 'setup: recover' '
test_expect_success 'Show verbose error when HEAD could not be detached' '
>B &&
test_must_fail git rebase topic 2>output.err >output.out &&
grep "The following untracked working tree files would be overwritten by checkout:" output.err &&
grep B output.err
test_i18ngrep "The following untracked working tree files would be overwritten by checkout:" output.err &&
test_i18ngrep B output.err
'
rm -f B

View File

@ -219,9 +219,9 @@ test_expect_success 'abort with error when new base cannot be checked out' '
git commit -m "remove file in base" &&
set_fake_editor &&
test_must_fail git rebase -i master > output 2>&1 &&
grep "The following untracked working tree files would be overwritten by checkout:" \
test_i18ngrep "The following untracked working tree files would be overwritten by checkout:" \
output &&
grep "file1" output &&
test_i18ngrep "file1" output &&
test_path_is_missing .git/rebase-merge &&
git reset --hard HEAD^
'
@ -540,7 +540,7 @@ test_expect_success 'clean error after failed "exec"' '
echo "edited again" > file7 &&
git add file7 &&
test_must_fail git rebase --continue 2>error &&
grep "You have staged changes in your working tree." error
test_i18ngrep "You have staged changes in your working tree." error
'
test_expect_success 'rebase a detached HEAD' '
@ -1060,7 +1060,7 @@ test_expect_success 'todo count' '
EOF
test_set_editor "$(pwd)/dump-raw.sh" &&
git rebase -i HEAD~4 >actual &&
grep "^# Rebase ..* onto ..* ([0-9]" actual
test_i18ngrep "^# Rebase ..* onto ..* ([0-9]" actual
'
test_expect_success 'rebase -i commits that overwrite untracked files (pick)' '
@ -1160,7 +1160,7 @@ test_expect_success 'rebase -i respects rebase.missingCommitsCheck = ignore' '
FAKE_LINES="1 2 3 4" \
git rebase -i --root 2>actual &&
test D = $(git cat-file commit HEAD | sed -ne \$p) &&
test_cmp expect actual
test_i18ncmp expect actual
'
cat >expect <<EOF
@ -1181,7 +1181,7 @@ test_expect_success 'rebase -i respects rebase.missingCommitsCheck = warn' '
set_fake_editor &&
FAKE_LINES="1 2 3 4" \
git rebase -i --root 2>actual &&
test_cmp expect actual &&
test_i18ncmp expect actual &&
test D = $(git cat-file commit HEAD | sed -ne \$p)
'
@ -1205,7 +1205,7 @@ test_expect_success 'rebase -i respects rebase.missingCommitsCheck = error' '
set_fake_editor &&
test_must_fail env FAKE_LINES="1 2 4" \
git rebase -i --root 2>actual &&
test_cmp expect actual &&
test_i18ncmp expect actual &&
cp .git/rebase-merge/git-rebase-todo.backup \
.git/rebase-merge/git-rebase-todo &&
FAKE_LINES="1 2 drop 3 4 drop 5" \
@ -1228,7 +1228,7 @@ test_expect_success 'static check of bad command' '
set_fake_editor &&
test_must_fail env FAKE_LINES="1 2 3 bad 4 5" \
git rebase -i --root 2>actual &&
test_cmp expect actual &&
test_i18ncmp expect actual &&
FAKE_LINES="1 2 3 drop 4 5" git rebase --edit-todo &&
git rebase --continue &&
test E = $(git cat-file commit HEAD | sed -ne \$p) &&
@ -1263,7 +1263,7 @@ test_expect_success 'static check of bad SHA-1' '
set_fake_editor &&
test_must_fail env FAKE_LINES="1 2 edit fakesha 3 4 5 #" \
git rebase -i --root 2>actual &&
test_cmp expect actual &&
test_i18ncmp expect actual &&
FAKE_LINES="1 2 4 5 6" git rebase --edit-todo &&
git rebase --continue &&
test E = $(git cat-file commit HEAD | sed -ne \$p)

View File

@ -53,7 +53,7 @@ test_expect_success '--no-quiet overrides --quiet' '
# Applying side1 will be quiet.
test_must_fail git am --quiet side[123].eml >out &&
test_path_is_dir .git/rebase-apply &&
! test_i18ngrep "^Applying: " out &&
test_i18ngrep ! "^Applying: " out &&
echo side1 >file &&
git add file &&

View File

@ -18,7 +18,7 @@ test_expect_success '"git log :/" should not be ambiguous' '
test_expect_success '"git log :/a" should be ambiguous (applied both rev and worktree)' '
: >a &&
test_must_fail git log :/a 2>error &&
grep ambiguous error
test_i18ngrep ambiguous error
'
test_expect_success '"git log :/a -- " should not be ambiguous' '
@ -31,7 +31,7 @@ test_expect_success '"git log -- :/a" should not be ambiguous' '
test_expect_success '"git log :" should be ambiguous' '
test_must_fail git log : 2>error &&
grep ambiguous error
test_i18ngrep ambiguous error
'
test_expect_success 'git log -- :' '

View File

@ -1182,7 +1182,7 @@ test_expect_success 'extra args: setup' '
test_extra_arg () {
test_expect_success "extra args: $*" "
test_must_fail git remote $* bogus_extra_arg 2>actual &&
grep '^usage:' actual
test_i18ngrep '^usage:' actual
"
}

View File

@ -644,7 +644,7 @@ test_expect_success 'fetch --prune prints the remotes url' '
git fetch --prune origin 2>&1 | head -n1 >../actual
) &&
echo "From ${D}/." >expect &&
test_cmp expect actual
test_i18ncmp expect actual
'
test_expect_success 'branchname D/F conflict resolved by --prune' '

View File

@ -211,7 +211,7 @@ test_expect_success 'fail if the index has unresolved entries' '
test -n "$(git ls-files -u)" &&
cp file expected &&
test_must_fail git pull . second 2>err &&
test_i18ngrep "Pull is not possible because you have unmerged files" err &&
test_i18ngrep "Pulling is not possible because you have unmerged files." err &&
test_cmp expected file &&
git add file &&
test -z "$(git ls-files -u)" &&

View File

@ -75,7 +75,7 @@ test_expect_success TTY 'progress messages go to tty' '
ensure_fresh_upstream &&
test_terminal git push -u upstream master >out 2>err &&
grep "Writing objects" err
test_i18ngrep "Writing objects" err
'
test_expect_success 'progress messages do not go to non-tty' '
@ -83,7 +83,7 @@ test_expect_success 'progress messages do not go to non-tty' '
# skip progress messages, since stderr is non-tty
git push -u upstream master >out 2>err &&
! grep "Writing objects" err
test_i18ngrep ! "Writing objects" err
'
test_expect_success 'progress messages go to non-tty (forced)' '
@ -91,22 +91,22 @@ test_expect_success 'progress messages go to non-tty (forced)' '
# force progress messages to stderr, even though it is non-tty
git push -u --progress upstream master >out 2>err &&
grep "Writing objects" err
test_i18ngrep "Writing objects" err
'
test_expect_success TTY 'push -q suppresses progress' '
ensure_fresh_upstream &&
test_terminal git push -u -q upstream master >out 2>err &&
! grep "Writing objects" err
test_i18ngrep ! "Writing objects" err
'
test_expect_success TTY 'push --no-progress suppresses progress' '
ensure_fresh_upstream &&
test_terminal git push -u --no-progress upstream master >out 2>err &&
! grep "Unpacking objects" err &&
! grep "Writing objects" err
test_i18ngrep ! "Unpacking objects" err &&
test_i18ngrep ! "Writing objects" err
'
test_expect_success TTY 'quiet push' '

View File

@ -22,8 +22,8 @@ verify_stderr () {
cat >expected &&
# We're not interested in the error
# "fatal: The remote end hung up unexpectedly":
grep -E '^(fatal|warning):' <error | grep -v 'hung up' >actual | sort &&
test_cmp expected actual
test_i18ngrep -E '^(fatal|warning):' <error | grep -v 'hung up' >actual | sort &&
test_i18ncmp expected actual
}
test_expect_success 'setup' '

View File

@ -119,7 +119,7 @@ test_expect_success 'rejected update prints status' '
git commit -m dev2 &&
test_must_fail git push origin dev2 2>act &&
sed -e "/^remote: /s/ *$//" <act >cmp &&
test_cmp exp cmp
test_i18ncmp exp cmp
'
rm -f "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git/hooks/update"
@ -219,7 +219,7 @@ test_expect_success TTY 'push shows progress when stderr is a tty' '
cd "$ROOT_PATH"/test_repo_clone &&
test_commit noisy &&
test_terminal git push >output 2>&1 &&
grep "^Writing objects" output
test_i18ngrep "^Writing objects" output
'
test_expect_success TTY 'push --quiet silences status and progress' '
@ -233,16 +233,16 @@ test_expect_success TTY 'push --no-progress silences progress but not status' '
cd "$ROOT_PATH"/test_repo_clone &&
test_commit no-progress &&
test_terminal git push --no-progress >output 2>&1 &&
grep "^To http" output &&
! grep "^Writing objects"
test_i18ngrep "^To http" output &&
test_i18ngrep ! "^Writing objects"
'
test_expect_success 'push --progress shows progress to non-tty' '
cd "$ROOT_PATH"/test_repo_clone &&
test_commit progress &&
git push --progress >output 2>&1 &&
grep "^To http" output &&
grep "^Writing objects" output
test_i18ngrep "^To http" output &&
test_i18ngrep "^Writing objects" output
'
test_expect_success 'http push gives sane defaults to reflog' '

View File

@ -362,7 +362,7 @@ test_expect_success 'bisect starting with a detached HEAD' '
test_expect_success 'bisect errors out if bad and good are mistaken' '
git bisect reset &&
test_must_fail git bisect start $HASH2 $HASH4 2> rev_list_error &&
grep "mistook good and bad" rev_list_error &&
test_i18ngrep "mistook good and bad" rev_list_error &&
git bisect reset
'
@ -404,7 +404,7 @@ test_expect_success 'side branch creation' '
test_expect_success 'good merge base when good and bad are siblings' '
git bisect start "$HASH7" "$SIDE_HASH7" > my_bisect_log.txt &&
grep "merge base must be tested" my_bisect_log.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
grep $HASH4 my_bisect_log.txt &&
git bisect good > my_bisect_log.txt &&
test_must_fail grep "merge base must be tested" my_bisect_log.txt &&
@ -413,7 +413,7 @@ test_expect_success 'good merge base when good and bad are siblings' '
'
test_expect_success 'skipped merge base when good and bad are siblings' '
git bisect start "$SIDE_HASH7" "$HASH7" > my_bisect_log.txt &&
grep "merge base must be tested" my_bisect_log.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
grep $HASH4 my_bisect_log.txt &&
git bisect skip > my_bisect_log.txt 2>&1 &&
grep "warning" my_bisect_log.txt &&
@ -423,11 +423,11 @@ test_expect_success 'skipped merge base when good and bad are siblings' '
test_expect_success 'bad merge base when good and bad are siblings' '
git bisect start "$HASH7" HEAD > my_bisect_log.txt &&
grep "merge base must be tested" my_bisect_log.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
grep $HASH4 my_bisect_log.txt &&
test_must_fail git bisect bad > my_bisect_log.txt 2>&1 &&
grep "merge base $HASH4 is bad" my_bisect_log.txt &&
grep "fixed between $HASH4 and \[$SIDE_HASH7\]" my_bisect_log.txt &&
test_i18ngrep "merge base $HASH4 is bad" my_bisect_log.txt &&
test_i18ngrep "fixed between $HASH4 and \[$SIDE_HASH7\]" my_bisect_log.txt &&
git bisect reset
'
@ -460,9 +460,9 @@ test_expect_success 'many merge bases creation' '
test_expect_success 'good merge bases when good and bad are siblings' '
git bisect start "$B_HASH" "$A_HASH" > my_bisect_log.txt &&
grep "merge base must be tested" my_bisect_log.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
git bisect good > my_bisect_log2.txt &&
grep "merge base must be tested" my_bisect_log2.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log2.txt &&
{
{
grep "$SIDE_HASH5" my_bisect_log.txt &&
@ -477,14 +477,14 @@ test_expect_success 'good merge bases when good and bad are siblings' '
test_expect_success 'optimized merge base checks' '
git bisect start "$HASH7" "$SIDE_HASH7" > my_bisect_log.txt &&
grep "merge base must be tested" my_bisect_log.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
grep "$HASH4" my_bisect_log.txt &&
git bisect good > my_bisect_log2.txt &&
test -f ".git/BISECT_ANCESTORS_OK" &&
test "$HASH6" = $(git rev-parse --verify HEAD) &&
git bisect bad > my_bisect_log3.txt &&
git bisect good "$A_HASH" > my_bisect_log4.txt &&
grep "merge base must be tested" my_bisect_log4.txt &&
test_i18ngrep "merge base must be tested" my_bisect_log4.txt &&
test_must_fail test -f ".git/BISECT_ANCESTORS_OK"
'
@ -562,7 +562,7 @@ test_expect_success 'skipping away from skipped commit' '
test_expect_success 'erroring out when using bad path parameters' '
test_must_fail git bisect start $PARA_HASH7 $HASH1 -- foobar 2> error.txt &&
grep "bad path parameters" error.txt
test_i18ngrep "bad path parameters" error.txt
'
test_expect_success 'test bisection on bare repo - --no-checkout specified' '
@ -803,7 +803,7 @@ test_expect_success 'bisect terms needs 0 or 1 argument' '
test_must_fail git bisect terms 1 2 &&
test_must_fail git bisect terms 2>actual &&
echo "no terms defined" >expected &&
test_cmp expected actual
test_i18ncmp expected actual
'
test_expect_success 'bisect terms shows good/bad after start' '
@ -875,7 +875,7 @@ test_expect_success 'bisect start --term-* does store terms' '
Your current terms are two for the old state
and one for the new state.
EOF
test_cmp expected actual &&
test_i18ncmp expected actual &&
git bisect terms --term-bad >actual &&
echo one >expected &&
test_cmp expected actual &&

View File

@ -20,8 +20,8 @@ test_expect_success 'Broken refs are reported correctly' '
test_when_finished "rm -f .git/$r" &&
echo "warning: ignoring broken ref $r" >broken-err &&
git for-each-ref >out 2>err &&
test_cmp full-list out &&
test_cmp broken-err err
test_i18ncmp full-list out &&
test_i18ncmp broken-err err
'
test_expect_success 'NULL_SHA1 refs are reported correctly' '
@ -31,10 +31,10 @@ test_expect_success 'NULL_SHA1 refs are reported correctly' '
echo "warning: ignoring broken ref $r" >zeros-err &&
git for-each-ref >out 2>err &&
test_cmp full-list out &&
test_cmp zeros-err err &&
test_i18ncmp zeros-err err &&
git for-each-ref --format="%(objectname) %(refname)" >brief-out 2>brief-err &&
test_cmp brief-list brief-out &&
test_cmp zeros-err brief-err
test_i18ncmp zeros-err brief-err
'
test_expect_success 'Missing objects are reported correctly' '
@ -43,7 +43,7 @@ test_expect_success 'Missing objects are reported correctly' '
test_when_finished "rm -f .git/$r" &&
echo "fatal: missing object $MISSING for $r" >missing-err &&
test_must_fail git for-each-ref 2>err &&
test_cmp missing-err err &&
test_i18ncmp missing-err err &&
(
cat brief-list &&
echo "$MISSING $r"

View File

@ -643,7 +643,7 @@ test_expect_success 'test ident field is working' '
cp -R done dthree dtwo four three ../other_worktree &&
GIT_WORK_TREE=../other_worktree git status 2>../err &&
echo "warning: Untracked cache is disabled on this system or location." >../expect &&
test_cmp ../expect ../err
test_i18ncmp ../expect ../err
'
test_done

View File

@ -66,14 +66,14 @@ test_expect_success 'reset --hard message' '
hex=$(git log -1 --format="%h") &&
git reset --hard > .actual &&
echo HEAD is now at $hex $(commit_msg) > .expected &&
test_cmp .expected .actual
test_i18ncmp .expected .actual
'
test_expect_success 'reset --hard message (ISO8859-1 logoutputencoding)' '
hex=$(git log -1 --format="%h") &&
git -c "i18n.logOutputEncoding=$test_encoding" reset --hard > .actual &&
echo HEAD is now at $hex $(commit_msg $test_encoding) > .expected &&
test_cmp .expected .actual
test_i18ncmp .expected .actual
'
>.diff_expect

View File

@ -257,7 +257,7 @@ test_expect_success 'checkout to detach HEAD' '
git checkout -f renamer && git clean -f &&
git checkout renamer^ 2>messages &&
test_i18ngrep "HEAD is now at 7329388" messages &&
test_line_count -gt 1 messages &&
(test_line_count -gt 1 messages || test -n "$GETTEXT_POISON") &&
H=$(git rev-parse --verify HEAD) &&
M=$(git show-ref -s --verify refs/heads/master) &&
test "z$H" = "z$M" &&

View File

@ -942,7 +942,7 @@ test_expect_success 'submodule deinit from subdirectory' '
cd sub &&
git submodule deinit ../init >../output
) &&
grep "\\.\\./init" output &&
test_i18ngrep "\\.\\./init" output &&
test -z "$(git config --get-regexp "submodule\.example\.")" &&
test -n "$(git config --get-regexp "submodule\.example2\.")" &&
test -f example2/.git &&

View File

@ -157,7 +157,7 @@ test_expect_success '"git submodule sync" should update submodule URLs - subdire
cd sub &&
git submodule sync >../../output
) &&
grep "\\.\\./submodule" output &&
test_i18ngrep "\\.\\./submodule" output &&
test -d "$(
cd super-clone/submodule &&
git config remote.origin.url
@ -188,7 +188,7 @@ test_expect_success '"git submodule sync --recursive" should update all submodul
cd sub &&
git submodule sync --recursive >../../output
) &&
grep "\\.\\./submodule/sub-submodule" output &&
test_i18ngrep "\\.\\./submodule/sub-submodule" output &&
test -d "$(
cd super-clone/submodule &&
git config remote.origin.url

View File

@ -136,8 +136,8 @@ test_expect_success 'submodule update --init --recursive from subdirectory' '
cd tmp &&
git submodule update --init --recursive ../super >../../actual 2>../../actual2
) &&
test_cmp expect actual &&
test_cmp expect2 actual2
test_i18ncmp expect actual &&
test_i18ncmp expect2 actual2
'
apos="'";
@ -370,7 +370,7 @@ test_expect_success 'submodule update - command in .git/config catches failure'
(cd super &&
test_must_fail git submodule update submodule 2>../actual
) &&
test_cmp actual expect
test_i18ncmp actual expect
'
cat << EOF >expect
@ -388,7 +388,7 @@ test_expect_success 'submodule update - command in .git/config catches failure -
mkdir tmp && cd tmp &&
test_must_fail git submodule update ../submodule 2>../../actual
) &&
test_cmp actual expect
test_i18ncmp actual expect
'
cat << EOF >expect
@ -408,7 +408,7 @@ test_expect_success 'recursive submodule update - command in .git/config catches
mkdir -p tmp && cd tmp &&
test_must_fail git submodule update --recursive ../super 2>../../actual
) &&
test_cmp actual expect
test_i18ncmp actual expect
'
test_expect_success 'submodule init does not copy command into .git/config' '

View File

@ -1377,7 +1377,7 @@ EOF
git config --add -f .gitmodules submodule.subname.ignore all &&
git config --add -f .gitmodules submodule.subname.path sm &&
git status > output &&
test_cmp expect output &&
test_i18ncmp expect output &&
git config -f .gitmodules --remove-section submodule.subname
'
@ -1387,7 +1387,7 @@ test_expect_success '.git/config ignore=all suppresses unstaged submodule summar
git config --add submodule.subname.ignore all &&
git config --add submodule.subname.path sm &&
git status > output &&
test_cmp expect output &&
test_i18ncmp expect output &&
git config --remove-section submodule.subname &&
git config -f .gitmodules --remove-section submodule.subname
'

View File

@ -125,7 +125,7 @@ test_expect_success 'will not overwrite untracked file in leading path' '
cp important sub &&
cp important sub2 &&
test_must_fail git merge sub 2>out &&
test_cmp out expect &&
test_i18ncmp out expect &&
test_path_is_missing .git/MERGE_HEAD &&
test_cmp important sub &&
test_cmp important sub2 &&

View File

@ -31,10 +31,10 @@ test_expect_success 'autocorrect showing candidates' '
git config help.autocorrect 0 &&
test_must_fail git lfg 2>actual &&
sed -e "1,/^Did you mean this/d" actual | grep lgf &&
grep "^ lgf" actual &&
test_must_fail git distimdist 2>actual &&
sed -e "1,/^Did you mean this/d" actual | grep distimdistim
grep "^ distimdistim" actual
'
test_expect_success 'autocorrect running commands' '

View File

@ -1038,7 +1038,7 @@ static struct ref *get_refs_list(struct transport *transport, int for_push)
(*tail)->status |= REF_STATUS_UPTODATE;
if (read_ref((*tail)->name,
(*tail)->old_oid.hash) < 0)
die(N_("Could not read ref %s"),
die(_("Could not read ref %s"),
(*tail)->name);
}
}

View File

@ -59,7 +59,7 @@ static void set_upstreams(struct transport *transport, struct ref *refs,
localname + 11, transport->remote->name,
remotename);
else
printf("Would set upstream of '%s' to '%s' of '%s'\n",
printf(_("Would set upstream of '%s' to '%s' of '%s'\n"),
localname + 11, remotename + 11,
transport->remote->name);
}
@ -148,7 +148,7 @@ static int set_git_option(struct git_transport_options *opts,
char *end;
opts->depth = strtol(value, &end, 0);
if (*end)
die("transport: invalid depth option '%s'", value);
die(_("transport: invalid depth option '%s'"), value);
}
return 0;
}
@ -767,19 +767,19 @@ static void die_with_unpushed_submodules(struct string_list *needs_pushing)
{
int i;
fprintf(stderr, "The following submodule paths contain changes that can\n"
"not be found on any remote:\n");
fprintf(stderr, _("The following submodule paths contain changes that can\n"
"not be found on any remote:\n"));
for (i = 0; i < needs_pushing->nr; i++)
printf(" %s\n", needs_pushing->items[i].string);
fprintf(stderr, "\nPlease try\n\n"
" git push --recurse-submodules=on-demand\n\n"
"or cd to the path and use\n\n"
" git push\n\n"
"to push them to a remote.\n\n");
fprintf(stderr, _("\nPlease try\n\n"
" git push --recurse-submodules=on-demand\n\n"
"or cd to the path and use\n\n"
" git push\n\n"
"to push them to a remote.\n\n"));
string_list_clear(needs_pushing, 0);
die("Aborting.");
die(_("Aborting."));
}
static int run_pre_push_hook(struct transport *transport,

View File

@ -263,7 +263,7 @@ static const char *wt_status_unmerged_status_string(int stagemask)
case 7:
return _("both modified:");
default:
die(_("bug: unhandled unmerged status %x"), stagemask);
die("bug: unhandled unmerged status %x", stagemask);
}
}
@ -388,7 +388,7 @@ static void wt_status_print_change_data(struct wt_status *s,
status_printf(s, color(WT_STATUS_HEADER, s), "\t");
what = wt_status_diff_status_string(status);
if (!what)
die(_("bug: unhandled diff status %c"), status);
die("bug: unhandled diff status %c", status);
len = label_width - utf8_strwidth(what);
assert(len >= 0);
if (status == DIFF_STATUS_COPIED || status == DIFF_STATUS_RENAMED)