Merge branch 'ds/object-info-for-prefetch-fix'
authorJunio C Hamano <gitster@pobox.com>
Mon, 17 Jun 2019 17:15:14 +0000 (10:15 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Jun 2019 17:15:14 +0000 (10:15 -0700)
Code cleanup and futureproof.

* ds/object-info-for-prefetch-fix:
sha1-file: split OBJECT_INFO_FOR_PREFETCH

1  2 
object-store.h
sha1-file.c
diff --combined object-store.h
index 272e01e452b97bd8598a76d6facc5a6f803b579a,c90628d839512696ac4a339c28b21ec18b46daca..49f56ab8d9608919808ecebe71b9deb30c53980b
@@@ -76,9 -76,8 +76,9 @@@ struct packed_git 
                 pack_keep_in_core:1,
                 freshened:1,
                 do_not_close:1,
 -               pack_promisor:1;
 -      unsigned char sha1[20];
 +               pack_promisor:1,
 +               multi_pack_index:1;
 +      unsigned char hash[GIT_MAX_RAWSZ];
        struct revindex_entry *revindex;
        /* something like ".git/objects/pack/xxxxx.pack" */
        char pack_name[FLEX_ARRAY]; /* more */
@@@ -129,6 -128,12 +129,6 @@@ struct raw_object_store 
        /* A most-recently-used ordered version of the packed_git list. */
        struct list_head packed_git_mru;
  
 -      /*
 -       * A linked list containing all packfiles, starting with those
 -       * contained in the multi_pack_index.
 -       */
 -      struct packed_git *all_packs;
 -
        /*
         * A fast, rough count of the number of objects in the repository.
         * These two fields are not meant for direct access. Use
@@@ -157,10 -162,10 +157,10 @@@ const char *loose_object_path(struct re
  void *map_loose_object(struct repository *r, const struct object_id *oid,
                       unsigned long *size);
  
 -extern void *read_object_file_extended(struct repository *r,
 -                                     const struct object_id *oid,
 -                                     enum object_type *type,
 -                                     unsigned long *size, int lookup_replace);
 +void *read_object_file_extended(struct repository *r,
 +                              const struct object_id *oid,
 +                              enum object_type *type,
 +                              unsigned long *size, int lookup_replace);
  static inline void *repo_read_object_file(struct repository *r,
                                          const struct object_id *oid,
                                          enum object_type *type,
  /* Read and unpack an object file into memory, write memory to an object file */
  int oid_object_info(struct repository *r, const struct object_id *, unsigned long *);
  
 -extern int hash_object_file(const void *buf, unsigned long len,
 -                          const char *type, struct object_id *oid);
 +int hash_object_file(const void *buf, unsigned long len,
 +                   const char *type, struct object_id *oid);
  
 -extern int write_object_file(const void *buf, unsigned long len,
 -                           const char *type, struct object_id *oid);
 +int write_object_file(const void *buf, unsigned long len,
 +                    const char *type, struct object_id *oid);
  
 -extern int hash_object_file_literally(const void *buf, unsigned long len,
 -                                    const char *type, struct object_id *oid,
 -                                    unsigned flags);
 +int hash_object_file_literally(const void *buf, unsigned long len,
 +                             const char *type, struct object_id *oid,
 +                             unsigned flags);
  
 -extern int pretend_object_file(void *, unsigned long, enum object_type,
 -                             struct object_id *oid);
 +int pretend_object_file(void *, unsigned long, enum object_type,
 +                      struct object_id *oid);
  
 -extern int force_object_loose(const struct object_id *oid, time_t mtime);
 +int force_object_loose(const struct object_id *oid, time_t mtime);
  
  /*
   * Open the loose object at path, check its hash, and return the contents,
@@@ -222,9 -227,9 +222,9 @@@ int repo_has_object_file_with_flags(str
   * with the specified name.  This function does not respect replace
   * references.
   */
 -extern int has_loose_object_nonlocal(const struct object_id *);
 +int has_loose_object_nonlocal(const struct object_id *);
  
 -extern void assert_oid_type(const struct object_id *oid, enum object_type expect);
 +void assert_oid_type(const struct object_id *oid, enum object_type expect);
  
  struct object_info {
        /* Request */
  #define OBJECT_INFO_IGNORE_LOOSE 16
  /*
   * Do not attempt to fetch the object if missing (even if fetch_is_missing is
-  * nonzero). This is meant for bulk prefetching of missing blobs in a partial
-  * clone. Implies OBJECT_INFO_QUICK.
+  * nonzero).
   */
- #define OBJECT_INFO_FOR_PREFETCH (32 + OBJECT_INFO_QUICK)
+ #define OBJECT_INFO_SKIP_FETCH_OBJECT 32
+ /*
+  * This is meant for bulk prefetching of missing blobs in a partial
+  * clone. Implies OBJECT_INFO_SKIP_FETCH_OBJECT and OBJECT_INFO_QUICK
+  */
+ #define OBJECT_INFO_FOR_PREFETCH (OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK)
  
  int oid_object_info_extended(struct repository *r,
                             const struct object_id *,
diff --combined sha1-file.c
index ed5c50dac427f2f3aa2b9b7b203bf2355049b163,0299fdd5161a59bf88d9f2c41a83c7e6ecd4cc2b..888b6024d5de050753765e37b65ea0521d91f9fd
@@@ -189,14 -189,6 +189,14 @@@ int hash_algo_by_id(uint32_t format_id
        return GIT_HASH_UNKNOWN;
  }
  
 +int hash_algo_by_length(int len)
 +{
 +      int i;
 +      for (i = 1; i < GIT_HASH_NALGOS; i++)
 +              if (len == hash_algos[i].rawsz)
 +                      return i;
 +      return GIT_HASH_UNKNOWN;
 +}
  
  /*
   * This is meant to hold a *small* number of objects that you would
@@@ -1379,7 -1371,7 +1379,7 @@@ int oid_object_info_extended(struct rep
                /* Check if it is a missing object */
                if (fetch_if_missing && repository_format_partial_clone &&
                    !already_retried && r == the_repository &&
-                   !(flags & OBJECT_INFO_FOR_PREFETCH)) {
+                   !(flags & OBJECT_INFO_SKIP_FETCH_OBJECT)) {
                        /*
                         * TODO Investigate having fetch_object() return
                         * TODO error/success and stopping the music here.