Merge branch 'rs/pack-objects-pbase-cleanup'
authorJunio C Hamano <gitster@pobox.com>
Fri, 11 Aug 2017 20:27:00 +0000 (13:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 11 Aug 2017 20:27:00 +0000 (13:27 -0700)
Code clean-up.

* rs/pack-objects-pbase-cleanup:
pack-objects: remove unnecessary NULL check

1  2 
builtin/pack-objects.c
diff --combined builtin/pack-objects.c
index e730b415bfdbe5f00e08cb28c8cced817067cfee,acfc2500e22b5a11e6d25bc70bf185c9ddce79f2..c753e9237a8d5981a17e872db33d5326bd8d7eab
@@@ -1,6 -1,5 +1,6 @@@
  #include "builtin.h"
  #include "cache.h"
 +#include "config.h"
  #include "attr.h"
  #include "object.h"
  #include "blob.h"
@@@ -45,7 -44,7 +45,7 @@@ static uint32_t nr_result, nr_written
  static int non_empty;
  static int reuse_delta = 1, reuse_object = 1;
  static int keep_unreachable, unpack_unreachable, include_tag;
 -static unsigned long unpack_unreachable_expiration;
 +static timestamp_t unpack_unreachable_expiration;
  static int pack_loose_unreachable;
  static int local;
  static int have_non_local_packs;
@@@ -107,14 -106,12 +107,14 @@@ static void *get_delta(struct object_en
        void *buf, *base_buf, *delta_buf;
        enum object_type type;
  
 -      buf = read_sha1_file(entry->idx.sha1, &type, &size);
 +      buf = read_sha1_file(entry->idx.oid.hash, &type, &size);
        if (!buf)
 -              die("unable to read %s", sha1_to_hex(entry->idx.sha1));
 -      base_buf = read_sha1_file(entry->delta->idx.sha1, &type, &base_size);
 +              die("unable to read %s", oid_to_hex(&entry->idx.oid));
 +      base_buf = read_sha1_file(entry->delta->idx.oid.hash, &type,
 +                                &base_size);
        if (!base_buf)
 -              die("unable to read %s", sha1_to_hex(entry->delta->idx.sha1));
 +              die("unable to read %s",
 +                  oid_to_hex(&entry->delta->idx.oid));
        delta_buf = diff_delta(base_buf, base_size,
                               buf, size, &delta_size, 0);
        if (!delta_buf || delta_size != entry->delta_size)
@@@ -252,20 -249,19 +252,20 @@@ static unsigned long write_no_reuse_obj
        if (!usable_delta) {
                if (entry->type == OBJ_BLOB &&
                    entry->size > big_file_threshold &&
 -                  (st = open_istream(entry->idx.sha1, &type, &size, NULL)) != NULL)
 +                  (st = open_istream(entry->idx.oid.hash, &type, &size, NULL)) != NULL)
                        buf = NULL;
                else {
 -                      buf = read_sha1_file(entry->idx.sha1, &type, &size);
 +                      buf = read_sha1_file(entry->idx.oid.hash, &type,
 +                                           &size);
                        if (!buf)
 -                              die(_("unable to read %s"), sha1_to_hex(entry->idx.sha1));
 +                              die(_("unable to read %s"),
 +                                  oid_to_hex(&entry->idx.oid));
                }
                /*
                 * make sure no cached delta data remains from a
                 * previous attempt before a pack split occurred.
                 */
 -              free(entry->delta_data);
 -              entry->delta_data = NULL;
 +              FREE_AND_NULL(entry->delta_data);
                entry->z_delta_size = 0;
        } else if (entry->delta_data) {
                size = entry->delta_size;
                        return 0;
                }
                sha1write(f, header, hdrlen);
 -              sha1write(f, entry->delta->idx.sha1, 20);
 +              sha1write(f, entry->delta->idx.oid.hash, 20);
                hdrlen += 20;
        } else {
                if (limit && hdrlen + datalen + 20 >= limit) {
                sha1write(f, header, hdrlen);
        }
        if (st) {
 -              datalen = write_large_blob_data(st, f, entry->idx.sha1);
 +              datalen = write_large_blob_data(st, f, entry->idx.oid.hash);
                close_istream(st);
        } else {
                sha1write(f, buf, datalen);
@@@ -373,8 -369,7 +373,8 @@@ static off_t write_reuse_object(struct 
        datalen = revidx[1].offset - offset;
        if (!pack_to_stdout && p->index_version > 1 &&
            check_pack_crc(p, &w_curs, offset, datalen, revidx->nr)) {
 -              error("bad packed object CRC for %s", sha1_to_hex(entry->idx.sha1));
 +              error("bad packed object CRC for %s",
 +                    oid_to_hex(&entry->idx.oid));
                unuse_pack(&w_curs);
                return write_no_reuse_object(f, entry, limit, usable_delta);
        }
  
        if (!pack_to_stdout && p->index_version == 1 &&
            check_pack_inflate(p, &w_curs, offset, datalen, entry->size)) {
 -              error("corrupt packed object for %s", sha1_to_hex(entry->idx.sha1));
 +              error("corrupt packed object for %s",
 +                    oid_to_hex(&entry->idx.oid));
                unuse_pack(&w_curs);
                return write_no_reuse_object(f, entry, limit, usable_delta);
        }
                        return 0;
                }
                sha1write(f, header, hdrlen);
 -              sha1write(f, entry->delta->idx.sha1, 20);
 +              sha1write(f, entry->delta->idx.oid.hash, 20);
                hdrlen += 20;
                reused_delta++;
        } else {
@@@ -515,7 -509,7 +515,7 @@@ static enum write_one_status write_one(
        recursing = (e->idx.offset == 1);
        if (recursing) {
                warning("recursive delta detected for object %s",
 -                      sha1_to_hex(e->idx.sha1));
 +                      oid_to_hex(&e->idx.oid));
                return WRITE_ONE_RECURSIVE;
        } else if (e->idx.offset || e->preferred_base) {
                /* offset is non zero if object is written already. */
@@@ -1289,7 -1283,7 +1289,7 @@@ static int done_pbase_path_pos(unsigne
  
  static int check_pbase_path(unsigned hash)
  {
-       int pos = (!done_pbase_paths) ? -1 : done_pbase_path_pos(hash);
+       int pos = done_pbase_path_pos(hash);
        if (0 <= pos)
                return 1;
        pos = -pos - 1;
                   done_pbase_paths_alloc);
        done_pbase_paths_num++;
        if (pos < done_pbase_paths_num)
 -              memmove(done_pbase_paths + pos + 1,
 -                      done_pbase_paths + pos,
 -                      (done_pbase_paths_num - pos - 1) * sizeof(unsigned));
 +              MOVE_ARRAY(done_pbase_paths + pos + 1, done_pbase_paths + pos,
 +                         done_pbase_paths_num - pos - 1);
        done_pbase_paths[pos] = hash;
        return 0;
  }
@@@ -1374,10 -1369,12 +1374,10 @@@ static void cleanup_preferred_base(void
                if (!pbase_tree_cache[i])
                        continue;
                free(pbase_tree_cache[i]->tree_data);
 -              free(pbase_tree_cache[i]);
 -              pbase_tree_cache[i] = NULL;
 +              FREE_AND_NULL(pbase_tree_cache[i]);
        }
  
 -      free(done_pbase_paths);
 -      done_pbase_paths = NULL;
 +      FREE_AND_NULL(done_pbase_paths);
        done_pbase_paths_num = done_pbase_paths_alloc = 0;
  }
  
@@@ -1435,7 -1432,7 +1435,7 @@@ static void check_object(struct object_
                                ofs += 1;
                                if (!ofs || MSB(ofs, 7)) {
                                        error("delta base offset overflow in pack for %s",
 -                                            sha1_to_hex(entry->idx.sha1));
 +                                            oid_to_hex(&entry->idx.oid));
                                        goto give_up;
                                }
                                c = buf[used_0++];
                        ofs = entry->in_pack_offset - ofs;
                        if (ofs <= 0 || ofs >= entry->in_pack_offset) {
                                error("delta base offset out of bound for %s",
 -                                    sha1_to_hex(entry->idx.sha1));
 +                                    oid_to_hex(&entry->idx.oid));
                                goto give_up;
                        }
                        if (reuse_delta && !entry->preferred_base) {
                unuse_pack(&w_curs);
        }
  
 -      entry->type = sha1_object_info(entry->idx.sha1, &entry->size);
 +      entry->type = sha1_object_info(entry->idx.oid.hash, &entry->size);
        /*
         * The error condition is checked in prepare_pack().  This is
         * to permit a missing preferred base object to be ignored
@@@ -1517,7 -1514,7 +1517,7 @@@ static int pack_offset_sort(const void 
  
        /* avoid filesystem trashing with loose objects */
        if (!a->in_pack && !b->in_pack)
 -              return hashcmp(a->idx.sha1, b->idx.sha1);
 +              return oidcmp(&a->idx.oid, &b->idx.oid);
  
        if (a->in_pack < b->in_pack)
                return -1;
@@@ -1563,8 -1560,7 +1563,8 @@@ static void drop_reused_delta(struct ob
                 * And if that fails, the error will be recorded in entry->type
                 * and dealt with in prepare_pack().
                 */
 -              entry->type = sha1_object_info(entry->idx.sha1, &entry->size);
 +              entry->type = sha1_object_info(entry->idx.oid.hash,
 +                                             &entry->size);
        }
  }
  
