Merge branch 'ab/i18n-st'

* ab/i18n-st: (69 commits)
  i18n: git-shortlog basic messages
  i18n: git-revert split up "could not revert/apply" message
  i18n: git-revert literal "me" messages
  i18n: git-revert "Your local changes" message
  i18n: git-revert basic messages
  i18n: git-notes GIT_NOTES_REWRITE_MODE error message
  i18n: git-notes basic commands
  i18n: git-gc "Auto packing the repository" message
  i18n: git-gc basic messages
  i18n: git-describe basic messages
  i18n: git-clean clean.requireForce messages
  i18n: git-clean basic messages
  i18n: git-bundle basic messages
  i18n: git-archive basic messages
  i18n: git-status "renamed: " message
  i18n: git-status "Initial commit" message
  i18n: git-status "Changes to be committed" message
  i18n: git-status shortstatus messages
  i18n: git-status "nothing to commit" messages
  i18n: git-status basic messages
  ...

Conflicts:
	builtin/branch.c
	builtin/checkout.c
	builtin/clone.c
	builtin/commit.c
	builtin/grep.c
	builtin/merge.c
	builtin/push.c
	builtin/revert.c
	t/t3507-cherry-pick-conflict.sh
	t/t7607-merge-overwrite.sh
This commit is contained in:
Junio C Hamano
2011-04-01 17:55:55 -07:00
59 changed files with 1008 additions and 874 deletions

View File

@ -37,7 +37,7 @@ static void update_callback(struct diff_queue_struct *q,
const char *path = p->one->path; const char *path = p->one->path;
switch (p->status) { switch (p->status) {
default: default:
die("unexpected diff status %c", p->status); die(_("unexpected diff status %c"), p->status);
case DIFF_STATUS_UNMERGED: case DIFF_STATUS_UNMERGED:
/* /*
* ADD_CACHE_IGNORE_REMOVAL is unset if "git * ADD_CACHE_IGNORE_REMOVAL is unset if "git
@ -63,7 +63,7 @@ static void update_callback(struct diff_queue_struct *q,
case DIFF_STATUS_TYPE_CHANGED: case DIFF_STATUS_TYPE_CHANGED:
if (add_file_to_index(&the_index, path, data->flags)) { if (add_file_to_index(&the_index, path, data->flags)) {
if (!(data->flags & ADD_CACHE_IGNORE_ERRORS)) if (!(data->flags & ADD_CACHE_IGNORE_ERRORS))
die("updating files failed"); die(_("updating files failed"));
data->add_errors++; data->add_errors++;
} }
break; break;
@ -73,7 +73,7 @@ static void update_callback(struct diff_queue_struct *q,
if (!(data->flags & ADD_CACHE_PRETEND)) if (!(data->flags & ADD_CACHE_PRETEND))
remove_file_from_index(&the_index, path); remove_file_from_index(&the_index, path);
if (data->flags & (ADD_CACHE_PRETEND|ADD_CACHE_VERBOSE)) if (data->flags & (ADD_CACHE_PRETEND|ADD_CACHE_VERBOSE))
printf("remove '%s'\n", path); printf(_("remove '%s'\n"), path);
break; break;
} }
} }
@ -171,7 +171,7 @@ static void treat_gitlinks(const char **pathspec)
/* strip trailing slash */ /* strip trailing slash */
pathspec[j] = xstrndup(ce->name, len); pathspec[j] = xstrndup(ce->name, len);
else else
die ("Path '%s' is in submodule '%.*s'", die (_("Path '%s' is in submodule '%.*s'"),
pathspec[j], len, ce->name); pathspec[j], len, ce->name);
} }
} }
@ -187,10 +187,10 @@ static void refresh(int verbose, const char **pathspec)
/* nothing */; /* nothing */;
seen = xcalloc(specs, 1); seen = xcalloc(specs, 1);
refresh_index(&the_index, verbose ? REFRESH_IN_PORCELAIN : REFRESH_QUIET, refresh_index(&the_index, verbose ? REFRESH_IN_PORCELAIN : REFRESH_QUIET,
pathspec, seen, "Unstaged changes after refreshing the index:"); pathspec, seen, _("Unstaged changes after refreshing the index:"));
for (i = 0; i < specs; i++) { for (i = 0; i < specs; i++) {
if (!seen[i]) if (!seen[i])
die("pathspec '%s' did not match any files", pathspec[i]); die(_("pathspec '%s' did not match any files"), pathspec[i]);
} }
free(seen); free(seen);
} }
@ -204,7 +204,7 @@ static const char **validate_pathspec(int argc, const char **argv, const char *p
for (p = pathspec; *p; p++) { for (p = pathspec; *p; p++) {
if (has_symlink_leading_path(*p, strlen(*p))) { if (has_symlink_leading_path(*p, strlen(*p))) {
int len = prefix ? strlen(prefix) : 0; int len = prefix ? strlen(prefix) : 0;
die("'%s' is beyond a symbolic link", *p + len); die(_("'%s' is beyond a symbolic link"), *p + len);
} }
} }
} }
@ -271,7 +271,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
if (read_cache() < 0) if (read_cache() < 0)
die ("Could not read the index"); die (_("Could not read the index"));
init_revisions(&rev, prefix); init_revisions(&rev, prefix);
rev.diffopt.context = 7; rev.diffopt.context = 7;
@ -280,24 +280,24 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
rev.diffopt.output_format = DIFF_FORMAT_PATCH; rev.diffopt.output_format = DIFF_FORMAT_PATCH;
out = open(file, O_CREAT | O_WRONLY, 0644); out = open(file, O_CREAT | O_WRONLY, 0644);
if (out < 0) if (out < 0)
die ("Could not open '%s' for writing.", file); die (_("Could not open '%s' for writing."), file);
rev.diffopt.file = xfdopen(out, "w"); rev.diffopt.file = xfdopen(out, "w");
rev.diffopt.close_file = 1; rev.diffopt.close_file = 1;
if (run_diff_files(&rev, 0)) if (run_diff_files(&rev, 0))
die ("Could not write patch"); die (_("Could not write patch"));
launch_editor(file, NULL, NULL); launch_editor(file, NULL, NULL);
if (stat(file, &st)) if (stat(file, &st))
die_errno("Could not stat '%s'", file); die_errno(_("Could not stat '%s'"), file);
if (!st.st_size) if (!st.st_size)
die("Empty patch. Aborted."); die(_("Empty patch. Aborted."));
memset(&child, 0, sizeof(child)); memset(&child, 0, sizeof(child));
child.git_cmd = 1; child.git_cmd = 1;
child.argv = apply_argv; child.argv = apply_argv;
if (run_command(&child)) if (run_command(&child))
die ("Could not apply '%s'", file); die (_("Could not apply '%s'"), file);
unlink(file); unlink(file);
return 0; return 0;
@ -306,7 +306,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
static struct lock_file lock_file; static struct lock_file lock_file;
static const char ignore_error[] = static const char ignore_error[] =
"The following paths are ignored by one of your .gitignore files:\n"; N_("The following paths are ignored by one of your .gitignore files:\n");
static int verbose = 0, show_only = 0, ignored_too = 0, refresh_only = 0; static int verbose = 0, show_only = 0, ignored_too = 0, refresh_only = 0;
static int ignore_add_errors, addremove, intent_to_add, ignore_missing = 0; static int ignore_add_errors, addremove, intent_to_add, ignore_missing = 0;
@ -343,17 +343,17 @@ static int add_files(struct dir_struct *dir, int flags)
int i, exit_status = 0; int i, exit_status = 0;
if (dir->ignored_nr) { if (dir->ignored_nr) {
fprintf(stderr, ignore_error); fprintf(stderr, _(ignore_error));
for (i = 0; i < dir->ignored_nr; i++) for (i = 0; i < dir->ignored_nr; i++)
fprintf(stderr, "%s\n", dir->ignored[i]->name); fprintf(stderr, "%s\n", dir->ignored[i]->name);
fprintf(stderr, "Use -f if you really want to add them.\n"); fprintf(stderr, _("Use -f if you really want to add them.\n"));
die("no files added"); die(_("no files added"));
} }
for (i = 0; i < dir->nr; i++) for (i = 0; i < dir->nr; i++)
if (add_file_to_cache(dir->entries[i]->name, flags)) { if (add_file_to_cache(dir->entries[i]->name, flags)) {
if (!ignore_add_errors) if (!ignore_add_errors)
die("adding files failed"); die(_("adding files failed"));
exit_status = 1; exit_status = 1;
} }
return exit_status; return exit_status;
@ -385,9 +385,9 @@ int cmd_add(int argc, const char **argv, const char *prefix)
argv++; argv++;
if (addremove && take_worktree_changes) if (addremove && take_worktree_changes)
die("-A and -u are mutually incompatible"); die(_("-A and -u are mutually incompatible"));
if (!show_only && ignore_missing) if (!show_only && ignore_missing)
die("Option --ignore-missing can only be used together with --dry-run"); die(_("Option --ignore-missing can only be used together with --dry-run"));
if ((addremove || take_worktree_changes) && !argc) { if ((addremove || take_worktree_changes) && !argc) {
static const char *here[2] = { ".", NULL }; static const char *here[2] = { ".", NULL };
argc = 1; argc = 1;
@ -407,14 +407,14 @@ int cmd_add(int argc, const char **argv, const char *prefix)
? ADD_CACHE_IGNORE_REMOVAL : 0)); ? ADD_CACHE_IGNORE_REMOVAL : 0));
if (require_pathspec && argc == 0) { if (require_pathspec && argc == 0) {
fprintf(stderr, "Nothing specified, nothing added.\n"); fprintf(stderr, _("Nothing specified, nothing added.\n"));
fprintf(stderr, "Maybe you wanted to say 'git add .'?\n"); fprintf(stderr, _("Maybe you wanted to say 'git add .'?\n"));
return 0; return 0;
} }
pathspec = validate_pathspec(argc, argv, prefix); pathspec = validate_pathspec(argc, argv, prefix);
if (read_cache() < 0) if (read_cache() < 0)
die("index file corrupt"); die(_("index file corrupt"));
treat_gitlinks(pathspec); treat_gitlinks(pathspec);
if (add_new_files) { if (add_new_files) {
@ -450,7 +450,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (excluded(&dir, pathspec[i], &dtype)) if (excluded(&dir, pathspec[i], &dtype))
dir_add_ignored(&dir, pathspec[i], strlen(pathspec[i])); dir_add_ignored(&dir, pathspec[i], strlen(pathspec[i]));
} else } else
die("pathspec '%s' did not match any files", die(_("pathspec '%s' did not match any files"),
pathspec[i]); pathspec[i]);
} }
} }
@ -466,7 +466,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (active_cache_changed) { if (active_cache_changed) {
if (write_cache(newfd, active_cache, active_nr) || if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(&lock_file)) commit_locked_index(&lock_file))
die("Unable to write new index file"); die(_("Unable to write new index file"));
} }
return exit_status; return exit_status;

View File

@ -14,10 +14,10 @@ static void create_output_file(const char *output_file)
{ {
int output_fd = open(output_file, O_CREAT | O_WRONLY | O_TRUNC, 0666); int output_fd = open(output_file, O_CREAT | O_WRONLY | O_TRUNC, 0666);
if (output_fd < 0) if (output_fd < 0)
die_errno("could not create archive file '%s'", output_file); die_errno(_("could not create archive file '%s'"), output_file);
if (output_fd != 1) { if (output_fd != 1) {
if (dup2(output_fd, 1) < 0) if (dup2(output_fd, 1) < 0)
die_errno("could not redirect output"); die_errno(_("could not redirect output"));
else else
close(output_fd); close(output_fd);
} }
@ -33,7 +33,7 @@ static int run_remote_archiver(int argc, const char **argv,
_remote = remote_get(remote); _remote = remote_get(remote);
if (!_remote->url[0]) if (!_remote->url[0])
die("git archive: Remote with no URL"); die(_("git archive: Remote with no URL"));
transport = transport_get(_remote, _remote->url[0]); transport = transport_get(_remote, _remote->url[0]);
transport_connect(transport, "git-upload-archive", exec, fd); transport_connect(transport, "git-upload-archive", exec, fd);
@ -43,18 +43,18 @@ static int run_remote_archiver(int argc, const char **argv,
len = packet_read_line(fd[0], buf, sizeof(buf)); len = packet_read_line(fd[0], buf, sizeof(buf));
if (!len) if (!len)
die("git archive: expected ACK/NAK, got EOF"); die(_("git archive: expected ACK/NAK, got EOF"));
if (buf[len-1] == '\n') if (buf[len-1] == '\n')
buf[--len] = 0; buf[--len] = 0;
if (strcmp(buf, "ACK")) { if (strcmp(buf, "ACK")) {
if (len > 5 && !prefixcmp(buf, "NACK ")) if (len > 5 && !prefixcmp(buf, "NACK "))
die("git archive: NACK %s", buf + 5); die(_("git archive: NACK %s"), buf + 5);
die("git archive: protocol error"); die(_("git archive: protocol error"));
} }
len = packet_read_line(fd[0], buf, sizeof(buf)); len = packet_read_line(fd[0], buf, sizeof(buf));
if (len) if (len)
die("git archive: expected a flush"); die(_("git archive: expected a flush"));
/* Now, start reading from fd[0] and spit it out to stdout */ /* Now, start reading from fd[0] and spit it out to stdout */
rv = recv_sideband("archive", fd[0], 1); rv = recv_sideband("archive", fd[0], 1);

View File

@ -133,12 +133,12 @@ static int branch_merged(int kind, const char *name,
if ((head_rev != reference_rev) && if ((head_rev != reference_rev) &&
in_merge_bases(rev, &head_rev, 1) != merged) { in_merge_bases(rev, &head_rev, 1) != merged) {
if (merged) if (merged)
warning("deleting branch '%s' that has been merged to\n" warning(_("deleting branch '%s' that has been merged to\n"
" '%s', but not yet been merged to HEAD.", " '%s', but not yet merged to HEAD."),
name, reference_name); name, reference_name);
else else
warning("not deleting branch '%s' that is not yet merged to\n" warning(_("not deleting branch '%s' that is not yet merged to\n"
" '%s', even though it is merged to HEAD.", " '%s', even though it is merged to HEAD."),
name, reference_name); name, reference_name);
} }
return merged; return merged;
@ -157,7 +157,8 @@ static int delete_branches(int argc, const char **argv, int force, int kinds)
switch (kinds) { switch (kinds) {
case REF_REMOTE_BRANCH: case REF_REMOTE_BRANCH:
fmt = "refs/remotes/%s"; fmt = "refs/remotes/%s";
remote = "remote "; /* TRANSLATORS: This is "remote " in "remote branch '%s' not found" */
remote = _("remote ");
force = 1; force = 1;
break; break;
case REF_LOCAL_BRANCH: case REF_LOCAL_BRANCH:
@ -165,19 +166,19 @@ static int delete_branches(int argc, const char **argv, int force, int kinds)
remote = ""; remote = "";
break; break;
default: default:
die("cannot use -a with -d"); die(_("cannot use -a with -d"));
} }
if (!force) { if (!force) {
head_rev = lookup_commit_reference(head_sha1); head_rev = lookup_commit_reference(head_sha1);
if (!head_rev) if (!head_rev)
die("Couldn't look up commit object for HEAD"); die(_("Couldn't look up commit object for HEAD"));
} }
for (i = 0; i < argc; i++, strbuf_release(&bname)) { for (i = 0; i < argc; i++, strbuf_release(&bname)) {
strbuf_branchname(&bname, argv[i]); strbuf_branchname(&bname, argv[i]);
if (kinds == REF_LOCAL_BRANCH && !strcmp(head, bname.buf)) { if (kinds == REF_LOCAL_BRANCH && !strcmp(head, bname.buf)) {
error("Cannot delete the branch '%s' " error(_("Cannot delete the branch '%s' "
"which you are currently on.", bname.buf); "which you are currently on."), bname.buf);
ret = 1; ret = 1;
continue; continue;
} }
@ -186,7 +187,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds)
name = xstrdup(mkpath(fmt, bname.buf)); name = xstrdup(mkpath(fmt, bname.buf));
if (!resolve_ref(name, sha1, 1, NULL)) { if (!resolve_ref(name, sha1, 1, NULL)) {
error("%sbranch '%s' not found.", error(_("%sbranch '%s' not found."),
remote, bname.buf); remote, bname.buf);
ret = 1; ret = 1;
continue; continue;
@ -194,31 +195,31 @@ static int delete_branches(int argc, const char **argv, int force, int kinds)
rev = lookup_commit_reference(sha1); rev = lookup_commit_reference(sha1);
if (!rev) { if (!rev) {
error("Couldn't look up commit object for '%s'", name); error(_("Couldn't look up commit object for '%s'"), name);
ret = 1; ret = 1;
continue; continue;
} }
if (!force && !branch_merged(kinds, bname.buf, rev, head_rev)) { if (!force && !branch_merged(kinds, bname.buf, rev, head_rev)) {
error("The branch '%s' is not fully merged.\n" error(_("The branch '%s' is not fully merged.\n"
"If you are sure you want to delete it, " "If you are sure you want to delete it, "
"run 'git branch -D %s'.", bname.buf, bname.buf); "run 'git branch -D %s'."), bname.buf, bname.buf);
ret = 1; ret = 1;
continue; continue;
} }
if (delete_ref(name, sha1, 0)) { if (delete_ref(name, sha1, 0)) {
error("Error deleting %sbranch '%s'", remote, error(_("Error deleting %sbranch '%s'"), remote,
bname.buf); bname.buf);
ret = 1; ret = 1;
} else { } else {
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
printf("Deleted %sbranch %s (was %s).\n", remote, printf(_("Deleted %sbranch %s (was %s).\n"), remote,
bname.buf, bname.buf,
find_unique_abbrev(sha1, DEFAULT_ABBREV)); find_unique_abbrev(sha1, DEFAULT_ABBREV));
strbuf_addf(&buf, "branch.%s", bname.buf); strbuf_addf(&buf, "branch.%s", bname.buf);
if (git_config_rename_section(buf.buf, NULL) < 0) if (git_config_rename_section(buf.buf, NULL) < 0)
warning("Update of config-file failed"); warning(_("Update of config-file failed"));
strbuf_release(&buf); strbuf_release(&buf);
} }
} }
@ -300,7 +301,7 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,
if (ref_list->verbose || ref_list->with_commit || merge_filter != NO_FILTER) { if (ref_list->verbose || ref_list->with_commit || merge_filter != NO_FILTER) {
commit = lookup_commit_reference_gently(sha1, 1); commit = lookup_commit_reference_gently(sha1, 1);
if (!commit) { if (!commit) {
cb->ret = error("branch '%s' does not point at a commit", refname); cb->ret = error(_("branch '%s' does not point at a commit"), refname);
return 0; return 0;
} }
@ -372,11 +373,11 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
strbuf_addf(stat, "%s: ", strbuf_addf(stat, "%s: ",
shorten_unambiguous_ref(branch->merge[0]->dst, 0)); shorten_unambiguous_ref(branch->merge[0]->dst, 0));
if (!ours) if (!ours)
strbuf_addf(stat, "behind %d] ", theirs); strbuf_addf(stat, _("behind %d] "), theirs);
else if (!theirs) else if (!theirs)
strbuf_addf(stat, "ahead %d] ", ours); strbuf_addf(stat, _("ahead %d] "), ours);
else else
strbuf_addf(stat, "ahead %d, behind %d] ", ours, theirs); strbuf_addf(stat, _("ahead %d, behind %d] "), ours, theirs);
} }
static int matches_merge_filter(struct commit *commit) static int matches_merge_filter(struct commit *commit)
@ -481,7 +482,7 @@ static void show_detached(struct ref_list *ref_list)
if (head_commit && is_descendant_of(head_commit, ref_list->with_commit)) { if (head_commit && is_descendant_of(head_commit, ref_list->with_commit)) {
struct ref_item item; struct ref_item item;
item.name = xstrdup("(no branch)"); item.name = xstrdup(_("(no branch)"));
item.len = strlen(item.name); item.len = strlen(item.name);
item.kind = REF_LOCAL_BRANCH; item.kind = REF_LOCAL_BRANCH;
item.dest = NULL; item.dest = NULL;
@ -541,7 +542,7 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru
free_ref_list(&ref_list); free_ref_list(&ref_list);
if (cb.ret) if (cb.ret)
error("some refs could not be read"); error(_("some refs could not be read"));
return cb.ret; return cb.ret;
} }
@ -554,7 +555,7 @@ static void rename_branch(const char *oldname, const char *newname, int force)
int recovery = 0; int recovery = 0;
if (!oldname) if (!oldname)
die("cannot rename the current branch while not on any."); die(_("cannot rename the current branch while not on any."));
if (strbuf_check_branch_ref(&oldref, oldname)) { if (strbuf_check_branch_ref(&oldref, oldname)) {
/* /*
@ -564,35 +565,35 @@ static void rename_branch(const char *oldname, const char *newname, int force)
if (resolve_ref(oldref.buf, sha1, 1, NULL)) if (resolve_ref(oldref.buf, sha1, 1, NULL))
recovery = 1; recovery = 1;
else else
die("Invalid branch name: '%s'", oldname); die(_("Invalid branch name: '%s'"), oldname);
} }
if (strbuf_check_branch_ref(&newref, newname)) if (strbuf_check_branch_ref(&newref, newname))
die("Invalid branch name: '%s'", newname); die(_("Invalid branch name: '%s'"), newname);
if (resolve_ref(newref.buf, sha1, 1, NULL) && !force) if (resolve_ref(newref.buf, sha1, 1, NULL) && !force)
die("A branch named '%s' already exists.", newref.buf + 11); die(_("A branch named '%s' already exists."), newref.buf + 11);
strbuf_addf(&logmsg, "Branch: renamed %s to %s", strbuf_addf(&logmsg, "Branch: renamed %s to %s",
oldref.buf, newref.buf); oldref.buf, newref.buf);
if (rename_ref(oldref.buf, newref.buf, logmsg.buf)) if (rename_ref(oldref.buf, newref.buf, logmsg.buf))
die("Branch rename failed"); die(_("Branch rename failed"));
strbuf_release(&logmsg); strbuf_release(&logmsg);
if (recovery) if (recovery)
warning("Renamed a misnamed branch '%s' away", oldref.buf + 11); warning(_("Renamed a misnamed branch '%s' away"), oldref.buf + 11);
/* no need to pass logmsg here as HEAD didn't really move */ /* no need to pass logmsg here as HEAD didn't really move */
if (!strcmp(oldname, head) && create_symref("HEAD", newref.buf, NULL)) if (!strcmp(oldname, head) && create_symref("HEAD", newref.buf, NULL))
die("Branch renamed to %s, but HEAD is not updated!", newname); die(_("Branch renamed to %s, but HEAD is not updated!"), newname);
strbuf_addf(&oldsection, "branch.%s", oldref.buf + 11); strbuf_addf(&oldsection, "branch.%s", oldref.buf + 11);
strbuf_release(&oldref); strbuf_release(&oldref);
strbuf_addf(&newsection, "branch.%s", newref.buf + 11); strbuf_addf(&newsection, "branch.%s", newref.buf + 11);
strbuf_release(&newref); strbuf_release(&newref);
if (git_config_rename_section(oldsection.buf, newsection.buf) < 0) if (git_config_rename_section(oldsection.buf, newsection.buf) < 0)
die("Branch is renamed, but update of config-file failed"); die(_("Branch is renamed, but update of config-file failed"));
strbuf_release(&oldsection); strbuf_release(&oldsection);
strbuf_release(&newsection); strbuf_release(&newsection);
} }
@ -607,7 +608,7 @@ static int opt_parse_merge_filter(const struct option *opt, const char *arg, int
if (!arg) if (!arg)
arg = "HEAD"; arg = "HEAD";
if (get_sha1(arg, merge_filter_ref)) if (get_sha1(arg, merge_filter_ref))
die("malformed object name %s", arg); die(_("malformed object name %s"), arg);
return 0; return 0;
} }
@ -681,13 +682,13 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
head = resolve_ref("HEAD", head_sha1, 0, NULL); head = resolve_ref("HEAD", head_sha1, 0, NULL);
if (!head) if (!head)
die("Failed to resolve HEAD as a valid ref."); die(_("Failed to resolve HEAD as a valid ref."));
head = xstrdup(head); head = xstrdup(head);
if (!strcmp(head, "HEAD")) { if (!strcmp(head, "HEAD")) {
detached = 1; detached = 1;
} else { } else {
if (prefixcmp(head, "refs/heads/")) if (prefixcmp(head, "refs/heads/"))
die("HEAD not found below refs/heads!"); die(_("HEAD not found below refs/heads!"));
head += 11; head += 11;
} }
hashcpy(merge_filter_ref, head_sha1); hashcpy(merge_filter_ref, head_sha1);
@ -707,7 +708,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
rename_branch(argv[0], argv[1], rename > 1); rename_branch(argv[0], argv[1], rename > 1);
else if (argc <= 2) { else if (argc <= 2) {
if (kinds != REF_LOCAL_BRANCH) if (kinds != REF_LOCAL_BRANCH)
die("-a and -r options to 'git branch' do not make sense with a branch name"); die(_("-a and -r options to 'git branch' do not make sense with a branch name"));
create_branch(head, argv[0], (argc == 2) ? argv[1] : head, create_branch(head, argv[0], (argc == 2) ? argv[1] : head,
force_create, reflog, track); force_create, reflog, track);
} else } else

View File

@ -44,7 +44,7 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)
close(bundle_fd); close(bundle_fd);
if (verify_bundle(&header, 1)) if (verify_bundle(&header, 1))
return 1; return 1;
fprintf(stderr, "%s is okay\n", bundle_file); fprintf(stderr, _("%s is okay\n"), bundle_file);
return 0; return 0;
} }
if (!strcmp(cmd, "list-heads")) { if (!strcmp(cmd, "list-heads")) {
@ -53,11 +53,11 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)
} }
if (!strcmp(cmd, "create")) { if (!strcmp(cmd, "create")) {
if (!startup_info->have_repository) if (!startup_info->have_repository)
die("Need a repository to create a bundle."); die(_("Need a repository to create a bundle."));
return !!create_bundle(&header, bundle_file, argc, argv); return !!create_bundle(&header, bundle_file, argc, argv);
} else if (!strcmp(cmd, "unbundle")) { } else if (!strcmp(cmd, "unbundle")) {
if (!startup_info->have_repository) if (!startup_info->have_repository)
die("Need a repository to unbundle."); die(_("Need a repository to unbundle."));
return !!unbundle(&header, bundle_fd) || return !!unbundle(&header, bundle_fd) ||
list_bundle_refs(&header, argc, argv); list_bundle_refs(&header, argc, argv);
} else } else

View File

@ -104,9 +104,10 @@ static int check_stage(int stage, struct cache_entry *ce, int pos)
return 0; return 0;
pos++; pos++;
} }
return error("path '%s' does not have %s version", if (stage == 2)
ce->name, return error(_("path '%s' does not have our version"), ce->name);
(stage == 2) ? "our" : "their"); else
return error(_("path '%s' does not have their version"), ce->name);
} }
static int check_all_stages(struct cache_entry *ce, int pos) static int check_all_stages(struct cache_entry *ce, int pos)
@ -117,7 +118,7 @@ static int check_all_stages(struct cache_entry *ce, int pos)
ce_stage(active_cache[pos+1]) != 2 || ce_stage(active_cache[pos+1]) != 2 ||
strcmp(active_cache[pos+2]->name, ce->name) || strcmp(active_cache[pos+2]->name, ce->name) ||
ce_stage(active_cache[pos+2]) != 3) ce_stage(active_cache[pos+2]) != 3)
return error("path '%s' does not have all three versions", return error(_("path '%s' does not have all three versions"),
ce->name); ce->name);
return 0; return 0;
} }
@ -131,9 +132,10 @@ static int checkout_stage(int stage, struct cache_entry *ce, int pos,
return checkout_entry(active_cache[pos], state, NULL); return checkout_entry(active_cache[pos], state, NULL);
pos++; pos++;
} }
return error("path '%s' does not have %s version", if (stage == 2)
ce->name, return error(_("path '%s' does not have our version"), ce->name);
(stage == 2) ? "our" : "their"); else
return error(_("path '%s' does not have their version"), ce->name);
} }
static int checkout_merged(int pos, struct checkout *state) static int checkout_merged(int pos, struct checkout *state)
@ -151,7 +153,7 @@ static int checkout_merged(int pos, struct checkout *state)
ce_stage(active_cache[pos+1]) != 2 || ce_stage(active_cache[pos+1]) != 2 ||
strcmp(active_cache[pos+2]->name, path) || strcmp(active_cache[pos+2]->name, path) ||
ce_stage(active_cache[pos+2]) != 3) ce_stage(active_cache[pos+2]) != 3)
return error("path '%s' does not have all 3 versions", path); return error(_("path '%s' does not have all 3 versions"), path);
read_mmblob(&ancestor, active_cache[pos]->sha1); read_mmblob(&ancestor, active_cache[pos]->sha1);
read_mmblob(&ours, active_cache[pos+1]->sha1); read_mmblob(&ours, active_cache[pos+1]->sha1);
@ -168,7 +170,7 @@ static int checkout_merged(int pos, struct checkout *state)
free(theirs.ptr); free(theirs.ptr);
if (status < 0 || !result_buf.ptr) { if (status < 0 || !result_buf.ptr) {
free(result_buf.ptr); free(result_buf.ptr);
return error("path '%s': cannot merge", path); return error(_("path '%s': cannot merge"), path);
} }
/* /*
@ -185,12 +187,12 @@ static int checkout_merged(int pos, struct checkout *state)
*/ */
if (write_sha1_file(result_buf.ptr, result_buf.size, if (write_sha1_file(result_buf.ptr, result_buf.size,
blob_type, sha1)) blob_type, sha1))
die("Unable to add merge result for '%s'", path); die(_("Unable to add merge result for '%s'"), path);
ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode), ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode),
sha1, sha1,
path, 2, 0); path, 2, 0);
if (!ce) if (!ce)
die("make_cache_entry failed for path '%s'", path); die(_("make_cache_entry failed for path '%s'"), path);
status = checkout_entry(ce, state, NULL); status = checkout_entry(ce, state, NULL);
return status; return status;
} }
@ -212,7 +214,7 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec,
newfd = hold_locked_index(lock_file, 1); newfd = hold_locked_index(lock_file, 1);
if (read_cache_preload(pathspec) < 0) if (read_cache_preload(pathspec) < 0)
return error("corrupt index file"); return error(_("corrupt index file"));
if (source_tree) if (source_tree)
read_tree_some(source_tree, pathspec); read_tree_some(source_tree, pathspec);
@ -240,14 +242,14 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec,
if (!ce_stage(ce)) if (!ce_stage(ce))
continue; continue;
if (opts->force) { if (opts->force) {
warning("path '%s' is unmerged", ce->name); warning(_("path '%s' is unmerged"), ce->name);
} else if (stage) { } else if (stage) {
errs |= check_stage(stage, ce, pos); errs |= check_stage(stage, ce, pos);
} else if (opts->merge) { } else if (opts->merge) {
errs |= check_all_stages(ce, pos); errs |= check_all_stages(ce, pos);
} else { } else {
errs = 1; errs = 1;
error("path '%s' is unmerged", ce->name); error(_("path '%s' is unmerged"), ce->name);
} }
pos = skip_same_name(ce, pos) - 1; pos = skip_same_name(ce, pos) - 1;
} }
@ -276,7 +278,7 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec,
if (write_cache(newfd, active_cache, active_nr) || if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(lock_file)) commit_locked_index(lock_file))
die("unable to write new index file"); die(_("unable to write new index file"));
resolve_ref("HEAD", rev, 0, &flag); resolve_ref("HEAD", rev, 0, &flag);
head = lookup_commit_reference_gently(rev, 1); head = lookup_commit_reference_gently(rev, 1);
@ -293,7 +295,7 @@ static void show_local_changes(struct object *head, struct diff_options *opts)
rev.diffopt.flags = opts->flags; rev.diffopt.flags = opts->flags;
rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS; rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
if (diff_setup_done(&rev.diffopt) < 0) if (diff_setup_done(&rev.diffopt) < 0)
die("diff_setup_done failed"); die(_("diff_setup_done failed"));
add_pending_object(&rev, head, NULL); add_pending_object(&rev, head, NULL);
run_diff_index(&rev, 0); run_diff_index(&rev, 0);
} }
@ -367,7 +369,7 @@ static int merge_working_tree(struct checkout_opts *opts,
int newfd = hold_locked_index(lock_file, 1); int newfd = hold_locked_index(lock_file, 1);
if (read_cache_preload(NULL) < 0) if (read_cache_preload(NULL) < 0)
return error("corrupt index file"); return error(_("corrupt index file"));
resolve_undo_clear(); resolve_undo_clear();
if (opts->force) { if (opts->force) {
@ -389,7 +391,7 @@ static int merge_working_tree(struct checkout_opts *opts,
refresh_cache(REFRESH_QUIET); refresh_cache(REFRESH_QUIET);
if (unmerged_cache()) { if (unmerged_cache()) {
error("you need to resolve your current index first"); error(_("you need to resolve your current index first"));
return 1; return 1;
} }
@ -471,7 +473,7 @@ static int merge_working_tree(struct checkout_opts *opts,
if (write_cache(newfd, active_cache, active_nr) || if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(lock_file)) commit_locked_index(lock_file))
die("unable to write new index file"); die(_("unable to write new index file"));
if (!opts->force && !opts->quiet) if (!opts->force && !opts->quiet)
show_local_changes(&new->commit->object, &opts->diff_options); show_local_changes(&new->commit->object, &opts->diff_options);
@ -520,7 +522,7 @@ static void update_refs_for_switch(struct checkout_opts *opts,
temp = log_all_ref_updates; temp = log_all_ref_updates;
log_all_ref_updates = 1; log_all_ref_updates = 1;
if (log_ref_setup(ref_name, log_file, sizeof(log_file))) { if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
fprintf(stderr, "Can not do reflog for '%s'\n", fprintf(stderr, _("Can not do reflog for '%s'\n"),
opts->new_orphan_branch); opts->new_orphan_branch);
log_all_ref_updates = temp; log_all_ref_updates = temp;
return; return;
@ -550,22 +552,24 @@ static void update_refs_for_switch(struct checkout_opts *opts,
if (!opts->quiet) { if (!opts->quiet) {
if (old->path && advice_detached_head) if (old->path && advice_detached_head)
detach_advice(old->path, new->name); detach_advice(old->path, new->name);
describe_detached_head("HEAD is now at", new->commit); describe_detached_head(_("HEAD is now at"), new->commit);
} }
} else if (new->path) { /* Switch branches. */ } else if (new->path) { /* Switch branches. */
create_symref("HEAD", new->path, msg.buf); create_symref("HEAD", new->path, msg.buf);
if (!opts->quiet) { if (!opts->quiet) {
if (old->path && !strcmp(new->path, old->path)) if (old->path && !strcmp(new->path, old->path)) {
fprintf(stderr, "Already on '%s'\n", fprintf(stderr, _("Already on '%s'\n"),
new->name);
else if (opts->new_branch)
fprintf(stderr, "Switched to%s branch '%s'\n",
opts->branch_exists ? " and reset" : " a new",
new->name); new->name);
} else if (opts->new_branch) {
if (opts->branch_exists)
fprintf(stderr, _("Switched to and reset branch '%s'\n"), new->name);
else else
fprintf(stderr, "Switched to branch '%s'\n", fprintf(stderr, _("Switched to a new branch '%s'\n"), new->name);
} else {
fprintf(stderr, _("Switched to branch '%s'\n"),
new->name); new->name);
} }
}
if (old->path && old->name) { if (old->path && old->name) {
char log_file[PATH_MAX], ref_file[PATH_MAX]; char log_file[PATH_MAX], ref_file[PATH_MAX];
@ -680,13 +684,13 @@ static void orphaned_commit_warning(struct commit *commit)
init_revisions(&revs, NULL); init_revisions(&revs, NULL);
if (setup_revisions(args.argc - 1, args.argv, &revs, NULL) != 1) if (setup_revisions(args.argc - 1, args.argv, &revs, NULL) != 1)
die("internal error: only -- alone should have been left"); die(_("internal error: only -- alone should have been left"));
if (prepare_revision_walk(&revs)) if (prepare_revision_walk(&revs))
die("internal error in revision walk"); die(_("internal error in revision walk"));
if (!(commit->object.flags & UNINTERESTING)) if (!(commit->object.flags & UNINTERESTING))
suggest_reattach(commit, &revs); suggest_reattach(commit, &revs);
else else
describe_detached_head("Previous HEAD position was", commit); describe_detached_head(_("Previous HEAD position was"), commit);
clear_commit_marks(commit, -1); clear_commit_marks(commit, -1);
for_each_ref(clear_commit_marks_from_one_ref, NULL); for_each_ref(clear_commit_marks_from_one_ref, NULL);
@ -711,7 +715,7 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
new->name = "HEAD"; new->name = "HEAD";
new->commit = old.commit; new->commit = old.commit;
if (!new->commit) if (!new->commit)
die("You are on a branch yet to be born"); die(_("You are on a branch yet to be born"));
parse_commit(new->commit); parse_commit(new->commit);
} }
@ -839,7 +843,7 @@ static int parse_branchname_arg(int argc, const char **argv,
if (get_sha1_mb(arg, rev)) { if (get_sha1_mb(arg, rev)) {
if (has_dash_dash) /* case (1) */ if (has_dash_dash) /* case (1) */
die("invalid reference: %s", arg); die(_("invalid reference: %s"), arg);
if (dwim_new_local_branch_ok && if (dwim_new_local_branch_ok &&
!check_filename(NULL, arg) && !check_filename(NULL, arg) &&
argc == 1) { argc == 1) {
@ -878,7 +882,7 @@ static int parse_branchname_arg(int argc, const char **argv,
} }
if (!*source_tree) /* case (1): want a tree */ if (!*source_tree) /* case (1): want a tree */
die("reference is not a tree: %s", arg); die(_("reference is not a tree: %s"), arg);
if (!has_dash_dash) {/* case (3 -> 1) */ if (!has_dash_dash) {/* case (3 -> 1) */
/* /*
* Do not complain the most common case * Do not complain the most common case
@ -945,7 +949,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
/* we can assume from now on new_branch = !new_branch_force */ /* we can assume from now on new_branch = !new_branch_force */
if (opts.new_branch && opts.new_branch_force) if (opts.new_branch && opts.new_branch_force)
die("-B cannot be used with -b"); die(_("-B cannot be used with -b"));
/* copy -B over to -b, so that we can just check the latter */ /* copy -B over to -b, so that we can just check the latter */
if (opts.new_branch_force) if (opts.new_branch_force)
@ -954,7 +958,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
if (patch_mode && (opts.track > 0 || opts.new_branch if (patch_mode && (opts.track > 0 || opts.new_branch
|| opts.new_branch_log || opts.merge || opts.force || opts.new_branch_log || opts.merge || opts.force
|| opts.force_detach)) || opts.force_detach))
die ("--patch is incompatible with all other options"); die (_("--patch is incompatible with all other options"));
if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch)) if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch))
die("--detach cannot be used with -b/-B/--orphan"); die("--detach cannot be used with -b/-B/--orphan");
@ -965,22 +969,22 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
if (0 < opts.track && !opts.new_branch) { if (0 < opts.track && !opts.new_branch) {
const char *argv0 = argv[0]; const char *argv0 = argv[0];
if (!argc || !strcmp(argv0, "--")) if (!argc || !strcmp(argv0, "--"))
die ("--track needs a branch name"); die (_("--track needs a branch name"));
if (!prefixcmp(argv0, "refs/")) if (!prefixcmp(argv0, "refs/"))
argv0 += 5; argv0 += 5;
if (!prefixcmp(argv0, "remotes/")) if (!prefixcmp(argv0, "remotes/"))
argv0 += 8; argv0 += 8;
argv0 = strchr(argv0, '/'); argv0 = strchr(argv0, '/');
if (!argv0 || !argv0[1]) if (!argv0 || !argv0[1])
die ("Missing branch name; try -b"); die (_("Missing branch name; try -b"));
opts.new_branch = argv0 + 1; opts.new_branch = argv0 + 1;
} }
if (opts.new_orphan_branch) { if (opts.new_orphan_branch) {
if (opts.new_branch) if (opts.new_branch)
die("--orphan and -b|-B are mutually exclusive"); die(_("--orphan and -b|-B are mutually exclusive"));
if (opts.track > 0) if (opts.track > 0)
die("--orphan cannot be used with -t"); die(_("--orphan cannot be used with -t"));
opts.new_branch = opts.new_orphan_branch; opts.new_branch = opts.new_orphan_branch;
} }
@ -990,7 +994,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
} }
if (opts.force && opts.merge) if (opts.force && opts.merge)
die("git checkout: -f and -m are incompatible"); die(_("git checkout: -f and -m are incompatible"));
/* /*
* Extract branch name from command line arguments, so * Extract branch name from command line arguments, so
@ -1024,7 +1028,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
const char **pathspec = get_pathspec(prefix, argv); const char **pathspec = get_pathspec(prefix, argv);
if (!pathspec) if (!pathspec)
die("invalid path specification"); die(_("invalid path specification"));
if (patch_mode) if (patch_mode)
return interactive_checkout(new.name, pathspec, &opts); return interactive_checkout(new.name, pathspec, &opts);
@ -1032,9 +1036,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
/* Checkout paths */ /* Checkout paths */
if (opts.new_branch) { if (opts.new_branch) {
if (argc == 1) { if (argc == 1) {
die("git checkout: updating paths is incompatible with switching branches.\nDid you intend to checkout '%s' which can not be resolved as commit?", argv[0]); die(_("git checkout: updating paths is incompatible with switching branches.\nDid you intend to checkout '%s' which can not be resolved as commit?"), argv[0]);
} else { } else {
die("git checkout: updating paths is incompatible with switching branches."); die(_("git checkout: updating paths is incompatible with switching branches."));
} }
} }
@ -1042,7 +1046,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
die("git checkout: --detach does not take a path argument"); die("git checkout: --detach does not take a path argument");
if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge) if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
die("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."); die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."));
return checkout_paths(source_tree, pathspec, &opts); return checkout_paths(source_tree, pathspec, &opts);
} }
@ -1053,22 +1057,22 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
if (opts.new_branch) { if (opts.new_branch) {
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
if (strbuf_check_branch_ref(&buf, opts.new_branch)) if (strbuf_check_branch_ref(&buf, opts.new_branch))
die("git checkout: we do not like '%s' as a branch name.", die(_("git checkout: we do not like '%s' as a branch name."),
opts.new_branch); opts.new_branch);
if (!get_sha1(buf.buf, rev)) { if (!get_sha1(buf.buf, rev)) {
opts.branch_exists = 1; opts.branch_exists = 1;
if (!opts.new_branch_force) if (!opts.new_branch_force)
die("git checkout: branch %s already exists", die(_("git checkout: branch %s already exists"),
opts.new_branch); opts.new_branch);
} }
strbuf_release(&buf); strbuf_release(&buf);
} }
if (new.name && !new.commit) { if (new.name && !new.commit) {
die("Cannot switch branch to a non-commit."); die(_("Cannot switch branch to a non-commit."));
} }
if (opts.writeout_stage) if (opts.writeout_stage)
die("--ours/--theirs is incompatible with switching branches."); die(_("--ours/--theirs is incompatible with switching branches."));
return switch_branches(&opts, &new); return switch_branches(&opts, &new);
} }

View File

@ -75,11 +75,16 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
dir.flags |= DIR_SHOW_IGNORED; dir.flags |= DIR_SHOW_IGNORED;
if (ignored && ignored_only) if (ignored && ignored_only)
die("-x and -X cannot be used together"); die(_("-x and -X cannot be used together"));
if (!show_only && !force) if (!show_only && !force) {
die("clean.requireForce %s to true and neither -n nor -f given; " if (config_set)
"refusing to clean", config_set ? "set" : "defaults"); die(_("clean.requireForce set to true and neither -n nor -f given; "
"refusing to clean"));
else
die(_("clean.requireForce defaults to true and neither -n nor -f given; "
"refusing to clean"));
}
if (force > 1) if (force > 1)
rm_flags = 0; rm_flags = 0;
@ -87,7 +92,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES; dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
if (read_cache() < 0) if (read_cache() < 0)
die("index file corrupt"); die(_("index file corrupt"));
if (!ignored) if (!ignored)
setup_standard_excludes(&dir); setup_standard_excludes(&dir);
@ -146,20 +151,20 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
qname = quote_path_relative(directory.buf, directory.len, &buf, prefix); qname = quote_path_relative(directory.buf, directory.len, &buf, prefix);
if (show_only && (remove_directories || if (show_only && (remove_directories ||
(matches == MATCHED_EXACTLY))) { (matches == MATCHED_EXACTLY))) {
printf("Would remove %s\n", qname); printf(_("Would remove %s\n"), qname);
} else if (remove_directories || } else if (remove_directories ||
(matches == MATCHED_EXACTLY)) { (matches == MATCHED_EXACTLY)) {
if (!quiet) if (!quiet)
printf("Removing %s\n", qname); printf(_("Removing %s\n"), qname);
if (remove_dir_recursively(&directory, if (remove_dir_recursively(&directory,
rm_flags) != 0) { rm_flags) != 0) {
warning("failed to remove %s", qname); warning(_("failed to remove %s"), qname);
errors++; errors++;
} }
} else if (show_only) { } else if (show_only) {
printf("Would not remove %s\n", qname); printf(_("Would not remove %s\n"), qname);
} else { } else {
printf("Not removing %s\n", qname); printf(_("Not removing %s\n"), qname);
} }
strbuf_reset(&directory); strbuf_reset(&directory);
} else { } else {
@ -167,13 +172,13 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
continue; continue;
qname = quote_path_relative(ent->name, -1, &buf, prefix); qname = quote_path_relative(ent->name, -1, &buf, prefix);
if (show_only) { if (show_only) {
printf("Would remove %s\n", qname); printf(_("Would remove %s\n"), qname);
continue; continue;
} else if (!quiet) { } else if (!quiet) {
printf("Removing %s\n", qname); printf(_("Removing %s\n"), qname);
} }
if (unlink(ent->name) != 0) { if (unlink(ent->name) != 0) {
warning("failed to remove %s", qname); warning(_("failed to remove %s"), qname);
errors++; errors++;
} }
} }

