Merge branch 'tb/document-status-u-tradeoff' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 12 Apr 2013 15:12:47 +0000 (08:12 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 12 Apr 2013 15:12:47 +0000 (08:12 -0700)
* tb/document-status-u-tradeoff:
i18n: make the translation of -u advice in one go

1  2 
wt-status.c
diff --combined wt-status.c
index 54f4391f9cc86d3d485ed80383cb142b1f25b1e7,bd1da378071f34139effb879be5fcf1c44198508..81e4fa519f4b0efbc54dab1475b8bdbb19f9ece2
@@@ -45,7 -45,7 +45,7 @@@ static void status_vprintf(struct wt_st
  
        strbuf_vaddf(&sb, fmt, ap);
        if (!sb.len) {
 -              strbuf_addch(&sb, '#');
 +              strbuf_addch(&sb, comment_line_char);
                if (!trail)
                        strbuf_addch(&sb, ' ');
                color_print_strbuf(s->fp, color, &sb);
@@@ -59,7 -59,7 +59,7 @@@
  
                strbuf_reset(&linebuf);
                if (at_bol) {
 -                      strbuf_addch(&linebuf, '#');
 +                      strbuf_addch(&linebuf, comment_line_char);
                        if (*line != '\n' && *line != '\t')
                                strbuf_addch(&linebuf, ' ');
                }
@@@ -264,7 -264,7 +264,7 @@@ static void wt_status_print_change_data
  {
        struct wt_status_change_data *d = it->util;
        const char *c = color(change_type, s);
 -      int status = status;
 +      int status;
        char *one_name;
        char *two_name;
        const char *one, *two;
                }
                status = d->worktree_status;
                break;
 +      default:
 +              die("BUG: unhandled change_type %d in wt_status_print_change_data",
 +                  change_type);
        }
  
        one = quote_path(one_name, -1, &onebuf, s->prefix);
@@@ -524,9 -521,7 +524,9 @@@ static void wt_status_collect_untracked
  
        if (s->show_ignored_files) {
                dir.nr = 0;
 -              dir.flags = DIR_SHOW_IGNORED | DIR_SHOW_OTHER_DIRECTORIES;
 +              dir.flags = DIR_SHOW_IGNORED;
 +              if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
 +                      dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
                fill_directory(&dir, s->pathspec);
                for (i = 0; i < dir.nr; i++) {
                        struct dir_entry *ent = dir.entries[i];
@@@ -778,10 -773,8 +778,10 @@@ static void wt_status_print_tracking(st
  
        for (cp = sb.buf; (ep = strchr(cp, '\n')) != NULL; cp = ep + 1)
                color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s),
 -                               "# %.*s", (int)(ep - cp), cp);
 -      color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "#");
 +                               "%c %.*s", comment_line_char,
 +                               (int)(ep - cp), cp);
 +      color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "%c",
 +                       comment_line_char);
  }
  
  static int has_unmerged(struct wt_status *s)
