Merge branch 'va/i18n'
authorJunio C Hamano <gitster@pobox.com>
Wed, 21 Sep 2016 22:15:28 +0000 (15:15 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 21 Sep 2016 22:15:28 +0000 (15:15 -0700)
More i18n.

* va/i18n:
i18n: update-index: mark warnings for translation
i18n: show-branch: mark plural strings for translation
i18n: show-branch: mark error messages for translation
i18n: receive-pack: mark messages for translation
notes: spell first word of error messages in lowercase
i18n: notes: mark error messages for translation
i18n: merge-recursive: mark verbose message for translation
i18n: merge-recursive: mark error messages for translation
i18n: config: mark error message for translation
i18n: branch: mark option description for translation
i18n: blame: mark error messages for translation

1  2 
builtin/blame.c
builtin/receive-pack.c
builtin/update-index.c
diff --combined builtin/blame.c
index ccaf8be5e7e05c67c475dfafa5eea874175d62b6,27aea7944c8281821ce8915c92d6a81ef7ff3d54..2ff18b168ecf229ce1a12921c24c2c0bf8ba1a08
@@@ -120,7 -120,7 +120,7 @@@ struct origin 
         */
        struct blame_entry *suspects;
        mmfile_t file;
 -      unsigned char blob_sha1[20];
 +      struct object_id blob_oid;
        unsigned mode;
        /* guilty gets set when shipping any suspects to the final
         * blame list instead of other commits
@@@ -154,8 -154,8 +154,8 @@@ static int diff_hunks(mmfile_t *file_a
   */
  int textconv_object(const char *path,
                    unsigned mode,
 -                  const unsigned char *sha1,
 -                  int sha1_valid,
 +                  const struct object_id *oid,
 +                  int oid_valid,
                    char **buf,
                    unsigned long *buf_size)
  {
        struct userdiff_driver *textconv;
  
        df = alloc_filespec(path);
 -      fill_filespec(df, sha1, sha1_valid, mode);
 +      fill_filespec(df, oid->hash, oid_valid, mode);
        textconv = get_textconv(df);
        if (!textconv) {
                free_filespec(df);
@@@ -188,16 -188,15 +188,16 @@@ static void fill_origin_blob(struct dif
  
                num_read_blob++;
                if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
 -                  textconv_object(o->path, o->mode, o->blob_sha1, 1, &file->ptr, &file_size))
 +                  textconv_object(o->path, o->mode, &o->blob_oid, 1, &file->ptr, &file_size))
                        ;
                else
 -                      file->ptr = read_sha1_file(o->blob_sha1, &type, &file_size);
 +                      file->ptr = read_sha1_file(o->blob_oid.hash, &type,
 +                                                 &file_size);
                file->size = file_size;
  
                if (!file->ptr)
                        die("Cannot read blob %s for path %s",
 -                          sha1_to_hex(o->blob_sha1),
 +                          oid_to_hex(&o->blob_oid),
                            o->path);
                o->file = *file;
        }
@@@ -509,17 -508,17 +509,17 @@@ static struct origin *get_origin(struc
   */
  static int fill_blob_sha1_and_mode(struct origin *origin)
  {
 -      if (!is_null_sha1(origin->blob_sha1))
 +      if (!is_null_oid(&origin->blob_oid))
                return 0;
        if (get_tree_entry(origin->commit->object.oid.hash,
                           origin->path,
 -                         origin->blob_sha1, &origin->mode))
 +                         origin->blob_oid.hash, &origin->mode))
                goto error_out;
 -      if (sha1_object_info(origin->blob_sha1, NULL) != OBJ_BLOB)
 +      if (sha1_object_info(origin->blob_oid.hash, NULL) != OBJ_BLOB)
                goto error_out;
        return 0;
   error_out:
 -      hashclr(origin->blob_sha1);
 +      oidclr(&origin->blob_oid);
        origin->mode = S_IFINVALID;
        return -1;
  }