View File

@ -208,7 +208,7 @@ static void setup_reference(const char *repo)
if (is_directory(mkpath("%s/.git/objects", ref_git))) if (is_directory(mkpath("%s/.git/objects", ref_git)))
ref_git = mkpath("%s/.git", ref_git); ref_git = mkpath("%s/.git", ref_git);
else if (!is_directory(mkpath("%s/objects", ref_git))) else if (!is_directory(mkpath("%s/objects", ref_git)))
die("reference repository '%s' is not a local directory.", die(_("reference repository '%s' is not a local directory."),
option_reference); option_reference);
ref_git_copy = xstrdup(ref_git); ref_git_copy = xstrdup(ref_git);
@ -235,15 +235,15 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest)
dir = opendir(src->buf); dir = opendir(src->buf);
if (!dir) if (!dir)
die_errno("failed to open '%s'", src->buf); die_errno(_("failed to open '%s'"), src->buf);
if (mkdir(dest->buf, 0777)) { if (mkdir(dest->buf, 0777)) {
if (errno != EEXIST) if (errno != EEXIST)
die_errno("failed to create directory '%s'", dest->buf); die_errno(_("failed to create directory '%s'"), dest->buf);
else if (stat(dest->buf, &buf)) else if (stat(dest->buf, &buf))
die_errno("failed to stat '%s'", dest->buf); die_errno(_("failed to stat '%s'"), dest->buf);
else if (!S_ISDIR(buf.st_mode)) else if (!S_ISDIR(buf.st_mode))
die("%s exists and is not a directory", dest->buf); die(_("%s exists and is not a directory"), dest->buf);
} }
strbuf_addch(src, '/'); strbuf_addch(src, '/');
@ -257,7 +257,7 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest)
strbuf_setlen(dest, dest_len); strbuf_setlen(dest, dest_len);
strbuf_addstr(dest, de->d_name); strbuf_addstr(dest, de->d_name);
if (stat(src->buf, &buf)) { if (stat(src->buf, &buf)) {
warning ("failed to stat %s\n", src->buf); warning (_("failed to stat %s\n"), src->buf);
continue; continue;
} }
if (S_ISDIR(buf.st_mode)) { if (S_ISDIR(buf.st_mode)) {
@ -267,16 +267,16 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest)
} }
if (unlink(dest->buf) && errno != ENOENT) if (unlink(dest->buf) && errno != ENOENT)
die_errno("failed to unlink '%s'", dest->buf); die_errno(_("failed to unlink '%s'"), dest->buf);
if (!option_no_hardlinks) { if (!option_no_hardlinks) {
if (!link(src->buf, dest->buf)) if (!link(src->buf, dest->buf))
continue; continue;
if (option_local) if (option_local)
die_errno("failed to create link '%s'", dest->buf); die_errno(_("failed to create link '%s'"), dest->buf);
option_no_hardlinks = 1; option_no_hardlinks = 1;
} }
if (copy_file_with_time(dest->buf, src->buf, 0666)) if (copy_file_with_time(dest->buf, src->buf, 0666))
die_errno("failed to copy file to '%s'", dest->buf); die_errno(_("failed to copy file to '%s'"), dest->buf);
} }
closedir(dir); closedir(dir);
} }
@ -305,7 +305,7 @@ static const struct ref *clone_local(const char *src_repo,
ret = transport_get_remote_refs(transport); ret = transport_get_remote_refs(transport);
transport_disconnect(transport); transport_disconnect(transport);
if (0 <= option_verbosity) if (0 <= option_verbosity)
printf("done.\n"); printf(_("done.\n"));
return ret; return ret;
} }
@ -388,11 +388,11 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
builtin_clone_usage, 0); builtin_clone_usage, 0);
if (argc > 2) if (argc > 2)
usage_msg_opt("Too many arguments.", usage_msg_opt(_("Too many arguments."),
builtin_clone_usage, builtin_clone_options); builtin_clone_usage, builtin_clone_options);
if (argc == 0) if (argc == 0)
usage_msg_opt("You must specify a repository to clone.", usage_msg_opt(_("You must specify a repository to clone."),
builtin_clone_usage, builtin_clone_options); builtin_clone_usage, builtin_clone_options);
if (option_mirror) if (option_mirror)
@ -400,7 +400,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (option_bare) { if (option_bare) {
if (option_origin) if (option_origin)
die("--bare and --origin %s options are incompatible.", die(_("--bare and --origin %s options are incompatible."),
option_origin); option_origin);
option_no_checkout = 1; option_no_checkout = 1;
} }
@ -419,7 +419,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
repo = repo_name; repo = repo_name;
is_local = path && !is_bundle; is_local = path && !is_bundle;
if (is_local && option_depth) if (is_local && option_depth)
warning("--depth is ignored in local clones; use file:// instead."); warning(_("--depth is ignored in local clones; use file:// instead."));
if (argc == 2) if (argc == 2)
dir = xstrdup(argv[1]); dir = xstrdup(argv[1]);
@ -429,8 +429,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
dest_exists = !stat(dir, &buf); dest_exists = !stat(dir, &buf);
if (dest_exists && !is_empty_dir(dir)) if (dest_exists && !is_empty_dir(dir))
die("destination path '%s' already exists and is not " die(_("destination path '%s' already exists and is not "
"an empty directory.", dir); "an empty directory."), dir);
strbuf_addf(&reflog_msg, "clone: from %s", repo); strbuf_addf(&reflog_msg, "clone: from %s", repo);
@ -439,7 +439,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
else { else {
work_tree = getenv("GIT_WORK_TREE"); work_tree = getenv("GIT_WORK_TREE");
if (work_tree && !stat(work_tree, &buf)) if (work_tree && !stat(work_tree, &buf))
die("working tree '%s' already exists.", work_tree); die(_("working tree '%s' already exists."), work_tree);
} }
if (option_bare || work_tree) if (option_bare || work_tree)
@ -452,10 +452,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (!option_bare) { if (!option_bare) {
junk_work_tree = work_tree; junk_work_tree = work_tree;
if (safe_create_leading_directories_const(work_tree) < 0) if (safe_create_leading_directories_const(work_tree) < 0)
die_errno("could not create leading directories of '%s'", die_errno(_("could not create leading directories of '%s'"),
work_tree); work_tree);
if (!dest_exists && mkdir(work_tree, 0755)) if (!dest_exists && mkdir(work_tree, 0755))
die_errno("could not create work tree dir '%s'.", die_errno(_("could not create work tree dir '%s'."),
work_tree); work_tree);
set_git_work_tree(work_tree); set_git_work_tree(work_tree);
} }
@ -466,12 +466,15 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
setenv(CONFIG_ENVIRONMENT, mkpath("%s/config", git_dir), 1); setenv(CONFIG_ENVIRONMENT, mkpath("%s/config", git_dir), 1);
if (safe_create_leading_directories_const(git_dir) < 0) if (safe_create_leading_directories_const(git_dir) < 0)
die("could not create leading directories of '%s'", git_dir); die(_("could not create leading directories of '%s'"), git_dir);
set_git_dir(real_path(git_dir)); set_git_dir(real_path(git_dir));
if (0 <= option_verbosity) if (0 <= option_verbosity) {
printf("Cloning into %s%s...\n", if (option_bare)
option_bare ? "bare repository " : "", dir); printf(_("Cloning into bare repository %s...\n"), dir);
else
printf(_("Cloning into %s...\n"), dir);
}
init_db(option_template, INIT_DB_QUIET); init_db(option_template, INIT_DB_QUIET);
/* /*
@ -528,7 +531,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
transport = transport_get(remote, remote->url[0]); transport = transport_get(remote, remote->url[0]);
if (!transport->get_refs_list || !transport->fetch) if (!transport->get_refs_list || !transport->fetch)
die("Don't know how to clone %s", transport->url); die(_("Don't know how to clone %s"), transport->url);
transport_set_option(transport, TRANS_OPT_KEEP, "yes"); transport_set_option(transport, TRANS_OPT_KEEP, "yes");
@ -567,8 +570,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
strbuf_release(&head); strbuf_release(&head);
if (!our_head_points_at) { if (!our_head_points_at) {
warning("Remote branch %s not found in " warning(_("Remote branch %s not found in "
"upstream %s, using HEAD instead", "upstream %s, using HEAD instead"),
option_branch, option_origin); option_branch, option_origin);
our_head_points_at = remote_head_points_at; our_head_points_at = remote_head_points_at;
} }
@ -577,7 +580,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
our_head_points_at = remote_head_points_at; our_head_points_at = remote_head_points_at;
} }
else { else {
warning("You appear to have cloned an empty repository."); warning(_("You appear to have cloned an empty repository."));
our_head_points_at = NULL; our_head_points_at = NULL;
remote_head_points_at = NULL; remote_head_points_at = NULL;
remote_head = NULL; remote_head = NULL;
@ -619,8 +622,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
} else { } else {
/* Nothing to checkout out */ /* Nothing to checkout out */
if (!option_no_checkout) if (!option_no_checkout)
warning("remote HEAD refers to nonexistent ref, " warning(_("remote HEAD refers to nonexistent ref, "
"unable to checkout.\n"); "unable to checkout.\n"));
option_no_checkout = 1; option_no_checkout = 1;
} }
@ -656,7 +659,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(lock_file)) commit_locked_index(lock_file))
die("unable to write new index file"); die(_("unable to write new index file"));
err |= run_hook(NULL, "post-checkout", sha1_to_hex(null_sha1), err |= run_hook(NULL, "post-checkout", sha1_to_hex(null_sha1),
sha1_to_hex(our_head_points_at->old_sha1), "1", sha1_to_hex(our_head_points_at->old_sha1), "1",

View File

@ -38,7 +38,7 @@ static const char * const builtin_status_usage[] = {
}; };
static const char implicit_ident_advice[] = static const char implicit_ident_advice[] =
"Your name and email address were configured automatically based\n" N_("Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n" "on your username and hostname. Please check that they are accurate.\n"
"You can suppress this message by setting them explicitly:\n" "You can suppress this message by setting them explicitly:\n"
"\n" "\n"
@ -47,20 +47,20 @@ static const char implicit_ident_advice[] =
"\n" "\n"
"After doing this, you may fix the identity used for this commit with:\n" "After doing this, you may fix the identity used for this commit with:\n"
"\n" "\n"
" git commit --amend --reset-author\n"; " git commit --amend --reset-author\n");
static const char empty_amend_advice[] = static const char empty_amend_advice[] =
"You asked to amend the most recent commit, but doing so would make\n" N_("You asked to amend the most recent commit, but doing so would make\n"
"it empty. You can repeat your command with --allow-empty, or you can\n" "it empty. You can repeat your command with --allow-empty, or you can\n"
"remove the commit entirely with \"git reset HEAD^\".\n"; "remove the commit entirely with \"git reset HEAD^\".\n");
static const char empty_cherry_pick_advice[] = static const char empty_cherry_pick_advice[] =
"The previous cherry-pick is now empty, possibly due to conflict resolution.\n" N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
"If you wish to commit it anyway, use:\n" "If you wish to commit it anyway, use:\n"
"\n" "\n"
" git commit --allow-empty\n" " git commit --allow-empty\n"
"\n" "\n"
"Otherwise, please use 'git reset'\n"; "Otherwise, please use 'git reset'\n");
static unsigned char head_sha1[20]; static unsigned char head_sha1[20];
@ -287,7 +287,7 @@ static void add_remove_files(struct string_list *list)
if (!lstat(p->string, &st)) { if (!lstat(p->string, &st)) {
if (add_to_cache(p->string, &st, 0)) if (add_to_cache(p->string, &st, 0))
die("updating files failed"); die(_("updating files failed"));
} else } else
remove_file_from_cache(p->string); remove_file_from_cache(p->string);
} }
@ -314,7 +314,7 @@ static void create_base_index(void)
opts.fn = oneway_merge; opts.fn = oneway_merge;
tree = parse_tree_indirect(head_sha1); tree = parse_tree_indirect(head_sha1);
if (!tree) if (!tree)
die("failed to unpack HEAD tree object"); die(_("failed to unpack HEAD tree object"));
parse_tree(tree); parse_tree(tree);
init_tree_desc(&t, tree->buffer, tree->size); init_tree_desc(&t, tree->buffer, tree->size);
if (unpack_trees(1, &t, &opts)) if (unpack_trees(1, &t, &opts))
@ -342,9 +342,9 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
refresh_flags |= REFRESH_UNMERGED; refresh_flags |= REFRESH_UNMERGED;
if (interactive) { if (interactive) {
if (interactive_add(argc, argv, prefix) != 0) if (interactive_add(argc, argv, prefix) != 0)
die("interactive add failed"); die(_("interactive add failed"));
if (read_cache_preload(NULL) < 0) if (read_cache_preload(NULL) < 0)
die("index file corrupt"); die(_("index file corrupt"));
commit_style = COMMIT_AS_IS; commit_style = COMMIT_AS_IS;
return get_index_file(); return get_index_file();
} }
@ -353,7 +353,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
pathspec = get_pathspec(prefix, argv); pathspec = get_pathspec(prefix, argv);
if (read_cache_preload(pathspec) < 0) if (read_cache_preload(pathspec) < 0)
die("index file corrupt"); die(_("index file corrupt"));
/* /*
* Non partial, non as-is commit. * Non partial, non as-is commit.
@ -373,7 +373,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
refresh_cache_or_die(refresh_flags); refresh_cache_or_die(refresh_flags);
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
close_lock_file(&index_lock)) close_lock_file(&index_lock))
die("unable to write new_index file"); die(_("unable to write new_index file"));
commit_style = COMMIT_NORMAL; commit_style = COMMIT_NORMAL;
return index_lock.filename; return index_lock.filename;
} }
@ -393,7 +393,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
if (active_cache_changed) { if (active_cache_changed) {
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(&index_lock)) commit_locked_index(&index_lock))
die("unable to write new_index file"); die(_("unable to write new_index file"));
} else { } else {
rollback_lock_file(&index_lock); rollback_lock_file(&index_lock);
} }
@ -423,7 +423,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
commit_style = COMMIT_PARTIAL; commit_style = COMMIT_PARTIAL;
if (whence != FROM_COMMIT) if (whence != FROM_COMMIT)
die("cannot do a partial commit during a %s.", whence_s()); die(_("cannot do a partial commit during a %s."), whence_s());
memset(&partial, 0, sizeof(partial)); memset(&partial, 0, sizeof(partial));
partial.strdup_strings = 1; partial.strdup_strings = 1;
@ -432,14 +432,14 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
discard_cache(); discard_cache();
if (read_cache() < 0) if (read_cache() < 0)
die("cannot read the index"); die(_("cannot read the index"));
fd = hold_locked_index(&index_lock, 1); fd = hold_locked_index(&index_lock, 1);
add_remove_files(&partial); add_remove_files(&partial);
refresh_cache(REFRESH_QUIET); refresh_cache(REFRESH_QUIET);
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
close_lock_file(&index_lock)) close_lock_file(&index_lock))
die("unable to write new_index file"); die(_("unable to write new_index file"));
fd = hold_lock_file_for_update(&false_lock, fd = hold_lock_file_for_update(&false_lock,
git_path("next-index-%"PRIuMAX, git_path("next-index-%"PRIuMAX,
@ -452,7 +452,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
close_lock_file(&false_lock)) close_lock_file(&false_lock))
die("unable to write temporary index file"); die(_("unable to write temporary index file"));
discard_cache(); discard_cache();
read_cache_from(false_lock.filename); read_cache_from(false_lock.filename);
@ -499,7 +499,7 @@ static int is_a_merge(const unsigned char *sha1)
{ {
struct commit *commit = lookup_commit(sha1); struct commit *commit = lookup_commit(sha1);
if (!commit || parse_commit(commit)) if (!commit || parse_commit(commit))
die("could not parse HEAD commit"); die(_("could not parse HEAD commit"));
return !!(commit->parents && commit->parents->next); return !!(commit->parents && commit->parents->next);
} }
@ -518,13 +518,13 @@ static void determine_author_info(struct strbuf *author_ident)
a = strstr(author_message_buffer, "\nauthor "); a = strstr(author_message_buffer, "\nauthor ");
if (!a) if (!a)
die("invalid commit: %s", author_message); die(_("invalid commit: %s"), author_message);
lb = strchrnul(a + strlen("\nauthor "), '<'); lb = strchrnul(a + strlen("\nauthor "), '<');
rb = strchrnul(lb, '>'); rb = strchrnul(lb, '>');
eol = strchrnul(rb, '\n'); eol = strchrnul(rb, '\n');
if (!*lb || !*rb || !*eol) if (!*lb || !*rb || !*eol)
die("invalid commit: %s", author_message); die(_("invalid commit: %s"), author_message);
if (lb == a + strlen("\nauthor ")) if (lb == a + strlen("\nauthor "))
/* \nauthor <foo@example.com> */ /* \nauthor <foo@example.com> */
@ -542,7 +542,7 @@ static void determine_author_info(struct strbuf *author_ident)
const char *rb = strchr(force_author, '>'); const char *rb = strchr(force_author, '>');
if (!lb || !rb) if (!lb || !rb)
die("malformed --author parameter"); die(_("malformed --author parameter"));
name = xstrndup(force_author, lb - force_author); name = xstrndup(force_author, lb - force_author);
email = xstrndup(lb + 2, rb - (lb + 2)); email = xstrndup(lb + 2, rb - (lb + 2));
} }
@ -598,7 +598,7 @@ static char *cut_ident_timestamp_part(char *string)
{ {
char *ket = strrchr(string, '>'); char *ket = strrchr(string, '>');
if (!ket || ket[1] != ' ') if (!ket || ket[1] != ' ')
die("Malformed ident string: '%s'", string); die(_("Malformed ident string: '%s'"), string);
*++ket = '\0'; *++ket = '\0';
return ket; return ket;
} }
@ -631,7 +631,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
struct commit *c; struct commit *c;
c = lookup_commit_reference_by_name(squash_message); c = lookup_commit_reference_by_name(squash_message);
if (!c) if (!c)
die("could not lookup commit %s", squash_message); die(_("could not lookup commit %s"), squash_message);
ctx.output_encoding = get_commit_output_encoding(); ctx.output_encoding = get_commit_output_encoding();
format_commit_message(c, "squash! %s\n\n", &sb, format_commit_message(c, "squash! %s\n\n", &sb,
&ctx); &ctx);
@ -643,19 +643,19 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
hook_arg1 = "message"; hook_arg1 = "message";
} else if (logfile && !strcmp(logfile, "-")) { } else if (logfile && !strcmp(logfile, "-")) {
if (isatty(0)) if (isatty(0))
fprintf(stderr, "(reading log message from standard input)\n"); fprintf(stderr, _("(reading log message from standard input)\n"));
if (strbuf_read(&sb, 0, 0) < 0) if (strbuf_read(&sb, 0, 0) < 0)
die_errno("could not read log from standard input"); die_errno(_("could not read log from standard input"));
hook_arg1 = "message"; hook_arg1 = "message";
} else if (logfile) { } else if (logfile) {
if (strbuf_read_file(&sb, logfile, 0) < 0) if (strbuf_read_file(&sb, logfile, 0) < 0)
die_errno("could not read log file '%s'", die_errno(_("could not read log file '%s'"),
logfile); logfile);
hook_arg1 = "message"; hook_arg1 = "message";
} else if (use_message) { } else if (use_message) {
buffer = strstr(use_message_buffer, "\n\n"); buffer = strstr(use_message_buffer, "\n\n");
if (!buffer || buffer[2] == '\0') if (!buffer || buffer[2] == '\0')
die("commit has empty message"); die(_("commit has empty message"));
strbuf_add(&sb, buffer + 2, strlen(buffer + 2)); strbuf_add(&sb, buffer + 2, strlen(buffer + 2));
hook_arg1 = "commit"; hook_arg1 = "commit";
hook_arg2 = use_message; hook_arg2 = use_message;
@ -664,22 +664,22 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
struct commit *commit; struct commit *commit;
commit = lookup_commit_reference_by_name(fixup_message); commit = lookup_commit_reference_by_name(fixup_message);
if (!commit) if (!commit)
die("could not lookup commit %s", fixup_message); die(_("could not lookup commit %s"), fixup_message);
ctx.output_encoding = get_commit_output_encoding(); ctx.output_encoding = get_commit_output_encoding();
format_commit_message(commit, "fixup! %s\n\n", format_commit_message(commit, "fixup! %s\n\n",
&sb, &ctx); &sb, &ctx);
hook_arg1 = "message"; hook_arg1 = "message";
} else if (!stat(git_path("MERGE_MSG"), &statbuf)) { } else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0) if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
die_errno("could not read MERGE_MSG"); die_errno(_("could not read MERGE_MSG"));
hook_arg1 = "merge"; hook_arg1 = "merge";
} else if (!stat(git_path("SQUASH_MSG"), &statbuf)) { } else if (!stat(git_path("SQUASH_MSG"), &statbuf)) {
if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0) if (strbuf_read_file(&sb, git_path("SQUASH_MSG"), 0) < 0)
die_errno("could not read SQUASH_MSG"); die_errno(_("could not read SQUASH_MSG"));
hook_arg1 = "squash"; hook_arg1 = "squash";
} else if (template_file) { } else if (template_file) {
if (strbuf_read_file(&sb, template_file, 0) < 0) if (strbuf_read_file(&sb, template_file, 0) < 0)
die_errno("could not read '%s'", template_file); die_errno(_("could not read '%s'"), template_file);
hook_arg1 = "template"; hook_arg1 = "template";
} }
@ -706,7 +706,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
s->fp = fopen(git_path(commit_editmsg), "w"); s->fp = fopen(git_path(commit_editmsg), "w");
if (s->fp == NULL) if (s->fp == NULL)
die_errno("could not open '%s'", git_path(commit_editmsg)); die_errno(_("could not open '%s'"), git_path(commit_editmsg));
if (cleanup_mode != CLEANUP_NONE) if (cleanup_mode != CLEANUP_NONE)
stripspace(&sb, 0); stripspace(&sb, 0);
@ -730,7 +730,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
} }
if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len) if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
die_errno("could not write commit template"); die_errno(_("could not write commit template"));
strbuf_release(&sb); strbuf_release(&sb);
@ -743,12 +743,12 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
char *ai_tmp, *ci_tmp; char *ai_tmp, *ci_tmp;
if (whence != FROM_COMMIT) if (whence != FROM_COMMIT)
status_printf_ln(s, GIT_COLOR_NORMAL, status_printf_ln(s, GIT_COLOR_NORMAL,
"\n" _("\n"
"It looks like you may be committing a %s.\n" "It looks like you may be committing a %s.\n"
"If this is not correct, please remove the file\n" "If this is not correct, please remove the file\n"
" %s\n" " %s\n"
"and try again.\n" "and try again.\n"
"", ""),
whence_s(), whence_s(),
git_path(whence == FROM_MERGE git_path(whence == FROM_MERGE
? "MERGE_HEAD" ? "MERGE_HEAD"
@ -756,18 +756,18 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
fprintf(s->fp, "\n"); fprintf(s->fp, "\n");
status_printf(s, GIT_COLOR_NORMAL, status_printf(s, GIT_COLOR_NORMAL,
"Please enter the commit message for your changes."); _("Please enter the commit message for your changes."));
if (cleanup_mode == CLEANUP_ALL) if (cleanup_mode == CLEANUP_ALL)
status_printf_more(s, GIT_COLOR_NORMAL, status_printf_more(s, GIT_COLOR_NORMAL,
" Lines starting\n" _(" Lines starting\n"
"with '#' will be ignored, and an empty" "with '#' will be ignored, and an empty"
" message aborts the commit.\n"); " message aborts the commit.\n"));
else /* CLEANUP_SPACE, that is. */ else /* CLEANUP_SPACE, that is. */
status_printf_more(s, GIT_COLOR_NORMAL, status_printf_more(s, GIT_COLOR_NORMAL,
" Lines starting\n" _(" Lines starting\n"
"with '#' will be kept; you may remove them" "with '#' will be kept; you may remove them"
" yourself if you want to.\n" " yourself if you want to.\n"
"An empty message aborts the commit.\n"); "An empty message aborts the commit.\n"));
if (only_include_assumed) if (only_include_assumed)
status_printf_ln(s, GIT_COLOR_NORMAL, status_printf_ln(s, GIT_COLOR_NORMAL,
"%s", only_include_assumed); "%s", only_include_assumed);
@ -776,15 +776,15 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
ci_tmp = cut_ident_timestamp_part(committer_ident.buf); ci_tmp = cut_ident_timestamp_part(committer_ident.buf);
if (strcmp(author_ident->buf, committer_ident.buf)) if (strcmp(author_ident->buf, committer_ident.buf))
status_printf_ln(s, GIT_COLOR_NORMAL, status_printf_ln(s, GIT_COLOR_NORMAL,
"%s" _("%s"
"Author: %s", "Author: %s"),
ident_shown++ ? "" : "\n", ident_shown++ ? "" : "\n",
author_ident->buf); author_ident->buf);
if (!user_ident_sufficiently_given()) if (!user_ident_sufficiently_given())
status_printf_ln(s, GIT_COLOR_NORMAL, status_printf_ln(s, GIT_COLOR_NORMAL,
"%s" _("%s"
"Committer: %s", "Committer: %s"),
ident_shown++ ? "" : "\n", ident_shown++ ? "" : "\n",
committer_ident.buf); committer_ident.buf);
@ -803,7 +803,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
const char *parent = "HEAD"; const char *parent = "HEAD";
if (!active_nr && read_cache() < 0) if (!active_nr && read_cache() < 0)
die("Cannot read index"); die(_("Cannot read index"));
if (amend) if (amend)
parent = "HEAD^1"; parent = "HEAD^1";
@ -826,9 +826,9 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
!(amend && is_a_merge(head_sha1))) { !(amend && is_a_merge(head_sha1))) {
run_status(stdout, index_file, prefix, 0, s); run_status(stdout, index_file, prefix, 0, s);
if (amend) if (amend)
fputs(empty_amend_advice, stderr); fputs(_(empty_amend_advice), stderr);
else if (whence == FROM_CHERRY_PICK) else if (whence == FROM_CHERRY_PICK)
fputs(empty_cherry_pick_advice, stderr); fputs(_(empty_cherry_pick_advice), stderr);
return 0; return 0;
} }
@ -843,7 +843,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
active_cache_tree = cache_tree(); active_cache_tree = cache_tree();
if (cache_tree_update(active_cache_tree, if (cache_tree_update(active_cache_tree,
active_cache, active_nr, 0, 0) < 0) { active_cache, active_nr, 0, 0) < 0) {
error("Error building trees"); error(_("Error building trees"));
return 0; return 0;
} }
@ -858,7 +858,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file); snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
if (launch_editor(git_path(commit_editmsg), NULL, env)) { if (launch_editor(git_path(commit_editmsg), NULL, env)) {
fprintf(stderr, fprintf(stderr,
"Please supply the message using either -m or -F option.\n"); _("Please supply the message using either -m or -F option.\n"));
exit(1); exit(1);
} }
} }
@ -938,7 +938,7 @@ static const char *find_author_by_nickname(const char *name)
format_commit_message(commit, "%an <%ae>", &buf, &ctx); format_commit_message(commit, "%an <%ae>", &buf, &ctx);
return strbuf_detach(&buf, NULL); return strbuf_detach(&buf, NULL);
} }
die("No existing author found with '%s'", name); die(_("No existing author found with '%s'"), name);
} }
@ -953,7 +953,7 @@ static void handle_untracked_files_arg(struct wt_status *s)
else if (!strcmp(untracked_files_arg, "all")) else if (!strcmp(untracked_files_arg, "all"))
s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES; s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
else else
die("Invalid untracked files mode '%s'", untracked_files_arg); die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
} }
static const char *read_commit_message(const char *name) static const char *read_commit_message(const char *name)
@ -963,7 +963,7 @@ static const char *read_commit_message(const char *name)
commit = lookup_commit_reference_by_name(name); commit = lookup_commit_reference_by_name(name);
if (!commit) if (!commit)
die("could not lookup commit %s", name); die(_("could not lookup commit %s"), name);
out_enc = get_commit_output_encoding(); out_enc = get_commit_output_encoding();
out = logmsg_reencode(commit, out_enc); out = logmsg_reencode(commit, out_enc);
@ -992,7 +992,7 @@ static int parse_and_validate_options(int argc, const char *argv[],
force_author = find_author_by_nickname(force_author); force_author = find_author_by_nickname(force_author);
if (force_author && renew_authorship) if (force_author && renew_authorship)
die("Using both --reset-author and --author does not make sense"); die(_("Using both --reset-author and --author does not make sense"));
if (logfile || message.len || use_message || fixup_message) if (logfile || message.len || use_message || fixup_message)
use_editor = 0; use_editor = 0;
@ -1006,11 +1006,11 @@ static int parse_and_validate_options(int argc, const char *argv[],
/* Sanity check options */ /* Sanity check options */
if (amend && initial_commit) if (amend && initial_commit)
die("You have nothing to amend."); die(_("You have nothing to amend."));
if (amend && whence != FROM_COMMIT) if (amend && whence != FROM_COMMIT)
die("You are in the middle of a %s -- cannot amend.", whence_s()); die(_("You are in the middle of a %s -- cannot amend."), whence_s());
if (fixup_message && squash_message) if (fixup_message && squash_message)
die("Options --squash and --fixup cannot be used together"); die(_("Options --squash and --fixup cannot be used together"));
if (use_message) if (use_message)
f++; f++;
if (edit_message) if (edit_message)
@ -1020,15 +1020,15 @@ static int parse_and_validate_options(int argc, const char *argv[],
if (logfile) if (logfile)
f++; f++;
if (f > 1) if (f > 1)
die("Only one of -c/-C/-F/--fixup can be used."); die(_("Only one of -c/-C/-F/--fixup can be used."));
if (message.len && f > 0) if (message.len && f > 0)
die("Option -m cannot be combined with -c/-C/-F/--fixup."); die((_("Option -m cannot be combined with -c/-C/-F/--fixup.")));
if (edit_message) if (edit_message)
use_message = edit_message; use_message = edit_message;
if (amend && !use_message && !fixup_message) if (amend && !use_message && !fixup_message)
use_message = "HEAD"; use_message = "HEAD";
if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship) if (!use_message && whence != FROM_CHERRY_PICK && renew_authorship)
die("--reset-author can be used only with -C, -c or --amend."); die(_("--reset-author can be used only with -C, -c or --amend."));
if (use_message) { if (use_message) {
use_message_buffer = read_commit_message(use_message); use_message_buffer = read_commit_message(use_message);
if (!renew_authorship) { if (!renew_authorship) {
@ -1042,13 +1042,13 @@ static int parse_and_validate_options(int argc, const char *argv[],
} }
if (!!also + !!only + !!all + !!interactive > 1) if (!!also + !!only + !!all + !!interactive > 1)
die("Only one of --include/--only/--all/--interactive can be used."); die(_("Only one of --include/--only/--all/--interactive can be used."));
if (argc == 0 && (also || (only && !amend))) if (argc == 0 && (also || (only && !amend)))
die("No paths with --include/--only does not make sense."); die(_("No paths with --include/--only does not make sense."));
if (argc == 0 && only && amend) if (argc == 0 && only && amend)
only_include_assumed = "Clever... amending the last one with dirty index."; only_include_assumed = _("Clever... amending the last one with dirty index.");
if (argc > 0 && !also && !only) if (argc > 0 && !also && !only)
only_include_assumed = "Explicit paths specified without -i nor -o; assuming --only paths..."; only_include_assumed = _("Explicit paths specified without -i nor -o; assuming --only paths...");
if (!cleanup_arg || !strcmp(cleanup_arg, "default")) if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE; cleanup_mode = use_editor ? CLEANUP_ALL : CLEANUP_SPACE;
else if (!strcmp(cleanup_arg, "verbatim")) else if (!strcmp(cleanup_arg, "verbatim"))
@ -1058,14 +1058,14 @@ static int parse_and_validate_options(int argc, const char *argv[],
else if (!strcmp(cleanup_arg, "strip")) else if (!strcmp(cleanup_arg, "strip"))
cleanup_mode = CLEANUP_ALL; cleanup_mode = CLEANUP_ALL;
else else
die("Invalid cleanup mode %s", cleanup_arg); die(_("Invalid cleanup mode %s"), cleanup_arg);
handle_untracked_files_arg(s); handle_untracked_files_arg(s);
if (all && argc > 0) if (all && argc > 0)
die("Paths with -a does not make sense."); die(_("Paths with -a does not make sense."));
else if (interactive && argc > 0) else if (interactive && argc > 0)
die("Paths with --interactive does not make sense."); die(_("Paths with --interactive does not make sense."));
if (null_termination && status_format == STATUS_FORMAT_LONG) if (null_termination && status_format == STATUS_FORMAT_LONG)
status_format = STATUS_FORMAT_PORCELAIN; status_format = STATUS_FORMAT_PORCELAIN;
@ -1146,7 +1146,7 @@ static int git_status_config(const char *k, const char *v, void *cb)
else if (!strcmp(v, "all")) else if (!strcmp(v, "all"))
s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES; s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
else else
return error("Invalid untracked files mode '%s'", v); return error(_("Invalid untracked files mode '%s'"), v);
return 0; return 0;
} }
return git_diff_ui_config(k, v, NULL); return git_diff_ui_config(k, v, NULL);
@ -1246,9 +1246,9 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
commit = lookup_commit(sha1); commit = lookup_commit(sha1);
if (!commit) if (!commit)
die("couldn't look up newly created commit"); die(_("couldn't look up newly created commit"));
if (!commit || parse_commit(commit)) if (!commit || parse_commit(commit))
die("could not parse newly created commit"); die(_("could not parse newly created commit"));
strbuf_addstr(&format, "format:%h] %s"); strbuf_addstr(&format, "format:%h] %s");
@ -1263,7 +1263,7 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
strbuf_addbuf_percentquote(&format, &committer_ident); strbuf_addbuf_percentquote(&format, &committer_ident);
if (advice_implicit_identity) { if (advice_implicit_identity) {
strbuf_addch(&format, '\n'); strbuf_addch(&format, '\n');
strbuf_addstr(&format, implicit_ident_advice); strbuf_addstr(&format, _(implicit_ident_advice));
} }
} }
strbuf_release(&author_ident); strbuf_release(&author_ident);
@ -1288,9 +1288,9 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
!prefixcmp(head, "refs/heads/") ? !prefixcmp(head, "refs/heads/") ?
head + 11 : head + 11 :
!strcmp(head, "HEAD") ? !strcmp(head, "HEAD") ?
"detached HEAD" : _("detached HEAD") :
head, head,
initial_commit ? " (root-commit)" : ""); initial_commit ? _(" (root-commit)") : "");
if (!log_tree_commit(&rev, commit)) { if (!log_tree_commit(&rev, commit)) {
rev.always_show_header = 1; rev.always_show_header = 1;
@ -1400,7 +1400,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
reflog_msg = "commit (amend)"; reflog_msg = "commit (amend)";
commit = lookup_commit(head_sha1); commit = lookup_commit(head_sha1);
if (!commit || parse_commit(commit)) if (!commit || parse_commit(commit))
die("could not parse HEAD commit"); die(_("could not parse HEAD commit"));
for (c = commit->parents; c; c = c->next) for (c = commit->parents; c; c = c->next)
pptr = &commit_list_insert(c->item, pptr)->next; pptr = &commit_list_insert(c->item, pptr)->next;
@ -1413,19 +1413,19 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
pptr = &commit_list_insert(lookup_commit(head_sha1), pptr)->next; pptr = &commit_list_insert(lookup_commit(head_sha1), pptr)->next;
fp = fopen(git_path("MERGE_HEAD"), "r"); fp = fopen(git_path("MERGE_HEAD"), "r");
if (fp == NULL) if (fp == NULL)
die_errno("could not open '%s' for reading", die_errno(_("could not open '%s' for reading"),
git_path("MERGE_HEAD")); git_path("MERGE_HEAD"));
while (strbuf_getline(&m, fp, '\n') != EOF) { while (strbuf_getline(&m, fp, '\n') != EOF) {
unsigned char sha1[20]; unsigned char sha1[20];
if (get_sha1_hex(m.buf, sha1) < 0) if (get_sha1_hex(m.buf, sha1) < 0)
die("Corrupt MERGE_HEAD file (%s)", m.buf); die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
pptr = &commit_list_insert(lookup_commit(sha1), pptr)->next; pptr = &commit_list_insert(lookup_commit(sha1), pptr)->next;
} }
fclose(fp); fclose(fp);
strbuf_release(&m); strbuf_release(&m);
if (!stat(git_path("MERGE_MODE"), &statbuf)) { if (!stat(git_path("MERGE_MODE"), &statbuf)) {
if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0) if (strbuf_read_file(&sb, git_path("MERGE_MODE"), 0) < 0)
die_errno("could not read MERGE_MODE"); die_errno(_("could not read MERGE_MODE"));
if (!strcmp(sb.buf, "no-ff")) if (!strcmp(sb.buf, "no-ff"))
allow_fast_forward = 0; allow_fast_forward = 0;
} }
@ -1444,7 +1444,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) { if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
int saved_errno = errno; int saved_errno = errno;
rollback_index_files(); rollback_index_files();
die("could not read commit message: %s", strerror(saved_errno)); die(_("could not read commit message: %s"), strerror(saved_errno));
} }
/* Truncate the message just before the diff, if any. */ /* Truncate the message just before the diff, if any. */
@ -1458,14 +1458,14 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
stripspace(&sb, cleanup_mode == CLEANUP_ALL); stripspace(&sb, cleanup_mode == CLEANUP_ALL);
if (message_is_empty(&sb) && !allow_empty_message) { if (message_is_empty(&sb) && !allow_empty_message) {
rollback_index_files(); rollback_index_files();
fprintf(stderr, "Aborting commit due to empty commit message.\n"); fprintf(stderr, _("Aborting commit due to empty commit message.\n"));
exit(1); exit(1);
} }
if (commit_tree(sb.buf, active_cache_tree->sha1, parents, commit_sha1, if (commit_tree(sb.buf, active_cache_tree->sha1, parents, commit_sha1,
author_ident.buf)) { author_ident.buf)) {
rollback_index_files(); rollback_index_files();
die("failed to write commit object"); die(_("failed to write commit object"));
} }
strbuf_release(&author_ident); strbuf_release(&author_ident);
@ -1483,11 +1483,11 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
if (!ref_lock) { if (!ref_lock) {
rollback_index_files(); rollback_index_files();
die("cannot lock HEAD ref"); die(_("cannot lock HEAD ref"));
} }
if (write_ref_sha1(ref_lock, commit_sha1, sb.buf) < 0) { if (write_ref_sha1(ref_lock, commit_sha1, sb.buf) < 0) {
rollback_index_files(); rollback_index_files();
die("cannot update HEAD ref"); die(_("cannot update HEAD ref"));
} }
unlink(git_path("CHERRY_PICK_HEAD")); unlink(git_path("CHERRY_PICK_HEAD"));
@ -1497,9 +1497,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
unlink(git_path("SQUASH_MSG")); unlink(git_path("SQUASH_MSG"));
if (commit_index_files()) if (commit_index_files())
die ("Repository has been updated, but unable to write\n" die (_("Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n" "new_index file. Check that disk is not full or quota is\n"
"not exceeded, and then \"git reset HEAD\" to recover."); "not exceeded, and then \"git reset HEAD\" to recover."));
rerere(0); rerere(0);
run_hook(get_index_file(), "post-commit", NULL); run_hook(get_index_file(), "post-commit", NULL);

