Merge branch 'jp/string-list-api-cleanup' into jn/grep-open
authorJulian Phillips <julian@quantumfyre.co.uk>
Fri, 25 Jun 2010 23:41:39 +0000 (00:41 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 27 Jun 2010 17:17:18 +0000 (10:17 -0700)
An evil merge to adjust the series to cleaned-up API.

  From: Julian Phillips <julian@quantumfyre.co.uk>
  Subject: [PATCH v2 7/7] grep: fix string_list_append calls
  Date: Sat, 26 Jun 2010 00:41:39 +0100
  Message-ID: <20100625234140.18927.35025.julian@quantumfyre.co.uk>

* jp/string-list-api-cleanup:
  string_list: Fix argument order for string_list_append
  string_list: Fix argument order for string_list_lookup
  string_list: Fix argument order for string_list_insert_at_index
  string_list: Fix argument order for string_list_insert
  string_list: Fix argument order for for_each_string_list
  string_list: Fix argument order for print_string_list

Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1  2 
builtin/grep.c

diff --cc builtin/grep.c
index f32fbbc35afb92a763c61b2c0df851eb9b3b08ce,b194ea3cea531f3a6c81d6d27b5b3028641ba9ce..4b8ddbe0d52d3aa9719372400c24959dc7efd8c2
@@@ -558,33 -556,6 +558,33 @@@ static int grep_file(struct grep_opt *o
        }
  }
  
-       string_list_append(xstrndup(data, len), path_list);
 +static void append_path(struct grep_opt *opt, const void *data, size_t len)
 +{
 +      struct string_list *path_list = opt->output_priv;
 +
 +      if (len == 1 && *(const char *)data == '\0')
 +              return;
++      string_list_append(path_list, xstrndup(data, len));
 +}
 +
 +static void run_pager(struct grep_opt *opt, const char *prefix)
 +{
 +      struct string_list *path_list = opt->output_priv;
 +      const char **argv = xmalloc(sizeof(const char *) * (path_list->nr + 1));
 +      int i, status;
 +
 +      for (i = 0; i < path_list->nr; i++)
 +              argv[i] = path_list->items[i].string;
 +      argv[path_list->nr] = NULL;
 +
 +      if (prefix && chdir(prefix))
 +              die("Failed to chdir: %s", prefix);
 +      status = run_command_v_opt(argv, RUN_USING_SHELL);
 +      if (status)
 +              exit(status);
 +      free(argv);
 +}
 +
  static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
  {
        int hit = 0;
@@@ -994,17 -943,6 +994,17 @@@ int cmd_grep(int argc, const char **arg
                argc--;
        }
  
-               string_list_append(show_in_pager, &path_list);
 +      if (show_in_pager == default_pager)
 +              show_in_pager = git_pager(1);
 +      if (show_in_pager) {
 +              opt.name_only = 1;
 +              opt.null_following_name = 1;
 +              opt.output_priv = &path_list;
 +              opt.output = append_path;
++              string_list_append(&path_list, show_in_pager);
 +              use_threads = 0;
 +      }
 +
        if (!opt.pattern_list)
                die("no pattern given.");
        if (!opt.fixed && opt.ignore_case)
                paths[1] = NULL;
        }
  
-                       string_list_append(buf.buf, &path_list);
 +      if (show_in_pager && (cached || list.nr))
 +              die("--open-files-in-pager only works on the worktree");
 +
 +      if (show_in_pager && opt.pattern_list && !opt.pattern_list->next) {
 +              const char *pager = path_list.items[0].string;
 +              int len = strlen(pager);
 +
 +              if (len > 4 && is_dir_sep(pager[len - 5]))
 +                      pager += len - 4;
 +
 +              if (!strcmp("less", pager) || !strcmp("vi", pager)) {
 +                      struct strbuf buf = STRBUF_INIT;
 +                      strbuf_addf(&buf, "+/%s%s",
 +                                      strcmp("less", pager) ? "" : "*",
 +                                      opt.pattern_list->pattern);
++                      string_list_append(&path_list, buf.buf);
 +                      strbuf_detach(&buf, NULL);
 +              }
 +      }
 +
 +      if (!show_in_pager)
 +              setup_pager();
 +
 +
        if (!use_index) {
 -              int hit;
                if (cached)
                        die("--cached cannot be used with --no-index.");
                if (list.nr)