@@@ -573,7 -572,7 +573,7 @@@ static struct origin *find_origin(struc
        if (!diff_queued_diff.nr) {
                /* The path is the same as parent */
                porigin = get_origin(sb, parent, origin->path);
 -              hashcpy(porigin->blob_sha1, origin->blob_sha1);
 +              oidcpy(&porigin->blob_oid, &origin->blob_oid);
                porigin->mode = origin->mode;
        } else {
                /*
                            p->status);
                case 'M':
                        porigin = get_origin(sb, parent, origin->path);
 -                      hashcpy(porigin->blob_sha1, p->one->oid.hash);
 +                      oidcpy(&porigin->blob_oid, &p->one->oid);
                        porigin->mode = p->one->mode;
                        break;
                case 'A':
@@@ -645,7 -644,7 +645,7 @@@ static struct origin *find_rename(struc
                if ((p->status == 'R' || p->status == 'C') &&
                    !strcmp(p->two->path, origin->path)) {
                        porigin = get_origin(sb, parent, p->one->path);
 -                      hashcpy(porigin->blob_sha1, p->one->oid.hash);
 +                      oidcpy(&porigin->blob_oid, &p->one->oid);
                        porigin->mode = p->one->mode;
                        break;
                }
@@@ -1309,7 -1308,7 +1309,7 @@@ static void find_copy_in_parent(struct 
                                continue;
  
                        norigin = get_origin(sb, parent, p->one->path);
 -                      hashcpy(norigin->blob_sha1, p->one->oid.hash);
 +                      oidcpy(&norigin->blob_oid, &p->one->oid);
                        norigin->mode = p->one->mode;
                        fill_origin_blob(&sb->revs->diffopt, norigin, &file_p);
                        if (!file_p.ptr)
@@@ -1459,14 -1458,15 +1459,14 @@@ static void pass_blame(struct scoreboar
                        porigin = find(sb, p, origin);
                        if (!porigin)
                                continue;
 -                      if (!hashcmp(porigin->blob_sha1, origin->blob_sha1)) {
 +                      if (!oidcmp(&porigin->blob_oid, &origin->blob_oid)) {
                                pass_whole_blame(sb, origin, porigin);
                                origin_decref(porigin);
                                goto finish;
                        }
                        for (j = same = 0; j < i; j++)
                                if (sg_origin[j] &&
 -                                  !hashcmp(sg_origin[j]->blob_sha1,
 -                                           porigin->blob_sha1)) {
 +                                  !oidcmp(&sg_origin[j]->blob_oid, &porigin->blob_oid)) {
                                        same = 1;
                                        break;
                                }
@@@ -1941,7 -1941,7 +1941,7 @@@ static void emit_other(struct scoreboar
        cp = nth_line(sb, ent->lno);
        for (cnt = 0; cnt < ent->num_lines; cnt++) {
                char ch;
 -              int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? 40 : abbrev;
 +              int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? GIT_SHA1_HEXSZ : abbrev;
  
                if (suspect->commit->object.flags & UNINTERESTING) {
                        if (blank_boundary)
@@@ -2232,12 -2232,12 +2232,12 @@@ static void verify_working_tree_path(st
        int pos;
  
        for (parents = work_tree->parents; parents; parents = parents->next) {
 -              const unsigned char *commit_sha1 = parents->item->object.oid.hash;
 -              unsigned char blob_sha1[20];
 +              const struct object_id *commit_oid = &parents->item->object.oid;
 +              struct object_id blob_oid;
                unsigned mode;
  
 -              if (!get_tree_entry(commit_sha1, path, blob_sha1, &mode) &&
 -                  sha1_object_info(blob_sha1, NULL) == OBJ_BLOB)
 +              if (!get_tree_entry(commit_oid->hash, path, blob_oid.hash, &mode) &&
 +                  sha1_object_info(blob_oid.hash, NULL) == OBJ_BLOB)
                        return;
        }
  
                die("no such path '%s' in HEAD", path);
  }
  
 -static struct commit_list **append_parent(struct commit_list **tail, const unsigned char *sha1)
 +static struct commit_list **append_parent(struct commit_list **tail, const struct object_id *oid)
  {
        struct commit *parent;
  
 -      parent = lookup_commit_reference(sha1);
 +      parent = lookup_commit_reference(oid->hash);
        if (!parent)
 -              die("no such commit %s", sha1_to_hex(sha1));
 +              die("no such commit %s", oid_to_hex(oid));
        return &commit_list_insert(parent, tail)->next;
  }
  
@@@ -2274,10 -2274,10 +2274,10 @@@ static void append_merge_parents(struc
        }
  
        while (!strbuf_getwholeline_fd(&line, merge_head, '\n')) {
 -              unsigned char sha1[20];
 -              if (line.len < 40 || get_sha1_hex(line.buf, sha1))
 +              struct object_id oid;
 +              if (line.len < GIT_SHA1_HEXSZ || get_oid_hex(line.buf, &oid))
                        die("unknown line in '%s': %s", git_path_merge_head(), line.buf);
 -              tail = append_parent(tail, sha1);
 +              tail = append_parent(tail, &oid);
        }
        close(merge_head);
        strbuf_release(&line);
@@@ -2306,7 -2306,7 +2306,7 @@@ static struct commit *fake_working_tree
        struct commit *commit;
        struct origin *origin;
        struct commit_list **parent_tail, *parent;
 -      unsigned char head_sha1[20];
 +      struct object_id head_oid;
        struct strbuf buf = STRBUF_INIT;
        const char *ident;
        time_t now;
        commit->date = now;
        parent_tail = &commit->parents;
  
 -      if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, head_sha1, NULL))
 +      if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, head_oid.hash, NULL))
                die("no such ref: HEAD");
  
 -      parent_tail = append_parent(parent_tail, head_sha1);
 +      parent_tail = append_parent(parent_tail, &head_oid);
        append_merge_parents(parent_tail);
        verify_working_tree_path(commit, path);
  
                switch (st.st_mode & S_IFMT) {
                case S_IFREG:
                        if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
 -                          textconv_object(read_from, mode, null_sha1, 0, &buf_ptr, &buf_len))
 +                          textconv_object(read_from, mode, &null_oid, 0, &buf_ptr, &buf_len))
                                strbuf_attach(&buf, buf_ptr, buf_len, buf_len + 1);
                        else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
                                die_errno("cannot open or read '%s'", read_from);
        convert_to_git(path, buf.buf, buf.len, &buf, 0);
        origin->file.ptr = buf.buf;
        origin->file.size = buf.len;
 -      pretend_sha1_file(buf.buf, buf.len, OBJ_BLOB, origin->blob_sha1);
 +      pretend_sha1_file(buf.buf, buf.len, OBJ_BLOB, origin->blob_oid.hash);
  
        /*
         * Read the current index, replace the path entry with
        }
        size = cache_entry_size(len);
        ce = xcalloc(1, size);
 -      hashcpy(ce->sha1, origin->blob_sha1);
 +      oidcpy(&ce->oid, &origin->blob_oid);
        memcpy(ce->name, path, len);
        ce->ce_flags = create_ce_flags(0);
        ce->ce_namelen = len;
@@@ -2601,7 -2601,7 +2601,7 @@@ parse_done
  
        if (incremental || (output_option & OUTPUT_PORCELAIN)) {
                if (show_progress > 0)
-                       die("--progress can't be used with --incremental or porcelain formats");
+                       die(_("--progress can't be used with --incremental or porcelain formats"));
                show_progress = 0;
        } else if (show_progress < 0)
                show_progress = isatty(2);
                sb.commits.compare = compare_commits_by_commit_date;
        }
        else if (contents_from)
-               die("--contents and --reverse do not blend well.");
+               die(_("--contents and --reverse do not blend well."));
        else {
                final_commit_name = prepare_initial(&sb);
                sb.commits.compare = compare_commits_by_reverse_commit_date;
                add_pending_object(&revs, &(sb.final->object), ":");
        }
        else if (contents_from)
-               die("Cannot use --contents with final commit object name");
+               die(_("cannot use --contents with final commit object name"));
  
        if (reverse && revs.first_parent_only) {
                final_commit = find_single_final(sb.revs, NULL);
                if (!final_commit)
-                       die("--reverse and --first-parent together require specified latest commit");
+                       die(_("--reverse and --first-parent together require specified latest commit"));
        }
  
        /*
                }
  
                if (oidcmp(&c->object.oid, &sb.final->object.oid))
-                       die("--reverse --first-parent together require range along first-parent chain");
+                       die(_("--reverse --first-parent together require range along first-parent chain"));
        }
  
        if (is_null_oid(&sb.final->object.oid)) {
        else {
                o = get_origin(&sb, sb.final, path);
                if (fill_blob_sha1_and_mode(o))
-                       die("no such path %s in %s", path, final_commit_name);
+                       die(_("no such path %s in %s"), path, final_commit_name);
  
                if (DIFF_OPT_TST(&sb.revs->diffopt, ALLOW_TEXTCONV) &&
 -                  textconv_object(path, o->mode, o->blob_sha1, 1, (char **) &sb.final_buf,
 +                  textconv_object(path, o->mode, &o->blob_oid, 1, (char **) &sb.final_buf,
                                    &sb.final_buf_size))
                        ;
                else
 -                      sb.final_buf = read_sha1_file(o->blob_sha1, &type,
 +                      sb.final_buf = read_sha1_file(o->blob_oid.hash, &type,
                                                      &sb.final_buf_size);
  
                if (!sb.final_buf)
-                       die("Cannot read blob %s for path %s",
+                       die(_("cannot read blob %s for path %s"),
 -                          sha1_to_hex(o->blob_sha1),
 +                          oid_to_hex(&o->blob_oid),
                            path);
        }
        num_read_blob++;
                                    &bottom, &top, sb.path))
                        usage(blame_usage);
                if (lno < top || ((lno || bottom) && lno < bottom))
-                       die("file %s has only %lu lines", path, lno);
+                       die(Q_("file %s has only %lu line",
+                              "file %s has only %lu lines",
+                              lno), path, lno);
                if (bottom < 1)
                        bottom = 1;
                if (top < 1)
diff --combined builtin/receive-pack.c
index f1ce05ce282361d8c49b1a447db90c13d5186674,79839d0d800d4d3d655f0a67272528e7ef2abf6b..896b16f2cceba73a44529f3b3d4f6ecdc33e892c
@@@ -46,7 -46,6 +46,7 @@@ static int transfer_unpack_limit = -1
  static int advertise_atomic_push = 1;
  static int advertise_push_options;
  static int unpack_limit = 100;
 +static off_t max_input_size;
  static int report_status;
  static int use_sideband;
  static int use_atomic;
@@@ -213,11 -212,6 +213,11 @@@ static int receive_pack_config(const ch
                return 0;
        }
  
 +      if (strcmp(var, "receive.maxinputsize") == 0) {
 +              max_input_size = git_config_int64(var, value);
 +              return 0;
 +      }
 +
        return git_default_config(var, value, cb);
  }
  
@@@ -781,47 -775,39 +781,39 @@@ static int is_ref_checked_out(const cha
        return !strcmp(head_name, ref);
  }
  
- static char *refuse_unconfigured_deny_msg[] = {
-       "By default, updating the current branch in a non-bare repository",
-       "is denied, because it will make the index and work tree inconsistent",
-       "with what you pushed, and will require 'git reset --hard' to match",
-       "the work tree to HEAD.",
-       "",
-       "You can set 'receive.denyCurrentBranch' configuration variable to",
-       "'ignore' or 'warn' in the remote repository to allow pushing into",
-       "its current branch; however, this is not recommended unless you",
-       "arranged to update its work tree to match what you pushed in some",
-       "other way.",
-       "",
-       "To squelch this message and still keep the default behaviour, set",
-       "'receive.denyCurrentBranch' configuration variable to 'refuse'."
- };
+ static char *refuse_unconfigured_deny_msg =
+       N_("By default, updating the current branch in a non-bare repository\n"
+          "is denied, because it will make the index and work tree inconsistent\n"
+          "with what you pushed, and will require 'git reset --hard' to match\n"
+          "the work tree to HEAD.\n"
+          "\n"
+          "You can set 'receive.denyCurrentBranch' configuration variable to\n"
+          "'ignore' or 'warn' in the remote repository to allow pushing into\n"
+          "its current branch; however, this is not recommended unless you\n"
+          "arranged to update its work tree to match what you pushed in some\n"
+          "other way.\n"
+          "\n"
+          "To squelch this message and still keep the default behaviour, set\n"
+          "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
  
  static void refuse_unconfigured_deny(void)
  {
-       int i;
-       for (i = 0; i < ARRAY_SIZE(refuse_unconfigured_deny_msg); i++)
-               rp_error("%s", refuse_unconfigured_deny_msg[i]);
+       rp_error("%s", _(refuse_unconfigured_deny_msg));
  }
  
- static char *refuse_unconfigured_deny_delete_current_msg[] = {
-       "By default, deleting the current branch is denied, because the next",
-       "'git clone' won't result in any file checked out, causing confusion.",
-       "",
-       "You can set 'receive.denyDeleteCurrent' configuration variable to",
-       "'warn' or 'ignore' in the remote repository to allow deleting the",
-       "current branch, with or without a warning message.",
-       "",
-       "To squelch this message, you can set it to 'refuse'."
- };
+ static char *refuse_unconfigured_deny_delete_current_msg =
+       N_("By default, deleting the current branch is denied, because the next\n"
+          "'git clone' won't result in any file checked out, causing confusion.\n"
+          "\n"
+          "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
+          "'warn' or 'ignore' in the remote repository to allow deleting the\n"
+          "current branch, with or without a warning message.\n"
+          "\n"
+          "To squelch this message, you can set it to 'refuse'.");
  
  static void refuse_unconfigured_deny_delete_current(void)
  {
-       int i;
-       for (i = 0;
-            i < ARRAY_SIZE(refuse_unconfigured_deny_delete_current_msg);
-            i++)
-               rp_error("%s", refuse_unconfigured_deny_delete_current_msg[i]);
+       rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
  }
  
  static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]);
@@@ -1654,9 -1640,6 +1646,9 @@@ static const char *unpack(int err_fd, s
                if (fsck_objects)
                        argv_array_pushf(&child.args, "--strict%s",
                                fsck_msg_types.buf);
 +              if (max_input_size)
 +                      argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
 +                              (uintmax_t)max_input_size);
                child.no_stdout = 1;
                child.err = err_fd;
                child.git_cmd = 1;
                                fsck_msg_types.buf);
                if (!reject_thin)
                        argv_array_push(&child.args, "--fix-thin");
 +              if (max_input_size)
 +                      argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
 +                              (uintmax_t)max_input_size);
                child.out = -1;
                child.err = err_fd;
                child.git_cmd = 1;
diff --combined builtin/update-index.c
index 44fb2e4fd09bdbed14cc2d3f294a89c092b1f852,7a17ce14ea50eafca830e9ad78b62037457fc70b..73f6b3e1bec362fe8ec6ed78dee0edbb5155403c
@@@ -275,7 -275,7 +275,7 @@@ static int add_one_path(const struct ca
        fill_stat_cache_info(ce, st);
        ce->ce_mode = ce_mode_from_stat(old, st->st_mode);
  
 -      if (index_path(ce->sha1, path, st,
 +      if (index_path(ce->oid.hash, path, st,
                       info_only ? 0 : HASH_WRITE_OBJECT)) {
                free(ce);
                return -1;
   */
  static int process_directory(const char *path, int len, struct stat *st)
  {
 -      unsigned char sha1[20];
 +      struct object_id oid;
        int pos = cache_name_pos(path, len);
  
        /* Exact match: file or existing gitlink */
                if (S_ISGITLINK(ce->ce_mode)) {
  
                        /* Do nothing to the index if there is no HEAD! */
 -                      if (resolve_gitlink_ref(path, "HEAD", sha1) < 0)
 +                      if (resolve_gitlink_ref(path, "HEAD", oid.hash) < 0)
                                return 0;
  
                        return add_one_path(ce, path, len, st);
        }
  
        /* No match - should we add it as a gitlink? */
 -      if (!resolve_gitlink_ref(path, "HEAD", sha1))
 +      if (!resolve_gitlink_ref(path, "HEAD", oid.hash))
                return add_one_path(NULL, path, len, st);
  
        /* Error out. */
@@@ -390,7 -390,7 +390,7 @@@ static int process_path(const char *pat
        return add_one_path(ce, path, len, &st);
  }
  
 -static int add_cacheinfo(unsigned int mode, const unsigned char *sha1,
 +static int add_cacheinfo(unsigned int mode, const struct object_id *oid,
                         const char *path, int stage)
  {
        int size, len, option;
        size = cache_entry_size(len);
        ce = xcalloc(1, size);
  
 -      hashcpy(ce->sha1, sha1);
 +      oidcpy(&ce->oid, oid);
        memcpy(ce->name, path, len);
        ce->ce_flags = create_ce_flags(stage);
        ce->ce_namelen = len;
@@@ -487,7 -487,7 +487,7 @@@ static void read_index_info(int nul_ter
        while (getline_fn(&buf, stdin) != EOF) {
                char *ptr, *tab;
                char *path_name;
 -              unsigned char sha1[20];
 +              struct object_id oid;
                unsigned int mode;
                unsigned long ul;
                int stage;
                mode = ul;
  
                tab = strchr(ptr, '\t');
 -              if (!tab || tab - ptr < 41)
 +              if (!tab || tab - ptr < GIT_SHA1_HEXSZ + 1)
                        goto bad_line;
  
                if (tab[-2] == ' ' && '0' <= tab[-1] && tab[-1] <= '3') {
                        ptr = tab + 1; /* point at the head of path */
                }
  
 -              if (get_sha1_hex(tab - 40, sha1) || tab[-41] != ' ')
 +              if (get_oid_hex(tab - GIT_SHA1_HEXSZ, &oid) ||
 +                      tab[-(GIT_SHA1_HEXSZ + 1)] != ' ')
                        goto bad_line;
  
                path_name = ptr;
                         * ptr[-1] points at tab,
                         * ptr[-41] is at the beginning of sha1
                         */
 -                      ptr[-42] = ptr[-1] = 0;
 -                      if (add_cacheinfo(mode, sha1, path_name, stage))
 +                      ptr[-(GIT_SHA1_HEXSZ + 2)] = ptr[-1] = 0;
 +                      if (add_cacheinfo(mode, &oid, path_name, stage))
                                die("git update-index: unable to update %s",
                                    path_name);
                }
@@@ -577,19 -576,19 +577,19 @@@ static const char * const update_index_
        NULL
  };
  
 -static unsigned char head_sha1[20];
 -static unsigned char merge_head_sha1[20];
 +static struct object_id head_oid;
 +static struct object_id merge_head_oid;
  
  static struct cache_entry *read_one_ent(const char *which,
 -                                      unsigned char *ent, const char *path,
 +                                      struct object_id *ent, const char *path,
                                        int namelen, int stage)
  {
        unsigned mode;
 -      unsigned char sha1[20];
 +      struct object_id oid;
        int size;
        struct cache_entry *ce;
  
 -      if (get_tree_entry(ent, path, sha1, &mode)) {
 +      if (get_tree_entry(ent->hash, path, oid.hash, &mode)) {
                if (which)
                        error("%s: not in %s branch.", path, which);
                return NULL;
        size = cache_entry_size(namelen);
        ce = xcalloc(1, size);
  
 -      hashcpy(ce->sha1, sha1);
 +      oidcpy(&ce->oid, &oid);
        memcpy(ce->name, path, namelen);
        ce->ce_flags = create_ce_flags(stage);
        ce->ce_namelen = namelen;
@@@ -652,14 -651,14 +652,14 @@@ static int unresolve_one(const char *pa
         * stuff HEAD version in stage #2,
         * stuff MERGE_HEAD version in stage #3.
         */
 -      ce_2 = read_one_ent("our", head_sha1, path, namelen, 2);
 -      ce_3 = read_one_ent("their", merge_head_sha1, path, namelen, 3);
 +      ce_2 = read_one_ent("our", &head_oid, path, namelen, 2);
 +      ce_3 = read_one_ent("their", &merge_head_oid, path, namelen, 3);
  
        if (!ce_2 || !ce_3) {
                ret = -1;
                goto free_return;
        }
 -      if (!hashcmp(ce_2->sha1, ce_3->sha1) &&
 +      if (!oidcmp(&ce_2->oid, &ce_3->oid) &&
            ce_2->ce_mode == ce_3->ce_mode) {
                fprintf(stderr, "%s: identical in both, skipping.\n",
                        path);
  
  static void read_head_pointers(void)
  {
 -      if (read_ref("HEAD", head_sha1))
 +      if (read_ref("HEAD", head_oid.hash))
                die("No HEAD -- no initial commit yet?");
 -      if (read_ref("MERGE_HEAD", merge_head_sha1)) {
 +      if (read_ref("MERGE_HEAD", merge_head_oid.hash)) {
                fprintf(stderr, "Not in the middle of a merge.\n");
                exit(0);
        }
@@@ -726,7 -725,7 +726,7 @@@ static int do_reupdate(int ac, const ch
                       PATHSPEC_PREFER_CWD,
                       prefix, av + 1);
  
 -      if (read_ref("HEAD", head_sha1))
 +      if (read_ref("HEAD", head_oid.hash))
                /* If there is no HEAD, that means it is an initial
                 * commit.  Update everything in the index.
                 */
                if (ce_stage(ce) || !ce_path_match(ce, &pathspec, NULL))
                        continue;
                if (has_head)
 -                      old = read_one_ent(NULL, head_sha1,
 +                      old = read_one_ent(NULL, &head_oid,
                                           ce->name, ce_namelen(ce), 0);
                if (old && ce->ce_mode == old->ce_mode &&
 -                  !hashcmp(ce->sha1, old->sha1)) {
 +                  !oidcmp(&ce->oid, &old->oid)) {
                        free(old);
                        continue; /* unchanged */
                }
@@@ -808,7 -807,7 +808,7 @@@ static int resolve_undo_clear_callback(
  
  static int parse_new_style_cacheinfo(const char *arg,
                                     unsigned int *mode,
 -                                   unsigned char sha1[],
 +                                   struct object_id *oid,
                                     const char **path)
  {
        unsigned long ul;
                return -1; /* not a new-style cacheinfo */
        *mode = ul;
        endp++;
 -      if (get_sha1_hex(endp, sha1) || endp[40] != ',')
 +      if (get_oid_hex(endp, oid) || endp[GIT_SHA1_HEXSZ] != ',')
                return -1;
 -      *path = endp + 41;
 +      *path = endp + GIT_SHA1_HEXSZ + 1;
        return 0;
  }
  
  static int cacheinfo_callback(struct parse_opt_ctx_t *ctx,
                                const struct option *opt, int unset)
  {
 -      unsigned char sha1[20];
 +      struct object_id oid;
        unsigned int mode;
        const char *path;
  
 -      if (!parse_new_style_cacheinfo(ctx->argv[1], &mode, sha1, &path)) {
 -              if (add_cacheinfo(mode, sha1, path, 0))
 +      if (!parse_new_style_cacheinfo(ctx->argv[1], &mode, &oid, &path)) {
 +              if (add_cacheinfo(mode, &oid, path, 0))
                        die("git update-index: --cacheinfo cannot add %s", path);
                ctx->argv++;
                ctx->argc--;
        if (ctx->argc <= 3)
                return error("option 'cacheinfo' expects <mode>,<sha1>,<path>");
        if (strtoul_ui(*++ctx->argv, 8, &mode) ||
 -          get_sha1_hex(*++ctx->argv, sha1) ||
 -          add_cacheinfo(mode, sha1, *++ctx->argv, 0))
 +          get_oid_hex(*++ctx->argv, &oid) ||
 +          add_cacheinfo(mode, &oid, *++ctx->argv, 0))
                die("git update-index: --cacheinfo cannot add %s", *ctx->argv);
        ctx->argc -= 3;
        return 0;
@@@ -1128,9 -1127,9 +1128,9 @@@ int cmd_update_index(int argc, const ch
                break;
        case UC_DISABLE:
                if (git_config_get_untracked_cache() == 1)
-                       warning("core.untrackedCache is set to true; "
-                               "remove or change it, if you really want to "
-                               "disable the untracked cache");
+                       warning(_("core.untrackedCache is set to true; "
+                                 "remove or change it, if you really want to "
+                                 "disable the untracked cache"));
                remove_untracked_cache(&the_index);
                report(_("Untracked cache disabled"));
                break;
        case UC_ENABLE:
        case UC_FORCE:
                if (git_config_get_untracked_cache() == 0)
-                       warning("core.untrackedCache is set to false; "
-                               "remove or change it, if you really want to "
-                               "enable the untracked cache");
+                       warning(_("core.untrackedCache is set to false; "
+                                 "remove or change it, if you really want to "
+                                 "enable the untracked cache"));
                add_untracked_cache(&the_index);
                report(_("Untracked cache enabled for '%s'"), get_git_work_tree());
                break;