View File

@ -231,13 +231,13 @@ static void display_name(struct commit_name *n)
if (n->prio == 2 && !n->tag) { if (n->prio == 2 && !n->tag) {
n->tag = lookup_tag(n->sha1); n->tag = lookup_tag(n->sha1);
if (!n->tag || parse_tag(n->tag)) if (!n->tag || parse_tag(n->tag))
die("annotated tag %s not available", n->path); die(_("annotated tag %s not available"), n->path);
} }
if (n->tag && !n->name_checked) { if (n->tag && !n->name_checked) {
if (!n->tag->tag) if (!n->tag->tag)
die("annotated tag %s has no embedded name", n->path); die(_("annotated tag %s has no embedded name"), n->path);
if (strcmp(n->tag->tag, all ? n->path + 5 : n->path)) if (strcmp(n->tag->tag, all ? n->path + 5 : n->path))
warning("tag '%s' is really '%s' here", n->tag->tag, n->path); warning(_("tag '%s' is really '%s' here"), n->tag->tag, n->path);
n->name_checked = 1; n->name_checked = 1;
} }
@ -264,10 +264,10 @@ static void describe(const char *arg, int last_one)
unsigned int unannotated_cnt = 0; unsigned int unannotated_cnt = 0;
if (get_sha1(arg, sha1)) if (get_sha1(arg, sha1))
die("Not a valid object name %s", arg); die(_("Not a valid object name %s"), arg);
cmit = lookup_commit_reference(sha1); cmit = lookup_commit_reference(sha1);
if (!cmit) if (!cmit)
die("%s is not a valid '%s' object", arg, commit_type); die(_("%s is not a valid '%s' object"), arg, commit_type);
n = find_commit_name(cmit->object.sha1); n = find_commit_name(cmit->object.sha1);
if (n && (tags || all || n->prio == 2)) { if (n && (tags || all || n->prio == 2)) {
@ -284,9 +284,9 @@ static void describe(const char *arg, int last_one)
} }
if (!max_candidates) if (!max_candidates)
die("no tag exactly matches '%s'", sha1_to_hex(cmit->object.sha1)); die(_("no tag exactly matches '%s'"), sha1_to_hex(cmit->object.sha1));
if (debug) if (debug)
fprintf(stderr, "searching to describe %s\n", arg); fprintf(stderr, _("searching to describe %s\n"), arg);
if (!have_util) { if (!have_util) {
for_each_hash(&names, set_util, NULL); for_each_hash(&names, set_util, NULL);
@ -326,7 +326,7 @@ static void describe(const char *arg, int last_one)
} }
if (annotated_cnt && !list) { if (annotated_cnt && !list) {
if (debug) if (debug)
fprintf(stderr, "finished search at %s\n", fprintf(stderr, _("finished search at %s\n"),
sha1_to_hex(c->object.sha1)); sha1_to_hex(c->object.sha1));
break; break;
} }
@ -350,12 +350,12 @@ static void describe(const char *arg, int last_one)
return; return;
} }
if (unannotated_cnt) if (unannotated_cnt)
die("No annotated tags can describe '%s'.\n" die(_("No annotated tags can describe '%s'.\n"
"However, there were unannotated tags: try --tags.", "However, there were unannotated tags: try --tags."),
sha1_to_hex(sha1)); sha1_to_hex(sha1));
else else
die("No tags can describe '%s'.\n" die(_("No tags can describe '%s'.\n"
"Try --always, or create some tags.", "Try --always, or create some tags."),
sha1_to_hex(sha1)); sha1_to_hex(sha1));
} }
@ -375,11 +375,11 @@ static void describe(const char *arg, int last_one)
prio_names[t->name->prio], prio_names[t->name->prio],
t->depth, t->name->path); t->depth, t->name->path);
} }
fprintf(stderr, "traversed %lu commits\n", seen_commits); fprintf(stderr, _("traversed %lu commits\n"), seen_commits);
if (gave_up_on) { if (gave_up_on) {
fprintf(stderr, fprintf(stderr,
"more than %i tags found; listed %i most recent\n" _("more than %i tags found; listed %i most recent\n"
"gave up search at %s\n", "gave up search at %s\n"),
max_candidates, max_candidates, max_candidates, max_candidates,
sha1_to_hex(gave_up_on->object.sha1)); sha1_to_hex(gave_up_on->object.sha1));
} }
@ -433,7 +433,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0; save_commit_buffer = 0;
if (longformat && abbrev == 0) if (longformat && abbrev == 0)
die("--long is incompatible with --abbrev=0"); die(_("--long is incompatible with --abbrev=0"));
if (contains) { if (contains) {
const char **args = xmalloc((7 + argc) * sizeof(char *)); const char **args = xmalloc((7 + argc) * sizeof(char *));
@ -459,14 +459,14 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
init_hash(&names); init_hash(&names);
for_each_rawref(get_name, NULL); for_each_rawref(get_name, NULL);
if (!names.nr && !always) if (!names.nr && !always)
die("No names found, cannot describe anything."); die(_("No names found, cannot describe anything."));
if (argc == 0) { if (argc == 0) {
if (dirty && !cmd_diff_index(ARRAY_SIZE(diff_index_args) - 1, diff_index_args, prefix)) if (dirty && !cmd_diff_index(ARRAY_SIZE(diff_index_args) - 1, diff_index_args, prefix))
dirty = NULL; dirty = NULL;
describe("HEAD", 1); describe("HEAD", 1);
} else if (dirty) { } else if (dirty) {
die("--dirty is incompatible with committishes"); die(_("--dirty is incompatible with committishes"));
} else { } else {
while (argc-- > 0) { while (argc-- > 0) {
describe(*argv++, argc == 0); describe(*argv++, argc == 0);

View File

@ -71,9 +71,9 @@ static int builtin_diff_b_f(struct rev_info *revs,
usage(builtin_diff_usage); usage(builtin_diff_usage);
if (lstat(path, &st)) if (lstat(path, &st))
die_errno("failed to stat '%s'", path); die_errno(_("failed to stat '%s'"), path);
if (!(S_ISREG(st.st_mode) || S_ISLNK(st.st_mode))) if (!(S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)))
die("'%s': not a regular file or symlink", path); die(_("'%s': not a regular file or symlink"), path);
diff_set_mnemonic_prefix(&revs->diffopt, "o/", "w/"); diff_set_mnemonic_prefix(&revs->diffopt, "o/", "w/");
@ -217,7 +217,7 @@ static int builtin_diff_files(struct rev_info *revs, int argc, const char **argv
else if (!strcmp(argv[1], "-h")) else if (!strcmp(argv[1], "-h"))
usage(builtin_diff_usage); usage(builtin_diff_usage);
else else
return error("invalid option: %s", argv[1]); return error(_("invalid option: %s"), argv[1]);
argv++; argc--; argv++; argc--;
} }
@ -294,12 +294,12 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV); DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV);
if (nongit) if (nongit)
die("Not a git repository"); die(_("Not a git repository"));
argc = setup_revisions(argc, argv, &rev, NULL); argc = setup_revisions(argc, argv, &rev, NULL);
if (!rev.diffopt.output_format) { if (!rev.diffopt.output_format) {
rev.diffopt.output_format = DIFF_FORMAT_PATCH; rev.diffopt.output_format = DIFF_FORMAT_PATCH;
if (diff_setup_done(&rev.diffopt) < 0) if (diff_setup_done(&rev.diffopt) < 0)
die("diff_setup_done failed"); die(_("diff_setup_done failed"));
} }
DIFF_OPT_SET(&rev.diffopt, RECURSIVE); DIFF_OPT_SET(&rev.diffopt, RECURSIVE);
@ -344,12 +344,12 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
obj = parse_object(obj->sha1); obj = parse_object(obj->sha1);
obj = deref_tag(obj, NULL, 0); obj = deref_tag(obj, NULL, 0);
if (!obj) if (!obj)
die("invalid object '%s' given.", name); die(_("invalid object '%s' given."), name);
if (obj->type == OBJ_COMMIT) if (obj->type == OBJ_COMMIT)
obj = &((struct commit *)obj)->tree->object; obj = &((struct commit *)obj)->tree->object;
if (obj->type == OBJ_TREE) { if (obj->type == OBJ_TREE) {
if (ARRAY_SIZE(ent) <= ents) if (ARRAY_SIZE(ent) <= ents)
die("more than %d trees given: '%s'", die(_("more than %d trees given: '%s'"),
(int) ARRAY_SIZE(ent), name); (int) ARRAY_SIZE(ent), name);
obj->flags |= flags; obj->flags |= flags;
ent[ents].item = obj; ent[ents].item = obj;
@ -359,7 +359,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
} }
if (obj->type == OBJ_BLOB) { if (obj->type == OBJ_BLOB) {
if (2 <= blobs) if (2 <= blobs)
die("more than two blobs given: '%s'", name); die(_("more than two blobs given: '%s'"), name);
hashcpy(blob[blobs].sha1, obj->sha1); hashcpy(blob[blobs].sha1, obj->sha1);
blob[blobs].name = name; blob[blobs].name = name;
blob[blobs].mode = list->mode; blob[blobs].mode = list->mode;
@ -367,7 +367,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
continue; continue;
} }
die("unhandled object '%s' given.", name); die(_("unhandled object '%s' given."), name);
} }
if (rev.prune_data.nr) { if (rev.prune_data.nr) {
if (!path) if (!path)

View File

@ -184,7 +184,7 @@ static struct ref *get_ref_map(struct transport *transport,
} else { } else {
ref_map = get_remote_ref(remote_refs, "HEAD"); ref_map = get_remote_ref(remote_refs, "HEAD");
if (!ref_map) if (!ref_map)
die("Couldn't find remote ref HEAD"); die(_("Couldn't find remote ref HEAD"));
ref_map->merge = 1; ref_map->merge = 1;
tail = &ref_map->next; tail = &ref_map->next;
} }
@ -237,12 +237,12 @@ static int update_local_ref(struct ref *ref,
*display = 0; *display = 0;
type = sha1_object_info(ref->new_sha1, NULL); type = sha1_object_info(ref->new_sha1, NULL);
if (type < 0) if (type < 0)
die("object %s not found", sha1_to_hex(ref->new_sha1)); die(_("object %s not found"), sha1_to_hex(ref->new_sha1));
if (!hashcmp(ref->old_sha1, ref->new_sha1)) { if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
if (verbosity > 0) if (verbosity > 0)
sprintf(display, "= %-*s %-*s -> %s", TRANSPORT_SUMMARY_WIDTH, sprintf(display, "= %-*s %-*s -> %s", TRANSPORT_SUMMARY_WIDTH,
"[up to date]", REFCOL_WIDTH, remote, _("[up to date]"), REFCOL_WIDTH, remote,
pretty_ref); pretty_ref);
return 0; return 0;
} }
@ -255,8 +255,8 @@ static int update_local_ref(struct ref *ref,
* If this is the head, and it's not okay to update * If this is the head, and it's not okay to update
* the head, and the old value of the head isn't empty... * the head, and the old value of the head isn't empty...
*/ */
sprintf(display, "! %-*s %-*s -> %s (can't fetch in current branch)", sprintf(display, _("! %-*s %-*s -> %s (can't fetch in current branch)"),
TRANSPORT_SUMMARY_WIDTH, "[rejected]", REFCOL_WIDTH, remote, TRANSPORT_SUMMARY_WIDTH, _("[rejected]"), REFCOL_WIDTH, remote,
pretty_ref); pretty_ref);
return 1; return 1;
} }
@ -266,8 +266,8 @@ static int update_local_ref(struct ref *ref,
int r; int r;
r = s_update_ref("updating tag", ref, 0); r = s_update_ref("updating tag", ref, 0);
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '-', sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '-',
TRANSPORT_SUMMARY_WIDTH, "[tag update]", REFCOL_WIDTH, remote, TRANSPORT_SUMMARY_WIDTH, _("[tag update]"), REFCOL_WIDTH, remote,
pretty_ref, r ? " (unable to update local ref)" : ""); pretty_ref, r ? _(" (unable to update local ref)") : "");
return r; return r;
} }
@ -279,17 +279,17 @@ static int update_local_ref(struct ref *ref,
int r; int r;
if (!strncmp(ref->name, "refs/tags/", 10)) { if (!strncmp(ref->name, "refs/tags/", 10)) {
msg = "storing tag"; msg = "storing tag";
what = "[new tag]"; what = _("[new tag]");
} }
else { else {
msg = "storing head"; msg = "storing head";
what = "[new branch]"; what = _("[new branch]");
} }
r = s_update_ref(msg, ref, 0); r = s_update_ref(msg, ref, 0);
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '*', sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '*',
TRANSPORT_SUMMARY_WIDTH, what, REFCOL_WIDTH, remote, pretty_ref, TRANSPORT_SUMMARY_WIDTH, what, REFCOL_WIDTH, remote, pretty_ref,
r ? " (unable to update local ref)" : ""); r ? _(" (unable to update local ref)") : "");
return r; return r;
} }
@ -302,7 +302,7 @@ static int update_local_ref(struct ref *ref,
r = s_update_ref("fast-forward", ref, 1); r = s_update_ref("fast-forward", ref, 1);
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ', sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ',
TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote, TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
pretty_ref, r ? " (unable to update local ref)" : ""); pretty_ref, r ? _(" (unable to update local ref)") : "");
return r; return r;
} else if (force || ref->force) { } else if (force || ref->force) {
char quickref[84]; char quickref[84];
@ -314,12 +314,12 @@ static int update_local_ref(struct ref *ref,
sprintf(display, "%c %-*s %-*s -> %s (%s)", r ? '!' : '+', sprintf(display, "%c %-*s %-*s -> %s (%s)", r ? '!' : '+',
TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote, TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
pretty_ref, pretty_ref,
r ? "unable to update local ref" : "forced update"); r ? _("unable to update local ref") : _("forced update"));
return r; return r;
} else { } else {
sprintf(display, "! %-*s %-*s -> %s (non-fast-forward)", sprintf(display, "! %-*s %-*s -> %s %s",
TRANSPORT_SUMMARY_WIDTH, "[rejected]", REFCOL_WIDTH, remote, TRANSPORT_SUMMARY_WIDTH, _("[rejected]"), REFCOL_WIDTH, remote,
pretty_ref); pretty_ref, _("(non-fast-forward)"));
return 1; return 1;
} }
} }
@ -337,7 +337,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
fp = fopen(filename, "a"); fp = fopen(filename, "a");
if (!fp) if (!fp)
return error("cannot open %s: %s\n", filename, strerror(errno)); return error(_("cannot open %s: %s\n"), filename, strerror(errno));
if (raw_url) if (raw_url)
url = transport_anonymize_url(raw_url); url = transport_anonymize_url(raw_url);
@ -415,7 +415,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
REFCOL_WIDTH, *what ? what : "HEAD"); REFCOL_WIDTH, *what ? what : "HEAD");
if (*note) { if (*note) {
if (verbosity >= 0 && !shown_url) { if (verbosity >= 0 && !shown_url) {
fprintf(stderr, "From %.*s\n", fprintf(stderr, _("From %.*s\n"),
url_len, url); url_len, url);
shown_url = 1; shown_url = 1;
} }
@ -426,9 +426,9 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
free(url); free(url);
fclose(fp); fclose(fp);
if (rc & STORE_REF_ERROR_DF_CONFLICT) if (rc & STORE_REF_ERROR_DF_CONFLICT)
error("some local refs could not be updated; try running\n" error(_("some local refs could not be updated; try running\n"
" 'git remote prune %s' to remove any old, conflicting " " 'git remote prune %s' to remove any old, conflicting "
"branches", remote_name); "branches"), remote_name);
return rc; return rc;
} }
@ -476,7 +476,7 @@ static int quickfetch(struct ref *ref_map)
err = start_command(&revlist); err = start_command(&revlist);
if (err) { if (err) {
error("could not run rev-list"); error(_("could not run rev-list"));
return err; return err;
} }
@ -490,14 +490,14 @@ static int quickfetch(struct ref *ref_map)
if (write_in_full(revlist.in, sha1_to_hex(ref->old_sha1), 40) < 0 || if (write_in_full(revlist.in, sha1_to_hex(ref->old_sha1), 40) < 0 ||
write_str_in_full(revlist.in, "\n") < 0) { write_str_in_full(revlist.in, "\n") < 0) {
if (errno != EPIPE && errno != EINVAL) if (errno != EPIPE && errno != EINVAL)
error("failed write to rev-list: %s", strerror(errno)); error(_("failed write to rev-list: %s"), strerror(errno));
err = -1; err = -1;
break; break;
} }
} }
if (close(revlist.in)) { if (close(revlist.in)) {
error("failed to close rev-list's stdin: %s", strerror(errno)); error(_("failed to close rev-list's stdin: %s"), strerror(errno));
err = -1; err = -1;
} }
@ -524,16 +524,16 @@ static int prune_refs(struct transport *transport, struct ref *ref_map)
int result = 0; int result = 0;
struct ref *ref, *stale_refs = get_stale_heads(transport->remote, ref_map); struct ref *ref, *stale_refs = get_stale_heads(transport->remote, ref_map);
const char *dangling_msg = dry_run const char *dangling_msg = dry_run
? " (%s will become dangling)\n" ? _(" (%s will become dangling)\n")
: " (%s has become dangling)\n"; : _(" (%s has become dangling)\n");
for (ref = stale_refs; ref; ref = ref->next) { for (ref = stale_refs; ref; ref = ref->next) {
if (!dry_run) if (!dry_run)
result |= delete_ref(ref->name, NULL, 0); result |= delete_ref(ref->name, NULL, 0);
if (verbosity >= 0) { if (verbosity >= 0) {
fprintf(stderr, " x %-*s %-*s -> %s\n", fprintf(stderr, " x %-*s %-*s -> %s\n",
TRANSPORT_SUMMARY_WIDTH, "[deleted]", TRANSPORT_SUMMARY_WIDTH, _("[deleted]"),
REFCOL_WIDTH, "(none)", prettify_refname(ref->name)); REFCOL_WIDTH, _("(none)"), prettify_refname(ref->name));
warn_dangling_symref(stderr, dangling_msg, ref->name); warn_dangling_symref(stderr, dangling_msg, ref->name);
} }
} }
@ -650,8 +650,8 @@ static void check_not_current_branch(struct ref *ref_map)
for (; ref_map; ref_map = ref_map->next) for (; ref_map; ref_map = ref_map->next)
if (ref_map->peer_ref && !strcmp(current_branch->refname, if (ref_map->peer_ref && !strcmp(current_branch->refname,
ref_map->peer_ref->name)) ref_map->peer_ref->name))
die("Refusing to fetch into current branch %s " die(_("Refusing to fetch into current branch %s "
"of non-bare repository", current_branch->refname); "of non-bare repository"), current_branch->refname);
} }
static int truncate_fetch_head(void) static int truncate_fetch_head(void)
@ -660,7 +660,7 @@ static int truncate_fetch_head(void)
FILE *fp = fopen(filename, "w"); FILE *fp = fopen(filename, "w");
if (!fp) if (!fp)
return error("cannot open %s: %s\n", filename, strerror(errno)); return error(_("cannot open %s: %s\n"), filename, strerror(errno));
fclose(fp); fclose(fp);
return 0; return 0;
} }
@ -684,7 +684,7 @@ static int do_fetch(struct transport *transport,
} }
if (!transport->get_refs_list || !transport->fetch) if (!transport->get_refs_list || !transport->fetch)
die("Don't know how to fetch from %s", transport->url); die(_("Don't know how to fetch from %s"), transport->url);
/* if not appending, truncate FETCH_HEAD */ /* if not appending, truncate FETCH_HEAD */
if (!append && !dry_run) { if (!append && !dry_run) {
@ -738,10 +738,10 @@ static void set_option(const char *name, const char *value)
{ {
int r = transport_set_option(transport, name, value); int r = transport_set_option(transport, name, value);
if (r < 0) if (r < 0)
die("Option \"%s\" value \"%s\" is not valid for %s", die(_("Option \"%s\" value \"%s\" is not valid for %s"),
name, value, transport->url); name, value, transport->url);
if (r > 0) if (r > 0)
warning("Option \"%s\" is ignored for %s\n", warning(_("Option \"%s\" is ignored for %s\n"),
name, transport->url); name, transport->url);
} }
@ -838,9 +838,9 @@ static int fetch_multiple(struct string_list *list)
argv[argc] = name; argv[argc] = name;
argv[argc + 1] = NULL; argv[argc + 1] = NULL;
if (verbosity >= 0) if (verbosity >= 0)
printf("Fetching %s\n", name); printf(_("Fetching %s\n"), name);
if (run_command_v_opt(argv, RUN_GIT_CMD)) { if (run_command_v_opt(argv, RUN_GIT_CMD)) {
error("Could not fetch %s", name); error(_("Could not fetch %s"), name);
result = 1; result = 1;
} }
} }
@ -856,8 +856,8 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
int exit_code; int exit_code;
if (!remote) if (!remote)
die("No remote repository specified. Please, specify either a URL or a\n" die(_("No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."); "remote name from which new revisions should be fetched."));
transport = transport_get(remote, NULL); transport = transport_get(remote, NULL);
transport_set_verbosity(transport, verbosity, progress); transport_set_verbosity(transport, verbosity, progress);
@ -876,7 +876,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
char *ref; char *ref;
i++; i++;
if (i >= argc) if (i >= argc)
die("You need to specify a tag name."); die(_("You need to specify a tag name."));
ref = xmalloc(strlen(argv[i]) * 2 + 22); ref = xmalloc(strlen(argv[i]) * 2 + 22);
strcpy(ref, "refs/tags/"); strcpy(ref, "refs/tags/");
strcat(ref, argv[i]); strcat(ref, argv[i]);
@ -918,9 +918,9 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
if (all) { if (all) {
if (argc == 1) if (argc == 1)
die("fetch --all does not take a repository argument"); die(_("fetch --all does not take a repository argument"));
else if (argc > 1) else if (argc > 1)
die("fetch --all does not make sense with refspecs"); die(_("fetch --all does not make sense with refspecs"));
(void) for_each_remote(get_one_remote_for_fetch, &list); (void) for_each_remote(get_one_remote_for_fetch, &list);
result = fetch_multiple(&list); result = fetch_multiple(&list);
} else if (argc == 0) { } else if (argc == 0) {
@ -931,7 +931,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
/* All arguments are assumed to be remotes or groups */ /* All arguments are assumed to be remotes or groups */
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
if (!add_remote_or_group(argv[i], &list)) if (!add_remote_or_group(argv[i], &list))
die("No such remote or remote group: %s", argv[i]); die(_("No such remote or remote group: %s"), argv[i]);
result = fetch_multiple(&list); result = fetch_multiple(&list);
} else { } else {
/* Single remote or group */ /* Single remote or group */
@ -939,7 +939,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
if (list.nr > 1) { if (list.nr > 1) {
/* More than one remote */ /* More than one remote */
if (argc > 1) if (argc > 1)
die("Fetching a group and specifying refspecs does not make sense"); die(_("Fetching a group and specifying refspecs does not make sense"));
result = fetch_multiple(&list); result = fetch_multiple(&list);
} else { } else {
/* Zero or one remotes */ /* Zero or one remotes */

View File

@ -60,7 +60,7 @@ static int gc_config(const char *var, const char *value, void *cb)
if (value && strcmp(value, "now")) { if (value && strcmp(value, "now")) {
unsigned long now = approxidate("now"); unsigned long now = approxidate("now");
if (approxidate(value) >= now) if (approxidate(value) >= now)
return error("Invalid %s: '%s'", var, value); return error(_("Invalid %s: '%s'"), var, value);
} }
return git_config_string(&prune_expire, var, value); return git_config_string(&prune_expire, var, value);
} }
@ -75,7 +75,7 @@ static void append_option(const char **cmd, const char *opt, int max_length)
; ;
if (i + 2 >= max_length) if (i + 2 >= max_length)
die("Too many options specified"); die(_("Too many options specified"));
cmd[i++] = opt; cmd[i++] = opt;
cmd[i] = NULL; cmd[i] = NULL;
} }
@ -100,7 +100,7 @@ static int too_many_loose_objects(void)
return 0; return 0;
if (sizeof(path) <= snprintf(path, sizeof(path), "%s/17", objdir)) { if (sizeof(path) <= snprintf(path, sizeof(path), "%s/17", objdir)) {
warning("insanely long object directory %.*s", 50, objdir); warning(_("insanely long object directory %.*s"), 50, objdir);
return 0; return 0;
} }
dir = opendir(path); dir = opendir(path);
@ -219,11 +219,11 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
*/ */
if (!need_to_gc()) if (!need_to_gc())
return 0; return 0;
if (quiet)
fprintf(stderr, _("Auto packing the repository for optimum performance.\n"));
else
fprintf(stderr, fprintf(stderr,
"Auto packing the repository for optimum performance.%s\n", _("Auto packing the repository for optimum performance. You may also\n"
quiet
? ""
: (" You may also\n"
"run \"git gc\" manually. See " "run \"git gc\" manually. See "
"\"git help gc\" for more information.")); "\"git help gc\" for more information."));
} else } else
@ -251,8 +251,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
return error(FAILED_RUN, argv_rerere[0]); return error(FAILED_RUN, argv_rerere[0]);
if (auto_gc && too_many_loose_objects()) if (auto_gc && too_many_loose_objects())
warning("There are too many unreachable loose objects; " warning(_("There are too many unreachable loose objects; "
"run 'git prune' to remove them."); "run 'git prune' to remove them."));
return 0; return 0;
} }

View File