@@@ -890,14 -883,7 +890,14 @@@ static void show_rebase_in_progress(str
        struct stat st;
  
        if (has_unmerged(s)) {
 -              status_printf_ln(s, color, _("You are currently rebasing."));
 +              if (state->branch)
 +                      status_printf_ln(s, color,
 +                                       _("You are currently rebasing branch '%s' on '%s'."),
 +                                       state->branch,
 +                                       state->onto);
 +              else
 +                      status_printf_ln(s, color,
 +                                       _("You are currently rebasing."));
                if (advice_status_hints) {
                        status_printf_ln(s, color,
                                _("  (fix conflicts and then run \"git rebase --continue\")"));
                                _("  (use \"git rebase --abort\" to check out the original branch)"));
                }
        } else if (state->rebase_in_progress || !stat(git_path("MERGE_MSG"), &st)) {
 -              status_printf_ln(s, color, _("You are currently rebasing."));
 +              if (state->branch)
 +                      status_printf_ln(s, color,
 +                                       _("You are currently rebasing branch '%s' on '%s'."),
 +                                       state->branch,
 +                                       state->onto);
 +              else
 +                      status_printf_ln(s, color,
 +                                       _("You are currently rebasing."));
                if (advice_status_hints)
                        status_printf_ln(s, color,
                                _("  (all conflicts fixed: run \"git rebase --continue\")"));
        } else if (split_commit_in_progress(s)) {
 -              status_printf_ln(s, color, _("You are currently splitting a commit during a rebase."));
 +              if (state->branch)
 +                      status_printf_ln(s, color,
 +                                       _("You are currently splitting a commit while rebasing branch '%s' on '%s'."),
 +                                       state->branch,
 +                                       state->onto);
 +              else
 +                      status_printf_ln(s, color,
 +                                       _("You are currently splitting a commit during a rebase."));
                if (advice_status_hints)
                        status_printf_ln(s, color,
                                _("  (Once your working directory is clean, run \"git rebase --continue\")"));
        } else {
 -              status_printf_ln(s, color, _("You are currently editing a commit during a rebase."));
 +              if (state->branch)
 +                      status_printf_ln(s, color,
 +                                       _("You are currently editing a commit while rebasing branch '%s' on '%s'."),
 +                                       state->branch,
 +                                       state->onto);
 +              else
 +                      status_printf_ln(s, color,
 +                                       _("You are currently editing a commit during a rebase."));
                if (advice_status_hints && !s->amend) {
                        status_printf_ln(s, color,
                                _("  (use \"git commit --amend\" to amend the current commit)"));
@@@ -969,57 -934,16 +969,57 @@@ static void show_bisect_in_progress(str
                                struct wt_status_state *state,
                                const char *color)
  {
 -      status_printf_ln(s, color, _("You are currently bisecting."));
 +      if (state->branch)
 +              status_printf_ln(s, color,
 +                               _("You are currently bisecting branch '%s'."),
 +                               state->branch);
 +      else
 +              status_printf_ln(s, color,
 +                               _("You are currently bisecting."));
        if (advice_status_hints)
                status_printf_ln(s, color,
                        _("  (use \"git bisect reset\" to get back to the original branch)"));
        wt_status_print_trailer(s);
  }
  
 +/*
 + * Extract branch information from rebase/bisect
 + */
 +static void read_and_strip_branch(struct strbuf *sb,
 +                                const char **branch,
 +                                const char *path)
 +{
 +      unsigned char sha1[20];
 +
 +      strbuf_reset(sb);
 +      if (strbuf_read_file(sb, git_path("%s", path), 0) <= 0)
 +              return;
 +
 +      while (sb->len && sb->buf[sb->len - 1] == '\n')
 +              strbuf_setlen(sb, sb->len - 1);
 +      if (!sb->len)
 +              return;
 +      if (!prefixcmp(sb->buf, "refs/heads/"))
 +              *branch = sb->buf + strlen("refs/heads/");
 +      else if (!prefixcmp(sb->buf, "refs/"))
 +              *branch = sb->buf;
 +      else if (!get_sha1_hex(sb->buf, sha1)) {
 +              const char *abbrev;
 +              abbrev = find_unique_abbrev(sha1, DEFAULT_ABBREV);
 +              strbuf_reset(sb);
 +              strbuf_addstr(sb, abbrev);
 +              *branch = sb->buf;
 +      } else if (!strcmp(sb->buf, "detached HEAD")) /* rebase */
 +              ;
 +      else                    /* bisect */
 +              *branch = sb->buf;
 +}
 +
  static void wt_status_print_state(struct wt_status *s)
  {
        const char *state_color = color(WT_STATUS_HEADER, s);
 +      struct strbuf branch = STRBUF_INIT;
 +      struct strbuf onto = STRBUF_INIT;
        struct wt_status_state state;
        struct stat st;
  
                                state.am_empty_patch = 1;
                } else {
                        state.rebase_in_progress = 1;
 +                      read_and_strip_branch(&branch, &state.branch,
 +                                            "rebase-apply/head-name");
 +                      read_and_strip_branch(&onto, &state.onto,
 +                                            "rebase-apply/onto");
                }
        } else if (!stat(git_path("rebase-merge"), &st)) {
                if (!stat(git_path("rebase-merge/interactive"), &st))
                        state.rebase_interactive_in_progress = 1;
                else
                        state.rebase_in_progress = 1;
 +              read_and_strip_branch(&branch, &state.branch,
 +                                    "rebase-merge/head-name");
 +              read_and_strip_branch(&onto, &state.onto,
 +                                    "rebase-merge/onto");
        } else if (!stat(git_path("CHERRY_PICK_HEAD"), &st)) {
                state.cherry_pick_in_progress = 1;
        }
 -      if (!stat(git_path("BISECT_LOG"), &st))
 +      if (!stat(git_path("BISECT_LOG"), &st)) {
                state.bisect_in_progress = 1;
 +              read_and_strip_branch(&branch, &state.branch,
 +                                    "BISECT_START");
 +      }
  
        if (state.merge_in_progress)
                show_merge_in_progress(s, &state, state_color);
                show_cherry_pick_in_progress(s, &state, state_color);
        if (state.bisect_in_progress)
                show_bisect_in_progress(s, &state, state_color);
 +      strbuf_release(&branch);
 +      strbuf_release(&onto);
  }
  
  void wt_status_print(struct wt_status *s)
                if (advice_status_u_option && 2000 < s->untracked_in_ms) {
                        status_printf_ln(s, GIT_COLOR_NORMAL, "");
                        status_printf_ln(s, GIT_COLOR_NORMAL,
-                                _("It took %.2f seconds to enumerate untracked files."
-                                  "  'status -uno'"),
-                                s->untracked_in_ms / 1000.0);
-                       status_printf_ln(s, GIT_COLOR_NORMAL,
-                                _("may speed it up, but you have to be careful not"
-                                  " to forget to add"));
-                       status_printf_ln(s, GIT_COLOR_NORMAL,
-                                _("new files yourself (see 'git help status')."));
+                                        _("It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
+                                          "may speed it up, but you have to be careful not to forget to add\n"
+                                          "new files yourself (see 'git help status')."),
+                                        s->untracked_in_ms / 1000.0);
                }
        } else if (s->commitable)
                status_printf_ln(s, GIT_COLOR_NORMAL, _("Untracked files not listed%s"),