Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Sun, 15 May 2011 03:44:09 +0000 (20:44 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 15 May 2011 03:44:09 +0000 (20:44 -0700)
* maint:
add, merge, diff: do not use strcasecmp to compare config variable names

1  2 
builtin/add.c
merge-recursive.c
diff --combined builtin/add.c
index 704141fddfe9033c6031953ae35e799896963441,944e5a8cc9f4741c01cdca2911212d462faadcd3..e57abddf5297432d62bc20b8e3bde2e5eab474c4
@@@ -26,27 -26,6 +26,27 @@@ struct update_callback_data 
        int add_errors;
  };
  
 +static int fix_unmerged_status(struct diff_filepair *p,
 +                             struct update_callback_data *data)
 +{
 +      if (p->status != DIFF_STATUS_UNMERGED)
 +              return p->status;
 +      if (!(data->flags & ADD_CACHE_IGNORE_REMOVAL) && !p->two->mode)
 +              /*
 +               * This is not an explicit add request, and the
 +               * path is missing from the working tree (deleted)
 +               */
 +              return DIFF_STATUS_DELETED;
 +      else
 +              /*
 +               * Either an explicit add request, or path exists
 +               * in the working tree.  An attempt to explicitly
 +               * add a path that does not exist in the working tree
 +               * will be caught as an error by the caller immediately.
 +               */
 +              return DIFF_STATUS_MODIFIED;
 +}
 +
  static void update_callback(struct diff_queue_struct *q,
                            struct diff_options *opt, void *cbdata)
  {
        for (i = 0; i < q->nr; i++) {
                struct diff_filepair *p = q->queue[i];
                const char *path = p->one->path;
 -              switch (p->status) {
 +              switch (fix_unmerged_status(p, data)) {
                default:
                        die(_("unexpected diff status %c"), p->status);
 -              case DIFF_STATUS_UNMERGED:
 -                      /*
 -                       * ADD_CACHE_IGNORE_REMOVAL is unset if "git
 -                       * add -u" is calling us, In such a case, a
 -                       * missing work tree file needs to be removed
 -                       * if there is an unmerged entry at stage #2,
 -                       * but such a diff record is followed by
 -                       * another with DIFF_STATUS_DELETED (and if
 -                       * there is no stage #2, we won't see DELETED
 -                       * nor MODIFIED).  We can simply continue
 -                       * either way.
 -                       */
 -                      if (!(data->flags & ADD_CACHE_IGNORE_REMOVAL))
 -                              continue;
 -                      /*
 -                       * Otherwise, it is "git add path" is asking
 -                       * to explicitly add it; we fall through.  A
 -                       * missing work tree file is an error and is
 -                       * caught by add_file_to_index() in such a
 -                       * case.
 -                       */
                case DIFF_STATUS_MODIFIED:
                case DIFF_STATUS_TYPE_CHANGED:
                        if (add_file_to_index(&the_index, path, data->flags)) {
@@@ -91,7 -91,6 +91,7 @@@ int add_files_to_cache(const char *pref
        data.flags = flags;
        data.add_errors = 0;
        rev.diffopt.format_callback_data = &data;
 +      rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
        run_diff_files(&rev, DIFF_RACY_IS_MODIFIED);
        return !!data.add_errors;
  }
@@@ -331,8 -330,8 +331,8 @@@ static struct option builtin_add_option
  
  static int add_config(const char *var, const char *value, void *cb)
  {
-       if (!strcasecmp(var, "add.ignoreerrors") ||
-           !strcasecmp(var, "add.ignore-errors")) {
+       if (!strcmp(var, "add.ignoreerrors") ||
+           !strcmp(var, "add.ignore-errors")) {
                ignore_add_errors = git_config_bool(var, value);
                return 0;
        }
diff --combined merge-recursive.c
index ecb1806cad19bcc69c6dbf8528561eefffab15b2,dba27643bd30768270d5c33753d6b26dea65face..07ad1a3be4432928872c05859e0fffda026c502f
  #include "dir.h"
  #include "submodule.h"
  
 -static const char rename_limit_advice[] =
 -"inexact rename detection was skipped because there were too many\n"
 -"  files. You may want to set your merge.renamelimit variable to at least\n"
 -"  %d and retry this merge.";
 -
  static struct tree *shift_tree_object(struct tree *one, struct tree *two,
                                      const char *subtree_shift)
  {
@@@ -273,9 -278,7 +273,9 @@@ static int save_files_dirs(const unsign
  static int get_files_dirs(struct merge_options *o, struct tree *tree)
  {
        int n;
 -      if (read_tree_recursive(tree, "", 0, 0, NULL, save_files_dirs, o))
 +      struct pathspec match_all;
 +      init_pathspec(&match_all, NULL);
 +      if (read_tree_recursive(tree, "", 0, 0, &match_all, save_files_dirs, o))
                return 0;
        n = o->current_file_set.nr + o->current_directory_set.nr;
        return n;
@@@ -341,11 -344,10 +341,11 @@@ static void make_room_for_directories_o
         * make room for the corresponding directory.  Such paths will
         * later be processed in process_df_entry() at the end.  If
         * the corresponding directory ends up being removed by the
 -       * merge, then the file will be reinstated at that time;
 -       * otherwise, if the file is not supposed to be removed by the
 -       * merge, the contents of the file will be placed in another
 -       * unique filename.
 +       * merge, then the file will be reinstated at that time
 +       * (albeit with a different timestamp!); otherwise, if the
 +       * file is not supposed to be removed by the merge, the
 +       * contents of the file will be placed in another unique
 +       * filename.
         *
         * NOTE: This function relies on the fact that entries for a
         * D/F conflict will appear adjacent in the index, with the
        int last_len = 0;
        int i;
  
 +      /*
 +       * Do not do any of this crazyness during the recursive; we don't
 +       * even write anything to the working tree!
 +       */
 +      if (o->call_depth)
 +              return;
 +
        for (i = 0; i < entries->nr; i++) {
                const char *path = entries->items[i].string;
                int len = strlen(path);
@@@ -1265,13 -1260,9 +1265,13 @@@ static int merge_content(struct merge_o
        }
  
        if (mfi.clean && !df_conflict_remains &&
 -          sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode)
 +          sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode &&
 +          !o->call_depth && !lstat(path, &st)) {
                output(o, 3, "Skipped %s (merged same as existing)", path);
 -      else
 +              add_cacheinfo(mfi.mode, mfi.sha, path,
 +                            0 /*stage*/, 1 /*refresh*/, 0 /*options*/);
 +              return mfi.clean;
 +      } else
                output(o, 2, "Auto-merging %s", path);
  
        if (!mfi.clean) {
@@@ -1661,9 -1652,8 +1661,9 @@@ int merge_recursive(struct merge_option
                commit_list_insert(h2, &(*result)->parents->next);
        }
        flush_output(o);
 -      if (o->needed_rename_limit)
 -              warning(rename_limit_advice, o->needed_rename_limit);
 +      if (show(o, 2))
 +              diff_warn_rename_limit("merge.renamelimit",
 +                                     o->needed_rename_limit, 0);
        return clean;
  }
  
@@@ -1721,15 -1711,15 +1721,15 @@@ int merge_recursive_generic(struct merg
  static int merge_recursive_config(const char *var, const char *value, void *cb)
  {
        struct merge_options *o = cb;
-       if (!strcasecmp(var, "merge.verbosity")) {
+       if (!strcmp(var, "merge.verbosity")) {
                o->verbosity = git_config_int(var, value);
                return 0;
        }
-       if (!strcasecmp(var, "diff.renamelimit")) {
+       if (!strcmp(var, "diff.renamelimit")) {
                o->diff_rename_limit = git_config_int(var, value);
                return 0;
        }
-       if (!strcasecmp(var, "merge.renamelimit")) {
+       if (!strcmp(var, "merge.renamelimit")) {
                o->merge_rename_limit = git_config_int(var, value);
                return 0;
        }