@ -244,7 +244,7 @@ static void start_threads(struct grep_opt *opt)
err = pthread_create(&threads[i], NULL, run, o); err = pthread_create(&threads[i], NULL, run, o);
if (err) if (err)
die("grep: failed to create thread: %s", die(_("grep: failed to create thread: %s"),
strerror(err)); strerror(err));
} }
} }
@ -349,7 +349,7 @@ static void *load_sha1(const unsigned char *sha1, unsigned long *size,
void *data = lock_and_read_sha1_file(sha1, &type, size); void *data = lock_and_read_sha1_file(sha1, &type, size);
if (!data) if (!data)
error("'%s': unable to read %s", name, sha1_to_hex(sha1)); error(_("'%s': unable to read %s"), name, sha1_to_hex(sha1));
return data; return data;
} }
@ -400,7 +400,7 @@ static void *load_file(const char *filename, size_t *sz)
if (lstat(filename, &st) < 0) { if (lstat(filename, &st) < 0) {
err_ret: err_ret:
if (errno != ENOENT) if (errno != ENOENT)
error("'%s': %s", filename, strerror(errno)); error(_("'%s': %s"), filename, strerror(errno));
return 0; return 0;
} }
if (!S_ISREG(st.st_mode)) if (!S_ISREG(st.st_mode))
@ -411,7 +411,7 @@ static void *load_file(const char *filename, size_t *sz)
goto err_ret; goto err_ret;
data = xmalloc(*sz + 1); data = xmalloc(*sz + 1);
if (st.st_size != read_in_full(i, data, *sz)) { if (st.st_size != read_in_full(i, data, *sz)) {
error("'%s': short read %s", filename, strerror(errno)); error(_("'%s': short read %s"), filename, strerror(errno));
close(i); close(i);
free(data); free(data);
return 0; return 0;
@ -473,7 +473,7 @@ static void run_pager(struct grep_opt *opt, const char *prefix)
argv[path_list->nr] = NULL; argv[path_list->nr] = NULL;
if (prefix && chdir(prefix)) if (prefix && chdir(prefix))
die("Failed to chdir: %s", prefix); die(_("Failed to chdir: %s"), prefix);
status = run_command_v_opt(argv, RUN_USING_SHELL); status = run_command_v_opt(argv, RUN_USING_SHELL);
if (status) if (status)
exit(status); exit(status);
@ -548,7 +548,7 @@ static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec,
data = lock_and_read_sha1_file(entry.sha1, &type, &size); data = lock_and_read_sha1_file(entry.sha1, &type, &size);
if (!data) if (!data)
die("unable to read tree (%s)", die(_("unable to read tree (%s)"),
sha1_to_hex(entry.sha1)); sha1_to_hex(entry.sha1));
strbuf_addch(base, '/'); strbuf_addch(base, '/');
@ -579,7 +579,7 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
data = read_object_with_reference(obj->sha1, tree_type, data = read_object_with_reference(obj->sha1, tree_type,
&size, NULL); &size, NULL);
if (!data) if (!data)
die("unable to read tree (%s)", sha1_to_hex(obj->sha1)); die(_("unable to read tree (%s)"), sha1_to_hex(obj->sha1));
len = name ? strlen(name) : 0; len = name ? strlen(name) : 0;
strbuf_init(&base, PATH_MAX + len + 1); strbuf_init(&base, PATH_MAX + len + 1);
@ -593,7 +593,7 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
free(data); free(data);
return hit; return hit;
} }
die("unable to grep from object of type %s", typename(obj->type)); die(_("unable to grep from object of type %s"), typename(obj->type));
} }
static int grep_objects(struct grep_opt *opt, const struct pathspec *pathspec, static int grep_objects(struct grep_opt *opt, const struct pathspec *pathspec,
@ -649,7 +649,7 @@ static int context_callback(const struct option *opt, const char *arg,
} }
value = strtol(arg, (char **)&endp, 10); value = strtol(arg, (char **)&endp, 10);
if (*endp) { if (*endp) {
return error("switch `%c' expects a numerical value", return error(_("switch `%c' expects a numerical value"),
opt->short_name); opt->short_name);
} }
grep_opt->pre_context = grep_opt->post_context = value; grep_opt->pre_context = grep_opt->post_context = value;
@ -666,7 +666,7 @@ static int file_callback(const struct option *opt, const char *arg, int unset)
patterns = from_stdin ? stdin : fopen(arg, "r"); patterns = from_stdin ? stdin : fopen(arg, "r");
if (!patterns) if (!patterns)
die_errno("cannot open '%s'", arg); die_errno(_("cannot open '%s'"), arg);
while (strbuf_getline(&sb, patterns, '\n') == 0) { while (strbuf_getline(&sb, patterns, '\n') == 0) {
char *s; char *s;
size_t len; size_t len;
@ -909,11 +909,11 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
} }
if (!opt.pattern_list) if (!opt.pattern_list)
die("no pattern given."); die(_("no pattern given."));
if (!opt.fixed && opt.ignore_case) if (!opt.fixed && opt.ignore_case)
opt.regflags |= REG_ICASE; opt.regflags |= REG_ICASE;
if ((opt.regflags != REG_NEWLINE) && opt.fixed) if ((opt.regflags != REG_NEWLINE) && opt.fixed)
die("cannot mix --fixed-strings and regexp"); die(_("cannot mix --fixed-strings and regexp"));
#ifndef NO_PTHREADS #ifndef NO_PTHREADS
if (online_cpus() == 1 || !grep_threads_ok(&opt)) if (online_cpus() == 1 || !grep_threads_ok(&opt))
@ -938,7 +938,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
if (!get_sha1(arg, sha1)) { if (!get_sha1(arg, sha1)) {
struct object *object = parse_object(sha1); struct object *object = parse_object(sha1);
if (!object) if (!object)
die("bad object %s", arg); die(_("bad object %s"), arg);
add_object_array(object, arg, &list); add_object_array(object, arg, &list);
continue; continue;
} }
@ -968,7 +968,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
pathspec.recursive = 1; pathspec.recursive = 1;
if (show_in_pager && (cached || list.nr)) if (show_in_pager && (cached || list.nr))
die("--open-files-in-pager only works on the worktree"); die(_("--open-files-in-pager only works on the worktree"));
if (show_in_pager && opt.pattern_list && !opt.pattern_list->next) { if (show_in_pager && opt.pattern_list && !opt.pattern_list->next) {
const char *pager = path_list.items[0].string; const char *pager = path_list.items[0].string;
@ -993,9 +993,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
if (!use_index) { if (!use_index) {
if (cached) if (cached)
die("--cached cannot be used with --no-index."); die(_("--cached cannot be used with --no-index."));
if (list.nr) if (list.nr)
die("--no-index cannot be used with revs."); die(_("--no-index cannot be used with revs."));
hit = grep_directory(&opt, &pathspec); hit = grep_directory(&opt, &pathspec);
} else if (!list.nr) { } else if (!list.nr) {
if (!cached) if (!cached)
@ -1004,7 +1004,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
hit = grep_cache(&opt, &pathspec, cached); hit = grep_cache(&opt, &pathspec, cached);
} else { } else {
if (cached) if (cached)
die("both --cached and trees are given."); die(_("both --cached and trees are given."));
hit = grep_objects(&opt, &pathspec, &list); hit = grep_objects(&opt, &pathspec, &list);
} }

View File

@ -31,7 +31,7 @@ static void safe_create_dir(const char *dir, int share)
} }
} }
else if (share && adjust_shared_perm(dir)) else if (share && adjust_shared_perm(dir))
die("Could not make %s writable by group", dir); die(_("Could not make %s writable by group"), dir);
} }
static void copy_templates_1(char *path, int baselen, static void copy_templates_1(char *path, int baselen,
@ -58,25 +58,25 @@ static void copy_templates_1(char *path, int baselen,
namelen = strlen(de->d_name); namelen = strlen(de->d_name);
if ((PATH_MAX <= baselen + namelen) || if ((PATH_MAX <= baselen + namelen) ||
(PATH_MAX <= template_baselen + namelen)) (PATH_MAX <= template_baselen + namelen))
die("insanely long template name %s", de->d_name); die(_("insanely long template name %s"), de->d_name);
memcpy(path + baselen, de->d_name, namelen+1); memcpy(path + baselen, de->d_name, namelen+1);
memcpy(template + template_baselen, de->d_name, namelen+1); memcpy(template + template_baselen, de->d_name, namelen+1);
if (lstat(path, &st_git)) { if (lstat(path, &st_git)) {
if (errno != ENOENT) if (errno != ENOENT)
die_errno("cannot stat '%s'", path); die_errno(_("cannot stat '%s'"), path);
} }
else else
exists = 1; exists = 1;
if (lstat(template, &st_template)) if (lstat(template, &st_template))
die_errno("cannot stat template '%s'", template); die_errno(_("cannot stat template '%s'"), template);
if (S_ISDIR(st_template.st_mode)) { if (S_ISDIR(st_template.st_mode)) {
DIR *subdir = opendir(template); DIR *subdir = opendir(template);
int baselen_sub = baselen + namelen; int baselen_sub = baselen + namelen;
int template_baselen_sub = template_baselen + namelen; int template_baselen_sub = template_baselen + namelen;
if (!subdir) if (!subdir)
die_errno("cannot opendir '%s'", template); die_errno(_("cannot opendir '%s'"), template);
path[baselen_sub++] = path[baselen_sub++] =
template[template_baselen_sub++] = '/'; template[template_baselen_sub++] = '/';
path[baselen_sub] = path[baselen_sub] =
@ -93,20 +93,20 @@ static void copy_templates_1(char *path, int baselen,
int len; int len;
len = readlink(template, lnk, sizeof(lnk)); len = readlink(template, lnk, sizeof(lnk));
if (len < 0) if (len < 0)
die_errno("cannot readlink '%s'", template); die_errno(_("cannot readlink '%s'"), template);
if (sizeof(lnk) <= len) if (sizeof(lnk) <= len)
die("insanely long symlink %s", template); die(_("insanely long symlink %s"), template);
lnk[len] = 0; lnk[len] = 0;
if (symlink(lnk, path)) if (symlink(lnk, path))
die_errno("cannot symlink '%s' '%s'", lnk, path); die_errno(_("cannot symlink '%s' '%s'"), lnk, path);
} }
else if (S_ISREG(st_template.st_mode)) { else if (S_ISREG(st_template.st_mode)) {
if (copy_file(path, template, st_template.st_mode)) if (copy_file(path, template, st_template.st_mode))
die_errno("cannot copy '%s' to '%s'", template, die_errno(_("cannot copy '%s' to '%s'"), template,
path); path);
} }
else else
error("ignoring template %s", template); error(_("ignoring template %s"), template);
} }
} }
@ -129,7 +129,7 @@ static void copy_templates(const char *template_dir)
return; return;
template_len = strlen(template_dir); template_len = strlen(template_dir);
if (PATH_MAX <= (template_len+strlen("/config"))) if (PATH_MAX <= (template_len+strlen("/config")))
die("insanely long template path %s", template_dir); die(_("insanely long template path %s"), template_dir);
strcpy(template_path, template_dir); strcpy(template_path, template_dir);
if (template_path[template_len-1] != '/') { if (template_path[template_len-1] != '/') {
template_path[template_len++] = '/'; template_path[template_len++] = '/';
@ -137,7 +137,7 @@ static void copy_templates(const char *template_dir)
} }
dir = opendir(template_path); dir = opendir(template_path);
if (!dir) { if (!dir) {
warning("templates not found %s", template_dir); warning(_("templates not found %s"), template_dir);
return; return;
} }
@ -150,8 +150,8 @@ static void copy_templates(const char *template_dir)
if (repository_format_version && if (repository_format_version &&
repository_format_version != GIT_REPO_VERSION) { repository_format_version != GIT_REPO_VERSION) {
warning("not copying templates of " warning(_("not copying templates of "
"a wrong format version %d from '%s'", "a wrong format version %d from '%s'"),
repository_format_version, repository_format_version,
template_dir); template_dir);
closedir(dir); closedir(dir);
@ -188,7 +188,7 @@ static int create_default_files(const char *template_path)
int filemode; int filemode;
if (len > sizeof(path)-50) if (len > sizeof(path)-50)
die("insane git directory %s", git_dir); die(_("insane git directory %s"), git_dir);
memcpy(path, git_dir, len); memcpy(path, git_dir, len);
if (len && path[len-1] != '/') if (len && path[len-1] != '/')
@ -354,9 +354,15 @@ int init_db(const char *template_dir, unsigned int flags)
if (!(flags & INIT_DB_QUIET)) { if (!(flags & INIT_DB_QUIET)) {
const char *git_dir = get_git_dir(); const char *git_dir = get_git_dir();
int len = strlen(git_dir); int len = strlen(git_dir);
printf("%s%s Git repository in %s%s\n",
reinit ? "Reinitialized existing" : "Initialized empty", /*
shared_repository ? " shared" : "", * 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"),
shared_repository ? _(" shared") : "",
git_dir, len && git_dir[len-1] != '/' ? "/" : ""); git_dir, len && git_dir[len-1] != '/' ? "/" : "");
} }
@ -375,7 +381,7 @@ static int guess_repository_type(const char *git_dir)
if (!strcmp(".", git_dir)) if (!strcmp(".", git_dir))
return 1; return 1;
if (!getcwd(cwd, sizeof(cwd))) if (!getcwd(cwd, sizeof(cwd)))
die_errno("cannot tell cwd"); die_errno(_("cannot tell cwd"));
if (!strcmp(git_dir, cwd)) if (!strcmp(git_dir, cwd))
return 1; return 1;
/* /*
@ -450,18 +456,18 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
errno = EEXIST; errno = EEXIST;
/* fallthru */ /* fallthru */
case -1: case -1:
die_errno("cannot mkdir %s", argv[0]); die_errno(_("cannot mkdir %s"), argv[0]);
break; break;
default: default:
break; break;
} }
shared_repository = saved; shared_repository = saved;
if (mkdir(argv[0], 0777) < 0) if (mkdir(argv[0], 0777) < 0)
die_errno("cannot mkdir %s", argv[0]); die_errno(_("cannot mkdir %s"), argv[0]);
mkdir_tried = 1; mkdir_tried = 1;
goto retry; goto retry;
} }
die_errno("cannot chdir to %s", argv[0]); die_errno(_("cannot chdir to %s"), argv[0]);
} }
} else if (0 < argc) { } else if (0 < argc) {
usage(init_db_usage[0]); usage(init_db_usage[0]);
@ -483,8 +489,8 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
git_dir = getenv(GIT_DIR_ENVIRONMENT); git_dir = getenv(GIT_DIR_ENVIRONMENT);
work_tree = getenv(GIT_WORK_TREE_ENVIRONMENT); work_tree = getenv(GIT_WORK_TREE_ENVIRONMENT);
if ((!git_dir || is_bare_repository_cfg == 1) && work_tree) if ((!git_dir || is_bare_repository_cfg == 1) && work_tree)
die("%s (or --work-tree=<directory>) not allowed without " die(_("%s (or --work-tree=<directory>) not allowed without "
"specifying %s (or --git-dir=<directory>)", "specifying %s (or --git-dir=<directory>)"),
GIT_WORK_TREE_ENVIRONMENT, GIT_WORK_TREE_ENVIRONMENT,
GIT_DIR_ENVIRONMENT); GIT_DIR_ENVIRONMENT);
@ -507,14 +513,14 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
if (!git_work_tree_cfg) { if (!git_work_tree_cfg) {
git_work_tree_cfg = xcalloc(PATH_MAX, 1); git_work_tree_cfg = xcalloc(PATH_MAX, 1);
if (!getcwd(git_work_tree_cfg, PATH_MAX)) if (!getcwd(git_work_tree_cfg, PATH_MAX))
die_errno ("Cannot access current working directory"); die_errno (_("Cannot access current working directory"));
} }
if (work_tree) if (work_tree)
set_git_work_tree(real_path(work_tree)); set_git_work_tree(real_path(work_tree));
else else
set_git_work_tree(git_work_tree_cfg); set_git_work_tree(git_work_tree_cfg);
if (access(get_git_work_tree(), X_OK)) if (access(get_git_work_tree(), X_OK))
die_errno ("Cannot access work tree '%s'", die_errno (_("Cannot access work tree '%s'"),
get_git_work_tree()); get_git_work_tree());
} }
else { else {

View File

@ -101,7 +101,7 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
const char *v = skip_prefix(arg, "--decorate="); const char *v = skip_prefix(arg, "--decorate=");
decoration_style = parse_decoration_style(arg, v); decoration_style = parse_decoration_style(arg, v);
if (decoration_style < 0) if (decoration_style < 0)
die("invalid --decorate option: %s", arg); die(_("invalid --decorate option: %s"), arg);
decoration_given = 1; decoration_given = 1;
} else if (!strcmp(arg, "--no-decorate")) { } else if (!strcmp(arg, "--no-decorate")) {
decoration_style = 0; decoration_style = 0;
@ -110,7 +110,7 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
} else if (!strcmp(arg, "-h")) { } else if (!strcmp(arg, "-h")) {
usage(builtin_log_usage); usage(builtin_log_usage);
} else } else
die("unrecognized argument: %s", arg); die(_("unrecognized argument: %s"), arg);
} }
/* /*
@ -153,7 +153,7 @@ static void show_early_header(struct rev_info *rev, const char *stage, int nr)
if (rev->commit_format != CMIT_FMT_ONELINE) if (rev->commit_format != CMIT_FMT_ONELINE)
putchar(rev->diffopt.line_termination); putchar(rev->diffopt.line_termination);
} }
printf("Final output: %d %s\n", nr, stage); printf(_("Final output: %d %s\n"), nr, stage);
} }
static struct itimerval early_output_timer; static struct itimerval early_output_timer;
@ -252,7 +252,7 @@ static int cmd_log_walk(struct rev_info *rev)
setup_early_output(rev); setup_early_output(rev);
if (prepare_revision_walk(rev)) if (prepare_revision_walk(rev))
die("revision walk setup failed"); die(_("revision walk setup failed"));
if (rev->early_output) if (rev->early_output)
finish_early_output(rev); finish_early_output(rev);
@ -349,7 +349,7 @@ static int show_object(const unsigned char *sha1, int show_tag_object,
int offset = 0; int offset = 0;
if (!buf) if (!buf)
return error("Could not read object %s", sha1_to_hex(sha1)); return error(_("Could not read object %s"), sha1_to_hex(sha1));
if (show_tag_object) if (show_tag_object)
while (offset < size && buf[offset] != '\n') { while (offset < size && buf[offset] != '\n') {
@ -436,7 +436,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
break; break;
o = parse_object(t->tagged->sha1); o = parse_object(t->tagged->sha1);
if (!o) if (!o)
ret = error("Could not read object %s", ret = error(_("Could not read object %s"),
sha1_to_hex(t->tagged->sha1)); sha1_to_hex(t->tagged->sha1));
objects[i].item = o; objects[i].item = o;
i--; i--;
@ -460,7 +460,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
ret = cmd_log_walk(&rev); ret = cmd_log_walk(&rev);
break; break;
default: default:
ret = error("Unknown type: %d", o->type); ret = error(_("Unknown type: %d"), o->type);
} }
} }
free(objects); free(objects);
@ -560,7 +560,7 @@ static int git_format_config(const char *var, const char *value, void *cb)
{ {
if (!strcmp(var, "format.headers")) { if (!strcmp(var, "format.headers")) {
if (!value) if (!value)
die("format.headers without value"); die(_("format.headers without value"));
add_header(value); add_header(value);
return 0; return 0;
} }
@ -632,7 +632,7 @@ static int reopen_stdout(struct commit *commit, struct rev_info *rev)
strbuf_addstr(&filename, output_directory); strbuf_addstr(&filename, output_directory);
if (filename.len >= if (filename.len >=
PATH_MAX - FORMAT_PATCH_NAME_MAX - suffix_len) PATH_MAX - FORMAT_PATCH_NAME_MAX - suffix_len)
return error("name of output directory is too long"); return error(_("name of output directory is too long"));
if (filename.buf[filename.len - 1] != '/') if (filename.buf[filename.len - 1] != '/')
strbuf_addch(&filename, '/'); strbuf_addch(&filename, '/');
} }
@ -643,7 +643,7 @@ static int reopen_stdout(struct commit *commit, struct rev_info *rev)
fprintf(realstdout, "%s\n", filename.buf + outdir_offset); fprintf(realstdout, "%s\n", filename.buf + outdir_offset);
if (freopen(filename.buf, "w", stdout) == NULL) if (freopen(filename.buf, "w", stdout) == NULL)
return error("Cannot open patch file %s", filename.buf); return error(_("Cannot open patch file %s"), filename.buf);
strbuf_release(&filename); strbuf_release(&filename);
return 0; return 0;
@ -657,7 +657,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids, const cha
unsigned flags1, flags2; unsigned flags1, flags2;
if (rev->pending.nr != 2) if (rev->pending.nr != 2)
die("Need exactly one range."); die(_("Need exactly one range."));
o1 = rev->pending.objects[0].item; o1 = rev->pending.objects[0].item;
flags1 = o1->flags; flags1 = o1->flags;
@ -665,7 +665,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids, const cha
flags2 = o2->flags; flags2 = o2->flags;
if ((flags1 & UNINTERESTING) == (flags2 & UNINTERESTING)) if ((flags1 & UNINTERESTING) == (flags2 & UNINTERESTING))
die("Not a range."); die(_("Not a range."));
init_patch_ids(ids); init_patch_ids(ids);
@ -676,7 +676,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids, const cha
add_pending_object(&check_rev, o1, "o1"); add_pending_object(&check_rev, o1, "o1");
add_pending_object(&check_rev, o2, "o2"); add_pending_object(&check_rev, o2, "o2");
if (prepare_revision_walk(&check_rev)) if (prepare_revision_walk(&check_rev))
die("revision walk setup failed"); die(_("revision walk setup failed"));
while ((commit = get_revision(&check_rev)) != NULL) { while ((commit = get_revision(&check_rev)) != NULL) {
/* ignore merges */ /* ignore merges */
@ -702,7 +702,7 @@ static void gen_message_id(struct rev_info *info, char *base)
const char *email_end = strrchr(committer, '>'); const char *email_end = strrchr(committer, '>');
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
if (!email_start || !email_end || email_start > email_end - 1) if (!email_start || !email_end || email_start > email_end - 1)
die("Could not extract email from committer identity."); die(_("Could not extract email from committer identity."));
strbuf_addf(&buf, "%s.%lu.git.%.*s", base, strbuf_addf(&buf, "%s.%lu.git.%.*s", base,
(unsigned long) time(NULL), (unsigned long) time(NULL),
(int)(email_end - email_start - 1), email_start + 1); (int)(email_end - email_start - 1), email_start + 1);
@ -734,7 +734,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
struct commit *commit = NULL; struct commit *commit = NULL;
if (rev->commit_format != CMIT_FMT_EMAIL) if (rev->commit_format != CMIT_FMT_EMAIL)
die("Cover letter needs email format"); die(_("Cover letter needs email format"));
committer = git_committer_info(0); committer = git_committer_info(0);
@ -827,7 +827,7 @@ static const char *clean_message_id(const char *msg_id)
m++; m++;
} }
if (!z) if (!z)
die("insane in-reply-to: %s", msg_id); die(_("insane in-reply-to: %s"), msg_id);
if (++z == m) if (++z == m)
return a; return a;
return xmemdupz(a, z - a); return xmemdupz(a, z - a);
@ -900,7 +900,7 @@ static int output_directory_callback(const struct option *opt, const char *arg,
{ {
const char **dir = (const char **)opt->value; const char **dir = (const char **)opt->value;
if (*dir) if (*dir)
die("Two output directories?"); die(_("Two output directories?"));
*dir = arg; *dir = arg;
return 0; return 0;
} }
@ -1088,7 +1088,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
committer = git_committer_info(IDENT_ERROR_ON_NO_NAME); committer = git_committer_info(IDENT_ERROR_ON_NO_NAME);
endpos = strchr(committer, '>'); endpos = strchr(committer, '>');
if (!endpos) if (!endpos)
die("bogus committer info %s", committer); die(_("bogus committer info %s"), committer);
add_signoff = xmemdupz(committer, endpos - committer + 1); add_signoff = xmemdupz(committer, endpos - committer + 1);
} }
@ -1133,20 +1133,20 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
numbered = 0; numbered = 0;
if (numbered && keep_subject) if (numbered && keep_subject)
die ("-n and -k are mutually exclusive."); die (_("-n and -k are mutually exclusive."));
if (keep_subject && subject_prefix) if (keep_subject && subject_prefix)
die ("--subject-prefix and -k are mutually exclusive."); die (_("--subject-prefix and -k are mutually exclusive."));
argc = setup_revisions(argc, argv, &rev, &s_r_opt); argc = setup_revisions(argc, argv, &rev, &s_r_opt);
if (argc > 1) if (argc > 1)
die ("unrecognized argument: %s", argv[1]); die (_("unrecognized argument: %s"), argv[1]);
if (rev.diffopt.output_format & DIFF_FORMAT_NAME) if (rev.diffopt.output_format & DIFF_FORMAT_NAME)
die("--name-only does not make sense"); die(_("--name-only does not make sense"));
if (rev.diffopt.output_format & DIFF_FORMAT_NAME_STATUS) if (rev.diffopt.output_format & DIFF_FORMAT_NAME_STATUS)
die("--name-status does not make sense"); die(_("--name-status does not make sense"));
if (rev.diffopt.output_format & DIFF_FORMAT_CHECKDIFF) if (rev.diffopt.output_format & DIFF_FORMAT_CHECKDIFF)
die("--check does not make sense"); die(_("--check does not make sense"));
if (!use_patch_format && if (!use_patch_format &&
(!rev.diffopt.output_format || (!rev.diffopt.output_format ||
@ -1169,9 +1169,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
if (output_directory) { if (output_directory) {
if (use_stdout) if (use_stdout)
die("standard output, or directory, which one?"); die(_("standard output, or directory, which one?"));
if (mkdir(output_directory, 0777) < 0 && errno != EEXIST) if (mkdir(output_directory, 0777) < 0 && errno != EEXIST)
die_errno("Could not create directory '%s'", die_errno(_("Could not create directory '%s'"),
output_directory); output_directory);
} }
@ -1225,7 +1225,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
realstdout = xfdopen(xdup(1), "w"); realstdout = xfdopen(xdup(1), "w");
if (prepare_revision_walk(&rev)) if (prepare_revision_walk(&rev))
die("revision walk setup failed"); die(_("revision walk setup failed"));
rev.boundary = 1; rev.boundary = 1;
while ((commit = get_revision(&rev)) != NULL) { while ((commit = get_revision(&rev)) != NULL) {
if (commit->object.flags & BOUNDARY) { if (commit->object.flags & BOUNDARY) {
@ -1306,7 +1306,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
if (!use_stdout && reopen_stdout(numbered_files ? NULL : commit, if (!use_stdout && reopen_stdout(numbered_files ? NULL : commit,
&rev)) &rev))
die("Failed to create output files"); die(_("Failed to create output files"));
shown = log_tree_commit(&rev, commit); shown = log_tree_commit(&rev, commit);
free(commit->buffer); free(commit->buffer);
commit->buffer = NULL; commit->buffer = NULL;
@ -1410,9 +1410,9 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
if (!current_branch || !current_branch->merge if (!current_branch || !current_branch->merge
|| !current_branch->merge[0] || !current_branch->merge[0]
|| !current_branch->merge[0]->dst) { || !current_branch->merge[0]->dst) {
fprintf(stderr, "Could not find a tracked" fprintf(stderr, _("Could not find a tracked"
" remote branch, please" " remote branch, please"
" specify <upstream> manually.\n"); " specify <upstream> manually.\n"));
usage_with_options(cherry_usage, options); usage_with_options(cherry_usage, options);
} }
@ -1426,9 +1426,9 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
DIFF_OPT_SET(&revs.diffopt, RECURSIVE); DIFF_OPT_SET(&revs.diffopt, RECURSIVE);
if (add_pending_commit(head, &revs, 0)) if (add_pending_commit(head, &revs, 0))
die("Unknown commit %s", head); die(_("Unknown commit %s"), head);
if (add_pending_commit(upstream, &revs, UNINTERESTING)) if (add_pending_commit(upstream, &revs, UNINTERESTING))
die("Unknown commit %s", upstream); die(_("Unknown commit %s"), upstream);
/* Don't say anything if head and upstream are the same. */ /* Don't say anything if head and upstream are the same. */
if (revs.pending.nr == 2) { if (revs.pending.nr == 2) {
@ -1440,11 +1440,11 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
get_patch_ids(&revs, &ids, prefix); get_patch_ids(&revs, &ids, prefix);
if (limit && add_pending_commit(limit, &revs, UNINTERESTING)) if (limit && add_pending_commit(limit, &revs, UNINTERESTING))
die("Unknown commit %s", limit); die(_("Unknown commit %s"), limit);
/* reverse the list of commits */ /* reverse the list of commits */
if (prepare_revision_walk(&revs)) if (prepare_revision_walk(&revs))
die("revision walk setup failed"); die(_("revision walk setup failed"));
while ((commit = get_revision(&revs)) != NULL) { while ((commit = get_revision(&revs)) != NULL) {
/* ignore merges */ /* ignore merges */
if (commit->parents && commit->parents->next) if (commit->parents && commit->parents->next)

View File

@ -81,7 +81,7 @@ static int option_parse_message(const struct option *opt,
strbuf_addf(buf, "%s%s", buf->len ? "\n\n" : "", arg); strbuf_addf(buf, "%s%s", buf->len ? "\n\n" : "", arg);
have_message = 1; have_message = 1;
} else } else
return error("switch `m' requires a value"); return error(_("switch `m' requires a value"));
return 0; return 0;
} }
@ -118,13 +118,13 @@ static struct strategy *get_strategy(const char *name)
exclude_cmds(&main_cmds, &not_strategies); exclude_cmds(&main_cmds, &not_strategies);
} }
if (!is_in_cmdlist(&main_cmds, name) && !is_in_cmdlist(&other_cmds, name)) { if (!is_in_cmdlist(&main_cmds, name) && !is_in_cmdlist(&other_cmds, name)) {
fprintf(stderr, "Could not find merge strategy '%s'.\n", name); fprintf(stderr, _("Could not find merge strategy '%s'.\n"), name);
fprintf(stderr, "Available strategies are:"); fprintf(stderr, _("Available strategies are:"));
for (i = 0; i < main_cmds.cnt; i++) for (i = 0; i < main_cmds.cnt; i++)
fprintf(stderr, " %s", main_cmds.names[i]->name); fprintf(stderr, " %s", main_cmds.names[i]->name);
fprintf(stderr, ".\n"); fprintf(stderr, ".\n");
if (other_cmds.cnt) { if (other_cmds.cnt) {
fprintf(stderr, "Available custom strategies are:"); fprintf(stderr, _("Available custom strategies are:"));
for (i = 0; i < other_cmds.cnt; i++) for (i = 0; i < other_cmds.cnt; i++)
fprintf(stderr, " %s", other_cmds.names[i]->name); fprintf(stderr, " %s", other_cmds.names[i]->name);
fprintf(stderr, ".\n"); fprintf(stderr, ".\n");
@ -226,17 +226,17 @@ static void save_state(void)
cp.git_cmd = 1; cp.git_cmd = 1;
if (start_command(&cp)) if (start_command(&cp))
die("could not run stash."); die(_("could not run stash."));
len = strbuf_read(&buffer, cp.out, 1024); len = strbuf_read(&buffer, cp.out, 1024);
close(cp.out); close(cp.out);
if (finish_command(&cp) || len < 0) if (finish_command(&cp) || len < 0)
die("stash failed"); die(_("stash failed"));
else if (!len) else if (!len)
return; return;
strbuf_setlen(&buffer, buffer.len-1); strbuf_setlen(&buffer, buffer.len-1);
if (get_sha1(buffer.buf, stash)) if (get_sha1(buffer.buf, stash))
die("not a valid object: %s", buffer.buf); die(_("not a valid object: %s"), buffer.buf);
} }
static void read_empty(unsigned const char *sha1, int verbose) static void read_empty(unsigned const char *sha1, int verbose)
@ -254,7 +254,7 @@ static void read_empty(unsigned const char *sha1, int verbose)
args[i] = NULL; args[i] = NULL;
if (run_command_v_opt(args, RUN_GIT_CMD)) if (run_command_v_opt(args, RUN_GIT_CMD))
die("read-tree failed"); die(_("read-tree failed"));
} }
static void reset_hard(unsigned const char *sha1, int verbose) static void reset_hard(unsigned const char *sha1, int verbose)
@ -271,7 +271,7 @@ static void reset_hard(unsigned const char *sha1, int verbose)
args[i] = NULL; args[i] = NULL;
if (run_command_v_opt(args, RUN_GIT_CMD)) if (run_command_v_opt(args, RUN_GIT_CMD))
die("read-tree failed"); die(_("read-tree failed"));
} }
static void restore_state(void) static void restore_state(void)
@ -300,7 +300,7 @@ static void restore_state(void)
static void finish_up_to_date(const char *msg) static void finish_up_to_date(const char *msg)
{ {
if (verbosity >= 0) if (verbosity >= 0)
printf("%s%s\n", squash ? " (nothing to squash)" : "", msg); printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg);
drop_save(); drop_save();
} }
@ -313,10 +313,10 @@ static void squash_message(void)
int fd; int fd;
struct pretty_print_context ctx = {0}; struct pretty_print_context ctx = {0};
printf("Squash commit -- not updating HEAD\n"); printf(_("Squash commit -- not updating HEAD\n"));
fd = open(git_path("SQUASH_MSG"), O_WRONLY | O_CREAT, 0666); fd = open(git_path("SQUASH_MSG"), O_WRONLY | O_CREAT, 0666);
if (fd < 0) if (fd < 0)
die_errno("Could not write to '%s'", git_path("SQUASH_MSG")); die_errno(_("Could not write to '%s'"), git_path("SQUASH_MSG"));
init_revisions(&rev, NULL); init_revisions(&rev, NULL);
rev.ignore_merges = 1; rev.ignore_merges = 1;
@ -331,7 +331,7 @@ static void squash_message(void)
setup_revisions(0, NULL, &rev, NULL); setup_revisions(0, NULL, &rev, NULL);
if (prepare_revision_walk(&rev)) if (prepare_revision_walk(&rev))
die("revision walk setup failed"); die(_("revision walk setup failed"));
ctx.abbrev = rev.abbrev; ctx.abbrev = rev.abbrev;
ctx.date_mode = rev.date_mode; ctx.date_mode = rev.date_mode;
@ -344,9 +344,9 @@ static void squash_message(void)
pretty_print_commit(rev.commit_format, commit, &out, &ctx); pretty_print_commit(rev.commit_format, commit, &out, &ctx);
} }
if (write(fd, out.buf, out.len) < 0) if (write(fd, out.buf, out.len) < 0)
die_errno("Writing SQUASH_MSG"); die_errno(_("Writing SQUASH_MSG"));
if (close(fd)) if (close(fd))
die_errno("Finishing SQUASH_MSG"); die_errno(_("Finishing SQUASH_MSG"));
strbuf_release(&out); strbuf_release(&out);
} }
@ -366,7 +366,7 @@ static void finish(const unsigned char *new_head, const char *msg)
squash_message(); squash_message();
} else { } else {
if (verbosity >= 0 && !merge_msg.len) if (verbosity >= 0 && !merge_msg.len)
printf("No merge message -- not updating HEAD\n"); printf(_("No merge message -- not updating HEAD\n"));
else { else {
const char *argv_gc_auto[] = { "gc", "--auto", NULL }; const char *argv_gc_auto[] = { "gc", "--auto", NULL };
update_ref(reflog_message.buf, "HEAD", update_ref(reflog_message.buf, "HEAD",
@ -388,7 +388,7 @@ static void finish(const unsigned char *new_head, const char *msg)
if (diff_use_color_default > 0) if (diff_use_color_default > 0)
DIFF_OPT_SET(&opts, COLOR_DIFF); DIFF_OPT_SET(&opts, COLOR_DIFF);
if (diff_setup_done(&opts) < 0) if (diff_setup_done(&opts) < 0)
die("diff_setup_done failed"); die(_("diff_setup_done failed"));
diff_tree_sha1(head, new_head, "", &opts); diff_tree_sha1(head, new_head, "", &opts);
diffcore_std(&opts); diffcore_std(&opts);
diff_flush(&opts); diff_flush(&opts);
@ -417,7 +417,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
memset(branch_head, 0, sizeof(branch_head)); memset(branch_head, 0, sizeof(branch_head));
remote_head = peel_to_type(remote, 0, NULL, OBJ_COMMIT); remote_head = peel_to_type(remote, 0, NULL, OBJ_COMMIT);
if (!remote_head) if (!remote_head)
die("'%s' does not point to a commit", remote); die(_("'%s' does not point to a commit"), remote);
if (dwim_ref(remote, strlen(remote), branch_head, &found_ref) > 0) { if (dwim_ref(remote, strlen(remote), branch_head, &found_ref) > 0) {
if (!prefixcmp(found_ref, "refs/heads/")) { if (!prefixcmp(found_ref, "refs/heads/")) {
@ -482,7 +482,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
fp = fopen(git_path("FETCH_HEAD"), "r"); fp = fopen(git_path("FETCH_HEAD"), "r");
if (!fp) if (!fp)
die_errno("could not open '%s' for reading", die_errno(_("could not open '%s' for reading"),
git_path("FETCH_HEAD")); git_path("FETCH_HEAD"));
strbuf_getline(&line, fp, '\n'); strbuf_getline(&line, fp, '\n');
fclose(fp); fclose(fp);
@ -512,7 +512,7 @@ static int git_merge_config(const char *k, const char *v, void *cb)
buf = xstrdup(v); buf = xstrdup(v);
argc = split_cmdline(buf, &argv); argc = split_cmdline(buf, &argv);
if (argc < 0) if (argc < 0)
die("Bad branch.%s.mergeoptions string: %s", branch, die(_("Bad branch.%s.mergeoptions string: %s"), branch,
split_cmdline_strerror(argc)); split_cmdline_strerror(argc));
argv = xrealloc(argv, sizeof(*argv) * (argc + 2)); argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1)); memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
@ -534,7 +534,7 @@ static int git_merge_config(const char *k, const char *v, void *cb)
int is_bool; int is_bool;
shortlog_len = git_config_bool_or_int(k, v, &is_bool); shortlog_len = git_config_bool_or_int(k, v, &is_bool);
if (!is_bool && shortlog_len < 0) if (!is_bool && shortlog_len < 0)
return error("%s: negative length %s", k, v); return error(_("%s: negative length %s"), k, v);
if (is_bool && shortlog_len) if (is_bool && shortlog_len)
shortlog_len = DEFAULT_MERGE_LOG_LEN; shortlog_len = DEFAULT_MERGE_LOG_LEN;
return 0; return 0;
@ -581,7 +581,7 @@ static int read_tree_trivial(unsigned char *common, unsigned char *head,
static void write_tree_trivial(unsigned char *sha1) static void write_tree_trivial(unsigned char *sha1)
{ {
if (write_cache_as_tree(sha1, 0, NULL)) if (write_cache_as_tree(sha1, 0, NULL))
die("git write-tree failed to write a tree"); die(_("git write-tree failed to write a tree"));
} }
int try_merge_command(const char *strategy, size_t xopts_nr, int try_merge_command(const char *strategy, size_t xopts_nr,
@ -623,7 +623,7 @@ int try_merge_command(const char *strategy, size_t xopts_nr,
free(args); free(args);
discard_cache(); discard_cache();
if (read_cache() < 0) if (read_cache() < 0)
die("failed to read the cache"); die(_("failed to read the cache"));
resolve_undo_clear(); resolve_undo_clear();
return ret; return ret;
@ -640,7 +640,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
if (active_cache_changed && if (active_cache_changed &&
(write_cache(index_fd, active_cache, active_nr) || (write_cache(index_fd, active_cache, active_nr) ||
commit_locked_index(lock))) commit_locked_index(lock)))
return error("Unable to write index."); return error(_("Unable to write index."));
rollback_lock_file(lock); rollback_lock_file(lock);
if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) { if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) {
@ -653,7 +653,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
struct commit_list *j; struct commit_list *j;
if (remoteheads->next) { if (remoteheads->next) {
error("Not handling anything other than two heads merge."); error(_("Not handling anything other than two heads merge."));
return 2; return 2;
} }
@ -667,7 +667,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
for (x = 0; x < xopts_nr; x++) for (x = 0; x < xopts_nr; x++)
if (parse_merge_opt(&o, xopts[x])) if (parse_merge_opt(&o, xopts[x]))
die("Unknown option for merge-recursive: -X%s", xopts[x]); die(_("Unknown option for merge-recursive: -X%s"), xopts[x]);
o.branch1 = head_arg; o.branch1 = head_arg;
o.branch2 = remoteheads->item->util; o.branch2 = remoteheads->item->util;
@ -681,7 +681,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
if (active_cache_changed && if (active_cache_changed &&
(write_cache(index_fd, active_cache, active_nr) || (write_cache(index_fd, active_cache, active_nr) ||
commit_locked_index(lock))) commit_locked_index(lock)))
die ("unable to write %s", get_index_file()); die (_("unable to write %s"), get_index_file());
rollback_lock_file(lock); rollback_lock_file(lock);
return clean ? 0 : 1; return clean ? 0 : 1;
} else { } else {
@ -753,7 +753,7 @@ int checkout_fast_forward(const unsigned char *head, const unsigned char *remote
return -1; return -1;
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(lock_file)) commit_locked_index(lock_file))
die("unable to write new index file"); die(_("unable to write new index file"));
return 0; return 0;
} }
@ -805,10 +805,10 @@ static void write_merge_msg(void)
{ {
int fd = open(git_path("MERGE_MSG"), O_WRONLY | O_CREAT, 0666); int fd = open(git_path("MERGE_MSG"), O_WRONLY | O_CREAT, 0666);
if (fd < 0) if (fd < 0)
die_errno("Could not open '%s' for writing", die_errno(_("Could not open '%s' for writing"),
git_path("MERGE_MSG")); git_path("MERGE_MSG"));
if (write_in_full(fd, merge_msg.buf, merge_msg.len) != merge_msg.len) if (write_in_full(fd, merge_msg.buf, merge_msg.len) != merge_msg.len)
die_errno("Could not write to '%s'", git_path("MERGE_MSG")); die_errno(_("Could not write to '%s'"), git_path("MERGE_MSG"));
close(fd); close(fd);
} }
@ -833,7 +833,7 @@ static int merge_trivial(void)
struct commit_list *parent = xmalloc(sizeof(*parent)); struct commit_list *parent = xmalloc(sizeof(*parent));
write_tree_trivial(result_tree); write_tree_trivial(result_tree);
printf("Wonderful.\n"); printf(_("Wonderful.\n"));
parent->item = lookup_commit(head); parent->item = lookup_commit(head);
parent->next = xmalloc(sizeof(*parent->next)); parent->next = xmalloc(sizeof(*parent->next));
parent->next->item = remoteheads->item; parent->next->item = remoteheads->item;
@ -884,7 +884,7 @@ static int suggest_conflicts(int renormalizing)
fp = fopen(git_path("MERGE_MSG"), "a"); fp = fopen(git_path("MERGE_MSG"), "a");
if (!fp) if (!fp)
die_errno("Could not open '%s' for writing", die_errno(_("Could not open '%s' for writing"),
git_path("MERGE_MSG")); git_path("MERGE_MSG"));
fprintf(fp, "\nConflicts:\n"); fprintf(fp, "\nConflicts:\n");
for (pos = 0; pos < active_nr; pos++) { for (pos = 0; pos < active_nr; pos++) {
@ -900,8 +900,8 @@ static int suggest_conflicts(int renormalizing)
} }
fclose(fp); fclose(fp);
rerere(allow_rerere_auto); rerere(allow_rerere_auto);
printf("Automatic merge failed; " printf(_("Automatic merge failed; "
"fix conflicts and then commit the result.\n"); "fix conflicts and then commit the result.\n"));
return 1; return 1;
} }
@ -915,7 +915,7 @@ static struct commit *is_old_style_invocation(int argc, const char **argv)
return NULL; return NULL;
second_token = lookup_commit_reference_gently(second_sha1, 0); second_token = lookup_commit_reference_gently(second_sha1, 0);
if (!second_token) if (!second_token)
die("'%s' is not a commit", argv[1]); die(_("'%s' is not a commit"), argv[1]);
if (hashcmp(second_token->object.sha1, head)) if (hashcmp(second_token->object.sha1, head))
return NULL; return NULL;
} }
@ -986,7 +986,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
const char *nargv[] = {"reset", "--merge", NULL}; const char *nargv[] = {"reset", "--merge", NULL};
if (!file_exists(git_path("MERGE_HEAD"))) if (!file_exists(git_path("MERGE_HEAD")))
die("There is no merge to abort (MERGE_HEAD missing)."); die(_("There is no merge to abort (MERGE_HEAD missing)."));
/* Invoke 'git reset --merge' */ /* Invoke 'git reset --merge' */
return cmd_reset(nargc, nargv, prefix); return cmd_reset(nargc, nargv, prefix);
@ -1001,10 +1001,10 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
* add/rm <file>', just 'git commit'. * add/rm <file>', just 'git commit'.
*/ */
if (advice_resolve_conflict) if (advice_resolve_conflict)
die("You have not concluded your merge (MERGE_HEAD exists).\n" die(_("You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."); "Please, commit your changes before you can merge."));
else else
die("You have not concluded your merge (MERGE_HEAD exists)."); die(_("You have not concluded your merge (MERGE_HEAD exists)."));
} }
if (file_exists(git_path("CHERRY_PICK_HEAD"))) { if (file_exists(git_path("CHERRY_PICK_HEAD"))) {
if (advice_resolve_conflict) if (advice_resolve_conflict)
@ -1020,12 +1020,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
if (squash) { if (squash) {
if (!allow_fast_forward) if (!allow_fast_forward)
die("You cannot combine --squash with --no-ff."); die(_("You cannot combine --squash with --no-ff."));
option_commit = 0; option_commit = 0;
} }
if (!allow_fast_forward && fast_forward_only) if (!allow_fast_forward && fast_forward_only)
die("You cannot combine --no-ff with --ff-only."); die(_("You cannot combine --no-ff with --ff-only."));
if (!argc) if (!argc)
usage_with_options(builtin_merge_usage, usage_with_options(builtin_merge_usage,
@ -1053,16 +1053,16 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
* We do the same for "git pull". * We do the same for "git pull".
*/ */
if (argc != 1) if (argc != 1)
die("Can merge only exactly one commit into " die(_("Can merge only exactly one commit into "
"empty head"); "empty head"));
if (squash) if (squash)
die("Squash commit into empty head not supported yet"); die(_("Squash commit into empty head not supported yet"));
if (!allow_fast_forward) if (!allow_fast_forward)
die("Non-fast-forward commit does not make sense into " die(_("Non-fast-forward commit does not make sense into "
"an empty head"); "an empty head"));
remote_head = peel_to_type(argv[0], 0, NULL, OBJ_COMMIT); remote_head = peel_to_type(argv[0], 0, NULL, OBJ_COMMIT);
if (!remote_head) if (!remote_head)
die("%s - not something we can merge", argv[0]); die(_("%s - not something we can merge"), argv[0]);
read_empty(remote_head->sha1, 0); read_empty(remote_head->sha1, 0);
update_ref("initial pull", "HEAD", remote_head->sha1, NULL, 0, update_ref("initial pull", "HEAD", remote_head->sha1, NULL, 0,
DIE_ON_ERR); DIE_ON_ERR);
@ -1108,7 +1108,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
o = peel_to_type(argv[i], 0, NULL, OBJ_COMMIT); o = peel_to_type(argv[i], 0, NULL, OBJ_COMMIT);
if (!o) if (!o)
die("%s - not something we can merge", argv[i]); die(_("%s - not something we can merge"), argv[i]);
commit = lookup_commit(o->sha1); commit = lookup_commit(o->sha1);
commit->util = (void *)argv[i]; commit->util = (void *)argv[i];
remotes = &commit_list_insert(commit, remotes)->next; remotes = &commit_list_insert(commit, remotes)->next;
@ -1166,7 +1166,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
strcpy(hex, find_unique_abbrev(head, DEFAULT_ABBREV)); strcpy(hex, find_unique_abbrev(head, DEFAULT_ABBREV));
if (verbosity >= 0) if (verbosity >= 0)
printf("Updating %s..%s\n", printf(_("Updating %s..%s\n"),
hex, hex,
find_unique_abbrev(remoteheads->item->object.sha1, find_unique_abbrev(remoteheads->item->object.sha1,
DEFAULT_ABBREV)); DEFAULT_ABBREV));
@ -1200,11 +1200,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
if (allow_trivial && !fast_forward_only) { if (allow_trivial && !fast_forward_only) {
/* See if it is really trivial. */ /* See if it is really trivial. */
git_committer_info(IDENT_ERROR_ON_NO_NAME); git_committer_info(IDENT_ERROR_ON_NO_NAME);
printf("Trying really trivial in-index merge...\n"); printf(_("Trying really trivial in-index merge...\n"));
if (!read_tree_trivial(common->item->object.sha1, if (!read_tree_trivial(common->item->object.sha1,
head, remoteheads->item->object.sha1)) head, remoteheads->item->object.sha1))
return merge_trivial(); return merge_trivial();
printf("Nope.\n"); printf(_("Nope.\n"));
} }
} else { } else {
/* /*
@ -1237,7 +1237,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
} }
if (fast_forward_only) if (fast_forward_only)
die("Not possible to fast-forward, aborting."); die(_("Not possible to fast-forward, aborting."));
/* We are going to make a new commit. */ /* We are going to make a new commit. */
git_committer_info(IDENT_ERROR_ON_NO_NAME); git_committer_info(IDENT_ERROR_ON_NO_NAME);
@ -1263,11 +1263,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
for (i = 0; i < use_strategies_nr; i++) { for (i = 0; i < use_strategies_nr; i++) {
int ret; int ret;
if (i) { if (i) {
printf("Rewinding the tree to pristine...\n"); printf(_("Rewinding the tree to pristine...\n"));
restore_state(); restore_state();
} }
if (use_strategies_nr != 1) if (use_strategies_nr != 1)
printf("Trying merge strategy %s...\n", printf(_("Trying merge strategy %s...\n"),
use_strategies[i]->name); use_strategies[i]->name);
/* /*
* Remember which strategy left the state in the working * Remember which strategy left the state in the working
@ -1328,17 +1328,17 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
restore_state(); restore_state();
if (use_strategies_nr > 1) if (use_strategies_nr > 1)
fprintf(stderr, fprintf(stderr,
"No merge strategy handled the merge.\n"); _("No merge strategy handled the merge.\n"));
else else
fprintf(stderr, "Merge with strategy %s failed.\n", fprintf(stderr, _("Merge with strategy %s failed.\n"),
use_strategies[0]->name); use_strategies[0]->name);
return 2; return 2;
} else if (best_strategy == wt_strategy) } else if (best_strategy == wt_strategy)
; /* We already have its result in the working tree. */ ; /* We already have its result in the working tree. */
else { else {
printf("Rewinding the tree to pristine...\n"); printf(_("Rewinding the tree to pristine...\n"));
restore_state(); restore_state();
printf("Using the %s to prepare resolving by hand.\n", printf(_("Using the %s to prepare resolving by hand.\n"),
best_strategy); best_strategy);
try_merge_strategy(best_strategy, common, head_arg); try_merge_strategy(best_strategy, common, head_arg);
} }
@ -1354,28 +1354,28 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
sha1_to_hex(j->item->object.sha1)); sha1_to_hex(j->item->object.sha1));
fd = open(git_path("MERGE_HEAD"), O_WRONLY | O_CREAT, 0666); fd = open(git_path("MERGE_HEAD"), O_WRONLY | O_CREAT, 0666);
if (fd < 0) if (fd < 0)
die_errno("Could not open '%s' for writing", die_errno(_("Could not open '%s' for writing"),
git_path("MERGE_HEAD")); git_path("MERGE_HEAD"));
if (write_in_full(fd, buf.buf, buf.len) != buf.len) if (write_in_full(fd, buf.buf, buf.len) != buf.len)
die_errno("Could not write to '%s'", git_path("MERGE_HEAD")); die_errno(_("Could not write to '%s'"), git_path("MERGE_HEAD"));
close(fd); close(fd);
strbuf_addch(&merge_msg, '\n'); strbuf_addch(&merge_msg, '\n');
write_merge_msg(); write_merge_msg();
fd = open(git_path("MERGE_MODE"), O_WRONLY | O_CREAT | O_TRUNC, 0666); fd = open(git_path("MERGE_MODE"), O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fd < 0) if (fd < 0)
die_errno("Could not open '%s' for writing", die_errno(_("Could not open '%s' for writing"),
git_path("MERGE_MODE")); git_path("MERGE_MODE"));
strbuf_reset(&buf); strbuf_reset(&buf);
if (!allow_fast_forward) if (!allow_fast_forward)
strbuf_addf(&buf, "no-ff"); strbuf_addf(&buf, "no-ff");
if (write_in_full(fd, buf.buf, buf.len) != buf.len) if (write_in_full(fd, buf.buf, buf.len) != buf.len)
die_errno("Could not write to '%s'", git_path("MERGE_MODE")); die_errno(_("Could not write to '%s'"), git_path("MERGE_MODE"));
close(fd); close(fd);
} }
if (merge_was_ok) { if (merge_was_ok) {
fprintf(stderr, "Automatic merge went well; " fprintf(stderr, _("Automatic merge went well; "
"stopped before committing as requested\n"); "stopped before committing as requested\n"));
return 0; return 0;
} else } else
return suggest_conflicts(option_renormalize); return suggest_conflicts(option_renormalize);

View File

@ -74,7 +74,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
newfd = hold_locked_index(&lock_file, 1); newfd = hold_locked_index(&lock_file, 1);
if (read_cache() < 0) if (read_cache() < 0)
die("index file corrupt"); die(_("index file corrupt"));
source = copy_pathspec(prefix, argv, argc, 0); source = copy_pathspec(prefix, argv, argc, 0);
modes = xcalloc(argc, sizeof(enum update_mode)); modes = xcalloc(argc, sizeof(enum update_mode));
@ -100,17 +100,17 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
const char *bad = NULL; const char *bad = NULL;
if (show_only) if (show_only)
printf("Checking rename of '%s' to '%s'\n", src, dst); printf(_("Checking rename of '%s' to '%s'\n"), src, dst);
length = strlen(src); length = strlen(src);
if (lstat(src, &st) < 0) if (lstat(src, &st) < 0)
bad = "bad source"; bad = _("bad source");
else if (!strncmp(src, dst, length) && else if (!strncmp(src, dst, length) &&
(dst[length] == 0 || dst[length] == '/')) { (dst[length] == 0 || dst[length] == '/')) {
bad = "can not move directory into itself"; bad = _("can not move directory into itself");
} else if ((src_is_dir = S_ISDIR(st.st_mode)) } else if ((src_is_dir = S_ISDIR(st.st_mode))
&& lstat(dst, &st) == 0) && lstat(dst, &st) == 0)
bad = "cannot move directory over file"; bad = _("cannot move directory over file");
else if (src_is_dir) { else if (src_is_dir) {
const char *src_w_slash = add_slash(src); const char *src_w_slash = add_slash(src);
int len_w_slash = length + 1; int len_w_slash = length + 1;
@ -120,7 +120,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
first = cache_name_pos(src_w_slash, len_w_slash); first = cache_name_pos(src_w_slash, len_w_slash);
if (first >= 0) if (first >= 0)
die ("Huh? %.*s is in index?", die (_("Huh? %.*s is in index?"),
len_w_slash, src_w_slash); len_w_slash, src_w_slash);
first = -1 - first; first = -1 - first;
@ -132,7 +132,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
free((char *)src_w_slash); free((char *)src_w_slash);
if (last - first < 1) if (last - first < 1)
bad = "source directory is empty"; bad = _("source directory is empty");
else { else {
int j, dst_len; int j, dst_len;
@ -163,22 +163,22 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
argc += last - first; argc += last - first;
} }
} else if (cache_name_pos(src, length) < 0) } else if (cache_name_pos(src, length) < 0)
bad = "not under version control"; bad = _("not under version control");
else if (lstat(dst, &st) == 0) { else if (lstat(dst, &st) == 0) {
bad = "destination exists"; bad = _("destination exists");
if (force) { if (force) {
/* /*
* only files can overwrite each other: * only files can overwrite each other:
* check both source and destination * check both source and destination
*/ */
if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) { if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) {
warning("%s; will overwrite!", bad); warning(_("%s; will overwrite!"), bad);
bad = NULL; bad = NULL;
} else } else
bad = "Cannot overwrite"; bad = _("Cannot overwrite");
} }
} else if (string_list_has_string(&src_for_dst, dst)) } else if (string_list_has_string(&src_for_dst, dst))
bad = "multiple sources for the same target"; bad = _("multiple sources for the same target");
else else
string_list_insert(&src_for_dst, dst); string_list_insert(&src_for_dst, dst);
@ -193,7 +193,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
i--; i--;
} }
} else } else
die ("%s, source=%s, destination=%s", die (_("%s, source=%s, destination=%s"),
bad, src, dst); bad, src, dst);
} }
} }
@ -203,10 +203,10 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
enum update_mode mode = modes[i]; enum update_mode mode = modes[i];
int pos; int pos;
if (show_only || verbose) if (show_only || verbose)
printf("Renaming %s to %s\n", src, dst); printf(_("Renaming %s to %s\n"), src, dst);
if (!show_only && mode != INDEX && if (!show_only && mode != INDEX &&
rename(src, dst) < 0 && !ignore_errors) rename(src, dst) < 0 && !ignore_errors)
die_errno ("renaming '%s' failed", src); die_errno (_("renaming '%s' failed"), src);
if (mode == WORKING_DIRECTORY) if (mode == WORKING_DIRECTORY)
continue; continue;
@ -220,7 +220,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
if (active_cache_changed) { if (active_cache_changed) {
if (write_cache(newfd, active_cache, active_nr) || if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(&lock_file)) commit_locked_index(&lock_file))
die("Unable to write new index file"); die(_("Unable to write new index file"));
} }
return 0; return 0;