@@@ -1856,29 -1852,26 +1856,29 @@@ static int try_delta(struct unpacked *t
        /* Load data if not already done */
        if (!trg->data) {
                read_lock();
 -              trg->data = read_sha1_file(trg_entry->idx.sha1, &type, &sz);
 +              trg->data = read_sha1_file(trg_entry->idx.oid.hash, &type,
 +                                         &sz);
                read_unlock();
                if (!trg->data)
                        die("object %s cannot be read",
 -                          sha1_to_hex(trg_entry->idx.sha1));
 +                          oid_to_hex(&trg_entry->idx.oid));
                if (sz != trg_size)
                        die("object %s inconsistent object length (%lu vs %lu)",
 -                          sha1_to_hex(trg_entry->idx.sha1), sz, trg_size);
 +                          oid_to_hex(&trg_entry->idx.oid), sz,
 +                          trg_size);
                *mem_usage += sz;
        }
        if (!src->data) {
                read_lock();
 -              src->data = read_sha1_file(src_entry->idx.sha1, &type, &sz);
 +              src->data = read_sha1_file(src_entry->idx.oid.hash, &type,
 +                                         &sz);
                read_unlock();
                if (!src->data) {
                        if (src_entry->preferred_base) {
                                static int warned = 0;
                                if (!warned++)
                                        warning("object %s cannot be read",
 -                                              sha1_to_hex(src_entry->idx.sha1));
 +                                              oid_to_hex(&src_entry->idx.oid));
                                /*
                                 * Those objects are not included in the
                                 * resulting pack.  Be resilient and ignore
                                return 0;
                        }
                        die("object %s cannot be read",
 -                          sha1_to_hex(src_entry->idx.sha1));
 +                          oid_to_hex(&src_entry->idx.oid));
                }
                if (sz != src_size)
                        die("object %s inconsistent object length (%lu vs %lu)",
 -                          sha1_to_hex(src_entry->idx.sha1), sz, src_size);
 +                          oid_to_hex(&src_entry->idx.oid), sz,
 +                          src_size);
                *mem_usage += sz;
        }
        if (!src->index) {
@@@ -1967,7 -1959,8 +1967,7 @@@ static unsigned long free_unpacked(stru
        n->index = NULL;
        if (n->data) {
                freed_mem += n->entry->size;
 -              free(n->data);
 -              n->data = NULL;
 +              FREE_AND_NULL(n->data);
        }
        n->entry = NULL;
        n->depth = 0;
@@@ -2344,7 -2337,7 +2344,7 @@@ static void add_tag_chain(const struct 
        if (packlist_find(&to_pack, oid->hash, NULL))
                return;
  
 -      tag = lookup_tag(oid->hash);
 +      tag = lookup_tag(oid);
        while (1) {
                if (!tag || parse_tag(tag) || !tag->tagged)
                        die("unable to pack objects reachable from tag %s",
@@@ -2413,7 -2406,7 +2413,7 @@@ static void prepare_pack(int window, in
                        nr_deltas++;
                        if (entry->type < 0)
                                die("unable to get type of object %s",
 -                                  sha1_to_hex(entry->idx.sha1));
 +                                  oid_to_hex(&entry->idx.oid));
                } else {
                        if (entry->type < 0) {
                                /*
@@@ -2479,10 -2472,8 +2479,10 @@@ static int git_pack_config(const char *
                        die("invalid number of threads specified (%d)",
                            delta_search_threads);
  #ifdef NO_PTHREADS
 -              if (delta_search_threads != 1)
 +              if (delta_search_threads != 1) {
                        warning("no threads support, ignoring %s", k);
 +                      delta_search_threads = 0;
 +              }
  #endif
                return 0;
        }
@@@ -2684,7 -2675,7 +2684,7 @@@ static int has_sha1_pack_kept_or_nonloc
  static struct oid_array recent_objects;
  
  static int loosened_object_can_be_discarded(const struct object_id *oid,
 -                                          unsigned long mtime)
 +                                          timestamp_t mtime)
  {
        if (!unpack_unreachable_expiration)
                return 0;
@@@ -2790,10 -2781,10 +2790,10 @@@ static void get_object_list(int ac, con
                                continue;
                        }
                        if (starts_with(line, "--shallow ")) {
 -                              unsigned char sha1[20];
 -                              if (get_sha1_hex(line + 10, sha1))
 +                              struct object_id oid;
 +                              if (get_oid_hex(line + 10, &oid))
                                        die("not an SHA-1 '%s'", line + 10);
 -                              register_shallow(sha1);
 +                              register_shallow(&oid);
                                use_bitmap_index = 0;
                                continue;
                        }