View File

@ -146,13 +146,13 @@ static void write_commented_object(int fd, const unsigned char *object)
show.err = 0; show.err = 0;
show.git_cmd = 1; show.git_cmd = 1;
if (start_command(&show)) if (start_command(&show))
die("unable to start 'show' for object '%s'", die(_("unable to start 'show' for object '%s'"),
sha1_to_hex(object)); sha1_to_hex(object));
/* Open the output as FILE* so strbuf_getline() can be used. */ /* Open the output as FILE* so strbuf_getline() can be used. */
show_out = xfdopen(show.out, "r"); show_out = xfdopen(show.out, "r");
if (show_out == NULL) if (show_out == NULL)
die_errno("can't fdopen 'show' output fd"); die_errno(_("can't fdopen 'show' output fd"));
/* Prepend "# " to each output line and write result to 'fd' */ /* Prepend "# " to each output line and write result to 'fd' */
while (strbuf_getline(&buf, show_out, '\n') != EOF) { while (strbuf_getline(&buf, show_out, '\n') != EOF) {
@ -162,10 +162,10 @@ static void write_commented_object(int fd, const unsigned char *object)
} }
strbuf_release(&buf); strbuf_release(&buf);
if (fclose(show_out)) if (fclose(show_out))
die_errno("failed to close pipe to 'show' for object '%s'", die_errno(_("failed to close pipe to 'show' for object '%s'"),
sha1_to_hex(object)); sha1_to_hex(object));
if (finish_command(&show)) if (finish_command(&show))
die("failed to finish 'show' for object '%s'", die(_("failed to finish 'show' for object '%s'"),
sha1_to_hex(object)); sha1_to_hex(object));
} }
@ -182,7 +182,7 @@ static void create_note(const unsigned char *object, struct msg_arg *msg,
path = git_pathdup("NOTES_EDITMSG"); path = git_pathdup("NOTES_EDITMSG");
fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600); fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (fd < 0) if (fd < 0)
die_errno("could not create file '%s'", path); die_errno(_("could not create file '%s'"), path);
if (msg->given) if (msg->given)
write_or_die(fd, msg->buf.buf, msg->buf.len); write_or_die(fd, msg->buf.buf, msg->buf.len);
@ -196,8 +196,8 @@ static void create_note(const unsigned char *object, struct msg_arg *msg,
strbuf_reset(&(msg->buf)); strbuf_reset(&(msg->buf));
if (launch_editor(path, &(msg->buf), NULL)) { if (launch_editor(path, &(msg->buf), NULL)) {
die("Please supply the note contents using either -m" \ die(_("Please supply the note contents using either -m" \
" or -F option"); " or -F option"));
} }
stripspace(&(msg->buf), 1); stripspace(&(msg->buf), 1);
} }
@ -217,14 +217,14 @@ static void create_note(const unsigned char *object, struct msg_arg *msg,
} }
if (!msg->buf.len) { if (!msg->buf.len) {
fprintf(stderr, "Removing note for object %s\n", fprintf(stderr, _("Removing note for object %s\n"),
sha1_to_hex(object)); sha1_to_hex(object));
hashclr(result); hashclr(result);
} else { } else {
if (write_sha1_file(msg->buf.buf, msg->buf.len, blob_type, result)) { if (write_sha1_file(msg->buf.buf, msg->buf.len, blob_type, result)) {
error("unable to write note object"); error(_("unable to write note object"));
if (path) if (path)
error("The note contents has been left in %s", error(_("The note contents has been left in %s"),
path); path);
exit(128); exit(128);
} }
@ -258,9 +258,9 @@ static int parse_file_arg(const struct option *opt, const char *arg, int unset)
strbuf_addch(&(msg->buf), '\n'); strbuf_addch(&(msg->buf), '\n');
if (!strcmp(arg, "-")) { if (!strcmp(arg, "-")) {
if (strbuf_read(&(msg->buf), 0, 1024) < 0) if (strbuf_read(&(msg->buf), 0, 1024) < 0)
die_errno("cannot read '%s'", arg); die_errno(_("cannot read '%s'"), arg);
} else if (strbuf_read_file(&(msg->buf), arg, 1024) < 0) } else if (strbuf_read_file(&(msg->buf), arg, 1024) < 0)
die_errno("could not open or read '%s'", arg); die_errno(_("could not open or read '%s'"), arg);
stripspace(&(msg->buf), 0); stripspace(&(msg->buf), 0);
msg->given = 1; msg->given = 1;
@ -279,10 +279,10 @@ static int parse_reuse_arg(const struct option *opt, const char *arg, int unset)
strbuf_addch(&(msg->buf), '\n'); strbuf_addch(&(msg->buf), '\n');
if (get_sha1(arg, object)) if (get_sha1(arg, object))
die("Failed to resolve '%s' as a valid ref.", arg); die(_("Failed to resolve '%s' as a valid ref."), arg);
if (!(buf = read_sha1_file(object, &type, &len)) || !len) { if (!(buf = read_sha1_file(object, &type, &len)) || !len) {
free(buf); free(buf);
die("Failed to read object '%s'.", arg);; die(_("Failed to read object '%s'."), arg);;
} }
strbuf_add(&(msg->buf), buf, len); strbuf_add(&(msg->buf), buf, len);
free(buf); free(buf);
@ -306,7 +306,7 @@ void commit_notes(struct notes_tree *t, const char *msg)
if (!t) if (!t)
t = &default_notes_tree; t = &default_notes_tree;
if (!t->initialized || !t->ref || !*t->ref) if (!t->initialized || !t->ref || !*t->ref)
die("Cannot commit uninitialized/unreferenced notes tree"); die(_("Cannot commit uninitialized/unreferenced notes tree"));
if (!t->dirty) if (!t->dirty)
return; /* don't have to commit an unchanged tree */ return; /* don't have to commit an unchanged tree */
@ -347,7 +347,7 @@ static int notes_rewrite_config(const char *k, const char *v, void *cb)
config_error_nonbool(k); config_error_nonbool(k);
c->combine = parse_combine_notes_fn(v); c->combine = parse_combine_notes_fn(v);
if (!c->combine) { if (!c->combine) {
error("Bad notes.rewriteMode value: '%s'", v); error(_("Bad notes.rewriteMode value: '%s'"), v);
return 1; return 1;
} }
return 0; return 0;
@ -357,8 +357,8 @@ static int notes_rewrite_config(const char *k, const char *v, void *cb)
if (!prefixcmp(v, "refs/notes/")) if (!prefixcmp(v, "refs/notes/"))
string_list_add_refs_by_glob(c->refs, v); string_list_add_refs_by_glob(c->refs, v);
else else
warning("Refusing to rewrite notes in %s" warning(_("Refusing to rewrite notes in %s"
" (outside of refs/notes/)", v); " (outside of refs/notes/)"), v);
return 0; return 0;
} }
@ -382,8 +382,10 @@ struct notes_rewrite_cfg *init_copy_notes_for_rewrite(const char *cmd)
c->mode_from_env = 1; c->mode_from_env = 1;
c->combine = parse_combine_notes_fn(rewrite_mode_env); c->combine = parse_combine_notes_fn(rewrite_mode_env);
if (!c->combine) if (!c->combine)
error("Bad " GIT_NOTES_REWRITE_MODE_ENVIRONMENT /* TRANSLATORS: The first %s is the name of the
" value: '%s'", rewrite_mode_env); environment variable, the second %s is its value */
error(_("Bad %s value: '%s'"), GIT_NOTES_REWRITE_MODE_ENVIRONMENT,
rewrite_mode_env);
} }
if (rewrite_refs_env) { if (rewrite_refs_env) {
c->refs_from_env = 1; c->refs_from_env = 1;
@ -446,13 +448,13 @@ static int notes_copy_from_stdin(int force, const char *rewrite_cmd)
split = strbuf_split(&buf, ' '); split = strbuf_split(&buf, ' ');
if (!split[0] || !split[1]) if (!split[0] || !split[1])
die("Malformed input line: '%s'.", buf.buf); die(_("Malformed input line: '%s'."), buf.buf);
strbuf_rtrim(split[0]); strbuf_rtrim(split[0]);
strbuf_rtrim(split[1]); strbuf_rtrim(split[1]);
if (get_sha1(split[0]->buf, from_obj)) if (get_sha1(split[0]->buf, from_obj))
die("Failed to resolve '%s' as a valid ref.", split[0]->buf); die(_("Failed to resolve '%s' as a valid ref."), split[0]->buf);
if (get_sha1(split[1]->buf, to_obj)) if (get_sha1(split[1]->buf, to_obj))
die("Failed to resolve '%s' as a valid ref.", split[1]->buf); die(_("Failed to resolve '%s' as a valid ref."), split[1]->buf);
if (rewrite_cmd) if (rewrite_cmd)
err = copy_note_for_rewrite(c, from_obj, to_obj); err = copy_note_for_rewrite(c, from_obj, to_obj);
@ -461,7 +463,7 @@ static int notes_copy_from_stdin(int force, const char *rewrite_cmd)
combine_notes_overwrite); combine_notes_overwrite);
if (err) { if (err) {
error("Failed to copy notes from '%s' to '%s'", error(_("Failed to copy notes from '%s' to '%s'"),
split[0]->buf, split[1]->buf); split[0]->buf, split[1]->buf);
ret = 1; ret = 1;
} }
@ -505,20 +507,20 @@ static int list(int argc, const char **argv, const char *prefix)
git_notes_list_usage, 0); git_notes_list_usage, 0);
if (1 < argc) { if (1 < argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_list_usage, options); usage_with_options(git_notes_list_usage, options);
} }
t = init_notes_check("list"); t = init_notes_check("list");
if (argc) { if (argc) {
if (get_sha1(argv[0], object)) if (get_sha1(argv[0], object))
die("Failed to resolve '%s' as a valid ref.", argv[0]); die(_("Failed to resolve '%s' as a valid ref."), argv[0]);
note = get_note(t, object); note = get_note(t, object);
if (note) { if (note) {
puts(sha1_to_hex(note)); puts(sha1_to_hex(note));
retval = 0; retval = 0;
} else } else
retval = error("No note found for object %s.", retval = error(_("No note found for object %s."),
sha1_to_hex(object)); sha1_to_hex(object));
} else } else
retval = for_each_note(t, 0, list_each_note, NULL); retval = for_each_note(t, 0, list_each_note, NULL);
@ -557,26 +559,26 @@ static int add(int argc, const char **argv, const char *prefix)
0); 0);
if (1 < argc) { if (1 < argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_add_usage, options); usage_with_options(git_notes_add_usage, options);
} }
object_ref = argc ? argv[0] : "HEAD"; object_ref = argc ? argv[0] : "HEAD";
if (get_sha1(object_ref, object)) if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
t = init_notes_check("add"); t = init_notes_check("add");
note = get_note(t, object); note = get_note(t, object);
if (note) { if (note) {
if (!force) { if (!force) {
retval = error("Cannot add notes. Found existing notes " retval = error(_("Cannot add notes. Found existing notes "
"for object %s. Use '-f' to overwrite " "for object %s. Use '-f' to overwrite "
"existing notes", sha1_to_hex(object)); "existing notes"), sha1_to_hex(object));
goto out; goto out;
} }
fprintf(stderr, "Overwriting existing notes for object %s\n", fprintf(stderr, _("Overwriting existing notes for object %s\n"),
sha1_to_hex(object)); sha1_to_hex(object));
} }
@ -618,7 +620,7 @@ static int copy(int argc, const char **argv, const char *prefix)
if (from_stdin || rewrite_cmd) { if (from_stdin || rewrite_cmd) {
if (argc) { if (argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_copy_usage, options); usage_with_options(git_notes_copy_usage, options);
} else { } else {
return notes_copy_from_stdin(force, rewrite_cmd); return notes_copy_from_stdin(force, rewrite_cmd);
@ -626,41 +628,41 @@ static int copy(int argc, const char **argv, const char *prefix)
} }
if (argc < 2) { if (argc < 2) {
error("too few parameters"); error(_("too few parameters"));
usage_with_options(git_notes_copy_usage, options); usage_with_options(git_notes_copy_usage, options);
} }
if (2 < argc) { if (2 < argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_copy_usage, options); usage_with_options(git_notes_copy_usage, options);
} }
if (get_sha1(argv[0], from_obj)) if (get_sha1(argv[0], from_obj))
die("Failed to resolve '%s' as a valid ref.", argv[0]); die(_("Failed to resolve '%s' as a valid ref."), argv[0]);
object_ref = 1 < argc ? argv[1] : "HEAD"; object_ref = 1 < argc ? argv[1] : "HEAD";
if (get_sha1(object_ref, object)) if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
t = init_notes_check("copy"); t = init_notes_check("copy");
note = get_note(t, object); note = get_note(t, object);
if (note) { if (note) {
if (!force) { if (!force) {
retval = error("Cannot copy notes. Found existing " retval = error(_("Cannot copy notes. Found existing "
"notes for object %s. Use '-f' to " "notes for object %s. Use '-f' to "
"overwrite existing notes", "overwrite existing notes"),
sha1_to_hex(object)); sha1_to_hex(object));
goto out; goto out;
} }
fprintf(stderr, "Overwriting existing notes for object %s\n", fprintf(stderr, _("Overwriting existing notes for object %s\n"),
sha1_to_hex(object)); sha1_to_hex(object));
} }
from_note = get_note(t, from_obj); from_note = get_note(t, from_obj);
if (!from_note) { if (!from_note) {
retval = error("Missing notes on source object %s. Cannot " retval = error(_("Missing notes on source object %s. Cannot "
"copy.", sha1_to_hex(from_obj)); "copy."), sha1_to_hex(from_obj));
goto out; goto out;
} }
@ -703,19 +705,19 @@ static int append_edit(int argc, const char **argv, const char *prefix)
PARSE_OPT_KEEP_ARGV0); PARSE_OPT_KEEP_ARGV0);
if (2 < argc) { if (2 < argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(usage, options); usage_with_options(usage, options);
} }
if (msg.given && edit) if (msg.given && edit)
fprintf(stderr, "The -m/-F/-c/-C options have been deprecated " fprintf(stderr, _("The -m/-F/-c/-C options have been deprecated "
"for the 'edit' subcommand.\n" "for the 'edit' subcommand.\n"
"Please use 'git notes add -f -m/-F/-c/-C' instead.\n"); "Please use 'git notes add -f -m/-F/-c/-C' instead.\n"));
object_ref = 1 < argc ? argv[1] : "HEAD"; object_ref = 1 < argc ? argv[1] : "HEAD";
if (get_sha1(object_ref, object)) if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
t = init_notes_check(argv[0]); t = init_notes_check(argv[0]);
note = get_note(t, object); note = get_note(t, object);
@ -750,20 +752,20 @@ static int show(int argc, const char **argv, const char *prefix)
0); 0);
if (1 < argc) { if (1 < argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_show_usage, options); usage_with_options(git_notes_show_usage, options);
} }
object_ref = argc ? argv[0] : "HEAD"; object_ref = argc ? argv[0] : "HEAD";
if (get_sha1(object_ref, object)) if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
t = init_notes_check("show"); t = init_notes_check("show");
note = get_note(t, object); note = get_note(t, object);
if (!note) if (!note)
retval = error("No note found for object %s.", retval = error(_("No note found for object %s."),
sha1_to_hex(object)); sha1_to_hex(object));
else { else {
const char *show_args[3] = {"show", sha1_to_hex(note), NULL}; const char *show_args[3] = {"show", sha1_to_hex(note), NULL};
@ -961,22 +963,22 @@ static int remove_cmd(int argc, const char **argv, const char *prefix)
git_notes_remove_usage, 0); git_notes_remove_usage, 0);
if (1 < argc) { if (1 < argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_remove_usage, options); usage_with_options(git_notes_remove_usage, options);
} }
object_ref = argc ? argv[0] : "HEAD"; object_ref = argc ? argv[0] : "HEAD";
if (get_sha1(object_ref, object)) if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
t = init_notes_check("remove"); t = init_notes_check("remove");
retval = remove_note(t, object); retval = remove_note(t, object);
if (retval) if (retval)
fprintf(stderr, "Object %s has no note\n", sha1_to_hex(object)); fprintf(stderr, _("Object %s has no note\n"), sha1_to_hex(object));
else { else {
fprintf(stderr, "Removing note for object %s\n", fprintf(stderr, _("Removing note for object %s\n"),
sha1_to_hex(object)); sha1_to_hex(object));
commit_notes(t, "Notes removed by 'git notes remove'"); commit_notes(t, "Notes removed by 'git notes remove'");
@ -999,7 +1001,7 @@ static int prune(int argc, const char **argv, const char *prefix)
0); 0);
if (argc) { if (argc) {
error("too many parameters"); error(_("too many parameters"));
usage_with_options(git_notes_prune_usage, options); usage_with_options(git_notes_prune_usage, options);
} }
@ -1069,7 +1071,7 @@ int cmd_notes(int argc, const char **argv, const char *prefix)
else if (!strcmp(argv[0], "get-ref")) else if (!strcmp(argv[0], "get-ref"))
result = get_ref(argc, argv, prefix); result = get_ref(argc, argv, prefix);
else { else {
result = error("Unknown subcommand: %s", argv[0]); result = error(_("Unknown subcommand: %s"), argv[0]);
usage_with_options(git_notes_usage, options); usage_with_options(git_notes_usage, options);
} }

View File

@ -40,7 +40,7 @@ static void set_refspecs(const char **refs, int nr)
char *tag; char *tag;
int len; int len;
if (nr <= ++i) if (nr <= ++i)
die("tag shorthand without <tag>"); die(_("tag shorthand without <tag>"));
len = strlen(refs[i]) + 11; len = strlen(refs[i]) + 11;
if (deleterefs) { if (deleterefs) {
tag = xmalloc(len+1); tag = xmalloc(len+1);
@ -59,7 +59,7 @@ static void set_refspecs(const char **refs, int nr)
strcat(delref, ref); strcat(delref, ref);
ref = delref; ref = delref;
} else if (deleterefs) } else if (deleterefs)
die("--delete only accepts plain target ref names"); die(_("--delete only accepts plain target ref names"));
add_refspec(ref); add_refspec(ref);
} }
} }
@ -69,23 +69,23 @@ static void setup_push_upstream(struct remote *remote)
struct strbuf refspec = STRBUF_INIT; struct strbuf refspec = STRBUF_INIT;
struct branch *branch = branch_get(NULL); struct branch *branch = branch_get(NULL);
if (!branch) if (!branch)
die("You are not currently on a branch.\n" die(_("You are not currently on a branch.\n"
"To push the history leading to the current (detached HEAD)\n" "To push the history leading to the current (detached HEAD)\n"
"state now, use\n" "state now, use\n"
"\n" "\n"
" git push %s HEAD:<name-of-remote-branch>\n", " git push %s HEAD:<name-of-remote-branch>\n"),
remote->name); remote->name);
if (!branch->merge_nr || !branch->merge) if (!branch->merge_nr || !branch->merge)
die("The current branch %s has no upstream branch.\n" die(_("The current branch %s has no upstream branch.\n"
"To push the current branch and set the remote as upstream, use\n" "To push the current branch and set the remote as upstream, use\n"
"\n" "\n"
" git push --set-upstream %s %s\n", " git push --set-upstream %s %s\n"),
branch->name, branch->name,
remote->name, remote->name,
branch->name); branch->name);
if (branch->merge_nr != 1) if (branch->merge_nr != 1)
die("The current branch %s has multiple upstream branches, " die(_("The current branch %s has multiple upstream branches, "
"refusing to push.", branch->name); "refusing to push."), branch->name);
strbuf_addf(&refspec, "%s:%s", branch->name, branch->merge[0]->src); strbuf_addf(&refspec, "%s:%s", branch->name, branch->merge[0]->src);
add_refspec(refspec.buf); add_refspec(refspec.buf);
} }
@ -107,8 +107,8 @@ static void setup_default_push_refspecs(struct remote *remote)
break; break;
case PUSH_DEFAULT_NOTHING: case PUSH_DEFAULT_NOTHING:
die("You didn't specify any refspecs to push, and " die(_("You didn't specify any refspecs to push, and "
"push.default is \"nothing\"."); "push.default is \"nothing\"."));
break; break;
} }
} }
@ -127,11 +127,11 @@ static int push_with_options(struct transport *transport, int flags)
transport_set_option(transport, TRANS_OPT_THIN, "yes"); transport_set_option(transport, TRANS_OPT_THIN, "yes");
if (verbosity > 0) if (verbosity > 0)
fprintf(stderr, "Pushing to %s\n", transport->url); fprintf(stderr, _("Pushing to %s\n"), transport->url);
err = transport_push(transport, refspec_nr, refspec, flags, err = transport_push(transport, refspec_nr, refspec, flags,
&nonfastforward); &nonfastforward);
if (err != 0) if (err != 0)
error("failed to push some refs to '%s'", transport->url); error(_("failed to push some refs to '%s'"), transport->url);
err |= transport_disconnect(transport); err |= transport_disconnect(transport);
@ -139,9 +139,9 @@ static int push_with_options(struct transport *transport, int flags)
return 0; return 0;
if (nonfastforward && advice_push_nonfastforward) { if (nonfastforward && advice_push_nonfastforward) {
fprintf(stderr, "To prevent you from losing history, non-fast-forward updates were rejected\n" fprintf(stderr, _("To prevent you from losing history, non-fast-forward updates were rejected\n"
"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n" "Merge the remote changes (e.g. 'git pull') before pushing again. See the\n"
"'Note about fast-forwards' section of 'git push --help' for details.\n"); "'Note about fast-forwards' section of 'git push --help' for details.\n"));
} }
return 1; return 1;
@ -156,15 +156,15 @@ static int do_push(const char *repo, int flags)
if (!remote) { if (!remote) {
if (repo) if (repo)
die("bad repository '%s'", repo); die(_("bad repository '%s'"), repo);
die("No configured push destination.\n" die(_("No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote repository using\n" "Either specify the URL from the command-line or configure a remote repository using\n"
"\n" "\n"
" git remote add <name> <url>\n" " git remote add <name> <url>\n"
"\n" "\n"
"and then push using the remote name\n" "and then push using the remote name\n"
"\n" "\n"
" git push <name>\n"); " git push <name>\n"));
} }
if (remote->mirror) if (remote->mirror)
@ -172,19 +172,19 @@ static int do_push(const char *repo, int flags)
if ((flags & TRANSPORT_PUSH_ALL) && refspec) { if ((flags & TRANSPORT_PUSH_ALL) && refspec) {
if (!strcmp(*refspec, "refs/tags/*")) if (!strcmp(*refspec, "refs/tags/*"))
return error("--all and --tags are incompatible"); return error(_("--all and --tags are incompatible"));
return error("--all can't be combined with refspecs"); return error(_("--all can't be combined with refspecs"));
} }
if ((flags & TRANSPORT_PUSH_MIRROR) && refspec) { if ((flags & TRANSPORT_PUSH_MIRROR) && refspec) {
if (!strcmp(*refspec, "refs/tags/*")) if (!strcmp(*refspec, "refs/tags/*"))
return error("--mirror and --tags are incompatible"); return error(_("--mirror and --tags are incompatible"));
return error("--mirror can't be combined with refspecs"); return error(_("--mirror can't be combined with refspecs"));
} }
if ((flags & (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) == if ((flags & (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) ==
(TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) { (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) {
return error("--all and --mirror are incompatible"); return error(_("--all and --mirror are incompatible"));
} }
if (!refspec && !(flags & TRANSPORT_PUSH_ALL)) { if (!refspec && !(flags & TRANSPORT_PUSH_ALL)) {
@ -250,9 +250,9 @@ int cmd_push(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options, push_usage, 0); argc = parse_options(argc, argv, prefix, options, push_usage, 0);
if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR)))) if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))
die("--delete is incompatible with --all, --mirror and --tags"); die(_("--delete is incompatible with --all, --mirror and --tags"));
if (deleterefs && argc < 2) if (deleterefs && argc < 2)
die("--delete doesn't make sense without any refs"); die(_("--delete doesn't make sense without any refs"));
if (tags) if (tags)
add_refspec("refs/tags/*"); add_refspec("refs/tags/*");

View File

@ -30,7 +30,7 @@ static const char * const git_reset_usage[] = {
enum reset_type { MIXED, SOFT, HARD, MERGE, KEEP, NONE }; enum reset_type { MIXED, SOFT, HARD, MERGE, KEEP, NONE };
static const char *reset_type_names[] = { static const char *reset_type_names[] = {
"mixed", "soft", "hard", "merge", "keep", NULL N_("mixed"), N_("soft"), N_("hard"), N_("merge"), N_("keep"), NULL
}; };
static char *args_to_str(const char **argv) static char *args_to_str(const char **argv)
@ -92,20 +92,20 @@ static int reset_index_file(const unsigned char *sha1, int reset_type, int quiet
if (reset_type == KEEP) { if (reset_type == KEEP) {
unsigned char head_sha1[20]; unsigned char head_sha1[20];
if (get_sha1("HEAD", head_sha1)) if (get_sha1("HEAD", head_sha1))
return error("You do not have a valid HEAD."); return error(_("You do not have a valid HEAD."));
if (!fill_tree_descriptor(desc, head_sha1)) if (!fill_tree_descriptor(desc, head_sha1))
return error("Failed to find tree of HEAD."); return error(_("Failed to find tree of HEAD."));
nr++; nr++;
opts.fn = twoway_merge; opts.fn = twoway_merge;
} }
if (!fill_tree_descriptor(desc + nr - 1, sha1)) if (!fill_tree_descriptor(desc + nr - 1, sha1))
return error("Failed to find tree of %s.", sha1_to_hex(sha1)); return error(_("Failed to find tree of %s."), sha1_to_hex(sha1));
if (unpack_trees(nr, desc, &opts)) if (unpack_trees(nr, desc, &opts))
return -1; return -1;
if (write_cache(newfd, active_cache, active_nr) || if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(lock)) commit_locked_index(lock))
return error("Could not write new index file."); return error(_("Could not write new index file."));
return 0; return 0;
} }
@ -115,7 +115,7 @@ static void print_new_head_line(struct commit *commit)
const char *hex, *body; const char *hex, *body;
hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV); hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
printf("HEAD is now at %s", hex); printf(_("HEAD is now at %s"), hex);
body = strstr(commit->buffer, "\n\n"); body = strstr(commit->buffer, "\n\n");
if (body) { if (body) {
const char *eol; const char *eol;
@ -139,10 +139,10 @@ static int update_index_refresh(int fd, struct lock_file *index_lock, int flags)
} }
if (read_cache() < 0) if (read_cache() < 0)
return error("Could not read index"); return error(_("Could not read index"));
result = refresh_index(&the_index, (flags), NULL, NULL, result = refresh_index(&the_index, (flags), NULL, NULL,
"Unstaged changes after reset:") ? 1 : 0; _("Unstaged changes after reset:")) ? 1 : 0;
if (write_cache(fd, active_cache, active_nr) || if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(index_lock)) commit_locked_index(index_lock))
return error ("Could not refresh index"); return error ("Could not refresh index");
@ -167,7 +167,7 @@ static void update_index_from_diff(struct diff_queue_struct *q,
ce = make_cache_entry(one->mode, one->sha1, one->path, ce = make_cache_entry(one->mode, one->sha1, one->path,
0, 0); 0, 0);
if (!ce) if (!ce)
die("make_cache_entry failed for path '%s'", die(_("make_cache_entry failed for path '%s'"),
one->path); one->path);
add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | add_cache_entry(ce, ADD_CACHE_OK_TO_ADD |
ADD_CACHE_OK_TO_REPLACE); ADD_CACHE_OK_TO_REPLACE);
@ -222,14 +222,14 @@ static void prepend_reflog_action(const char *action, char *buf, size_t size)
if (!rla) if (!rla)
rla = sep = ""; rla = sep = "";
if (snprintf(buf, size, "%s%s%s", rla, sep, action) >= size) if (snprintf(buf, size, "%s%s%s", rla, sep, action) >= size)
warning("Reflog action message too long: %.*s...", 50, buf); warning(_("Reflog action message too long: %.*s..."), 50, buf);
} }
static void die_if_unmerged_cache(int reset_type) static void die_if_unmerged_cache(int reset_type)
{ {
if (is_merge() || read_cache() < 0 || unmerged_cache()) if (is_merge() || read_cache() < 0 || unmerged_cache())
die("Cannot do a %s reset in the middle of a merge.", die(_("Cannot do a %s reset in the middle of a merge."),
reset_type_names[reset_type]); _(reset_type_names[reset_type]));
} }
@ -300,16 +300,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
} }
if (get_sha1(rev, sha1)) if (get_sha1(rev, sha1))
die("Failed to resolve '%s' as a valid ref.", rev); die(_("Failed to resolve '%s' as a valid ref."), rev);
commit = lookup_commit_reference(sha1); commit = lookup_commit_reference(sha1);
if (!commit) if (!commit)
die("Could not parse object '%s'.", rev); die(_("Could not parse object '%s'."), rev);
hashcpy(sha1, commit->object.sha1); hashcpy(sha1, commit->object.sha1);
if (patch_mode) { if (patch_mode) {
if (reset_type != NONE) if (reset_type != NONE)
die("--patch is incompatible with --{hard,mixed,soft}"); die(_("--patch is incompatible with --{hard,mixed,soft}"));
return interactive_reset(rev, argv + i, prefix); return interactive_reset(rev, argv + i, prefix);
} }
@ -318,10 +318,10 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
* affecting the working tree nor HEAD. */ * affecting the working tree nor HEAD. */
if (i < argc) { if (i < argc) {
if (reset_type == MIXED) if (reset_type == MIXED)
warning("--mixed with paths is deprecated; use 'git reset -- <paths>' instead."); warning(_("--mixed with paths is deprecated; use 'git reset -- <paths>' instead."));
else if (reset_type != NONE) else if (reset_type != NONE)
die("Cannot do %s reset with paths.", die(_("Cannot do %s reset with paths."),
reset_type_names[reset_type]); _(reset_type_names[reset_type]));
return read_from_tree(prefix, argv + i, sha1, return read_from_tree(prefix, argv + i, sha1,
quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN); quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN);
} }
@ -332,8 +332,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
setup_work_tree(); setup_work_tree();
if (reset_type == MIXED && is_bare_repository()) if (reset_type == MIXED && is_bare_repository())
die("%s reset is not allowed in a bare repository", die(_("%s reset is not allowed in a bare repository"),
reset_type_names[reset_type]); _(reset_type_names[reset_type]));
/* Soft reset does not touch the index file nor the working tree /* Soft reset does not touch the index file nor the working tree
* at all, but requires them in a good order. Other resets reset * at all, but requires them in a good order. Other resets reset
@ -348,7 +348,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
if (reset_type == KEEP) if (reset_type == KEEP)
err = err || reset_index_file(sha1, MIXED, quiet); err = err || reset_index_file(sha1, MIXED, quiet);
if (err) if (err)
die("Could not reset index file to revision '%s'.", rev); die(_("Could not reset index file to revision '%s'."), rev);
} }
/* Any resets update HEAD to the head being switched to, /* Any resets update HEAD to the head being switched to,

View File

@ -95,7 +95,7 @@ static void parse_args(int argc, const char **argv)
OPT_END(), OPT_END(),
}; };
if (parse_options_concat(options, ARRAY_SIZE(options), cp_extra)) if (parse_options_concat(options, ARRAY_SIZE(options), cp_extra))
die("program error"); die(_("program error"));
} }
commit_argc = parse_options(argc, argv, NULL, options, usage_str, commit_argc = parse_options(argc, argv, NULL, options, usage_str,
@ -167,7 +167,7 @@ static char *get_encoding(const char *message)
const char *p = message, *eol; const char *p = message, *eol;
if (!p) if (!p)
die ("Could not read commit message of %s", die (_("Could not read commit message of %s"),
sha1_to_hex(commit->object.sha1)); sha1_to_hex(commit->object.sha1));
while (*p && *p != '\n') { while (*p && *p != '\n') {
for (eol = p + 1; *eol && *eol != '\n'; eol++) for (eol = p + 1; *eol && *eol != '\n'; eol++)
@ -206,10 +206,10 @@ static void write_cherry_pick_head(void)
fd = open(git_path("CHERRY_PICK_HEAD"), O_WRONLY | O_CREAT, 0666); fd = open(git_path("CHERRY_PICK_HEAD"), O_WRONLY | O_CREAT, 0666);
if (fd < 0) if (fd < 0)
die_errno("Could not open '%s' for writing", die_errno(_("Could not open '%s' for writing"),
git_path("CHERRY_PICK_HEAD")); git_path("CHERRY_PICK_HEAD"));
if (write_in_full(fd, buf.buf, buf.len) != buf.len || close(fd)) if (write_in_full(fd, buf.buf, buf.len) != buf.len || close(fd))
die_errno("Could not write to '%s'", git_path("CHERRY_PICK_HEAD")); die_errno(_("Could not write to '%s'"), git_path("CHERRY_PICK_HEAD"));
strbuf_release(&buf); strbuf_release(&buf);
} }
@ -249,10 +249,10 @@ static void write_message(struct strbuf *msgbuf, const char *filename)
int msg_fd = hold_lock_file_for_update(&msg_file, filename, int msg_fd = hold_lock_file_for_update(&msg_file, filename,
LOCK_DIE_ON_ERROR); LOCK_DIE_ON_ERROR);
if (write_in_full(msg_fd, msgbuf->buf, msgbuf->len) < 0) if (write_in_full(msg_fd, msgbuf->buf, msgbuf->len) < 0)
die_errno("Could not write to %s.", filename); die_errno(_("Could not write to %s."), filename);
strbuf_release(msgbuf); strbuf_release(msgbuf);
if (commit_lock_file(&msg_file) < 0) 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) static struct tree *empty_tree(void)
@ -270,11 +270,19 @@ static NORETURN void die_dirty_index(const char *me)
if (read_cache_unmerged()) { if (read_cache_unmerged()) {
die_resolve_conflict(me); die_resolve_conflict(me);
} else { } else {
if (advice_commit_before_merge) if (advice_commit_before_merge) {
die("Your local changes would be overwritten by %s.\n" if (action == REVERT)
"Please, commit your changes or stash them to proceed.", me); die(_("Your local changes would be overwritten by revert.\n"
"Please, commit your changes or stash them to proceed."));
else else
die("Your local changes would be overwritten by %s.\n", me); die(_("Your local changes would be overwritten by cherry-pick.\n"
"Please, commit your changes or stash them to proceed."));
} else {
if (action == REVERT)
die(_("Your local changes would be overwritten by revert.\n"));
else
die(_("Your local changes would be overwritten by cherry-pick.\n"));
}
} }
} }
@ -322,7 +330,8 @@ static int do_recursive_merge(struct commit *base, struct commit *next,
if (active_cache_changed && if (active_cache_changed &&
(write_cache(index_fd, active_cache, active_nr) || (write_cache(index_fd, active_cache, active_nr) ||
commit_locked_index(&index_lock))) commit_locked_index(&index_lock)))
die("%s: Unable to write new index file", me); /* TRANSLATORS: %s will be "revert" or "cherry-pick" */
die(_("%s: Unable to write new index file"), me);
rollback_lock_file(&index_lock); rollback_lock_file(&index_lock);
if (!clean) { if (!clean) {
@ -388,10 +397,10 @@ static int do_pick_commit(void)
* to work on. * to work on.
*/ */
if (write_cache_as_tree(head, 0, NULL)) if (write_cache_as_tree(head, 0, NULL))
die ("Your index file is unmerged."); die (_("Your index file is unmerged."));
} else { } else {
if (get_sha1("HEAD", head)) if (get_sha1("HEAD", head))
die ("You do not have a valid HEAD"); die (_("You do not have a valid HEAD"));
if (index_differs_from("HEAD", 0)) if (index_differs_from("HEAD", 0))
die_dirty_index(me); die_dirty_index(me);
} }
@ -399,7 +408,7 @@ static int do_pick_commit(void)
if (!commit->parents) { if (!commit->parents) {
if (action == REVERT) if (action == REVERT)
die ("Cannot revert a root commit"); die (_("Cannot revert a root commit"));
parent = NULL; parent = NULL;
} }
else if (commit->parents->next) { else if (commit->parents->next) {
@ -408,7 +417,7 @@ static int do_pick_commit(void)
struct commit_list *p; struct commit_list *p;
if (!mainline) if (!mainline)
die("Commit %s is a merge but no -m option was given.", die(_("Commit %s is a merge but no -m option was given."),
sha1_to_hex(commit->object.sha1)); sha1_to_hex(commit->object.sha1));
for (cnt = 1, p = commit->parents; for (cnt = 1, p = commit->parents;
@ -416,11 +425,11 @@ static int do_pick_commit(void)
cnt++) cnt++)
p = p->next; p = p->next;
if (cnt != mainline || !p) if (cnt != mainline || !p)
die("Commit %s does not have parent %d", die(_("Commit %s does not have parent %d"),
sha1_to_hex(commit->object.sha1), mainline); sha1_to_hex(commit->object.sha1), mainline);
parent = p->item; parent = p->item;
} else if (0 < mainline) } else if (0 < mainline)
die("Mainline was specified but commit %s is not a merge.", die(_("Mainline was specified but commit %s is not a merge."),
sha1_to_hex(commit->object.sha1)); sha1_to_hex(commit->object.sha1));
else else
parent = commit->parents->item; parent = commit->parents->item;
@ -429,11 +438,13 @@ static int do_pick_commit(void)
return fast_forward_to(commit->object.sha1, head); return fast_forward_to(commit->object.sha1, head);
if (parent && parse_commit(parent) < 0) if (parent && parse_commit(parent) < 0)
die("%s: cannot parse parent commit %s", /* TRANSLATORS: The first %s will be "revert" or
"cherry-pick", the second %s a SHA1 */
die(_("%s: cannot parse parent commit %s"),
me, sha1_to_hex(parent->object.sha1)); me, sha1_to_hex(parent->object.sha1));
if (get_message(commit->buffer, &msg) != 0) if (get_message(commit->buffer, &msg) != 0)
die("Cannot get commit message for %s", die(_("Cannot get commit message for %s"),
sha1_to_hex(commit->object.sha1)); sha1_to_hex(commit->object.sha1));
/* /*
@ -494,8 +505,9 @@ static int do_pick_commit(void)
} }
if (res) { if (res) {
error("could not %s %s... %s", error(action == REVERT
action == REVERT ? "revert" : "apply", ? _("could not revert %s... %s")
: _("could not apply %s... %s"),
find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV),
msg.subject); msg.subject);
print_advice(); print_advice();
@ -525,10 +537,10 @@ static void prepare_revs(struct rev_info *revs)
usage(*revert_or_cherry_pick_usage()); usage(*revert_or_cherry_pick_usage());
if (prepare_revision_walk(revs)) if (prepare_revision_walk(revs))
die("revision walk setup failed"); die(_("revision walk setup failed"));
if (!revs->commits) if (!revs->commits)
die("empty commit set passed"); die(_("empty commit set passed"));
} }
static void read_and_refresh_cache(const char *me) static void read_and_refresh_cache(const char *me)
@ -536,12 +548,12 @@ static void read_and_refresh_cache(const char *me)
static struct lock_file index_lock; static struct lock_file index_lock;
int index_fd = hold_locked_index(&index_lock, 0); int index_fd = hold_locked_index(&index_lock, 0);
if (read_index_preload(&the_index, NULL) < 0) if (read_index_preload(&the_index, NULL) < 0)
die("git %s: failed to read the index", me); die(_("git %s: failed to read the index"), me);
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL); refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, NULL, NULL, NULL);
if (the_index.cache_changed) { if (the_index.cache_changed) {
if (write_index(&the_index, index_fd) || if (write_index(&the_index, index_fd) ||
commit_locked_index(&index_lock)) commit_locked_index(&index_lock))
die("git %s: failed to refresh the index", me); die(_("git %s: failed to refresh the index"), me);
} }
rollback_lock_file(&index_lock); rollback_lock_file(&index_lock);
} }
@ -557,13 +569,13 @@ static int revert_or_cherry_pick(int argc, const char **argv)
if (allow_ff) { if (allow_ff) {
if (signoff) if (signoff)
die("cherry-pick --ff cannot be used with --signoff"); die(_("cherry-pick --ff cannot be used with --signoff"));
if (no_commit) if (no_commit)
die("cherry-pick --ff cannot be used with --no-commit"); die(_("cherry-pick --ff cannot be used with --no-commit"));
if (no_replay) if (no_replay)
die("cherry-pick --ff cannot be used with -x"); die(_("cherry-pick --ff cannot be used with -x"));
if (edit) if (edit)
die("cherry-pick --ff cannot be used with --edit"); die(_("cherry-pick --ff cannot be used with --edit"));
} }
read_and_refresh_cache(me); read_and_refresh_cache(me);

View File

@ -106,19 +106,19 @@ static int check_local_mod(unsigned char *head, int index_only)
*/ */
if (local_changes && staged_changes) { if (local_changes && staged_changes) {
if (!index_only || !(ce->ce_flags & CE_INTENT_TO_ADD)) if (!index_only || !(ce->ce_flags & CE_INTENT_TO_ADD))
errs = error("'%s' has staged content different " errs = error(_("'%s' has staged content different "
"from both the file and the HEAD\n" "from both the file and the HEAD\n"
"(use -f to force removal)", name); "(use -f to force removal)"), name);
} }
else if (!index_only) { else if (!index_only) {
if (staged_changes) if (staged_changes)
errs = error("'%s' has changes staged in the index\n" errs = error(_("'%s' has changes staged in the index\n"
"(use --cached to keep the file, " "(use --cached to keep the file, "
"or -f to force removal)", name); "or -f to force removal)"), name);
if (local_changes) if (local_changes)
errs = error("'%s' has local modifications\n" errs = error(_("'%s' has local modifications\n"
"(use --cached to keep the file, " "(use --cached to keep the file, "
"or -f to force removal)", name); "or -f to force removal)"), name);
} }
} }
return errs; return errs;
@ -159,7 +159,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
newfd = hold_locked_index(&lock_file, 1); newfd = hold_locked_index(&lock_file, 1);
if (read_cache() < 0) if (read_cache() < 0)
die("index file corrupt"); die(_("index file corrupt"));
pathspec = get_pathspec(prefix, argv); pathspec = get_pathspec(prefix, argv);
refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL); refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL);
@ -183,7 +183,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
for (i = 0; (match = pathspec[i]) != NULL ; i++) { for (i = 0; (match = pathspec[i]) != NULL ; i++) {
if (!seen[i]) { if (!seen[i]) {
if (!ignore_unmatch) { if (!ignore_unmatch) {
die("pathspec '%s' did not match any files", die(_("pathspec '%s' did not match any files"),
match); match);
} }
} }
@ -191,7 +191,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
seen_any = 1; seen_any = 1;
} }
if (!recursive && seen[i] == MATCHED_RECURSIVELY) if (!recursive && seen[i] == MATCHED_RECURSIVELY)
die("not removing '%s' recursively without -r", die(_("not removing '%s' recursively without -r"),
*match ? match : "."); *match ? match : ".");
} }
@ -227,7 +227,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
printf("rm '%s'\n", path); printf("rm '%s'\n", path);
if (remove_file_from_cache(path)) if (remove_file_from_cache(path))
die("git rm: unable to remove %s", path); die(_("git rm: unable to remove %s"), path);
} }
if (show_only) if (show_only)
@ -257,7 +257,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
if (active_cache_changed) { if (active_cache_changed) {
if (write_cache(newfd, active_cache, active_nr) || if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(&lock_file)) commit_locked_index(&lock_file))
die("Unable to write new index file"); die(_("Unable to write new index file"));
} }
return 0; return 0;

View File

@ -158,7 +158,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
buffer = eol; buffer = eol;
} }
if (!author) if (!author)
die("Missing author: %s", die(_("Missing author: %s"),
sha1_to_hex(commit->object.sha1)); sha1_to_hex(commit->object.sha1));
if (log->user_format) { if (log->user_format) {
struct pretty_print_context ctx = {0}; struct pretty_print_context ctx = {0};
@ -181,7 +181,7 @@ static void get_from_rev(struct rev_info *rev, struct shortlog *log)
struct commit *commit; struct commit *commit;
if (prepare_revision_walk(rev)) if (prepare_revision_walk(rev))
die("revision walk setup failed"); die(_("revision walk setup failed"));
while ((commit = get_revision(rev)) != NULL) while ((commit = get_revision(rev)) != NULL)
shortlog_add_commit(log, commit); shortlog_add_commit(log, commit);
} }
@ -284,7 +284,7 @@ parse_done:
argc = parse_options_end(&ctx); argc = parse_options_end(&ctx);
if (setup_revisions(argc, argv, &rev, NULL) != 1) { if (setup_revisions(argc, argv, &rev, NULL) != 1) {
error("unrecognized argument: %s", argv[1]); error(_("unrecognized argument: %s"), argv[1]);
usage_with_options(shortlog_usage, options); usage_with_options(shortlog_usage, options);
} }
@ -296,7 +296,7 @@ parse_done:
add_head_to_pending(&rev); add_head_to_pending(&rev);
if (rev.pending.nr == 0) { if (rev.pending.nr == 0) {
if (isatty(0)) if (isatty(0))
fprintf(stderr, "(reading log message from standard input)\n"); fprintf(stderr, _("(reading log message from standard input)\n"));
read_from_stdin(&log); read_from_stdin(&log);
} }
else else

View File

@ -118,12 +118,12 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn)
for (p = argv; *p; p++) { for (p = argv; *p; p++) {
if (snprintf(ref, sizeof(ref), "refs/tags/%s", *p) if (snprintf(ref, sizeof(ref), "refs/tags/%s", *p)
>= sizeof(ref)) { >= sizeof(ref)) {
error("tag name too long: %.*s...", 50, *p); error(_("tag name too long: %.*s..."), 50, *p);
had_error = 1; had_error = 1;
continue; continue;
} }
if (!resolve_ref(ref, sha1, 1, NULL)) { if (!resolve_ref(ref, sha1, 1, NULL)) {
error("tag '%s' not found.", *p); error(_("tag '%s' not found."), *p);
had_error = 1; had_error = 1;
continue; continue;
} }
@ -138,7 +138,7 @@ static int delete_tag(const char *name, const char *ref,
{ {
if (delete_ref(ref, sha1, 0)) if (delete_ref(ref, sha1, 0))
return 1; return 1;
printf("Deleted tag '%s' (was %s)\n", name, find_unique_abbrev(sha1, DEFAULT_ABBREV)); printf(_("Deleted tag '%s' (was %s)\n"), name, find_unique_abbrev(sha1, DEFAULT_ABBREV));
return 0; return 0;
} }
@ -150,7 +150,7 @@ static int verify_tag(const char *name, const char *ref,
argv_verify_tag[2] = sha1_to_hex(sha1); argv_verify_tag[2] = sha1_to_hex(sha1);
if (run_command_v_opt(argv_verify_tag, RUN_GIT_CMD)) if (run_command_v_opt(argv_verify_tag, RUN_GIT_CMD))
return error("could not verify the tag '%s'", name); return error(_("could not verify the tag '%s'"), name);
return 0; return 0;
} }
@ -165,7 +165,7 @@ static int do_sign(struct strbuf *buffer)
if (!*signingkey) { if (!*signingkey) {
if (strlcpy(signingkey, git_committer_info(IDENT_ERROR_ON_NO_NAME), if (strlcpy(signingkey, git_committer_info(IDENT_ERROR_ON_NO_NAME),
sizeof(signingkey)) > sizeof(signingkey) - 1) sizeof(signingkey)) > sizeof(signingkey) - 1)
return error("committer info too long."); return error(_("committer info too long."));
bracket = strchr(signingkey, '>'); bracket = strchr(signingkey, '>');
if (bracket) if (bracket)
bracket[1] = '\0'; bracket[1] = '\0';
@ -185,20 +185,20 @@ static int do_sign(struct strbuf *buffer)
args[3] = NULL; args[3] = NULL;
if (start_command(&gpg)) if (start_command(&gpg))
return error("could not run gpg."); return error(_("could not run gpg."));
if (write_in_full(gpg.in, buffer->buf, buffer->len) != buffer->len) { if (write_in_full(gpg.in, buffer->buf, buffer->len) != buffer->len) {
close(gpg.in); close(gpg.in);
close(gpg.out); close(gpg.out);
finish_command(&gpg); finish_command(&gpg);
return error("gpg did not accept the tag data"); return error(_("gpg did not accept the tag data"));
} }
close(gpg.in); close(gpg.in);
len = strbuf_read(buffer, gpg.out, 1024); len = strbuf_read(buffer, gpg.out, 1024);
close(gpg.out); close(gpg.out);
if (finish_command(&gpg) || !len || len < 0) if (finish_command(&gpg) || !len || len < 0)
return error("gpg failed to sign the tag"); return error(_("gpg failed to sign the tag"));
/* Strip CR from the line endings, in case we are on Windows. */ /* Strip CR from the line endings, in case we are on Windows. */
for (i = j = 0; i < buffer->len; i++) for (i = j = 0; i < buffer->len; i++)
@ -213,15 +213,15 @@ static int do_sign(struct strbuf *buffer)
} }
static const char tag_template[] = static const char tag_template[] =
"\n" N_("\n"
"#\n" "#\n"
"# Write a tag message\n" "# Write a tag message\n"
"#\n"; "#\n");
static void set_signingkey(const char *value) static void set_signingkey(const char *value)
{ {
if (strlcpy(signingkey, value, sizeof(signingkey)) >= sizeof(signingkey)) if (strlcpy(signingkey, value, sizeof(signingkey)) >= sizeof(signingkey))
die("signing key value too long (%.10s...)", value); die(_("signing key value too long (%.10s...)"), value);
} }
static int git_tag_config(const char *var, const char *value, void *cb) static int git_tag_config(const char *var, const char *value, void *cb)
@ -261,9 +261,9 @@ static void write_tag_body(int fd, const unsigned char *sha1)
static int build_tag_object(struct strbuf *buf, int sign, unsigned char *result) static int build_tag_object(struct strbuf *buf, int sign, unsigned char *result)
{ {
if (sign && do_sign(buf) < 0) if (sign && do_sign(buf) < 0)
return error("unable to sign the tag"); return error(_("unable to sign the tag"));
if (write_sha1_file(buf->buf, buf->len, tag_type, result) < 0) if (write_sha1_file(buf->buf, buf->len, tag_type, result) < 0)
return error("unable to write tag file"); return error(_("unable to write tag file"));
return 0; return 0;
} }
@ -278,7 +278,7 @@ static void create_tag(const unsigned char *object, const char *tag,
type = sha1_object_info(object, NULL); type = sha1_object_info(object, NULL);
if (type <= OBJ_NONE) if (type <= OBJ_NONE)
die("bad object type."); die(_("bad object type."));
header_len = snprintf(header_buf, sizeof(header_buf), header_len = snprintf(header_buf, sizeof(header_buf),
"object %s\n" "object %s\n"
@ -291,7 +291,7 @@ static void create_tag(const unsigned char *object, const char *tag,
git_committer_info(IDENT_ERROR_ON_NO_NAME)); git_committer_info(IDENT_ERROR_ON_NO_NAME));
if (header_len > sizeof(header_buf) - 1) if (header_len > sizeof(header_buf) - 1)
die("tag header too big."); die(_("tag header too big."));
if (!message) { if (!message) {
int fd; int fd;
@ -300,17 +300,17 @@ static void create_tag(const unsigned char *object, const char *tag,
path = git_pathdup("TAG_EDITMSG"); path = git_pathdup("TAG_EDITMSG");
fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600); fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (fd < 0) if (fd < 0)
die_errno("could not create file '%s'", path); die_errno(_("could not create file '%s'"), path);
if (!is_null_sha1(prev)) if (!is_null_sha1(prev))
write_tag_body(fd, prev); write_tag_body(fd, prev);
else else
write_or_die(fd, tag_template, strlen(tag_template)); write_or_die(fd, _(tag_template), strlen(_(tag_template)));
close(fd); close(fd);
if (launch_editor(path, buf, NULL)) { if (launch_editor(path, buf, NULL)) {
fprintf(stderr, fprintf(stderr,
"Please supply the message using either -m or -F option.\n"); _("Please supply the message using either -m or -F option.\n"));
exit(1); exit(1);
} }
} }
@ -318,13 +318,13 @@ static void create_tag(const unsigned char *object, const char *tag,
stripspace(buf, 1); stripspace(buf, 1);
if (!message && !buf->len) if (!message && !buf->len)
die("no tag message?"); die(_("no tag message?"));
strbuf_insert(buf, 0, header_buf, header_len); strbuf_insert(buf, 0, header_buf, header_len);
if (build_tag_object(buf, sign, result) < 0) { if (build_tag_object(buf, sign, result) < 0) {
if (path) if (path)
fprintf(stderr, "The tag message has been left in %s\n", fprintf(stderr, _("The tag message has been left in %s\n"),
path); path);
exit(128); exit(128);
} }
@ -417,9 +417,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
return list_tags(argv[0], lines == -1 ? 0 : lines, return list_tags(argv[0], lines == -1 ? 0 : lines,
with_commit); with_commit);
if (lines != -1) if (lines != -1)
die("-n option is only allowed with -l."); die(_("-n option is only allowed with -l."));
if (with_commit) if (with_commit)
die("--contains option is only allowed with -l."); die(_("--contains option is only allowed with -l."));
if (delete) if (delete)
return for_each_tag_name(argv, delete_tag); return for_each_tag_name(argv, delete_tag);
if (verify) if (verify)
@ -427,17 +427,17 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
if (msg.given || msgfile) { if (msg.given || msgfile) {
if (msg.given && msgfile) if (msg.given && msgfile)
die("only one -F or -m option is allowed."); die(_("only one -F or -m option is allowed."));
annotate = 1; annotate = 1;
if (msg.given) if (msg.given)
strbuf_addbuf(&buf, &(msg.buf)); strbuf_addbuf(&buf, &(msg.buf));
else { else {
if (!strcmp(msgfile, "-")) { if (!strcmp(msgfile, "-")) {
if (strbuf_read(&buf, 0, 1024) < 0) if (strbuf_read(&buf, 0, 1024) < 0)
die_errno("cannot read '%s'", msgfile); die_errno(_("cannot read '%s'"), msgfile);
} else { } else {
if (strbuf_read_file(&buf, msgfile, 1024) < 0) if (strbuf_read_file(&buf, msgfile, 1024) < 0)
die_errno("could not open or read '%s'", die_errno(_("could not open or read '%s'"),
msgfile); msgfile);
} }
} }
@ -447,20 +447,20 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
object_ref = argc == 2 ? argv[1] : "HEAD"; object_ref = argc == 2 ? argv[1] : "HEAD";
if (argc > 2) if (argc > 2)
die("too many params"); die(_("too many params"));
if (get_sha1(object_ref, object)) if (get_sha1(object_ref, object))
die("Failed to resolve '%s' as a valid ref.", object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
if (snprintf(ref, sizeof(ref), "refs/tags/%s", tag) > sizeof(ref) - 1) if (snprintf(ref, sizeof(ref), "refs/tags/%s", tag) > sizeof(ref) - 1)
die("tag name too long: %.*s...", 50, tag); die(_("tag name too long: %.*s..."), 50, tag);
if (check_ref_format(ref)) if (check_ref_format(ref))
die("'%s' is not a valid tag name.", tag); die(_("'%s' is not a valid tag name."), tag);
if (!resolve_ref(ref, prev, 1, NULL)) if (!resolve_ref(ref, prev, 1, NULL))
hashclr(prev); hashclr(prev);
else if (!force) else if (!force)
die("tag '%s' already exists", tag); die(_("tag '%s' already exists"), tag);
if (annotate) if (annotate)
create_tag(object, tag, &buf, msg.given || msgfile, create_tag(object, tag, &buf, msg.given || msgfile,
@ -468,11 +468,11 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
lock = lock_any_ref_for_update(ref, prev, 0); lock = lock_any_ref_for_update(ref, prev, 0);
if (!lock) if (!lock)
die("%s: cannot lock the ref", ref); die(_("%s: cannot lock the ref"), ref);
if (write_ref_sha1(lock, object, NULL) < 0) if (write_ref_sha1(lock, object, NULL) < 0)
die("%s: cannot update the ref", ref); die(_("%s: cannot update the ref"), ref);
if (force && hashcmp(prev, object)) if (force && hashcmp(prev, object))
printf("Updated tag '%s' (was %s)\n", tag, find_unique_abbrev(prev, DEFAULT_ABBREV)); printf(_("Updated tag '%s' (was %s)\n"), tag, find_unique_abbrev(prev, DEFAULT_ABBREV));
strbuf_release(&buf); strbuf_release(&buf);
return 0; return 0;

View File

@ -157,7 +157,7 @@ test_http_push_nonff() {
grep "^ ! \[rejected\][ ]*$BRANCH -> $BRANCH (non-fast-forward)$" output grep "^ ! \[rejected\][ ]*$BRANCH -> $BRANCH (non-fast-forward)$" output
' '
test_expect_success 'non-fast-forward push shows help message' ' test_expect_success C_LOCALE_OUTPUT 'non-fast-forward push shows help message' '
grep "To prevent you from losing history, non-fast-forward updates were rejected" \ grep "To prevent you from losing history, non-fast-forward updates were rejected" \
output output
' '

View File

@ -180,7 +180,7 @@ test_expect_success 'GIT_DIR & GIT_WORK_TREE (2)' '
fi fi
' '
test_expect_success 'reinit' ' test_expect_success C_LOCALE_OUTPUT 'reinit' '
( (
sane_unset GIT_CONFIG GIT_WORK_TREE GIT_CONFIG && sane_unset GIT_CONFIG GIT_WORK_TREE GIT_CONFIG &&

View File

@ -163,7 +163,10 @@ test_expect_success 'git resolve' '
git checkout mybranch && git checkout mybranch &&
git merge -m "Merge upstream changes." master | git merge -m "Merge upstream changes." master |
sed -e "1s/[0-9a-f]\{7\}/VARIABLE/g" \ sed -e "1s/[0-9a-f]\{7\}/VARIABLE/g" \
-e "s/^Fast[- ]forward /FASTFORWARD /" >resolve.output && -e "s/^Fast[- ]forward /FASTFORWARD /" >resolve.output
'
test_expect_success C_LOCALE_OUTPUT 'git resolve output' '
test_cmp resolve.expect resolve.output test_cmp resolve.expect resolve.output
' '

View File

@ -111,7 +111,7 @@ test_expect_success 'touch and then add explicitly' '
' '
test_expect_success 'add -n -u should not add but just report' ' test_expect_success C_LOCALE_OUTPUT 'add -n -u should not add but just report' '
( (
echo "add '\''check'\''" && echo "add '\''check'\''" &&

View File

@ -31,18 +31,21 @@ do
rm -f .git/index && rm -f .git/index &&
test_must_fail git add "$i" 2>err && test_must_fail git add "$i" 2>err &&
git ls-files "$i" >out && git ls-files "$i" >out &&
! test -s out && ! test -s out
grep -e "Use -f if" err && '
cat err
test_expect_success C_LOCALE_OUTPUT "complaints for ignored $i output" '
grep -e "Use -f if" err
' '
test_expect_success "complaints for ignored $i with unignored file" ' test_expect_success "complaints for ignored $i with unignored file" '
rm -f .git/index && rm -f .git/index &&
test_must_fail git add "$i" file 2>err && test_must_fail git add "$i" file 2>err &&
git ls-files "$i" >out && git ls-files "$i" >out &&
! test -s out && ! test -s out
grep -e "Use -f if" err && '
cat err test_expect_success C_LOCALE_OUTPUT "complaints for ignored $i with unignored file output" '
grep -e "Use -f if" err
' '
done done
@ -54,9 +57,14 @@ do
cd dir && cd dir &&
test_must_fail git add "$i" 2>err && test_must_fail git add "$i" 2>err &&
git ls-files "$i" >out && git ls-files "$i" >out &&
! test -s out && ! test -s out
grep -e "Use -f if" err && )
cat err '
test_expect_success C_LOCALE_OUTPUT "complaints for ignored $i in dir output" '
(
cd dir &&
grep -e "Use -f if" err
) )
' '
done done
@ -69,9 +77,14 @@ do
cd sub && cd sub &&
test_must_fail git add "$i" 2>err && test_must_fail git add "$i" 2>err &&
git ls-files "$i" >out && git ls-files "$i" >out &&
! test -s out && ! test -s out
grep -e "Use -f if" err && )
cat err '
test_expect_success C_LOCALE_OUTPUT "complaints for ignored $i in sub output" '
(
cd sub &&
grep -e "Use -f if" err
) )
' '
done done

View File

@ -312,7 +312,7 @@ test_expect_success 'merge-recursive result' '
' '
test_expect_success 'fail if the index has unresolved entries' ' test_expect_success C_LOCALE_OUTPUT 'fail if the index has unresolved entries' '
rm -fr [abcd] && rm -fr [abcd] &&
git checkout -f "$c1" && git checkout -f "$c1" &&

View File

@ -203,7 +203,7 @@ test_expect_success 'test deleting branch deletes branch config' \
test -z "$(git config branch.my7.remote)" && test -z "$(git config branch.my7.remote)" &&
test -z "$(git config branch.my7.merge)"' test -z "$(git config branch.my7.merge)"'
test_expect_success 'test deleting branch without config' \ test_expect_success C_LOCALE_OUTPUT 'test deleting branch without config' \
'git branch my7 s && 'git branch my7 s &&
sha1=$(git rev-parse my7 | cut -c 1-7) && sha1=$(git rev-parse my7 | cut -c 1-7) &&
test "$(git branch -d my7 2>&1)" = "Deleted branch my7 (was $sha1)."' test "$(git branch -d my7 2>&1)" = "Deleted branch my7 (was $sha1)."'

View File

@ -72,7 +72,7 @@ cat >expect <<'EOF'
branch-two branch-two
master master
EOF EOF
test_expect_success 'git branch shows detached HEAD properly' ' test_expect_success C_LOCALE_OUTPUT 'git branch shows detached HEAD properly' '
git checkout HEAD^0 && git checkout HEAD^0 &&
git branch >actual && git branch >actual &&
test_cmp expect actual test_cmp expect actual

View File

@ -91,7 +91,7 @@ test_expect_success 'cherry-pick on stat-dirty working tree' '
) )
' '
test_expect_success 'revert forbidden on dirty working tree' ' test_expect_success C_LOCALE_OUTPUT 'revert forbidden on dirty working tree' '
echo content >extra_file && echo content >extra_file &&
git add extra_file && git add extra_file &&

View File

@ -44,7 +44,7 @@ test_expect_success 'failed cherry-pick does not advance HEAD' '
test "$head" = "$newhead" test "$head" = "$newhead"
' '
test_expect_success 'advice from failed cherry-pick' " test_expect_success C_LOCALE_OUTPUT 'advice from failed cherry-pick' "
pristine_detach initial && pristine_detach initial &&
picked=\$(git rev-parse --short picked) && picked=\$(git rev-parse --short picked) &&

View File

@ -268,8 +268,12 @@ test_expect_success 'git add --dry-run of existing changed file' "
test_expect_success 'git add --dry-run of non-existing file' " test_expect_success 'git add --dry-run of non-existing file' "
echo ignored-file >>.gitignore && echo ignored-file >>.gitignore &&
test_must_fail git add --dry-run track-this ignored-file >actual 2>&1 && test_must_fail git add --dry-run track-this ignored-file >actual 2>&1
echo \"fatal: pathspec 'ignored-file' did not match any files\" | test_cmp - actual "
test_expect_success C_LOCALE_OUTPUT 'git add --dry-run of an existing file output' "
echo \"fatal: pathspec 'ignored-file' did not match any files\" >expect &&
test_cmp expect actual
" "
cat >expect.err <<\EOF cat >expect.err <<\EOF
@ -283,7 +287,10 @@ add 'track-this'
EOF EOF
test_expect_success 'git add --dry-run --ignore-missing of non-existing file' ' test_expect_success 'git add --dry-run --ignore-missing of non-existing file' '
test_must_fail git add --dry-run --ignore-missing track-this ignored-file >actual.out 2>actual.err && test_must_fail git add --dry-run --ignore-missing track-this ignored-file >actual.out 2>actual.err
'
test_expect_success C_LOCALE_OUTPUT 'git add --dry-run --ignore-missing of non-existing file output' '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '

View File

@ -64,7 +64,7 @@ test_expect_success \
'validate the output.' \ 'validate the output.' \
'compare_diff_patch current expected' 'compare_diff_patch current expected'
test_expect_success 'favour same basenames over different ones' ' test_expect_success C_LOCALE_OUTPUT 'favour same basenames over different ones' '
cp path1 another-path && cp path1 another-path &&
git add another-path && git add another-path &&
git commit -m 1 && git commit -m 1 &&
@ -73,7 +73,7 @@ test_expect_success 'favour same basenames over different ones' '
git mv another-path subdir/path1 && git mv another-path subdir/path1 &&
git status | grep "renamed: .*path1 -> subdir/path1"' git status | grep "renamed: .*path1 -> subdir/path1"'
test_expect_success 'favour same basenames even with minor differences' ' test_expect_success C_LOCALE_OUTPUT 'favour same basenames even with minor differences' '
git show HEAD:path1 | sed "s/15/16/" > subdir/path1 && git show HEAD:path1 | sed "s/15/16/" > subdir/path1 &&
git status | grep "renamed: .*path1 -> subdir/path1"' git status | grep "renamed: .*path1 -> subdir/path1"'

View File

@ -614,7 +614,7 @@ echo "fatal: --name-only does not make sense" > expect.name-only
echo "fatal: --name-status does not make sense" > expect.name-status echo "fatal: --name-status does not make sense" > expect.name-status
echo "fatal: --check does not make sense" > expect.check echo "fatal: --check does not make sense" > expect.check
test_expect_success 'options no longer allowed for format-patch' ' test_expect_success C_LOCALE_OUTPUT 'options no longer allowed for format-patch' '
test_must_fail git format-patch --name-only 2> output && test_must_fail git format-patch --name-only 2> output &&
test_cmp expect.name-only output && test_cmp expect.name-only output &&
test_must_fail git format-patch --name-status 2> output && test_must_fail git format-patch --name-status 2> output &&

View File

@ -66,7 +66,10 @@ test_expect_success "fetch --recurse-submodules recurses into submodules" '
( (
cd downstream && cd downstream &&
git fetch --recurse-submodules >../actual.out 2>../actual.err git fetch --recurse-submodules >../actual.out 2>../actual.err
) && )
'
test_expect_success C_LOCALE_OUTPUT "fetch --recurse-submodules recurses into submodules: output" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '
@ -95,7 +98,10 @@ test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses i
cd downstream && cd downstream &&
git config -f .gitmodules submodule.submodule.fetchRecurseSubmodules true && git config -f .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
git fetch >../actual.out 2>../actual.err git fetch >../actual.out 2>../actual.err
) && )
'
test_expect_success C_LOCALE_OUTPUT "using fetchRecurseSubmodules=true in .gitmodules recurses into submodules" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '
@ -126,7 +132,10 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
git fetch --recurse-submodules >../actual.out 2>../actual.err && git fetch --recurse-submodules >../actual.out 2>../actual.err &&
git config --unset -f .gitmodules submodule.submodule.fetchRecurseSubmodules && git config --unset -f .gitmodules submodule.submodule.fetchRecurseSubmodules &&
git config --unset submodule.submodule.fetchRecurseSubmodules git config --unset submodule.submodule.fetchRecurseSubmodules
) && )
'
test_expect_success C_LOCALE_OUTPUT "--recurse-submodules overrides fetchRecurseSubmodules setting from .git/config: output" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '
@ -145,13 +154,22 @@ test_expect_success "--dry-run propagates to submodules" '
( (
cd downstream && cd downstream &&
git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
) && )
'
test_expect_success C_LOCALE_OUTPUT "--dry-run propagates to submodules: output" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err && test_cmp expect.err actual.err
'
test_expect_success "Without --dry-run propagates to submodules" '
( (
cd downstream && cd downstream &&
git fetch --recurse-submodules >../actual.out 2>../actual.err git fetch --recurse-submodules >../actual.out 2>../actual.err
) && )
'
test_expect_success C_LOCALE_OUTPUT "Without --dry-run propagates to submodules: output" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '
@ -162,7 +180,10 @@ test_expect_success "recurseSubmodules=true propagates into submodules" '
cd downstream && cd downstream &&
git config fetch.recurseSubmodules true git config fetch.recurseSubmodules true
git fetch >../actual.out 2>../actual.err git fetch >../actual.out 2>../actual.err
) && )
'
test_expect_success C_LOCALE_OUTPUT "recurseSubmodules=true propagates into submodules: output" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '
@ -176,7 +197,10 @@ test_expect_success "--recurse-submodules overrides config in submodule" '
git config fetch.recurseSubmodules false git config fetch.recurseSubmodules false
) && ) &&
git fetch --recurse-submodules >../actual.out 2>../actual.err git fetch --recurse-submodules >../actual.out 2>../actual.err
) && )
'
test_expect_success C_LOCALE_OUTPUT "--recurse-submodules overrides config in submodule: output" '
test_cmp expect.out actual.out && test_cmp expect.out actual.out &&
test_cmp expect.err actual.err test_cmp expect.err actual.err
' '

View File

@ -128,11 +128,14 @@ test_expect_success 'push fails for non-fast-forward refs unmatched by remote he
# push master too; this ensures there is at least one '"'push'"' command to # push master too; this ensures there is at least one '"'push'"' command to
# the remote helper and triggers interaction with the helper. # the remote helper and triggers interaction with the helper.
test_must_fail git push -v origin +master master:retsam >output 2>&1 && test_must_fail git push -v origin +master master:retsam >output 2>&1'
test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper: remote output' '
grep "^ + [a-f0-9]*\.\.\.[a-f0-9]* *master -> master (forced update)$" output && grep "^ + [a-f0-9]*\.\.\.[a-f0-9]* *master -> master (forced update)$" output &&
grep "^ ! \[rejected\] *master -> retsam (non-fast-forward)$" output && grep "^ ! \[rejected\] *master -> retsam (non-fast-forward)$" output
'
test_expect_success C_LOCALE_OUTPUT 'push fails for non-fast-forward refs unmatched by remote helper: our output' '
grep "To prevent you from losing history, non-fast-forward updates were rejected" \ grep "To prevent you from losing history, non-fast-forward updates were rejected" \
output output
' '

View File

@ -31,7 +31,7 @@ test_expect_success 'clone with excess parameters (2)' '
' '
test_expect_success 'output from clone' ' test_expect_success C_LOCALE_OUTPUT 'output from clone' '
rm -fr dst && rm -fr dst &&
git clone -n "file://$(pwd)/src" dst >output && git clone -n "file://$(pwd)/src" dst >output &&
test $(grep Clon output | wc -l) = 1 test $(grep Clon output | wc -l) = 1

View File

@ -42,7 +42,7 @@ b3 behind 1
b4 ahead 2 b4 ahead 2
EOF EOF
test_expect_success 'branch -v' ' test_expect_success C_LOCALE_OUTPUT 'branch -v' '
( (
cd test && cd test &&
git branch -v git branch -v

View File

@ -123,7 +123,7 @@ cat - >err.expect <<EOF
warning: tag 'A' is really 'Q' here warning: tag 'A' is really 'Q' here
EOF EOF
check_describe A-* HEAD check_describe A-* HEAD
test_expect_success 'warning was displayed for Q' ' test_expect_success C_LOCALE_OUTPUT 'warning was displayed for Q' '
test_cmp err.expect err.actual test_cmp err.expect err.actual
' '
test_expect_success 'rename tag Q back to A' ' test_expect_success 'rename tag Q back to A' '

View File

@ -1121,6 +1121,7 @@ test_expect_success \
' '
test_expect_success \ test_expect_success \
C_LOCALE_OUTPUT \
'message in editor has initial comment: first line' ' 'message in editor has initial comment: first line' '
# check the first line --- should be empty # check the first line --- should be empty
echo >first.expect && echo >first.expect &&

View File

@ -124,13 +124,13 @@ cat >expected <<EOF
Would remove expected Would remove expected
Would remove result Would remove result
EOF EOF
test_expect_success 'git-clean, absent case' ' test_expect_success C_LOCALE_OUTPUT 'git-clean, absent case' '
setup_absent && setup_absent &&
git clean -n > result && git clean -n > result &&
test_cmp expected result test_cmp expected result
' '
test_expect_success 'git-clean, dirty case' ' test_expect_success C_LOCALE_OUTPUT 'git-clean, dirty case' '
setup_dirty && setup_dirty &&
git clean -n > result && git clean -n > result &&
test_cmp expected result test_cmp expected result

View File

@ -38,7 +38,7 @@ cat >expect <<EOF
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
EOF EOF
test_expect_success 'M/D conflict does not segfault' ' test_expect_success C_LOCALE_OUTPUT 'M/D conflict does not segfault' '
mkdir mdconflict && mkdir mdconflict &&
( (
cd mdconflict && cd mdconflict &&

View File

@ -423,7 +423,7 @@ Unstaged changes after reset:
M file2 M file2
EOF EOF
test_expect_success '--mixed refreshes the index' ' test_expect_success C_LOCALE_OUTPUT '--mixed refreshes the index' '
echo 123 >> file2 && echo 123 >> file2 &&
git reset --mixed HEAD > output && git reset --mixed HEAD > output &&
test_cmp expect output test_cmp expect output

View File

@ -233,7 +233,7 @@ test_expect_success '"reset --merge HEAD^" is ok with pending merge' '
# working index HEAD target working index HEAD # working index HEAD target working index HEAD
# ---------------------------------------------------- # ----------------------------------------------------
# file1: X U B C --keep (disallowed) # file1: X U B C --keep (disallowed)
test_expect_success '"reset --keep HEAD^" fails with pending merge' ' test_expect_success C_LOCALE_OUTPUT '"reset --keep HEAD^" fails with pending merge' '
git reset --hard third && git reset --hard third &&
test_must_fail git merge branch1 && test_must_fail git merge branch1 &&
test_must_fail git reset --keep HEAD^ 2>err.log && test_must_fail git reset --keep HEAD^ 2>err.log &&
@ -259,7 +259,7 @@ test_expect_success '"reset --merge HEAD" is ok with pending merge' '
# working index HEAD target working index HEAD # working index HEAD target working index HEAD
# ---------------------------------------------------- # ----------------------------------------------------
# file1: X U B B --keep (disallowed) # file1: X U B B --keep (disallowed)
test_expect_success '"reset --keep HEAD" fails with pending merge' ' test_expect_success C_LOCALE_OUTPUT '"reset --keep HEAD" fails with pending merge' '
git reset --hard third && git reset --hard third &&
test_must_fail git merge branch1 && test_must_fail git merge branch1 &&
test_must_fail git reset --keep HEAD 2>err.log && test_must_fail git reset --keep HEAD 2>err.log &&
@ -280,7 +280,7 @@ test_expect_success '--merge is ok with added/deleted merge' '
git diff --exit-code --cached git diff --exit-code --cached
' '
test_expect_success '--keep fails with added/deleted merge' ' test_expect_success C_LOCALE_OUTPUT '--keep fails with added/deleted merge' '
git reset --hard third && git reset --hard third &&
rm -f file2 && rm -f file2 &&
test_must_fail git merge branch3 && test_must_fail git merge branch3 &&

View File

@ -223,7 +223,7 @@ test_expect_success 'checkout --merge --conflict=diff3 <branch>' '
test_cmp two expect test_cmp two expect
' '
test_expect_success 'checkout to detach HEAD (with advice declined)' ' test_expect_success C_LOCALE_OUTPUT 'checkout to detach HEAD (with advice declined)' '
git config advice.detachedHead false && git config advice.detachedHead false &&
git checkout -f renamer && git clean -f && git checkout -f renamer && git clean -f &&
@ -242,7 +242,7 @@ test_expect_success 'checkout to detach HEAD (with advice declined)' '
fi fi
' '
test_expect_success 'checkout to detach HEAD' ' test_expect_success C_LOCALE_OUTPUT 'checkout to detach HEAD' '
git config advice.detachedHead true && git config advice.detachedHead true &&
git checkout -f renamer && git clean -f && git checkout -f renamer && git clean -f &&
git checkout renamer^ 2>messages && git checkout renamer^ 2>messages &&
@ -260,7 +260,7 @@ test_expect_success 'checkout to detach HEAD' '
fi fi
' '
test_expect_success 'checkout to detach HEAD with branchname^' ' test_expect_success C_LOCALE_OUTPUT 'checkout to detach HEAD with branchname^' '
git checkout -f master && git clean -f && git checkout -f master && git clean -f &&
git checkout renamer^ && git checkout renamer^ &&
@ -276,7 +276,7 @@ test_expect_success 'checkout to detach HEAD with branchname^' '
fi fi
' '
test_expect_success 'checkout to detach HEAD with :/message' ' test_expect_success C_LOCALE_OUTPUT 'checkout to detach HEAD with :/message' '
git checkout -f master && git clean -f && git checkout -f master && git clean -f &&
git checkout ":/Initial" && git checkout ":/Initial" &&
@ -292,7 +292,7 @@ test_expect_success 'checkout to detach HEAD with :/message' '
fi fi
' '
test_expect_success 'checkout to detach HEAD with HEAD^0' ' test_expect_success C_LOCALE_OUTPUT 'checkout to detach HEAD with HEAD^0' '
git checkout -f master && git clean -f && git checkout -f master && git clean -f &&
git checkout HEAD^0 && git checkout HEAD^0 &&

View File

@ -110,7 +110,7 @@ test_expect_success 'git clean with prefix' '
' '
test_expect_success 'git clean with relative prefix' ' test_expect_success C_LOCALE_OUTPUT 'git clean with relative prefix' '
mkdir -p build docs && mkdir -p build docs &&
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
@ -125,7 +125,7 @@ test_expect_success 'git clean with relative prefix' '
} }
' '
test_expect_success 'git clean with absolute path' ' test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' '
mkdir -p build docs && mkdir -p build docs &&
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
@ -377,7 +377,7 @@ test_expect_success 'clean.requireForce and -f' '
' '
test_expect_success 'core.excludesfile' ' test_expect_success C_LOCALE_OUTPUT 'core.excludesfile' '
echo excludes >excludes && echo excludes >excludes &&
echo included >included && echo included >included &&

View File

@ -72,7 +72,7 @@ test_expect_success 'adding comments to a template should not commit' '
) )
' '
test_expect_success 'adding real content to a template should commit' ' test_expect_success C_LOCALE_OUTPUT 'adding real content to a template should commit' '
( (
test_set_editor "$TEST_DIRECTORY"/t7500/add-content && test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit --template "$TEMPLATE" git commit --template "$TEMPLATE"
@ -80,7 +80,7 @@ test_expect_success 'adding real content to a template should commit' '
commit_msg_is "template linecommit message" commit_msg_is "template linecommit message"
' '
test_expect_success '-t option should be short for --template' ' test_expect_success C_LOCALE_OUTPUT '-t option should be short for --template' '
echo "short template" > "$TEMPLATE" && echo "short template" > "$TEMPLATE" &&
echo "new content" >> foo && echo "new content" >> foo &&
git add foo && git add foo &&
@ -91,7 +91,7 @@ test_expect_success '-t option should be short for --template' '
commit_msg_is "short templatecommit message" commit_msg_is "short templatecommit message"
' '
test_expect_success 'config-specified template should commit' ' test_expect_success C_LOCALE_OUTPUT 'config-specified template should commit' '
echo "new template" > "$TEMPLATE" && echo "new template" > "$TEMPLATE" &&
git config commit.template "$TEMPLATE" && git config commit.template "$TEMPLATE" &&
echo "more content" >> foo && echo "more content" >> foo &&
@ -290,7 +290,7 @@ test_expect_success 'commit --squash works with -c for same commit' '
commit_msg_is "squash! edited commit" commit_msg_is "squash! edited commit"
' '
test_expect_success 'commit --squash works with editor' ' test_expect_success C_LOCALE_OUTPUT 'commit --squash works with editor' '
commit_for_rebase_autosquash_setup && commit_for_rebase_autosquash_setup &&
test_set_editor "$TEST_DIRECTORY"/t7500/add-content && test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit --squash HEAD~1 && git commit --squash HEAD~1 &&

View File

@ -14,8 +14,11 @@ test_tick
test_expect_success \ test_expect_success \
"initial status" \ "initial status" \
"echo 'bongo bongo' >file && "echo 'bongo bongo' >file &&
git add file && \ git add file"
git status | grep 'Initial commit'"
test_expect_success C_LOCALE_OUTPUT \
"Constructing initial commit" \
"git status | grep 'Initial commit'"
test_expect_success \ test_expect_success \
"fail initial amend" \ "fail initial amend" \

View File

@ -22,7 +22,10 @@ check_summary_oneline() {
SUMMARY_POSTFIX="$(git log -1 --pretty='format:%h')" SUMMARY_POSTFIX="$(git log -1 --pretty='format:%h')"
echo "[$SUMMARY_PREFIX $SUMMARY_POSTFIX] $2" >exp && echo "[$SUMMARY_PREFIX $SUMMARY_POSTFIX] $2" >exp &&
if test_have_prereq C_LOCALE_OUTPUT
then
test_cmp exp act test_cmp exp act
fi
} }
test_expect_success 'output summary format' ' test_expect_success 'output summary format' '
@ -32,7 +35,10 @@ test_expect_success 'output summary format' '
check_summary_oneline "root-commit" "initial" && check_summary_oneline "root-commit" "initial" &&
echo change >>file1 && echo change >>file1 &&
git add file1 && git add file1
'
test_expect_success 'output summary format: root-commit' '
check_summary_oneline "" "a change" check_summary_oneline "" "a change"
' '
@ -215,30 +221,35 @@ test_expect_success 'cleanup commit messages (strip,-F)' '
' '
echo "sample
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit." >expect
test_expect_success 'cleanup commit messages (strip,-F,-e)' ' test_expect_success 'cleanup commit messages (strip,-F,-e)' '
echo >>negative && echo >>negative &&
{ echo;echo sample;echo; } >text && { echo;echo sample;echo; } >text &&
git commit -e -F text -a && git commit -e -F text -a &&
head -n 4 .git/COMMIT_EDITMSG >actual && head -n 4 .git/COMMIT_EDITMSG >actual
test_cmp expect actual '
echo "sample
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit." >expect
test_expect_success C_LOCALE_OUTPUT 'cleanup commit messages (strip,-F,-e): output' '
test_cmp expect actual
' '
echo "# echo "#
# Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> # Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
#" >> expect #" >> expect
test_expect_success 'author different from committer' ' test_expect_success C_LOCALE_OUTPUT 'author different from committer' '
echo >>negative && echo >>negative &&
git commit -e -m "sample" git commit -e -m "sample"
head -n 7 .git/COMMIT_EDITMSG >actual && head -n 7 .git/COMMIT_EDITMSG >actual
'
test_expect_success C_LOCALE_OUTPUT 'author different from committer: output' '
test_cmp expect actual test_cmp expect actual
' '
@ -248,7 +259,7 @@ rm -f expect.tmp
echo "# Committer: echo "# Committer:
#" >> expect #" >> expect
test_expect_success 'committer is automatic' ' test_expect_success C_LOCALE_OUTPUT 'committer is automatic' '
echo >>negative && echo >>negative &&
( (
@ -258,7 +269,10 @@ test_expect_success 'committer is automatic' '
test_must_fail git commit -e -m "sample" test_must_fail git commit -e -m "sample"
) && ) &&
head -n 8 .git/COMMIT_EDITMSG | \ head -n 8 .git/COMMIT_EDITMSG | \
sed "s/^# Committer: .*/# Committer:/" >actual && sed "s/^# Committer: .*/# Committer:/" >actual
'
test_expect_success C_LOCALE_OUTPUT 'committer is automatic: output' '
test_cmp expect actual test_cmp expect actual
' '
@ -370,66 +384,66 @@ try_commit () {
try_commit_status_combo () { try_commit_status_combo () {
test_expect_success 'commit' ' test_expect_success C_LOCALE_OUTPUT 'commit' '
clear_config commit.status && clear_config commit.status &&
try_commit "" && try_commit "" &&
grep "^# Changes to be committed:" .git/COMMIT_EDITMSG grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit' ' test_expect_success C_LOCALE_OUTPUT 'commit' '
clear_config commit.status && clear_config commit.status &&
try_commit "" && try_commit "" &&
grep "^# Changes to be committed:" .git/COMMIT_EDITMSG grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit --status' ' test_expect_success C_LOCALE_OUTPUT 'commit --status' '
clear_config commit.status && clear_config commit.status &&
try_commit --status && try_commit --status &&
grep "^# Changes to be committed:" .git/COMMIT_EDITMSG grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit --no-status' ' test_expect_success C_LOCALE_OUTPUT 'commit --no-status' '
clear_config commit.status && clear_config commit.status &&
try_commit --no-status && try_commit --no-status &&
! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG ! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit with commit.status = yes' ' test_expect_success C_LOCALE_OUTPUT 'commit with commit.status = yes' '
clear_config commit.status && clear_config commit.status &&
git config commit.status yes && git config commit.status yes &&
try_commit "" && try_commit "" &&
grep "^# Changes to be committed:" .git/COMMIT_EDITMSG grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit with commit.status = no' ' test_expect_success C_LOCALE_OUTPUT 'commit with commit.status = no' '
clear_config commit.status && clear_config commit.status &&
git config commit.status no && git config commit.status no &&
try_commit "" && try_commit "" &&
! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG ! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit --status with commit.status = yes' ' test_expect_success C_LOCALE_OUTPUT 'commit --status with commit.status = yes' '
clear_config commit.status && clear_config commit.status &&
git config commit.status yes && git config commit.status yes &&
try_commit --status && try_commit --status &&
grep "^# Changes to be committed:" .git/COMMIT_EDITMSG grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit --no-status with commit.status = yes' ' test_expect_success C_LOCALE_OUTPUT 'commit --no-status with commit.status = yes' '
clear_config commit.status && clear_config commit.status &&
git config commit.status yes && git config commit.status yes &&
try_commit --no-status && try_commit --no-status &&
! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG ! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit --status with commit.status = no' ' test_expect_success C_LOCALE_OUTPUT 'commit --status with commit.status = no' '
clear_config commit.status && clear_config commit.status &&
git config commit.status no && git config commit.status no &&
try_commit --status && try_commit --status &&
grep "^# Changes to be committed:" .git/COMMIT_EDITMSG grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
' '
test_expect_success 'commit --no-status with commit.status = no' ' test_expect_success C_LOCALE_OUTPUT 'commit --no-status with commit.status = no' '
clear_config commit.status && clear_config commit.status &&
git config commit.status no && git config commit.status no &&
try_commit --no-status && try_commit --no-status &&

View File

@ -20,17 +20,17 @@ test_expect_success 'setup' '
git commit -m "Add submodule sub" git commit -m "Add submodule sub"
' '
test_expect_success 'status clean' ' test_expect_success C_LOCALE_OUTPUT 'status clean' '
git status >output && git status >output &&
grep "nothing to commit" output grep "nothing to commit" output
' '
test_expect_success 'commit --dry-run -a clean' ' test_expect_success C_LOCALE_OUTPUT 'commit --dry-run -a clean' '
test_must_fail git commit --dry-run -a >output && test_must_fail git commit --dry-run -a >output &&
grep "nothing to commit" output grep "nothing to commit" output
' '
test_expect_success 'status with modified file in submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with modified file in submodule' '
(cd sub && git reset --hard) && (cd sub && git reset --hard) &&
echo "changed" >sub/foo && echo "changed" >sub/foo &&
git status >output && git status >output &&
@ -46,7 +46,7 @@ test_expect_success 'status with modified file in submodule (porcelain)' '
EOF EOF
' '
test_expect_success 'status with added file in submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with added file in submodule' '
(cd sub && git reset --hard && echo >foo && git add foo) && (cd sub && git reset --hard && echo >foo && git add foo) &&
git status >output && git status >output &&
grep "modified: sub (modified content)" output grep "modified: sub (modified content)" output
@ -60,14 +60,14 @@ test_expect_success 'status with added file in submodule (porcelain)' '
EOF EOF
' '
test_expect_success 'status with untracked file in submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with untracked file in submodule' '
(cd sub && git reset --hard) && (cd sub && git reset --hard) &&
echo "content" >sub/new-file && echo "content" >sub/new-file &&
git status >output && git status >output &&
grep "modified: sub (untracked content)" output grep "modified: sub (untracked content)" output
' '
test_expect_success 'status -uno with untracked file in submodule' ' test_expect_success C_LOCALE_OUTPUT 'status -uno with untracked file in submodule' '
git status -uno >output && git status -uno >output &&
grep "^nothing to commit" output grep "^nothing to commit" output
' '
@ -79,7 +79,7 @@ test_expect_success 'status with untracked file in submodule (porcelain)' '
EOF EOF
' '
test_expect_success 'status with added and untracked file in submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with added and untracked file in submodule' '
(cd sub && git reset --hard && echo >foo && git add foo) && (cd sub && git reset --hard && echo >foo && git add foo) &&
echo "content" >sub/new-file && echo "content" >sub/new-file &&
git status >output && git status >output &&
@ -95,7 +95,7 @@ test_expect_success 'status with added and untracked file in submodule (porcelai
EOF EOF
' '
test_expect_success 'status with modified file in modified submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with modified file in modified submodule' '
(cd sub && git reset --hard) && (cd sub && git reset --hard) &&
rm sub/new-file && rm sub/new-file &&
(cd sub && echo "next change" >foo && git commit -m "next change" foo) && (cd sub && echo "next change" >foo && git commit -m "next change" foo) &&
@ -113,7 +113,7 @@ test_expect_success 'status with modified file in modified submodule (porcelain)
EOF EOF
' '
test_expect_success 'status with added file in modified submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with added file in modified submodule' '
(cd sub && git reset --hard && echo >foo && git add foo) && (cd sub && git reset --hard && echo >foo && git add foo) &&
git status >output && git status >output &&
grep "modified: sub (new commits, modified content)" output grep "modified: sub (new commits, modified content)" output
@ -127,7 +127,7 @@ test_expect_success 'status with added file in modified submodule (porcelain)' '
EOF EOF
' '
test_expect_success 'status with untracked file in modified submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with untracked file in modified submodule' '
(cd sub && git reset --hard) && (cd sub && git reset --hard) &&
echo "content" >sub/new-file && echo "content" >sub/new-file &&
git status >output && git status >output &&
@ -141,7 +141,7 @@ test_expect_success 'status with untracked file in modified submodule (porcelain
EOF EOF
' '
test_expect_success 'status with added and untracked file in modified submodule' ' test_expect_success C_LOCALE_OUTPUT 'status with added and untracked file in modified submodule' '
(cd sub && git reset --hard && echo >foo && git add foo) && (cd sub && git reset --hard && echo >foo && git add foo) &&
echo "content" >sub/new-file && echo "content" >sub/new-file &&
git status >output && git status >output &&
@ -167,7 +167,7 @@ test_expect_success 'setup .git file for sub' '
git commit -m "added .real to .gitignore" .gitignore git commit -m "added .real to .gitignore" .gitignore
' '
test_expect_success 'status with added file in modified submodule with .git file' ' test_expect_success C_LOCALE_OUTPUT 'status with added file in modified submodule with .git file' '
(cd sub && git reset --hard && echo >foo && git add foo) && (cd sub && git reset --hard && echo >foo && git add foo) &&
git status >output && git status >output &&
grep "modified: sub (new commits, modified content)" output grep "modified: sub (new commits, modified content)" output
@ -177,12 +177,12 @@ test_expect_success 'rm submodule contents' '
rm -rf sub/* sub/.git rm -rf sub/* sub/.git
' '
test_expect_success 'status clean (empty submodule dir)' ' test_expect_success C_LOCALE_OUTPUT 'status clean (empty submodule dir)' '
git status >output && git status >output &&
grep "nothing to commit" output grep "nothing to commit" output
' '
test_expect_success 'status -a clean (empty submodule dir)' ' test_expect_success C_LOCALE_OUTPUT 'status -a clean (empty submodule dir)' '
test_must_fail git commit --dry-run -a >output && test_must_fail git commit --dry-run -a >output &&
grep "nothing to commit" output grep "nothing to commit" output
' '

View File

@ -55,7 +55,7 @@ test_expect_success 'setup' '
git add dir2/added git add dir2/added
' '
test_expect_success 'status (1)' ' test_expect_success C_LOCALE_OUTPUT 'status (1)' '
grep "use \"git rm --cached <file>\.\.\.\" to unstage" output grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
@ -85,7 +85,7 @@ cat >expect <<\EOF
# untracked # untracked
EOF EOF
test_expect_success 'status (2)' ' test_expect_success C_LOCALE_OUTPUT 'status (2)' '
git status >output && git status >output &&
test_cmp expect output test_cmp expect output
@ -111,7 +111,7 @@ EOF
git config advice.statusHints false git config advice.statusHints false
test_expect_success 'status (advice.statusHints false)' ' test_expect_success C_LOCALE_OUTPUT 'status (advice.statusHints false)' '
git status >output && git status >output &&
test_cmp expect output test_cmp expect output
@ -157,6 +157,12 @@ test_expect_success 'status -s -b' '
' '
test_expect_success 'setup dir3' '
mkdir dir3 &&
: >dir3/untracked1 &&
: >dir3/untracked2
'
cat >expect <<EOF cat >expect <<EOF
# On branch master # On branch master
# Changes to be committed: # Changes to be committed:
@ -172,16 +178,14 @@ cat >expect <<EOF
# #
# Untracked files not listed (use -u option to show untracked files) # Untracked files not listed (use -u option to show untracked files)
EOF EOF
test_expect_success 'status -uno' ' test_expect_success C_LOCALE_OUTPUT 'status -uno' '
mkdir dir3 &&
: >dir3/untracked1 &&
: >dir3/untracked2 &&
git status -uno >output && git status -uno >output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success 'status (status.showUntrackedFiles no)' ' test_expect_success C_LOCALE_OUTPUT 'status (status.showUntrackedFiles no)' '
git config status.showuntrackedfiles no git config status.showuntrackedfiles no
test_when_finished "git config --unset status.showuntrackedfiles" &&
git status >output && git status >output &&
test_cmp expect output test_cmp expect output
' '
@ -197,7 +201,7 @@ cat >expect <<EOF
# Untracked files not listed # Untracked files not listed
EOF EOF
git config advice.statusHints false git config advice.statusHints false
test_expect_success 'status -uno (advice.statusHints false)' ' test_expect_success C_LOCALE_OUTPUT 'status -uno (advice.statusHints false)' '
git status -uno >output && git status -uno >output &&
test_cmp expect output test_cmp expect output
' '
@ -208,7 +212,6 @@ cat >expect << EOF
A dir2/added A dir2/added
EOF EOF
test_expect_success 'status -s -uno' ' test_expect_success 'status -s -uno' '
git config --unset status.showuntrackedfiles
git status -s -uno >output && git status -s -uno >output &&
test_cmp expect output test_cmp expect output
' '
@ -243,13 +246,14 @@ cat >expect <<EOF
# output # output
# untracked # untracked
EOF EOF
test_expect_success 'status -unormal' ' test_expect_success C_LOCALE_OUTPUT 'status -unormal' '
git status -unormal >output && git status -unormal >output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success 'status (status.showUntrackedFiles normal)' ' test_expect_success C_LOCALE_OUTPUT 'status (status.showUntrackedFiles normal)' '
git config status.showuntrackedfiles normal git config status.showuntrackedfiles normal
test_when_finished "git config --unset status.showuntrackedfiles" &&
git status >output && git status >output &&
test_cmp expect output test_cmp expect output
' '
@ -266,7 +270,6 @@ A dir2/added
?? untracked ?? untracked
EOF EOF
test_expect_success 'status -s -unormal' ' test_expect_success 'status -s -unormal' '
git config --unset status.showuntrackedfiles
git status -s -unormal >output && git status -s -unormal >output &&
test_cmp expect output test_cmp expect output
' '
@ -302,18 +305,21 @@ cat >expect <<EOF
# output # output
# untracked # untracked
EOF EOF
test_expect_success 'status -uall' ' test_expect_success C_LOCALE_OUTPUT 'status -uall' '
git status -uall >output && git status -uall >output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success 'status (status.showUntrackedFiles all)' ' test_expect_success C_LOCALE_OUTPUT 'status (status.showUntrackedFiles all)' '
git config status.showuntrackedfiles all git config status.showuntrackedfiles all
test_when_finished "git config --unset status.showuntrackedfiles" &&
git status >output && git status >output &&
rm -rf dir3 &&
git config --unset status.showuntrackedfiles &&
test_cmp expect output test_cmp expect output
' '
test_expect_success 'teardown dir3' '
rm -rf dir3
'
cat >expect <<EOF cat >expect <<EOF
M dir1/modified M dir1/modified
A dir2/added A dir2/added
@ -361,7 +367,7 @@ cat >expect <<\EOF
# ../untracked # ../untracked
EOF EOF
test_expect_success 'status with relative paths' ' test_expect_success C_LOCALE_OUTPUT 'status with relative paths' '
(cd dir1 && git status) >output && (cd dir1 && git status) >output &&
test_cmp expect output test_cmp expect output
@ -434,18 +440,19 @@ cat >expect <<\EOF
# <BLUE>untracked<RESET> # <BLUE>untracked<RESET>
EOF EOF
test_expect_success 'status with color.ui' ' test_expect_success C_LOCALE_OUTPUT 'status with color.ui' '
git config color.ui always && git config color.ui always &&
test_when_finished "git config --unset color.ui" &&
git status | test_decode_color >output && git status | test_decode_color >output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success 'status with color.status' ' test_expect_success C_LOCALE_OUTPUT 'status with color.status' '
git config --unset color.ui &&
git config color.status always && git config color.status always &&
test_when_finished "git config --unset color.status" &&
git status | test_decode_color >output && git status | test_decode_color >output &&
test_cmp expect output test_cmp expect output
@ -464,7 +471,6 @@ EOF
test_expect_success 'status -s with color.ui' ' test_expect_success 'status -s with color.ui' '
git config --unset color.status &&
git config color.ui always && git config color.ui always &&
git status -s | test_decode_color >output && git status -s | test_decode_color >output &&
test_cmp expect output test_cmp expect output
@ -564,9 +570,10 @@ cat >expect <<\EOF
EOF EOF
test_expect_success 'status without relative paths' ' test_expect_success C_LOCALE_OUTPUT 'status without relative paths' '
git config status.relativePaths false git config status.relativePaths false &&
test_when_finished "git config --unset status.relativePaths" &&
(cd dir1 && git status) >output && (cd dir1 && git status) >output &&
test_cmp expect output test_cmp expect output
@ -585,6 +592,8 @@ EOF
test_expect_success 'status -s without relative paths' ' test_expect_success 'status -s without relative paths' '
git config status.relativePaths false &&
test_when_finished "git config --unset status.relativePaths" &&
(cd dir1 && git status -s) >output && (cd dir1 && git status -s) >output &&
test_cmp expect output test_cmp expect output
@ -607,7 +616,10 @@ cat <<EOF >expect
# untracked # untracked
EOF EOF
test_expect_success 'dry-run of partial commit excluding new file in index' ' test_expect_success 'dry-run of partial commit excluding new file in index' '
git commit --dry-run dir1/modified >output && git commit --dry-run dir1/modified >output
'
test_expect_success C_LOCALE_OUTPUT 'dry-run of partial commit excluding new file in index: output' '
test_cmp expect output test_cmp expect output
' '
@ -655,13 +667,13 @@ cat >expect <<EOF
# output # output
# untracked # untracked
EOF EOF
test_expect_success 'status submodule summary is disabled by default' ' test_expect_success C_LOCALE_OUTPUT 'status submodule summary is disabled by default' '
git status >output && git status >output &&
test_cmp expect output test_cmp expect output
' '
# we expect the same as the previous test # we expect the same as the previous test
test_expect_success 'status --untracked-files=all does not show submodule' ' test_expect_success C_LOCALE_OUTPUT 'status --untracked-files=all does not show submodule' '
git status --untracked-files=all >output && git status --untracked-files=all >output &&
test_cmp expect output test_cmp expect output
' '
@ -719,7 +731,7 @@ cat >expect <<EOF
# output # output
# untracked # untracked
EOF EOF
test_expect_success 'status submodule summary' ' test_expect_success C_LOCALE_OUTPUT 'status submodule summary' '
git config status.submodulesummary 10 && git config status.submodulesummary 10 &&
git status >output && git status >output &&
test_cmp expect output test_cmp expect output
@ -760,8 +772,11 @@ cat >expect <<EOF
# untracked # untracked
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
EOF EOF
test_expect_success 'status submodule summary (clean submodule)' ' test_expect_success 'status submodule summary (clean submodule): commit' '
git commit -m "commit submodule" && git commit -m "commit submodule"
'
test_expect_success C_LOCALE_OUTPUT 'status submodule summary (clean submodule): output' '
git config status.submodulesummary 10 && git config status.submodulesummary 10 &&
test_must_fail git commit --dry-run >output && test_must_fail git commit --dry-run >output &&
test_cmp expect output && test_cmp expect output &&
@ -812,7 +827,7 @@ cat >expect <<EOF
# output # output
# untracked # untracked
EOF EOF
test_expect_success 'commit --dry-run submodule summary (--amend)' ' test_expect_success C_LOCALE_OUTPUT 'commit --dry-run submodule summary (--amend)' '
git config status.submodulesummary 10 && git config status.submodulesummary 10 &&
git commit --dry-run --amend >output && git commit --dry-run --amend >output &&
test_cmp expect output test_cmp expect output
@ -867,13 +882,13 @@ cat > expect << EOF
# untracked # untracked
EOF EOF
test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' ' test_expect_success C_LOCALE_OUTPUT '--ignore-submodules=untracked suppresses submodules with untracked content' '
echo modified > sm/untracked && echo modified > sm/untracked &&
git status --ignore-submodules=untracked > output && git status --ignore-submodules=untracked > output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' ' test_expect_success C_LOCALE_OUTPUT '.gitmodules ignore=untracked suppresses submodules with untracked content' '
git config diff.ignoreSubmodules dirty && git config diff.ignoreSubmodules dirty &&
git status >output && git status >output &&
test_cmp expect output && test_cmp expect output &&
@ -885,7 +900,7 @@ test_expect_success '.gitmodules ignore=untracked suppresses submodules with unt
git config --unset diff.ignoreSubmodules git config --unset diff.ignoreSubmodules
' '
test_expect_success '.git/config ignore=untracked suppresses submodules with untracked content' ' test_expect_success C_LOCALE_OUTPUT '.git/config ignore=untracked suppresses submodules with untracked content' '
git config --add -f .gitmodules submodule.subname.ignore none && git config --add -f .gitmodules submodule.subname.ignore none &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git config --add submodule.subname.ignore untracked && git config --add submodule.subname.ignore untracked &&
@ -896,12 +911,12 @@ test_expect_success '.git/config ignore=untracked suppresses submodules with unt
git config --remove-section -f .gitmodules submodule.subname git config --remove-section -f .gitmodules submodule.subname
' '
test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' ' test_expect_success C_LOCALE_OUTPUT '--ignore-submodules=dirty suppresses submodules with untracked content' '
git status --ignore-submodules=dirty > output && git status --ignore-submodules=dirty > output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' ' test_expect_success C_LOCALE_OUTPUT '.gitmodules ignore=dirty suppresses submodules with untracked content' '
git config diff.ignoreSubmodules dirty && git config diff.ignoreSubmodules dirty &&
git status >output && git status >output &&
! test -s actual && ! test -s actual &&
@ -913,7 +928,7 @@ test_expect_success '.gitmodules ignore=dirty suppresses submodules with untrack
git config --unset diff.ignoreSubmodules git config --unset diff.ignoreSubmodules
' '
test_expect_success '.git/config ignore=dirty suppresses submodules with untracked content' ' test_expect_success C_LOCALE_OUTPUT '.git/config ignore=dirty suppresses submodules with untracked content' '
git config --add -f .gitmodules submodule.subname.ignore none && git config --add -f .gitmodules submodule.subname.ignore none &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git config --add submodule.subname.ignore dirty && git config --add submodule.subname.ignore dirty &&
@ -924,13 +939,13 @@ test_expect_success '.git/config ignore=dirty suppresses submodules with untrack
git config -f .gitmodules --remove-section submodule.subname git config -f .gitmodules --remove-section submodule.subname
' '
test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' ' test_expect_success C_LOCALE_OUTPUT '--ignore-submodules=dirty suppresses submodules with modified content' '
echo modified > sm/foo && echo modified > sm/foo &&
git status --ignore-submodules=dirty > output && git status --ignore-submodules=dirty > output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' ' test_expect_success C_LOCALE_OUTPUT '.gitmodules ignore=dirty suppresses submodules with modified content' '
git config --add -f .gitmodules submodule.subname.ignore dirty && git config --add -f .gitmodules submodule.subname.ignore dirty &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git status > output && git status > output &&
@ -938,7 +953,7 @@ test_expect_success '.gitmodules ignore=dirty suppresses submodules with modifie
git config -f .gitmodules --remove-section submodule.subname git config -f .gitmodules --remove-section submodule.subname
' '
test_expect_success '.git/config ignore=dirty suppresses submodules with modified content' ' test_expect_success C_LOCALE_OUTPUT '.git/config ignore=dirty suppresses submodules with modified content' '
git config --add -f .gitmodules submodule.subname.ignore none && git config --add -f .gitmodules submodule.subname.ignore none &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git config --add submodule.subname.ignore dirty && git config --add submodule.subname.ignore dirty &&
@ -981,12 +996,12 @@ cat > expect << EOF
# untracked # untracked
EOF EOF
test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" ' test_expect_success C_LOCALE_OUTPUT "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
git status --ignore-submodules=untracked > output && git status --ignore-submodules=untracked > output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" ' test_expect_success C_LOCALE_OUTPUT ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
git config --add -f .gitmodules submodule.subname.ignore untracked && git config --add -f .gitmodules submodule.subname.ignore untracked &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git status > output && git status > output &&
@ -994,7 +1009,7 @@ test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules wi
git config -f .gitmodules --remove-section submodule.subname git config -f .gitmodules --remove-section submodule.subname
' '
test_expect_success ".git/config ignore=untracked doesn't suppress submodules with modified content" ' test_expect_success C_LOCALE_OUTPUT ".git/config ignore=untracked doesn't suppress submodules with modified content" '
git config --add -f .gitmodules submodule.subname.ignore none && git config --add -f .gitmodules submodule.subname.ignore none &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git config --add submodule.subname.ignore untracked && git config --add submodule.subname.ignore untracked &&
@ -1043,12 +1058,12 @@ cat > expect << EOF
# untracked # untracked
EOF EOF
test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" ' test_expect_success C_LOCALE_OUTPUT "--ignore-submodules=untracked doesn't suppress submodule summary" '
git status --ignore-submodules=untracked > output && git status --ignore-submodules=untracked > output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" ' test_expect_success C_LOCALE_OUTPUT ".gitmodules ignore=untracked doesn't suppress submodule summary" '
git config --add -f .gitmodules submodule.subname.ignore untracked && git config --add -f .gitmodules submodule.subname.ignore untracked &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git status > output && git status > output &&
@ -1056,7 +1071,7 @@ test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule sum
git config -f .gitmodules --remove-section submodule.subname git config -f .gitmodules --remove-section submodule.subname
' '
test_expect_success ".git/config ignore=untracked doesn't suppress submodule summary" ' test_expect_success C_LOCALE_OUTPUT ".git/config ignore=untracked doesn't suppress submodule summary" '
git config --add -f .gitmodules submodule.subname.ignore none && git config --add -f .gitmodules submodule.subname.ignore none &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git config --add submodule.subname.ignore untracked && git config --add submodule.subname.ignore untracked &&
@ -1067,11 +1082,11 @@ test_expect_success ".git/config ignore=untracked doesn't suppress submodule sum
git config -f .gitmodules --remove-section submodule.subname git config -f .gitmodules --remove-section submodule.subname
' '
test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" ' test_expect_success C_LOCALE_OUTPUT "--ignore-submodules=dirty doesn't suppress submodule summary" '
git status --ignore-submodules=dirty > output && git status --ignore-submodules=dirty > output &&
test_cmp expect output test_cmp expect output
' '
test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" ' test_expect_success C_LOCALE_OUTPUT ".gitmodules ignore=dirty doesn't suppress submodule summary" '
git config --add -f .gitmodules submodule.subname.ignore dirty && git config --add -f .gitmodules submodule.subname.ignore dirty &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git status > output && git status > output &&
@ -1079,7 +1094,7 @@ test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary
git config -f .gitmodules --remove-section submodule.subname git config -f .gitmodules --remove-section submodule.subname
' '
test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary" ' test_expect_success C_LOCALE_OUTPUT ".git/config ignore=dirty doesn't suppress submodule summary" '
git config --add -f .gitmodules submodule.subname.ignore none && git config --add -f .gitmodules submodule.subname.ignore none &&
git config --add -f .gitmodules submodule.subname.path sm && git config --add -f .gitmodules submodule.subname.path sm &&
git config --add submodule.subname.ignore dirty && git config --add submodule.subname.ignore dirty &&
@ -1111,7 +1126,7 @@ cat > expect << EOF
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
EOF EOF
test_expect_success "--ignore-submodules=all suppresses submodule summary" ' test_expect_success C_LOCALE_OUTPUT "--ignore-submodules=all suppresses submodule summary" '
git status --ignore-submodules=all > output && git status --ignore-submodules=all > output &&
test_cmp expect output test_cmp expect output
' '

View File

@ -495,7 +495,7 @@ test_expect_success 'merge fast-forward in a dirty tree' '
test_debug 'git log --graph --decorate --oneline --all' test_debug 'git log --graph --decorate --oneline --all'
test_expect_success 'in-index merge' ' test_expect_success C_LOCALE_OUTPUT 'in-index merge' '
git reset --hard c0 && git reset --hard c0 &&
git merge --no-ff -s resolve c1 >out && git merge --no-ff -s resolve c1 >out &&
grep "Wonderful." out && grep "Wonderful." out &&

View File

@ -150,9 +150,15 @@ test_expect_success 'will not overwrite untracked file on unborn branch' '
git rm -fr . && git rm -fr . &&
git checkout --orphan new && git checkout --orphan new &&
cp important c0.c && cp important c0.c &&
test_must_fail git merge c0 2>out
'
test_expect_success C_LOCALE_OUTPUT 'will not overwrite untracked file on unborn branch: output' '
test_cmp out expect
'
test_expect_success 'will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.' '
test_when_finished "rm c0.c" && test_when_finished "rm c0.c" &&
test_must_fail git merge c0 2>out &&
test_cmp out expect &&
test_path_is_missing .git/MERGE_HEAD && test_path_is_missing .git/MERGE_HEAD &&
test_cmp important c0.c test_cmp important c0.c
' '

View File

@ -46,8 +46,14 @@ test_expect_success 'setup' '
pre_merge_head="$(git rev-parse HEAD)" pre_merge_head="$(git rev-parse HEAD)"
test_expect_success 'fails without MERGE_HEAD (unstarted merge)' ' test_expect_success 'fails without MERGE_HEAD (unstarted merge)' '
test_must_fail git merge --abort 2>output && test_must_fail git merge --abort 2>output
grep -q MERGE_HEAD output && '
test_expect_success C_LOCALE_OUTPUT 'fails without MERGE_HEAD (unstarted merge): fatal output' '
grep -q MERGE_HEAD output
'
test_expect_success 'fails without MERGE_HEAD (unstarted merge): .git/MERGE_HEAD sanity' '
test ! -f .git/MERGE_HEAD && test ! -f .git/MERGE_HEAD &&
test "$pre_merge_head" = "$(git rev-parse HEAD)" test "$pre_merge_head" = "$(git rev-parse HEAD)"
' '
@ -57,8 +63,14 @@ test_expect_success 'fails without MERGE_HEAD (completed merge)' '
test ! -f .git/MERGE_HEAD && test ! -f .git/MERGE_HEAD &&
# Merge successfully completed # Merge successfully completed
post_merge_head="$(git rev-parse HEAD)" && post_merge_head="$(git rev-parse HEAD)" &&
test_must_fail git merge --abort 2>output && test_must_fail git merge --abort 2>output
grep -q MERGE_HEAD output && '
test_expect_success C_LOCALE_OUTPUT 'fails without MERGE_HEAD (completed merge): output' '
grep -q MERGE_HEAD output
'
test_expect_success 'fails without MERGE_HEAD (completed merge): .git/MERGE_HEAD sanity' '
test ! -f .git/MERGE_HEAD && test ! -f .git/MERGE_HEAD &&
test "$post_merge_head" = "$(git rev-parse HEAD)" test "$post_merge_head" = "$(git rev-parse HEAD)"
' '

View File

@ -61,7 +61,7 @@ test_expect_success SIMPLEPAGER 'git grep -O' '
test_cmp empty out test_cmp empty out
' '
test_expect_success 'git grep -O --cached' ' test_expect_success C_LOCALE_OUTPUT 'git grep -O --cached' '
test_must_fail git grep --cached -O GREP_PATTERN >out 2>msg && test_must_fail git grep --cached -O GREP_PATTERN >out 2>msg &&
grep open-files-in-pager msg grep open-files-in-pager msg
' '

View File

@ -131,16 +131,16 @@ static void wt_status_print_unmerged_header(struct wt_status *s)
{ {
const char *c = color(WT_STATUS_HEADER, s); const char *c = color(WT_STATUS_HEADER, s);
status_printf_ln(s, c, "Unmerged paths:"); status_printf_ln(s, c, _("Unmerged paths:"));
if (!advice_status_hints) if (!advice_status_hints)
return; return;
if (s->whence != FROM_COMMIT) if (s->whence != FROM_COMMIT)
; ;
else if (!s->is_initial) else if (!s->is_initial)
status_printf_ln(s, c, " (use \"git reset %s <file>...\" to unstage)", s->reference); status_printf_ln(s, c, _(" (use \"git reset %s <file>...\" to unstage)"), s->reference);
else else
status_printf_ln(s, c, " (use \"git rm --cached <file>...\" to unstage)"); status_printf_ln(s, c, _(" (use \"git rm --cached <file>...\" to unstage)"));
status_printf_ln(s, c, " (use \"git add/rm <file>...\" as appropriate to mark resolution)"); status_printf_ln(s, c, _(" (use \"git add/rm <file>...\" as appropriate to mark resolution)"));
status_printf_ln(s, c, ""); status_printf_ln(s, c, "");
} }
@ -148,15 +148,15 @@ static void wt_status_print_cached_header(struct wt_status *s)
{ {
const char *c = color(WT_STATUS_HEADER, s); const char *c = color(WT_STATUS_HEADER, s);
status_printf_ln(s, c, "Changes to be committed:"); status_printf_ln(s, c, _("Changes to be committed:"));
if (!advice_status_hints) if (!advice_status_hints)
return; return;
if (s->whence != FROM_COMMIT) if (s->whence != FROM_COMMIT)
; /* NEEDSWORK: use "git reset --unresolve"??? */ ; /* NEEDSWORK: use "git reset --unresolve"??? */
else if (!s->is_initial) else if (!s->is_initial)
status_printf_ln(s, c, " (use \"git reset %s <file>...\" to unstage)", s->reference); status_printf_ln(s, c, _(" (use \"git reset %s <file>...\" to unstage)"), s->reference);
else else
status_printf_ln(s, c, " (use \"git rm --cached <file>...\" to unstage)"); status_printf_ln(s, c, _(" (use \"git rm --cached <file>...\" to unstage)"));
status_printf_ln(s, c, ""); status_printf_ln(s, c, "");
} }
@ -166,16 +166,16 @@ static void wt_status_print_dirty_header(struct wt_status *s,
{ {
const char *c = color(WT_STATUS_HEADER, s); const char *c = color(WT_STATUS_HEADER, s);
status_printf_ln(s, c, "Changes not staged for commit:"); status_printf_ln(s, c, _("Changes not staged for commit:"));
if (!advice_status_hints) if (!advice_status_hints)
return; return;
if (!has_deleted) if (!has_deleted)
status_printf_ln(s, c, " (use \"git add <file>...\" to update what will be committed)"); status_printf_ln(s, c, _(" (use \"git add <file>...\" to update what will be committed)"));
else else
status_printf_ln(s, c, " (use \"git add/rm <file>...\" to update what will be committed)"); status_printf_ln(s, c, _(" (use \"git add/rm <file>...\" to update what will be committed)"));
status_printf_ln(s, c, " (use \"git checkout -- <file>...\" to discard changes in working directory)"); status_printf_ln(s, c, _(" (use \"git checkout -- <file>...\" to discard changes in working directory)"));
if (has_dirty_submodules) if (has_dirty_submodules)
status_printf_ln(s, c, " (commit or discard the untracked or modified content in submodules)"); status_printf_ln(s, c, _(" (commit or discard the untracked or modified content in submodules)"));
status_printf_ln(s, c, ""); status_printf_ln(s, c, "");
} }
@ -184,10 +184,10 @@ static void wt_status_print_other_header(struct wt_status *s,
const char *how) const char *how)
{ {
const char *c = color(WT_STATUS_HEADER, s); const char *c = color(WT_STATUS_HEADER, s);
status_printf_ln(s, c, "%s files:", what); status_printf_ln(s, c, _("%s files:"), what);
if (!advice_status_hints) if (!advice_status_hints)
return; return;
status_printf_ln(s, c, " (use \"git %s <file>...\" to include in what will be committed)", how); status_printf_ln(s, c, _(" (use \"git %s <file>...\" to include in what will be committed)"), how);
status_printf_ln(s, c, ""); status_printf_ln(s, c, "");
} }
@ -204,18 +204,18 @@ static void wt_status_print_unmerged_data(struct wt_status *s,
const char *c = color(WT_STATUS_UNMERGED, s); const char *c = color(WT_STATUS_UNMERGED, s);
struct wt_status_change_data *d = it->util; struct wt_status_change_data *d = it->util;
struct strbuf onebuf = STRBUF_INIT; struct strbuf onebuf = STRBUF_INIT;
const char *one, *how = "bug"; const char *one, *how = _("bug");
one = quote_path(it->string, -1, &onebuf, s->prefix); one = quote_path(it->string, -1, &onebuf, s->prefix);
status_printf(s, color(WT_STATUS_HEADER, s), "\t"); status_printf(s, color(WT_STATUS_HEADER, s), "\t");
switch (d->stagemask) { switch (d->stagemask) {
case 1: how = "both deleted:"; break; case 1: how = _("both deleted:"); break;
case 2: how = "added by us:"; break; case 2: how = _("added by us:"); break;
case 3: how = "deleted by them:"; break; case 3: how = _("deleted by them:"); break;
case 4: how = "added by them:"; break; case 4: how = _("added by them:"); break;
case 5: how = "deleted by us:"; break; case 5: how = _("deleted by us:"); break;
case 6: how = "both added:"; break; case 6: how = _("both added:"); break;
case 7: how = "both modified:"; break; case 7: how = _("both modified:"); break;
} }
status_printf_more(s, c, "%-20s%s\n", how, one); status_printf_more(s, c, "%-20s%s\n", how, one);
strbuf_release(&onebuf); strbuf_release(&onebuf);
@ -245,11 +245,11 @@ static void wt_status_print_change_data(struct wt_status *s,
if (d->new_submodule_commits || d->dirty_submodule) { if (d->new_submodule_commits || d->dirty_submodule) {
strbuf_addstr(&extra, " ("); strbuf_addstr(&extra, " (");
if (d->new_submodule_commits) if (d->new_submodule_commits)
strbuf_addf(&extra, "new commits, "); strbuf_addf(&extra, _("new commits, "));
if (d->dirty_submodule & DIRTY_SUBMODULE_MODIFIED) if (d->dirty_submodule & DIRTY_SUBMODULE_MODIFIED)
strbuf_addf(&extra, "modified content, "); strbuf_addf(&extra, _("modified content, "));
if (d->dirty_submodule & DIRTY_SUBMODULE_UNTRACKED) if (d->dirty_submodule & DIRTY_SUBMODULE_UNTRACKED)
strbuf_addf(&extra, "untracked content, "); strbuf_addf(&extra, _("untracked content, "));
strbuf_setlen(&extra, extra.len - 2); strbuf_setlen(&extra, extra.len - 2);
strbuf_addch(&extra, ')'); strbuf_addch(&extra, ')');
} }
@ -263,31 +263,31 @@ static void wt_status_print_change_data(struct wt_status *s,
status_printf(s, color(WT_STATUS_HEADER, s), "\t"); status_printf(s, color(WT_STATUS_HEADER, s), "\t");
switch (status) { switch (status) {
case DIFF_STATUS_ADDED: case DIFF_STATUS_ADDED:
status_printf_more(s, c, "new file: %s", one); status_printf_more(s, c, _("new file: %s"), one);
break; break;
case DIFF_STATUS_COPIED: case DIFF_STATUS_COPIED:
status_printf_more(s, c, "copied: %s -> %s", one, two); status_printf_more(s, c, _("copied: %s -> %s"), one, two);
break; break;
case DIFF_STATUS_DELETED: case DIFF_STATUS_DELETED:
status_printf_more(s, c, "deleted: %s", one); status_printf_more(s, c, _("deleted: %s"), one);
break; break;
case DIFF_STATUS_MODIFIED: case DIFF_STATUS_MODIFIED:
status_printf_more(s, c, "modified: %s", one); status_printf_more(s, c, _("modified: %s"), one);
break; break;
case DIFF_STATUS_RENAMED: case DIFF_STATUS_RENAMED:
status_printf_more(s, c, "renamed: %s -> %s", one, two); status_printf_more(s, c, _("renamed: %s -> %s"), one, two);
break; break;
case DIFF_STATUS_TYPE_CHANGED: case DIFF_STATUS_TYPE_CHANGED:
status_printf_more(s, c, "typechange: %s", one); status_printf_more(s, c, _("typechange: %s"), one);
break; break;
case DIFF_STATUS_UNKNOWN: case DIFF_STATUS_UNKNOWN:
status_printf_more(s, c, "unknown: %s", one); status_printf_more(s, c, _("unknown: %s"), one);
break; break;
case DIFF_STATUS_UNMERGED: case DIFF_STATUS_UNMERGED:
status_printf_more(s, c, "unmerged: %s", one); status_printf_more(s, c, _("unmerged: %s"), one);
break; break;
default: default:
die("bug: unhandled diff status %c", status); die(_("bug: unhandled diff status %c"), status);
} }
if (extra.len) { if (extra.len) {
status_printf_more(s, color(WT_STATUS_HEADER, s), "%s", extra.buf); status_printf_more(s, color(WT_STATUS_HEADER, s), "%s", extra.buf);
@ -710,14 +710,14 @@ void wt_status_print(struct wt_status *s)
const char *branch_status_color = color(WT_STATUS_HEADER, s); const char *branch_status_color = color(WT_STATUS_HEADER, s);
if (s->branch) { if (s->branch) {
const char *on_what = "On branch "; const char *on_what = _("On branch ");
const char *branch_name = s->branch; const char *branch_name = s->branch;
if (!prefixcmp(branch_name, "refs/heads/")) if (!prefixcmp(branch_name, "refs/heads/"))
branch_name += 11; branch_name += 11;
else if (!strcmp(branch_name, "HEAD")) { else if (!strcmp(branch_name, "HEAD")) {
branch_name = ""; branch_name = "";
branch_status_color = color(WT_STATUS_NOBRANCH, s); branch_status_color = color(WT_STATUS_NOBRANCH, s);
on_what = "Not currently on any branch."; on_what = _("Not currently on any branch.");
} }
status_printf(s, color(WT_STATUS_HEADER, s), ""); status_printf(s, color(WT_STATUS_HEADER, s), "");
status_printf_more(s, branch_status_color, "%s", on_what); status_printf_more(s, branch_status_color, "%s", on_what);
@ -728,7 +728,7 @@ void wt_status_print(struct wt_status *s)
if (s->is_initial) { if (s->is_initial) {
status_printf_ln(s, color(WT_STATUS_HEADER, s), ""); status_printf_ln(s, color(WT_STATUS_HEADER, s), "");
status_printf_ln(s, color(WT_STATUS_HEADER, s), "Initial commit"); status_printf_ln(s, color(WT_STATUS_HEADER, s), _("Initial commit"));
status_printf_ln(s, color(WT_STATUS_HEADER, s), ""); status_printf_ln(s, color(WT_STATUS_HEADER, s), "");
} }
@ -742,38 +742,38 @@ void wt_status_print(struct wt_status *s)
wt_status_print_submodule_summary(s, 1); /* unstaged */ wt_status_print_submodule_summary(s, 1); /* unstaged */
} }
if (s->show_untracked_files) { if (s->show_untracked_files) {
wt_status_print_other(s, &s->untracked, "Untracked", "add"); wt_status_print_other(s, &s->untracked, _("Untracked"), "add");
if (s->show_ignored_files) if (s->show_ignored_files)
wt_status_print_other(s, &s->ignored, "Ignored", "add -f"); wt_status_print_other(s, &s->ignored, _("Ignored"), "add -f");
} else if (s->commitable) } else if (s->commitable)
status_printf_ln(s, GIT_COLOR_NORMAL, "Untracked files not listed%s", status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"),
advice_status_hints advice_status_hints
? " (use -u option to show untracked files)" : ""); ? _(" (use -u option to show untracked files)") : "");
if (s->verbose) if (s->verbose)
wt_status_print_verbose(s); wt_status_print_verbose(s);
if (!s->commitable) { if (!s->commitable) {
if (s->amend) if (s->amend)
status_printf_ln(s, GIT_COLOR_NORMAL, "No changes"); status_printf_ln(s, GIT_COLOR_NORMAL, _("No changes"));
else if (s->nowarn) else if (s->nowarn)
; /* nothing */ ; /* nothing */
else if (s->workdir_dirty) else if (s->workdir_dirty)
printf("no changes added to commit%s\n", printf(_("no changes added to commit%s\n"),
advice_status_hints advice_status_hints
? " (use \"git add\" and/or \"git commit -a\")" : ""); ? _(" (use \"git add\" and/or \"git commit -a\")") : "");
else if (s->untracked.nr) else if (s->untracked.nr)
printf("nothing added to commit but untracked files present%s\n", printf(_("nothing added to commit but untracked files present%s\n"),
advice_status_hints advice_status_hints
? " (use \"git add\" to track)" : ""); ? _(" (use \"git add\" to track)") : "");
else if (s->is_initial) else if (s->is_initial)
printf("nothing to commit%s\n", advice_status_hints printf(_("nothing to commit%s\n"), advice_status_hints
? " (create/copy files and use \"git add\" to track)" : ""); ? _(" (create/copy files and use \"git add\" to track)") : "");
else if (!s->show_untracked_files) else if (!s->show_untracked_files)
printf("nothing to commit%s\n", advice_status_hints printf(_("nothing to commit%s\n"), advice_status_hints
? " (use -u to show untracked files)" : ""); ? _(" (use -u to show untracked files)") : "");
else else
printf("nothing to commit%s\n", advice_status_hints printf(_("nothing to commit%s\n"), advice_status_hints
? " (working directory clean)" : ""); ? _(" (working directory clean)") : "");
} }
} }
@ -881,13 +881,13 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
if (!prefixcmp(branch_name, "refs/heads/")) if (!prefixcmp(branch_name, "refs/heads/"))
branch_name += 11; branch_name += 11;
else if (!strcmp(branch_name, "HEAD")) { else if (!strcmp(branch_name, "HEAD")) {
branch_name = "HEAD (no branch)"; branch_name = _("HEAD (no branch)");
branch_color_local = color(WT_STATUS_NOBRANCH, s); branch_color_local = color(WT_STATUS_NOBRANCH, s);
} }
branch = branch_get(s->branch + 11); branch = branch_get(s->branch + 11);
if (s->is_initial) if (s->is_initial)
color_fprintf(s->fp, header_color, "Initial commit on "); color_fprintf(s->fp, header_color, _("Initial commit on "));
if (!stat_tracking_info(branch, &num_ours, &num_theirs)) { if (!stat_tracking_info(branch, &num_ours, &num_theirs)) {
color_fprintf_ln(s->fp, branch_color_local, color_fprintf_ln(s->fp, branch_color_local,
"%s", branch_name); "%s", branch_name);
@ -902,15 +902,15 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
color_fprintf(s->fp, header_color, " ["); color_fprintf(s->fp, header_color, " [");
if (!num_ours) { if (!num_ours) {
color_fprintf(s->fp, header_color, "behind "); color_fprintf(s->fp, header_color, _("behind "));
color_fprintf(s->fp, branch_color_remote, "%d", num_theirs); color_fprintf(s->fp, branch_color_remote, "%d", num_theirs);
} else if (!num_theirs) { } else if (!num_theirs) {
color_fprintf(s->fp, header_color, "ahead "); color_fprintf(s->fp, header_color, _("ahead "));
color_fprintf(s->fp, branch_color_local, "%d", num_ours); color_fprintf(s->fp, branch_color_local, "%d", num_ours);
} else { } else {
color_fprintf(s->fp, header_color, "ahead "); color_fprintf(s->fp, header_color, _("ahead "));
color_fprintf(s->fp, branch_color_local, "%d", num_ours); color_fprintf(s->fp, branch_color_local, "%d", num_ours);
color_fprintf(s->fp, header_color, ", behind "); color_fprintf(s->fp, header_color, _(", behind "));
color_fprintf(s->fp, branch_color_remote, "%d", num_theirs); color_fprintf(s->fp, branch_color_remote, "%d", num_theirs);
} }