Merge branch 'dl/no-extern-in-func-decl'
authorJunio C Hamano <gitster@pobox.com>
Mon, 13 May 2019 14:50:32 +0000 (23:50 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 May 2019 14:50:32 +0000 (23:50 +0900)
Mechanically and systematically drop "extern" from function
declarlation.

* dl/no-extern-in-func-decl:
*.[ch]: manually align parameter lists
*.[ch]: remove extern from function declarations using sed
*.[ch]: remove extern from function declarations using spatch

15 files changed:
1  2 
advice.h
archive.h
blame.h
builtin.h
cache.h
commit.h
config.h
dir.h
git-compat-util.h
http.h
khash.h
object-store.h
refs.h
remote.h
tree-walk.h
diff --combined advice.h
index cb5d36161453dc4c3a8de8e6afd3b3ac28394eaa,4a2052eecfb59852f0ade33d142387c09eb7d897..e50f02cdfeff788910699f2d34fff1c93081c24b
+++ b/advice.h
@@@ -26,13 -26,12 +26,13 @@@ extern int advice_ignored_hook
  extern int advice_waiting_for_editor;
  extern int advice_graft_file_deprecated;
  extern int advice_checkout_ambiguous_remote_branch_name;
 +extern int advice_nested_tag;
  
  int git_default_advice_config(const char *var, const char *value);
  __attribute__((format (printf, 1, 2)))
  void advise(const char *advice, ...);
  int error_resolve_conflict(const char *me);
extern void NORETURN die_resolve_conflict(const char *me);
+ void NORETURN die_resolve_conflict(const char *me);
  void NORETURN die_conclude_merge(void);
  void detach_advice(const char *new_name);
  
diff --combined archive.h
index dd022a6b46bc339d19b1c49ebc20214dd137685f,a7bdeea2c8bd849718518e2b9c450adabb200b37..e60e3dd31c79f1c04b7afcae8eb5623238e1234f
+++ b/archive.h
@@@ -11,7 -11,7 +11,7 @@@ struct archiver_args 
        const char *base;
        size_t baselen;
        struct tree *tree;
 -      const unsigned char *commit_sha1;
 +      const struct object_id *commit_oid;
        const struct commit *commit;
        timestamp_t time;
        struct pathspec pathspec;
@@@ -23,9 -23,9 +23,9 @@@
  
  /* main api */
  
extern int write_archive(int argc, const char **argv, const char *prefix,
-                        struct repository *repo,
-                        const char *name_hint, int remote);
+ int write_archive(int argc, const char **argv, const char *prefix,
+                 struct repository *repo,
+                 const char *name_hint, int remote);
  
  const char *archive_format_from_filename(const char *filename);
  
@@@ -39,21 -39,21 +39,21 @@@ struct archiver 
        unsigned flags;
        void *data;
  };
extern void register_archiver(struct archiver *);
+ void register_archiver(struct archiver *);
  
extern void init_tar_archiver(void);
extern void init_zip_archiver(void);
extern void init_archivers(void);
+ void init_tar_archiver(void);
+ void init_zip_archiver(void);
+ void init_archivers(void);
  
  typedef int (*write_archive_entry_fn_t)(struct archiver_args *args,
                                        const struct object_id *oid,
                                        const char *path, size_t pathlen,
                                        unsigned int mode);
  
extern int write_archive_entries(struct archiver_args *args, write_archive_entry_fn_t write_entry);
extern void *object_file_to_archive(const struct archiver_args *args,
-                                   const char *path, const struct object_id *oid,
-                                   unsigned int mode, enum object_type *type,
-                                   unsigned long *sizep);
+ int write_archive_entries(struct archiver_args *args, write_archive_entry_fn_t write_entry);
+ void *object_file_to_archive(const struct archiver_args *args,
+                            const char *path, const struct object_id *oid,
+                            unsigned int mode, enum object_type *type,
+                            unsigned long *sizep);
  
  #endif        /* ARCHIVE_H */
diff --combined blame.h
index 2a285eb027bf1a82b3b1b53f2bc04caebef86924,d6c4cc63f5c164ead0a4bff227c707181b1e1daf..d62f80fa74c44011f8cdaea7a4baec3d8cae03e6
+++ b/blame.h
@@@ -52,7 -52,7 +52,7 @@@ struct blame_origin 
        struct blame_entry *suspects;
        mmfile_t file;
        struct object_id blob_oid;
 -      unsigned mode;
 +      unsigned short mode;
        /* guilty gets set when shipping any suspects to the final
         * blame list instead of other commits
         */
@@@ -177,6 -177,6 +177,6 @@@ struct blame_entry *blame_entry_prepend
                                        long start, long end,
                                        struct blame_origin *o);
  
extern struct blame_origin *get_blame_suspects(struct commit *commit);
+ struct blame_origin *get_blame_suspects(struct commit *commit);
  
  #endif /* BLAME_H */
diff --combined builtin.h
index ac552ff0d2ce1cfb2d0036cc599d54311ebd3fb7,a6d3c58fddab82d2aa98c1fa55e4f7758804ee70..ec7e0954c4c8a1da896392bd28158abb74667898
+++ b/builtin.h
@@@ -102,7 -102,7 +102,7 @@@ extern const char git_more_info_string[
  #define PRUNE_PACKED_DRY_RUN 01
  #define PRUNE_PACKED_VERBOSE 02
  
extern void prune_packed_objects(int);
+ void prune_packed_objects(int);
  
  struct fmt_merge_msg_opts {
        unsigned add_title:1,
        int shortlog_len;
  };
  
extern int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
-                        struct fmt_merge_msg_opts *);
+ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
+                 struct fmt_merge_msg_opts *);
  
  /**
   * If a built-in has DELAY_PAGER_CONFIG set, the built-in should call this early
   * You should most likely use a default of 0 or 1. "Punt" (-1) could be useful
   * to be able to fall back to some historical compatibility name.
   */
extern void setup_auto_pager(const char *cmd, int def);
+ void setup_auto_pager(const char *cmd, int def);
  
extern int is_builtin(const char *s);
+ int is_builtin(const char *s);
  
- extern int cmd_add(int argc, const char **argv, const char *prefix);
- extern int cmd_am(int argc, const char **argv, const char *prefix);
- extern int cmd_annotate(int argc, const char **argv, const char *prefix);
- extern int cmd_apply(int argc, const char **argv, const char *prefix);
- extern int cmd_archive(int argc, const char **argv, const char *prefix);
- extern int cmd_bisect__helper(int argc, const char **argv, const char *prefix);
- extern int cmd_blame(int argc, const char **argv, const char *prefix);
- extern int cmd_branch(int argc, const char **argv, const char *prefix);
- extern int cmd_bundle(int argc, const char **argv, const char *prefix);
- extern int cmd_cat_file(int argc, const char **argv, const char *prefix);
- extern int cmd_checkout(int argc, const char **argv, const char *prefix);
- extern int cmd_checkout_index(int argc, const char **argv, const char *prefix);
- extern int cmd_check_attr(int argc, const char **argv, const char *prefix);
- extern int cmd_check_ignore(int argc, const char **argv, const char *prefix);
- extern int cmd_check_mailmap(int argc, const char **argv, const char *prefix);
- extern int cmd_check_ref_format(int argc, const char **argv, const char *prefix);
- extern int cmd_cherry(int argc, const char **argv, const char *prefix);
- extern int cmd_cherry_pick(int argc, const char **argv, const char *prefix);
- extern int cmd_clone(int argc, const char **argv, const char *prefix);
- extern int cmd_clean(int argc, const char **argv, const char *prefix);
- extern int cmd_column(int argc, const char **argv, const char *prefix);
- extern int cmd_commit(int argc, const char **argv, const char *prefix);
- extern int cmd_commit_graph(int argc, const char **argv, const char *prefix);
- extern int cmd_commit_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_config(int argc, const char **argv, const char *prefix);
- extern int cmd_count_objects(int argc, const char **argv, const char *prefix);
- extern int cmd_credential(int argc, const char **argv, const char *prefix);
- extern int cmd_describe(int argc, const char **argv, const char *prefix);
- extern int cmd_diff_files(int argc, const char **argv, const char *prefix);
- extern int cmd_diff_index(int argc, const char **argv, const char *prefix);
- extern int cmd_diff(int argc, const char **argv, const char *prefix);
- extern int cmd_diff_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_difftool(int argc, const char **argv, const char *prefix);
- extern int cmd_fast_export(int argc, const char **argv, const char *prefix);
- extern int cmd_fetch(int argc, const char **argv, const char *prefix);
- extern int cmd_fetch_pack(int argc, const char **argv, const char *prefix);
- extern int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix);
- extern int cmd_for_each_ref(int argc, const char **argv, const char *prefix);
- extern int cmd_format_patch(int argc, const char **argv, const char *prefix);
- extern int cmd_fsck(int argc, const char **argv, const char *prefix);
- extern int cmd_gc(int argc, const char **argv, const char *prefix);
- extern int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix);
- extern int cmd_grep(int argc, const char **argv, const char *prefix);
- extern int cmd_hash_object(int argc, const char **argv, const char *prefix);
- extern int cmd_help(int argc, const char **argv, const char *prefix);
- extern int cmd_index_pack(int argc, const char **argv, const char *prefix);
- extern int cmd_init_db(int argc, const char **argv, const char *prefix);
- extern int cmd_interpret_trailers(int argc, const char **argv, const char *prefix);
- extern int cmd_log(int argc, const char **argv, const char *prefix);
- extern int cmd_log_reflog(int argc, const char **argv, const char *prefix);
- extern int cmd_ls_files(int argc, const char **argv, const char *prefix);
- extern int cmd_ls_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_ls_remote(int argc, const char **argv, const char *prefix);
- extern int cmd_mailinfo(int argc, const char **argv, const char *prefix);
- extern int cmd_mailsplit(int argc, const char **argv, const char *prefix);
- extern int cmd_merge(int argc, const char **argv, const char *prefix);
- extern int cmd_merge_base(int argc, const char **argv, const char *prefix);
- extern int cmd_merge_index(int argc, const char **argv, const char *prefix);
- extern int cmd_merge_ours(int argc, const char **argv, const char *prefix);
- extern int cmd_merge_file(int argc, const char **argv, const char *prefix);
- extern int cmd_merge_recursive(int argc, const char **argv, const char *prefix);
- extern int cmd_merge_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_mktag(int argc, const char **argv, const char *prefix);
- extern int cmd_mktree(int argc, const char **argv, const char *prefix);
- extern int cmd_multi_pack_index(int argc, const char **argv, const char *prefix);
- extern int cmd_mv(int argc, const char **argv, const char *prefix);
- extern int cmd_name_rev(int argc, const char **argv, const char *prefix);
- extern int cmd_notes(int argc, const char **argv, const char *prefix);
- extern int cmd_pack_objects(int argc, const char **argv, const char *prefix);
- extern int cmd_pack_redundant(int argc, const char **argv, const char *prefix);
- extern int cmd_patch_id(int argc, const char **argv, const char *prefix);
- extern int cmd_prune(int argc, const char **argv, const char *prefix);
- extern int cmd_prune_packed(int argc, const char **argv, const char *prefix);
- extern int cmd_pull(int argc, const char **argv, const char *prefix);
- extern int cmd_push(int argc, const char **argv, const char *prefix);
- extern int cmd_range_diff(int argc, const char **argv, const char *prefix);
- extern int cmd_read_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_rebase(int argc, const char **argv, const char *prefix);
- extern int cmd_rebase__interactive(int argc, const char **argv, const char *prefix);
- extern int cmd_receive_pack(int argc, const char **argv, const char *prefix);
- extern int cmd_reflog(int argc, const char **argv, const char *prefix);
- extern int cmd_remote(int argc, const char **argv, const char *prefix);
- extern int cmd_remote_ext(int argc, const char **argv, const char *prefix);
- extern int cmd_remote_fd(int argc, const char **argv, const char *prefix);
- extern int cmd_repack(int argc, const char **argv, const char *prefix);
- extern int cmd_rerere(int argc, const char **argv, const char *prefix);
- extern int cmd_reset(int argc, const char **argv, const char *prefix);
- extern int cmd_rev_list(int argc, const char **argv, const char *prefix);
- extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);
- extern int cmd_revert(int argc, const char **argv, const char *prefix);
- extern int cmd_rm(int argc, const char **argv, const char *prefix);
- extern int cmd_send_pack(int argc, const char **argv, const char *prefix);
- extern int cmd_shortlog(int argc, const char **argv, const char *prefix);
- extern int cmd_show(int argc, const char **argv, const char *prefix);
- extern int cmd_show_branch(int argc, const char **argv, const char *prefix);
- extern int cmd_show_index(int argc, const char **argv, const char *prefix);
- extern int cmd_status(int argc, const char **argv, const char *prefix);
- extern int cmd_stash(int argc, const char **argv, const char *prefix);
- extern int cmd_stripspace(int argc, const char **argv, const char *prefix);
- extern int cmd_submodule__helper(int argc, const char **argv, const char *prefix);
- extern int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);
- extern int cmd_tag(int argc, const char **argv, const char *prefix);
- extern int cmd_tar_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_unpack_file(int argc, const char **argv, const char *prefix);
- extern int cmd_unpack_objects(int argc, const char **argv, const char *prefix);
- extern int cmd_update_index(int argc, const char **argv, const char *prefix);
- extern int cmd_update_ref(int argc, const char **argv, const char *prefix);
- extern int cmd_update_server_info(int argc, const char **argv, const char *prefix);
- extern int cmd_upload_archive(int argc, const char **argv, const char *prefix);
- extern int cmd_upload_archive_writer(int argc, const char **argv, const char *prefix);
- extern int cmd_upload_pack(int argc, const char **argv, const char *prefix);
- extern int cmd_var(int argc, const char **argv, const char *prefix);
- extern int cmd_verify_commit(int argc, const char **argv, const char *prefix);
- extern int cmd_verify_tag(int argc, const char **argv, const char *prefix);
- extern int cmd_version(int argc, const char **argv, const char *prefix);
- extern int cmd_whatchanged(int argc, const char **argv, const char *prefix);
- extern int cmd_worktree(int argc, const char **argv, const char *prefix);
- extern int cmd_write_tree(int argc, const char **argv, const char *prefix);
- extern int cmd_verify_pack(int argc, const char **argv, const char *prefix);
- extern int cmd_show_ref(int argc, const char **argv, const char *prefix);
- extern int cmd_pack_refs(int argc, const char **argv, const char *prefix);
- extern int cmd_replace(int argc, const char **argv, const char *prefix);
+ int cmd_add(int argc, const char **argv, const char *prefix);
+ int cmd_am(int argc, const char **argv, const char *prefix);
+ int cmd_annotate(int argc, const char **argv, const char *prefix);
+ int cmd_apply(int argc, const char **argv, const char *prefix);
+ int cmd_archive(int argc, const char **argv, const char *prefix);
+ int cmd_bisect__helper(int argc, const char **argv, const char *prefix);
+ int cmd_blame(int argc, const char **argv, const char *prefix);
+ int cmd_branch(int argc, const char **argv, const char *prefix);
+ int cmd_bundle(int argc, const char **argv, const char *prefix);
+ int cmd_cat_file(int argc, const char **argv, const char *prefix);
+ int cmd_checkout(int argc, const char **argv, const char *prefix);
+ int cmd_checkout_index(int argc, const char **argv, const char *prefix);
+ int cmd_check_attr(int argc, const char **argv, const char *prefix);
+ int cmd_check_ignore(int argc, const char **argv, const char *prefix);
+ int cmd_check_mailmap(int argc, const char **argv, const char *prefix);
+ int cmd_check_ref_format(int argc, const char **argv, const char *prefix);
+ int cmd_cherry(int argc, const char **argv, const char *prefix);
+ int cmd_cherry_pick(int argc, const char **argv, const char *prefix);
+ int cmd_clone(int argc, const char **argv, const char *prefix);
+ int cmd_clean(int argc, const char **argv, const char *prefix);
+ int cmd_column(int argc, const char **argv, const char *prefix);
+ int cmd_commit(int argc, const char **argv, const char *prefix);
+ int cmd_commit_graph(int argc, const char **argv, const char *prefix);
+ int cmd_commit_tree(int argc, const char **argv, const char *prefix);
+ int cmd_config(int argc, const char **argv, const char *prefix);
+ int cmd_count_objects(int argc, const char **argv, const char *prefix);
+ int cmd_credential(int argc, const char **argv, const char *prefix);
+ int cmd_describe(int argc, const char **argv, const char *prefix);
+ int cmd_diff_files(int argc, const char **argv, const char *prefix);
+ int cmd_diff_index(int argc, const char **argv, const char *prefix);
+ int cmd_diff(int argc, const char **argv, const char *prefix);
+ int cmd_diff_tree(int argc, const char **argv, const char *prefix);
+ int cmd_difftool(int argc, const char **argv, const char *prefix);
+ int cmd_fast_export(int argc, const char **argv, const char *prefix);
+ int cmd_fetch(int argc, const char **argv, const char *prefix);
+ int cmd_fetch_pack(int argc, const char **argv, const char *prefix);
+ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix);
+ int cmd_for_each_ref(int argc, const char **argv, const char *prefix);
+ int cmd_format_patch(int argc, const char **argv, const char *prefix);
+ int cmd_fsck(int argc, const char **argv, const char *prefix);
+ int cmd_gc(int argc, const char **argv, const char *prefix);
+ int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix);
+ int cmd_grep(int argc, const char **argv, const char *prefix);
+ int cmd_hash_object(int argc, const char **argv, const char *prefix);
+ int cmd_help(int argc, const char **argv, const char *prefix);
+ int cmd_index_pack(int argc, const char **argv, const char *prefix);
+ int cmd_init_db(int argc, const char **argv, const char *prefix);
+ int cmd_interpret_trailers(int argc, const char **argv, const char *prefix);
+ int cmd_log(int argc, const char **argv, const char *prefix);
+ int cmd_log_reflog(int argc, const char **argv, const char *prefix);
+ int cmd_ls_files(int argc, const char **argv, const char *prefix);
+ int cmd_ls_tree(int argc, const char **argv, const char *prefix);
+ int cmd_ls_remote(int argc, const char **argv, const char *prefix);
+ int cmd_mailinfo(int argc, const char **argv, const char *prefix);
+ int cmd_mailsplit(int argc, const char **argv, const char *prefix);
+ int cmd_merge(int argc, const char **argv, const char *prefix);
+ int cmd_merge_base(int argc, const char **argv, const char *prefix);
+ int cmd_merge_index(int argc, const char **argv, const char *prefix);
+ int cmd_merge_ours(int argc, const char **argv, const char *prefix);
+ int cmd_merge_file(int argc, const char **argv, const char *prefix);
+ int cmd_merge_recursive(int argc, const char **argv, const char *prefix);
+ int cmd_merge_tree(int argc, const char **argv, const char *prefix);
+ int cmd_mktag(int argc, const char **argv, const char *prefix);
+ int cmd_mktree(int argc, const char **argv, const char *prefix);
+ int cmd_multi_pack_index(int argc, const char **argv, const char *prefix);
+ int cmd_mv(int argc, const char **argv, const char *prefix);
+ int cmd_name_rev(int argc, const char **argv, const char *prefix);
+ int cmd_notes(int argc, const char **argv, const char *prefix);
+ int cmd_pack_objects(int argc, const char **argv, const char *prefix);
+ int cmd_pack_redundant(int argc, const char **argv, const char *prefix);
+ int cmd_patch_id(int argc, const char **argv, const char *prefix);
+ int cmd_prune(int argc, const char **argv, const char *prefix);
+ int cmd_prune_packed(int argc, const char **argv, const char *prefix);
+ int cmd_pull(int argc, const char **argv, const char *prefix);
+ int cmd_push(int argc, const char **argv, const char *prefix);
+ int cmd_range_diff(int argc, const char **argv, const char *prefix);
+ int cmd_read_tree(int argc, const char **argv, const char *prefix);
+ int cmd_rebase(int argc, const char **argv, const char *prefix);
+ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix);
+ int cmd_receive_pack(int argc, const char **argv, const char *prefix);
+ int cmd_reflog(int argc, const char **argv, const char *prefix);
+ int cmd_remote(int argc, const char **argv, const char *prefix);
+ int cmd_remote_ext(int argc, const char **argv, const char *prefix);
+ int cmd_remote_fd(int argc, const char **argv, const char *prefix);
+ int cmd_repack(int argc, const char **argv, const char *prefix);
+ int cmd_rerere(int argc, const char **argv, const char *prefix);
+ int cmd_reset(int argc, const char **argv, const char *prefix);
+ int cmd_rev_list(int argc, const char **argv, const char *prefix);
+ int cmd_rev_parse(int argc, const char **argv, const char *prefix);
+ int cmd_revert(int argc, const char **argv, const char *prefix);
+ int cmd_rm(int argc, const char **argv, const char *prefix);
+ int cmd_send_pack(int argc, const char **argv, const char *prefix);
 -int cmd_serve(int argc, const char **argv, const char *prefix);
+ int cmd_shortlog(int argc, const char **argv, const char *prefix);
+ int cmd_show(int argc, const char **argv, const char *prefix);
+ int cmd_show_branch(int argc, const char **argv, const char *prefix);
+ int cmd_show_index(int argc, const char **argv, const char *prefix);
+ int cmd_status(int argc, const char **argv, const char *prefix);
++int cmd_stash(int argc, const char **argv, const char *prefix);
+ int cmd_stripspace(int argc, const char **argv, const char *prefix);
+ int cmd_submodule__helper(int argc, const char **argv, const char *prefix);
+ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);
+ int cmd_tag(int argc, const char **argv, const char *prefix);
+ int cmd_tar_tree(int argc, const char **argv, const char *prefix);
+ int cmd_unpack_file(int argc, const char **argv, const char *prefix);
+ int cmd_unpack_objects(int argc, const char **argv, const char *prefix);
+ int cmd_update_index(int argc, const char **argv, const char *prefix);
+ int cmd_update_ref(int argc, const char **argv, const char *prefix);
+ int cmd_update_server_info(int argc, const char **argv, const char *prefix);
+ int cmd_upload_archive(int argc, const char **argv, const char *prefix);
+ int cmd_upload_archive_writer(int argc, const char **argv, const char *prefix);
+ int cmd_upload_pack(int argc, const char **argv, const char *prefix);
+ int cmd_var(int argc, const char **argv, const char *prefix);
+ int cmd_verify_commit(int argc, const char **argv, const char *prefix);
+ int cmd_verify_tag(int argc, const char **argv, const char *prefix);
+ int cmd_version(int argc, const char **argv, const char *prefix);
+ int cmd_whatchanged(int argc, const char **argv, const char *prefix);
+ int cmd_worktree(int argc, const char **argv, const char *prefix);
+ int cmd_write_tree(int argc, const char **argv, const char *prefix);
+ int cmd_verify_pack(int argc, const char **argv, const char *prefix);
+ int cmd_show_ref(int argc, const char **argv, const char *prefix);
+ int cmd_pack_refs(int argc, const char **argv, const char *prefix);
+ int cmd_replace(int argc, const char **argv, const char *prefix);
  
  #endif
diff --combined cache.h
index 67cc2e1806ab4fabd4b34c0e1b4ca5cd1abafd82,9f15fee85fcd5e863ce406e61ce218155adf5a60..fa8ede9a2d6441842f49740482bb74f6c23c1a5d
+++ b/cache.h
@@@ -339,9 -339,7 +339,9 @@@ struct index_state 
        struct cache_time timestamp;
        unsigned name_hash_initialized : 1,
                 initialized : 1,
 -               drop_cache_tree : 1;
 +               drop_cache_tree : 1,
 +               updated_workdir : 1,
 +               updated_skipworktree : 1;
        struct hashmap name_hash;
        struct hashmap dir_hash;
        struct object_id oid;
  };
  
  /* Name hashing */
extern int test_lazy_init_name_hash(struct index_state *istate, int try_threaded);
extern void add_name_hash(struct index_state *istate, struct cache_entry *ce);
extern void remove_name_hash(struct index_state *istate, struct cache_entry *ce);
extern void free_name_hash(struct index_state *istate);
+ int test_lazy_init_name_hash(struct index_state *istate, int try_threaded);
+ void add_name_hash(struct index_state *istate, struct cache_entry *ce);
+ void remove_name_hash(struct index_state *istate, struct cache_entry *ce);
+ void free_name_hash(struct index_state *istate);
  
  
  /* Cache entry creation and cleanup */
@@@ -545,7 -543,7 +545,7 @@@ static inline enum object_type object_t
   */
  extern const char * const local_repo_env[];
  
extern void setup_git_env(const char *git_dir);
+ void setup_git_env(const char *git_dir);
  
  /*
   * Returns true iff we have a configured git repository (either via
  int have_git_dir(void);
  
  extern int is_bare_repository_cfg;
extern int is_bare_repository(void);
extern int is_inside_git_dir(void);
+ int is_bare_repository(void);
+ int is_inside_git_dir(void);
  extern char *git_work_tree_cfg;
extern int is_inside_work_tree(void);
extern const char *get_git_dir(void);
extern const char *get_git_common_dir(void);
extern char *get_object_directory(void);
extern char *get_index_file(void);
extern char *get_graft_file(struct repository *r);
extern void set_git_dir(const char *path);
extern int get_common_dir_noenv(struct strbuf *sb, const char *gitdir);
extern int get_common_dir(struct strbuf *sb, const char *gitdir);
extern const char *get_git_namespace(void);
extern const char *strip_namespace(const char *namespaced_ref);
extern const char *get_super_prefix(void);
extern const char *get_git_work_tree(void);
+ int is_inside_work_tree(void);
+ const char *get_git_dir(void);
+ const char *get_git_common_dir(void);
+ char *get_object_directory(void);
+ char *get_index_file(void);
+ char *get_graft_file(struct repository *r);
+ void set_git_dir(const char *path);
+ int get_common_dir_noenv(struct strbuf *sb, const char *gitdir);
+ int get_common_dir(struct strbuf *sb, const char *gitdir);
+ const char *get_git_namespace(void);
+ const char *strip_namespace(const char *namespaced_ref);
+ const char *get_super_prefix(void);
+ const char *get_git_work_tree(void);
  
  /*
   * Return true if the given path is a git directory; note that this _just_
   * looks at the directory itself. If you want to know whether "foo/.git"
   * is a repository, you must feed that path, not just "foo".
   */
extern int is_git_directory(const char *path);
+ int is_git_directory(const char *path);
  
  /*
   * Return 1 if the given path is the root of a git repository or
   * as we usually consider sub-repos precious, and would prefer to err on the
   * side of not disrupting or deleting them.
   */
extern int is_nonbare_repository_dir(struct strbuf *path);
+ int is_nonbare_repository_dir(struct strbuf *path);
  
  #define READ_GITFILE_ERR_STAT_FAILED 1
  #define READ_GITFILE_ERR_NOT_A_FILE 2
  #define READ_GITFILE_ERR_NO_PATH 6
  #define READ_GITFILE_ERR_NOT_A_REPO 7
  #define READ_GITFILE_ERR_TOO_LARGE 8
extern void read_gitfile_error_die(int error_code, const char *path, const char *dir);
extern const char *read_gitfile_gently(const char *path, int *return_error_code);
+ void read_gitfile_error_die(int error_code, const char *path, const char *dir);
+ const char *read_gitfile_gently(const char *path, int *return_error_code);
  #define read_gitfile(path) read_gitfile_gently((path), NULL)
extern const char *resolve_gitdir_gently(const char *suspect, int *return_error_code);
+ const char *resolve_gitdir_gently(const char *suspect, int *return_error_code);
  #define resolve_gitdir(path) resolve_gitdir_gently((path), NULL)
  
extern void set_git_work_tree(const char *tree);
+ void set_git_work_tree(const char *tree);
  
  #define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
  
extern void setup_work_tree(void);
+ void setup_work_tree(void);
  /*
   * Find the commondir and gitdir of the repository that contains the current
   * working directory, without changing the working directory or other global
   * both have the same result appended to the buffer.  The return value is
   * either 0 upon success and non-zero if no repository was found.
   */
extern int discover_git_directory(struct strbuf *commondir,
-                                 struct strbuf *gitdir);
extern const char *setup_git_directory_gently(int *);
extern const char *setup_git_directory(void);
extern char *prefix_path(const char *prefix, int len, const char *path);
extern char *prefix_path_gently(const char *prefix, int len, int *remaining, const char *path);
+ int discover_git_directory(struct strbuf *commondir,
+                          struct strbuf *gitdir);
+ const char *setup_git_directory_gently(int *);
+ const char *setup_git_directory(void);
+ char *prefix_path(const char *prefix, int len, const char *path);
+ char *prefix_path_gently(const char *prefix, int len, int *remaining, const char *path);
  
  /*
   * Concatenate "prefix" (if len is non-zero) and "path", with no
   * The return value is always a newly allocated string (even if the
   * prefix was empty).
   */
extern char *prefix_filename(const char *prefix, const char *path);
+ char *prefix_filename(const char *prefix, const char *path);
  
extern int check_filename(const char *prefix, const char *name);
extern void verify_filename(const char *prefix,
-                           const char *name,
-                           int diagnose_misspelt_rev);
extern void verify_non_filename(const char *prefix, const char *name);
extern int path_inside_repo(const char *prefix, const char *path);
+ int check_filename(const char *prefix, const char *name);
+ void verify_filename(const char *prefix,
+                    const char *name,
+                    int diagnose_misspelt_rev);
+ void verify_non_filename(const char *prefix, const char *name);
+ int path_inside_repo(const char *prefix, const char *path);
  
  #define INIT_DB_QUIET 0x0001
  #define INIT_DB_EXIST_OK 0x0002
  
extern int init_db(const char *git_dir, const char *real_git_dir,
-                  const char *template_dir, unsigned int flags);
+ int init_db(const char *git_dir, const char *real_git_dir,
+           const char *template_dir, unsigned int flags);
  
extern void sanitize_stdfds(void);
extern int daemonize(void);
+ void sanitize_stdfds(void);
+ int daemonize(void);
  
  #define alloc_nr(x) (((x)+16)*3/2)
  
  
  /* Initialize and use the cache information */
  struct lock_file;
extern void preload_index(struct index_state *index,
-                         const struct pathspec *pathspec,
-                         unsigned int refresh_flags);
extern int do_read_index(struct index_state *istate, const char *path,
-                        int must_exist); /* for testting only! */
extern int read_index_from(struct index_state *, const char *path,
-                          const char *gitdir);
extern int is_index_unborn(struct index_state *);
+ void preload_index(struct index_state *index,
+                  const struct pathspec *pathspec,
+                  unsigned int refresh_flags);
+ int do_read_index(struct index_state *istate, const char *path,
+                 int must_exist); /* for testting only! */
+ int read_index_from(struct index_state *, const char *path,
+                   const char *gitdir);
+ int is_index_unborn(struct index_state *);
  
  /* For use with `write_locked_index()`. */
  #define COMMIT_LOCK           (1 << 0)
   * If `SKIP_IF_UNCHANGED` is given and the index is unchanged, nothing
   * is written (and the lock is rolled back if `COMMIT_LOCK` is given).
   */
extern int write_locked_index(struct index_state *, struct lock_file *lock, unsigned flags);
+ int write_locked_index(struct index_state *, struct lock_file *lock, unsigned flags);
  
extern int discard_index(struct index_state *);
extern void move_index_extensions(struct index_state *dst, struct index_state *src);
extern int unmerged_index(const struct index_state *);
+ int discard_index(struct index_state *);
+ void move_index_extensions(struct index_state *dst, struct index_state *src);
+ int unmerged_index(const struct index_state *);
  
  /**
   * Returns 1 if istate differs from tree, 0 otherwise.  If tree is NULL,
   * provided, the space-separated list of files that differ will be appended
   * to it.
   */
extern int repo_index_has_changes(struct repository *repo,
-                                 struct tree *tree,
-                                 struct strbuf *sb);
+ int repo_index_has_changes(struct repository *repo,
+                          struct tree *tree,
+                          struct strbuf *sb);
  
extern int verify_path(const char *path, unsigned mode);
extern int strcmp_offset(const char *s1, const char *s2, size_t *first_change);
extern int index_dir_exists(struct index_state *istate, const char *name, int namelen);
extern void adjust_dirname_case(struct index_state *istate, char *name);
extern struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
+ int verify_path(const char *path, unsigned mode);
+ int strcmp_offset(const char *s1, const char *s2, size_t *first_change);
+ int index_dir_exists(struct index_state *istate, const char *name, int namelen);
+ void adjust_dirname_case(struct index_state *istate, char *name);
+ struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
  
  /*
   * Searches for an entry defined by name and namelen in the given index.
   * index_name_pos(&index, "f", 1) -> -3
   * index_name_pos(&index, "g", 1) -> -5
   */
extern int index_name_pos(const struct index_state *, const char *name, int namelen);
+ int index_name_pos(const struct index_state *, const char *name, int namelen);
  
  #define ADD_CACHE_OK_TO_ADD 1         /* Ok to add */
  #define ADD_CACHE_OK_TO_REPLACE 2     /* Ok to replace file/directory */
  #define ADD_CACHE_NEW_ONLY 16         /* Do not replace existing ones */
  #define ADD_CACHE_KEEP_CACHE_TREE 32  /* Do not invalidate cache-tree */
  #define ADD_CACHE_RENORMALIZE 64        /* Pass along HASH_RENORMALIZE */
extern int add_index_entry(struct index_state *, struct cache_entry *ce, int option);
extern void rename_index_entry_at(struct index_state *, int pos, const char *new_name);
+ int add_index_entry(struct index_state *, struct cache_entry *ce, int option);
+ void rename_index_entry_at(struct index_state *, int pos, const char *new_name);
  
  /* Remove entry, return true if there are more entries to go. */
extern int remove_index_entry_at(struct index_state *, int pos);
+ int remove_index_entry_at(struct index_state *, int pos);
  
extern void remove_marked_cache_entries(struct index_state *istate, int invalidate);
extern int remove_file_from_index(struct index_state *, const char *path);
+ void remove_marked_cache_entries(struct index_state *istate, int invalidate);
+ int remove_file_from_index(struct index_state *, const char *path);
  #define ADD_CACHE_VERBOSE 1
  #define ADD_CACHE_PRETEND 2
  #define ADD_CACHE_IGNORE_ERRORS       4
   * the latter will do necessary lstat(2) internally before
   * calling the former.
   */
extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags);
extern int add_file_to_index(struct index_state *, const char *path, int flags);
+ int add_to_index(struct index_state *, const char *path, struct stat *, int flags);
+ int add_file_to_index(struct index_state *, const char *path, int flags);
  
extern int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip);
extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b);
extern void set_object_name_for_intent_to_add_entry(struct cache_entry *ce);
extern int index_name_is_other(const struct index_state *, const char *, int);
extern void *read_blob_data_from_index(const struct index_state *, const char *, unsigned long *);
+ int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip);
+ int ce_same_name(const struct cache_entry *a, const struct cache_entry *b);
+ void set_object_name_for_intent_to_add_entry(struct cache_entry *ce);
+ int index_name_is_other(const struct index_state *, const char *, int);
+ void *read_blob_data_from_index(const struct index_state *, const char *, unsigned long *);
  
  /* do stat comparison even if CE_VALID is true */
  #define CE_MATCH_IGNORE_VALID         01
  #define CE_MATCH_REFRESH              0x10
  /* don't refresh_fsmonitor state or do stat comparison even if CE_FSMONITOR_VALID is true */
  #define CE_MATCH_IGNORE_FSMONITOR 0X20
extern int is_racy_timestamp(const struct index_state *istate,
-                            const struct cache_entry *ce);
extern int ie_match_stat(struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
extern int ie_modified(struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
+ int is_racy_timestamp(const struct index_state *istate,
+                     const struct cache_entry *ce);
+ int ie_match_stat(struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
+ int ie_modified(struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
  
  #define HASH_WRITE_OBJECT 1
  #define HASH_FORMAT_CHECK 2
  #define HASH_RENORMALIZE  4
extern int index_fd(struct index_state *istate, struct object_id *oid, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags);
extern int index_path(struct index_state *istate, struct object_id *oid, const char *path, struct stat *st, unsigned flags);
+ int index_fd(struct index_state *istate, struct object_id *oid, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags);
+ int index_path(struct index_state *istate, struct object_id *oid, const char *path, struct stat *st, unsigned flags);
  
  /*
   * Record to sd the data from st that we use to check whether a file
   * might have changed.
   */
extern void fill_stat_data(struct stat_data *sd, struct stat *st);
+ void fill_stat_data(struct stat_data *sd, struct stat *st);
  
  /*
   * Return 0 if st is consistent with a file not having been changed
   * combination of MTIME_CHANGED, CTIME_CHANGED, OWNER_CHANGED,
   * INODE_CHANGED, and DATA_CHANGED.
   */
extern int match_stat_data(const struct stat_data *sd, struct stat *st);
extern int match_stat_data_racy(const struct index_state *istate,
-                               const struct stat_data *sd, struct stat *st);
+ int match_stat_data(const struct stat_data *sd, struct stat *st);
+ int match_stat_data_racy(const struct index_state *istate,
+                        const struct stat_data *sd, struct stat *st);
  
extern void fill_stat_cache_info(struct cache_entry *ce, struct stat *st);
+ void fill_stat_cache_info(struct cache_entry *ce, struct stat *st);
  
  #define REFRESH_REALLY                0x0001  /* ignore_valid */
  #define REFRESH_UNMERGED      0x0002  /* allow unmerged */
  #define REFRESH_IGNORE_SUBMODULES     0x0010  /* ignore submodules */
  #define REFRESH_IN_PORCELAIN  0x0020  /* user friendly output, not "needs update" */
  #define REFRESH_PROGRESS      0x0040  /* show progress bar if stderr is tty */
extern int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg);
extern struct cache_entry *refresh_cache_entry(struct index_state *, struct cache_entry *, unsigned int);
+ int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg);
+ struct cache_entry *refresh_cache_entry(struct index_state *, struct cache_entry *, unsigned int);
  
extern void set_alternate_index_output(const char *);
+ void set_alternate_index_output(const char *);
  
  extern int verify_index_checksum;
  extern int verify_ce_order;
@@@ -1022,7 -1020,7 +1022,7 @@@ int verify_repository_format(const stru
   * set_git_dir() before calling this, and use it only for "are we in a valid
   * repo?".
   */
extern void check_repository_format(void);
+ void check_repository_format(void);
  
  #define MTIME_CHANGED 0x0001
  #define CTIME_CHANGED 0x0002
   * Note that while this version avoids the static buffer, it is not fully
   * reentrant, as it calls into other non-reentrant git code.
   */
 -const char *find_unique_abbrev(const struct object_id *oid, int len);
 -int find_unique_abbrev_r(char *hex, const struct object_id *oid, int len);
 +const char *repo_find_unique_abbrev(struct repository *r, const struct object_id *oid, int len);
 +#define find_unique_abbrev(oid, len) repo_find_unique_abbrev(the_repository, oid, len)
 +int repo_find_unique_abbrev_r(struct repository *r, char *hex, const struct object_id *oid, int len);
 +#define find_unique_abbrev_r(hex, oid, len) repo_find_unique_abbrev_r(the_repository, hex, oid, len)
  
  extern const unsigned char null_sha1[GIT_MAX_RAWSZ];
  extern const struct object_id null_oid;
@@@ -1246,7 -1242,7 +1246,7 @@@ typedef int create_file_fn(const char *
  int raceproof_create_file(const char *path, create_file_fn fn, void *cb);
  
  int mkdir_in_gitdir(const char *path);
extern char *expand_user_path(const char *path, int real_home);
+ char *expand_user_path(const char *path, int real_home);
  const char *enter_repo(const char *path, int strict);
  static inline int is_absolute_path(const char *path)
  {
@@@ -1290,26 -1286,26 +1290,26 @@@ int looks_like_command_line_option(cons
   * "$XDG_CONFIG_HOME/git/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
   * "$HOME/.config/git/$filename". Return NULL upon error.
   */
extern char *xdg_config_home(const char *filename);
+ char *xdg_config_home(const char *filename);
  
  /**
   * Return a newly allocated string with the evaluation of
   * "$XDG_CACHE_HOME/git/$filename" if $XDG_CACHE_HOME is non-empty, otherwise
   * "$HOME/.cache/git/$filename". Return NULL upon error.
   */
extern char *xdg_cache_home(const char *filename);
+ char *xdg_cache_home(const char *filename);
  
extern int git_open_cloexec(const char *name, int flags);
+ int git_open_cloexec(const char *name, int flags);
  #define git_open(name) git_open_cloexec(name, O_RDONLY)
extern int unpack_loose_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz);
extern int parse_loose_header(const char *hdr, unsigned long *sizep);
+ int unpack_loose_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz);
+ int parse_loose_header(const char *hdr, unsigned long *sizep);
  
extern int check_object_signature(const struct object_id *oid, void *buf, unsigned long size, const char *type);
+ int check_object_signature(const struct object_id *oid, void *buf, unsigned long size, const char *type);
  
extern int finalize_object_file(const char *tmpfile, const char *filename);
+ int finalize_object_file(const char *tmpfile, const char *filename);
  
  /* Helper to check and "touch" a file */
extern int check_and_freshen_file(const char *fn, int freshen);
+ int check_and_freshen_file(const char *fn, int freshen);
  
  extern const signed char hexval_table[256];
  static inline unsigned int hexval(unsigned char c)
@@@ -1335,7 -1331,7 +1335,7 @@@ static inline int hex2chr(const char *s
  #define FALLBACK_DEFAULT_ABBREV 7
  
  struct object_context {
 -      unsigned mode;
 +      unsigned short mode;
        /*
         * symlink_path is only used by get_tree_entry_follow_symlinks,
         * and only for symlinks that point outside the repository.
@@@ -1382,34 -1378,21 +1382,34 @@@ enum get_oid_result 
                       */
  };
  
 -int get_oid(const char *str, struct object_id *oid);
 -int get_oid_commit(const char *str, struct object_id *oid);
 -int get_oid_committish(const char *str, struct object_id *oid);
 -int get_oid_tree(const char *str, struct object_id *oid);
 -int get_oid_treeish(const char *str, struct object_id *oid);
 -int get_oid_blob(const char *str, struct object_id *oid);
 -void maybe_die_on_misspelt_object_name(const char *name, const char *prefix);
 +int repo_get_oid(struct repository *r, const char *str, struct object_id *oid);
 +int get_oidf(struct object_id *oid, const char *fmt, ...);
 +int repo_get_oid_commit(struct repository *r, const char *str, struct object_id *oid);
 +int repo_get_oid_committish(struct repository *r, const char *str, struct object_id *oid);
 +int repo_get_oid_tree(struct repository *r, const char *str, struct object_id *oid);
 +int repo_get_oid_treeish(struct repository *r, const char *str, struct object_id *oid);
 +int repo_get_oid_blob(struct repository *r, const char *str, struct object_id *oid);
 +int repo_get_oid_mb(struct repository *r, const char *str, struct object_id *oid);
 +void maybe_die_on_misspelt_object_name(struct repository *repo,
 +                                     const char *name,
 +                                     const char *prefix);
- extern enum get_oid_result get_oid_with_context(struct repository *repo, const char *str,
-                               unsigned flags, struct object_id *oid,
-                               struct object_context *oc);
+ enum get_oid_result get_oid_with_context(struct repository *repo, const char *str,
+                                        unsigned flags, struct object_id *oid,
+                                        struct object_context *oc);
  
 +#define get_oid(str, oid)             repo_get_oid(the_repository, str, oid)
 +#define get_oid_commit(str, oid)      repo_get_oid_commit(the_repository, str, oid)
 +#define get_oid_committish(str, oid)  repo_get_oid_committish(the_repository, str, oid)
 +#define get_oid_tree(str, oid)                repo_get_oid_tree(the_repository, str, oid)
 +#define get_oid_treeish(str, oid)     repo_get_oid_treeish(the_repository, str, oid)
 +#define get_oid_blob(str, oid)                repo_get_oid_blob(the_repository, str, oid)
 +#define get_oid_mb(str, oid)          repo_get_oid_mb(the_repository, str, oid)
 +
  typedef int each_abbrev_fn(const struct object_id *oid, void *);
 -int for_each_abbrev(const char *prefix, each_abbrev_fn, void *);
 +int repo_for_each_abbrev(struct repository *r, const char *prefix, each_abbrev_fn, void *);
 +#define for_each_abbrev(prefix, fn, data) repo_for_each_abbrev(the_repository, prefix, fn, data)
  
extern int set_disambiguate_hint_config(const char *var, const char *value);
+ int set_disambiguate_hint_config(const char *var, const char *value);
  
  /*
   * Try to read a SHA1 in hexadecimal format from the 40 characters
   * input, so it is safe to pass this function an arbitrary
   * null-terminated string.
   */
extern int get_sha1_hex(const char *hex, unsigned char *sha1);
extern int get_oid_hex(const char *hex, struct object_id *sha1);
+ int get_sha1_hex(const char *hex, unsigned char *sha1);
+ int get_oid_hex(const char *hex, struct object_id *sha1);
  
  /*
   * Read `len` pairs of hexadecimal digits from `hex` and write the
   * values to `binary` as `len` bytes. Return 0 on success, or -1 if
   * the input does not consist of hex digits).
   */
extern int hex_to_bytes(unsigned char *binary, const char *hex, size_t len);
+ int hex_to_bytes(unsigned char *binary, const char *hex, size_t len);
  
  /*
   * Convert a binary hash to its hex equivalent. The `_r` variant is reentrant,
@@@ -1454,7 -1437,7 +1454,7 @@@ char *oid_to_hex(const struct object_i
   * other invalid character.  end is only updated on success; otherwise, it is
   * unmodified.
   */
extern int parse_oid_hex(const char *hex, struct object_id *oid, const char **end);
+ int parse_oid_hex(const char *hex, struct object_id *oid, const char **end);
  
  /*
   * This reads short-hand syntax that not only evaluates to a commit
  #define INTERPRET_BRANCH_LOCAL (1<<0)
  #define INTERPRET_BRANCH_REMOTE (1<<1)
  #define INTERPRET_BRANCH_HEAD (1<<2)
 -int interpret_branch_name(const char *str, int len, struct strbuf *,
 -                        unsigned allowed);
 -int get_oid_mb(const char *str, struct object_id *oid);
 +int repo_interpret_branch_name(struct repository *r,
 +                             const char *str, int len,
 +                             struct strbuf *buf,
 +                             unsigned allowed);
 +#define interpret_branch_name(str, len, buf, allowed) \
 +      repo_interpret_branch_name(the_repository, str, len, buf, allowed)
  
extern int validate_headref(const char *ref);
+ int validate_headref(const char *ref);
  
extern int base_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
extern int df_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
extern int name_compare(const char *name1, size_t len1, const char *name2, size_t len2);
extern int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2);
+ int base_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
+ int df_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
+ int name_compare(const char *name1, size_t len1, const char *name2, size_t len2);
+ int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2);
  
extern void *read_object_with_reference(const struct object_id *oid,
-                                       const char *required_type,
-                                       unsigned long *size,
-                                       struct object_id *oid_ret);
+ void *read_object_with_reference(const struct object_id *oid,
+                                const char *required_type,
+                                unsigned long *size,
+                                struct object_id *oid_ret);
  
 -struct object *peel_to_type(const char *name, int namelen,
 -                          struct object *o, enum object_type);
 +struct object *repo_peel_to_type(struct repository *r,
 +                               const char *name, int namelen,
 +                               struct object *o, enum object_type);
 +#define peel_to_type(name, namelen, obj, type) \
 +      repo_peel_to_type(the_repository, name, namelen, obj, type)
  
  enum date_mode_type {
        DATE_NORMAL = 0,
@@@ -1562,24 -1539,20 +1562,24 @@@ enum want_ident 
        WANT_COMMITTER_IDENT
  };
  
- extern const char *git_author_info(int);
- extern const char *git_committer_info(int);
- extern const char *fmt_ident(const char *name, const char *email,
-               enum want_ident whose_ident,
-               const char *date_str, int);
- extern const char *fmt_name(enum want_ident);
- extern const char *ident_default_name(void);
- extern const char *ident_default_email(void);
- extern const char *git_editor(void);
- extern const char *git_sequence_editor(void);
- extern const char *git_pager(int stdout_is_tty);
- extern int is_terminal_dumb(void);
- extern int git_ident_config(const char *, const char *, void *);
+ const char *git_author_info(int);
+ const char *git_committer_info(int);
+ const char *fmt_ident(const char *name, const char *email,
+                     enum want_ident whose_ident,
+                     const char *date_str, int);
+ const char *fmt_name(enum want_ident);
+ const char *ident_default_name(void);
+ const char *ident_default_email(void);
+ const char *git_editor(void);
+ const char *git_sequence_editor(void);
+ const char *git_pager(int stdout_is_tty);
+ int is_terminal_dumb(void);
+ int git_ident_config(const char *, const char *, void *);
 +/*
 + * Prepare an ident to fall back on if the user didn't configure it.
 + */
 +void prepare_fallback_ident(const char *name, const char *email);
extern void reset_ident_date(void);
+ void reset_ident_date(void);
  
  struct ident_split {
        const char *name_begin;
   * Signals an success with 0, but time part of the result may be NULL
   * if the input lacks timestamp and zone
   */
extern int split_ident_line(struct ident_split *, const char *, int);
+ int split_ident_line(struct ident_split *, const char *, int);
  
  /*
   * Like show_date, but pull the timestamp and tz parameters from
@@@ -1612,7 -1585,7 +1612,7 @@@ const char *show_ident_date(const struc
   * Because there are two fields, we must choose one as the primary key; we
   * currently arbitrarily pick the email.
   */
extern int ident_cmp(const struct ident_split *, const struct ident_split *);
+ int ident_cmp(const struct ident_split *, const struct ident_split *);
  
  struct checkout {
        struct index_state *istate;
  #define CHECKOUT_INIT { NULL, "" }
  
  #define TEMPORARY_FILENAME_LENGTH 25
extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath, int *nr_checkouts);
extern void enable_delayed_checkout(struct checkout *state);
extern int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
+ int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath, int *nr_checkouts);
+ void enable_delayed_checkout(struct checkout *state);
+ int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
  /*
   * Unlink the last component and schedule the leading directories for
   * removal, such that empty directories get removed.
   */
extern void unlink_entry(const struct cache_entry *ce);
+ void unlink_entry(const struct cache_entry *ce);
  
  struct cache_def {
        struct strbuf path;
@@@ -1649,12 -1622,12 +1649,12 @@@ static inline void cache_def_clear(stru
        strbuf_release(&cache->path);
  }
  
extern int has_symlink_leading_path(const char *name, int len);
extern int threaded_has_symlink_leading_path(struct cache_def *, const char *, int);
extern int check_leading_path(const char *name, int len);
extern int has_dirs_only_path(const char *name, int len, int prefix_len);
extern void schedule_dir_for_removal(const char *name, int len);
extern void remove_scheduled_dirs(void);
+ int has_symlink_leading_path(const char *name, int len);
+ int threaded_has_symlink_leading_path(struct cache_def *, const char *, int);
+ int check_leading_path(const char *name, int len);
+ int has_dirs_only_path(const char *name, int len, int prefix_len);
+ void schedule_dir_for_removal(const char *name, int len);
+ void remove_scheduled_dirs(void);
  
  struct pack_window {
        struct pack_window *next;
@@@ -1676,14 -1649,14 +1676,14 @@@ struct pack_entry 
   * usual "XXXXXX" trailer, and the resulting filename is written into the
   * "template" buffer. Returns the open descriptor.
   */
extern int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);
+ int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);
  
  /*
   * Create a pack .keep file named "name" (which should generally be the output
   * of odb_pack_name). Returns a file descriptor opened for writing, or -1 on
   * error.
   */
extern int odb_pack_keep(const char *name);
+ int odb_pack_keep(const char *name);
  
  /*
   * Set this to 0 to prevent oid_object_info_extended() from fetching missing
  extern int fetch_if_missing;
  
  /* Dumb servers support */
extern int update_server_info(int);
+ int update_server_info(int);
  
extern const char *get_log_output_encoding(void);
extern const char *get_commit_output_encoding(void);
+ const char *get_log_output_encoding(void);
+ const char *get_commit_output_encoding(void);
  
  /*
   * This is a hack for test programs like test-dump-untracked-cache to
   */
  extern int ignore_untracked_cache_config;
  
extern int committer_ident_sufficiently_given(void);
extern int author_ident_sufficiently_given(void);
+ int committer_ident_sufficiently_given(void);
+ int author_ident_sufficiently_given(void);
  
  extern const char *git_commit_encoding;
  extern const char *git_log_output_encoding;
@@@ -1715,22 -1688,22 +1715,22 @@@ extern const char *git_mailmap_file
  extern const char *git_mailmap_blob;
  
  /* IO helper functions */
extern void maybe_flush_or_die(FILE *, const char *);
+ void maybe_flush_or_die(FILE *, const char *);
  __attribute__((format (printf, 2, 3)))
extern void fprintf_or_die(FILE *, const char *fmt, ...);
+ void fprintf_or_die(FILE *, const char *fmt, ...);
  
  #define COPY_READ_ERROR (-2)
  #define COPY_WRITE_ERROR (-3)
extern int copy_fd(int ifd, int ofd);
extern int copy_file(const char *dst, const char *src, int mode);
extern int copy_file_with_time(const char *dst, const char *src, int mode);
+ int copy_fd(int ifd, int ofd);
+ int copy_file(const char *dst, const char *src, int mode);
+ int copy_file_with_time(const char *dst, const char *src, int mode);
  
extern void write_or_die(int fd, const void *buf, size_t count);
extern void fsync_or_die(int fd, const char *);
+ void write_or_die(int fd, const void *buf, size_t count);
+ void fsync_or_die(int fd, const char *);
  
extern ssize_t read_in_full(int fd, void *buf, size_t count);
extern ssize_t write_in_full(int fd, const void *buf, size_t count);
extern ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset);
+ ssize_t read_in_full(int fd, void *buf, size_t count);
+ ssize_t write_in_full(int fd, const void *buf, size_t count);
+ ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset);
  
  static inline ssize_t write_str_in_full(int fd, const char *str)
  {
   * Open (and truncate) the file at path, write the contents of buf to it,
   * and close it. Dies if any errors are encountered.
   */
extern void write_file_buf(const char *path, const char *buf, size_t len);
+ void write_file_buf(const char *path, const char *buf, size_t len);
  
  /**
   * Like write_file_buf(), but format the contents into a buffer first.
   *   write_file(path, "counter: %d", ctr);
   */
  __attribute__((format (printf, 2, 3)))
extern void write_file(const char *path, const char *fmt, ...);
+ void write_file(const char *path, const char *fmt, ...);
  
  /* pager.c */
extern void setup_pager(void);
extern int pager_in_use(void);
+ void setup_pager(void);
+ int pager_in_use(void);
  extern int pager_use_color;
extern int term_columns(void);
extern int decimal_width(uintmax_t);
extern int check_pager_config(const char *cmd);
extern void prepare_pager_args(struct child_process *, const char *pager);
+ int term_columns(void);
+ int decimal_width(uintmax_t);
+ int check_pager_config(const char *cmd);
+ void prepare_pager_args(struct child_process *, const char *pager);
  
  extern const char *editor_program;
  extern const char *askpass_program;
@@@ -1804,13 -1777,13 +1804,13 @@@ void shift_tree_by(const struct object_
  /* All WS_* -- when extended, adapt diff.c emit_symbol */
  #define WS_RULE_MASK           07777
  extern unsigned whitespace_rule_cfg;
extern unsigned whitespace_rule(struct index_state *, const char *);
extern unsigned parse_whitespace_rule(const char *);
extern unsigned ws_check(const char *line, int len, unsigned ws_rule);
extern void ws_check_emit(const char *line, int len, unsigned ws_rule, FILE *stream, const char *set, const char *reset, const char *ws);
extern char *whitespace_error_string(unsigned ws);
extern void ws_fix_copy(struct strbuf *, const char *, int, unsigned, int *);
extern int ws_blank_line(const char *line, int len, unsigned ws_rule);
+ unsigned whitespace_rule(struct index_state *, const char *);
+ unsigned parse_whitespace_rule(const char *);
+ unsigned ws_check(const char *line, int len, unsigned ws_rule);
+ void ws_check_emit(const char *line, int len, unsigned ws_rule, FILE *stream, const char *set, const char *reset, const char *ws);
+ char *whitespace_error_string(unsigned ws);
+ void ws_fix_copy(struct strbuf *, const char *, int, unsigned, int *);
+ int ws_blank_line(const char *line, int len, unsigned ws_rule);
  #define ws_tab_width(rule)     ((rule) & WS_TAB_WIDTH_MASK)
  
  /* ls-files */
@@@ -1880,9 -1853,9 +1880,9 @@@ void safe_create_dir(const char *dir, i
   * Should we print an ellipsis after an abbreviated SHA-1 value
   * when doing diff-raw output or indicating a detached HEAD?
   */
extern int print_sha1_ellipsis(void);
+ int print_sha1_ellipsis(void);
  
  /* Return 1 if the file is empty or does not exists, 0 otherwise. */
extern int is_empty_or_missing_file(const char *filename);
+ int is_empty_or_missing_file(const char *filename);
  
  #endif /* CACHE_H */
diff --combined commit.h
index cc19cb53148ecdd6ce39d6836d8d52cbc0db5042,18f05c64d83a4f5051d11e2263bf7ffafa98ca2c..f5295ca7f3efe9b7665d1c6728814bfe2901d059
+++ b/commit.h
@@@ -32,7 -32,7 +32,7 @@@ struct commit 
  
        /*
         * If the commit is loaded from the commit-graph file, then this
 -       * member may be NULL. Only access it through get_commit_tree()
 +       * member may be NULL. Only access it through repo_get_commit_tree()
         * or get_commit_tree_oid().
         */
        struct tree *maybe_tree;
@@@ -89,12 -89,6 +89,12 @@@ static inline int repo_parse_commit(str
  {
        return repo_parse_commit_gently(r, item, 0);
  }
 +
 +static inline int parse_commit_no_graph(struct commit *commit)
 +{
 +      return repo_parse_commit_internal(the_repository, commit, 0, 0);
 +}
 +
  #ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS
  #define parse_commit_internal(item, quiet, use) repo_parse_commit_internal(the_repository, item, quiet, use)
  #define parse_commit_gently(item, quiet) repo_parse_commit_gently(the_repository, item, quiet)
@@@ -149,8 -143,7 +149,8 @@@ void repo_unuse_commit_buffer(struct re
   */
  void free_commit_buffer(struct parsed_object_pool *pool, struct commit *);
  
 -struct tree *get_commit_tree(const struct commit *);
 +struct tree *repo_get_commit_tree(struct repository *, const struct commit *);
 +#define get_commit_tree(c) repo_get_commit_tree(the_repository, c)
  struct object_id *get_commit_tree_oid(const struct commit *);
  
  /*
@@@ -184,10 -177,10 +184,10 @@@ void free_commit_list(struct commit_lis
  
  struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
  
extern int has_non_ascii(const char *text);
extern const char *logmsg_reencode(const struct commit *commit,
-                                  char **commit_encoding,
-                                  const char *output_encoding);
+ int has_non_ascii(const char *text);
+ const char *logmsg_reencode(const struct commit *commit,
+                           char **commit_encoding,
+                           const char *output_encoding);
  const char *repo_logmsg_reencode(struct repository *r,
                                 const struct commit *commit,
                                 char **commit_encoding,
  #define logmsg_reencode(c, enc, out) repo_logmsg_reencode(the_repository, c, enc, out)
  #endif
  
extern const char *skip_blank_lines(const char *msg);
+ const char *skip_blank_lines(const char *msg);
  
  /** Removes the first commit from a list sorted by date, and adds all
   * of its parents.
@@@ -247,27 -240,23 +247,27 @@@ struct commit *get_fork_point(const cha
  
  struct oid_array;
  struct ref;
extern int register_shallow(struct repository *r, const struct object_id *oid);
extern int unregister_shallow(const struct object_id *oid);
extern int for_each_commit_graft(each_commit_graft_fn, void *);
extern int is_repository_shallow(struct repository *r);
extern struct commit_list *get_shallow_commits(struct object_array *heads,
-               int depth, int shallow_flag, int not_shallow_flag);
extern struct commit_list *get_shallow_commits_by_rev_list(
+ int register_shallow(struct repository *r, const struct object_id *oid);
+ int unregister_shallow(const struct object_id *oid);
+ int for_each_commit_graft(each_commit_graft_fn, void *);
+ int is_repository_shallow(struct repository *r);
+ struct commit_list *get_shallow_commits(struct object_array *heads,
+                                       int depth, int shallow_flag, int not_shallow_flag);
+ struct commit_list *get_shallow_commits_by_rev_list(
                int ac, const char **av, int shallow_flag, int not_shallow_flag);
extern void set_alternate_shallow_file(struct repository *r, const char *path, int override);
extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
-                                const struct oid_array *extra);
extern void setup_alternate_shallow(struct lock_file *shallow_lock,
-                                   const char **alternate_shallow_file,
-                                   const struct oid_array *extra);
extern const char *setup_temporary_shallow(const struct oid_array *extra);
extern void advertise_shallow_grafts(int);
+ void set_alternate_shallow_file(struct repository *r, const char *path, int override);
+ int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
+                         const struct oid_array *extra);
+ void setup_alternate_shallow(struct lock_file *shallow_lock,
+                            const char **alternate_shallow_file,
+                            const struct oid_array *extra);
+ const char *setup_temporary_shallow(const struct oid_array *extra);
+ void advertise_shallow_grafts(int);
  
 +/*
 + * Initialize with prepare_shallow_info() or zero-initialize (equivalent to
 + * prepare_shallow_info with a NULL oid_array).
 + */
  struct shallow_info {
        struct oid_array *shallow;
        int *ours, nr_ours;
        int nr_commits;
  };
  
extern void prepare_shallow_info(struct shallow_info *, struct oid_array *);
extern void clear_shallow_info(struct shallow_info *);
extern void remove_nonexistent_theirs_shallow(struct shallow_info *);
extern void assign_shallow_commits_to_refs(struct shallow_info *info,
-                                          uint32_t **used,
-                                          int *ref_status);
extern int delayed_reachability_test(struct shallow_info *si, int c);
+ void prepare_shallow_info(struct shallow_info *, struct oid_array *);
+ void clear_shallow_info(struct shallow_info *);
+ void remove_nonexistent_theirs_shallow(struct shallow_info *);
+ void assign_shallow_commits_to_refs(struct shallow_info *info,
+                                   uint32_t **used,
+                                   int *ref_status);
+ int delayed_reachability_test(struct shallow_info *si, int c);
  #define PRUNE_SHOW_ONLY 1
  #define PRUNE_QUICK 2
extern void prune_shallow(unsigned options);
+ void prune_shallow(unsigned options);
  extern struct trace_key trace_shallow;
  
extern int interactive_add(int argc, const char **argv, const char *prefix, int patch);
extern int run_add_interactive(const char *revision, const char *patch_mode,
-                              const struct pathspec *pathspec);
+ int interactive_add(int argc, const char **argv, const char *prefix, int patch);
+ int run_add_interactive(const char *revision, const char *patch_mode,
+                       const struct pathspec *pathspec);
  
  struct commit_extra_header {
        struct commit_extra_header *next;
        size_t len;
  };
  
extern void append_merge_tag_headers(struct commit_list *parents,
-                                    struct commit_extra_header ***tail);
+ void append_merge_tag_headers(struct commit_list *parents,
+                             struct commit_extra_header ***tail);
  
extern int commit_tree(const char *msg, size_t msg_len,
-                      const struct object_id *tree,
-                      struct commit_list *parents, struct object_id *ret,
-                      const char *author, const char *sign_commit);
+ int commit_tree(const char *msg, size_t msg_len,
+               const struct object_id *tree,
+               struct commit_list *parents, struct object_id *ret,
+               const char *author, const char *sign_commit);
  
extern int commit_tree_extended(const char *msg, size_t msg_len,
-                               const struct object_id *tree,
-                               struct commit_list *parents,
-                               struct object_id *ret, const char *author,
-                               const char *sign_commit,
-                               struct commit_extra_header *);
+ int commit_tree_extended(const char *msg, size_t msg_len,
+                        const struct object_id *tree,
+                        struct commit_list *parents,
+                        struct object_id *ret, const char *author,
+                        const char *sign_commit,
+                        struct commit_extra_header *);
  
extern struct commit_extra_header *read_commit_extra_headers(struct commit *, const char **);
+ struct commit_extra_header *read_commit_extra_headers(struct commit *, const char **);
  
extern void free_commit_extra_headers(struct commit_extra_header *extra);
+ void free_commit_extra_headers(struct commit_extra_header *extra);
  
  /*
   * Search the commit object contents given by "msg" for the header "key".
   * Note that some headers (like mergetag) may be multi-line. It is the caller's
   * responsibility to parse further in this case!
   */
extern const char *find_commit_header(const char *msg, const char *key,
-                                     size_t *out_len);
+ const char *find_commit_header(const char *msg, const char *key,
+                              size_t *out_len);
  
  /* Find the end of the log message, the right place for a new trailer. */
extern size_t ignore_non_trailer(const char *buf, size_t len);
+ size_t ignore_non_trailer(const char *buf, size_t len);
  
  typedef int (*each_mergetag_fn)(struct commit *commit, struct commit_extra_header *extra,
-                                void *cb_data);
+                               void *cb_data);
  
extern int for_each_mergetag(each_mergetag_fn fn, struct commit *commit, void *data);
+ int for_each_mergetag(each_mergetag_fn fn, struct commit *commit, void *data);
  
  struct merge_remote_desc {
        struct object *obj; /* the named object, could be a tag */
        char name[FLEX_ARRAY];
  };
extern struct merge_remote_desc *merge_remote_util(struct commit *);
extern void set_merge_remote_desc(struct commit *commit,
-                                 const char *name, struct object *obj);
+ struct merge_remote_desc *merge_remote_util(struct commit *);
+ void set_merge_remote_desc(struct commit *commit,
+                          const char *name, struct object *obj);
  
  /*
   * Given "name" from the command line to merge, find the commit object
   */
  struct commit *get_merge_parent(const char *name);
  
extern int parse_signed_commit(const struct commit *commit,
-                              struct strbuf *message, struct strbuf *signature);
extern int remove_signature(struct strbuf *buf);
+ int parse_signed_commit(const struct commit *commit,
+                       struct strbuf *message, struct strbuf *signature);
+ int remove_signature(struct strbuf *buf);
  
  /*
   * Check the signature of the given commit. The result of the check is stored
   * at all.  This may allocate memory for sig->gpg_output, sig->gpg_status,
   * sig->signer and sig->key.
   */
extern int check_commit_signature(const struct commit *commit, struct signature_check *sigc);
+ int check_commit_signature(const struct commit *commit, struct signature_check *sigc);
  
  /* record author-date for each commit object */
  struct author_date_slab;
@@@ -390,6 -379,6 +390,6 @@@ int compare_commits_by_commit_date(cons
  int compare_commits_by_gen_then_commit_date(const void *a_, const void *b_, void *unused);
  
  LAST_ARG_MUST_BE_NULL
extern int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...);
+ int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...);
  
  #endif /* COMMIT_H */
diff --combined config.h
index 36bb23a9d9380ed3d52f331f74f30cf3e54efafc,c275fe22846d26bf6e7efa6cf8c71ea5e147c62e..f0ed464004da601a26d574b1cdc158abb50ae2bc
+++ b/config.h
@@@ -55,10 -55,6 +55,10 @@@ typedef int (*config_parser_event_fn_t)
  
  struct config_options {
        unsigned int respect_includes : 1;
 +      unsigned int ignore_repo : 1;
 +      unsigned int ignore_worktree : 1;
 +      unsigned int ignore_cmdline : 1;
 +      unsigned int system_gently : 1;
        const char *commondir;
        const char *git_dir;
        config_parser_event_fn_t event_fn;
  };
  
  typedef int (*config_fn_t)(const char *, const char *, void *);
- extern int git_default_config(const char *, const char *, void *);
- extern int git_config_from_file(config_fn_t fn, const char *, void *);
- extern int git_config_from_file_with_options(config_fn_t fn, const char *,
-                                            void *,
-                                            const struct config_options *);
- extern int git_config_from_mem(config_fn_t fn,
-                              const enum config_origin_type,
-                              const char *name,
-                              const char *buf, size_t len,
-                              void *data, const struct config_options *opts);
- extern int git_config_from_blob_oid(config_fn_t fn, const char *name,
-                                   const struct object_id *oid, void *data);
- extern void git_config_push_parameter(const char *text);
- extern int git_config_from_parameters(config_fn_t fn, void *data);
- extern void read_early_config(config_fn_t cb, void *data);
- extern void read_very_early_config(config_fn_t cb, void *data);
- extern void git_config(config_fn_t fn, void *);
- extern int config_with_options(config_fn_t fn, void *,
-                              struct git_config_source *config_source,
-                              const struct config_options *opts);
- extern int git_parse_ssize_t(const char *, ssize_t *);
- extern int git_parse_ulong(const char *, unsigned long *);
- extern int git_parse_maybe_bool(const char *);
- extern int git_config_int(const char *, const char *);
- extern int64_t git_config_int64(const char *, const char *);
- extern unsigned long git_config_ulong(const char *, const char *);
- extern ssize_t git_config_ssize_t(const char *, const char *);
- extern int git_config_bool_or_int(const char *, const char *, int *);
- extern int git_config_bool(const char *, const char *);
- extern int git_config_string(const char **, const char *, const char *);
- extern int git_config_pathname(const char **, const char *, const char *);
- extern int git_config_expiry_date(timestamp_t *, const char *, const char *);
- extern int git_config_color(char *, const char *, const char *);
- extern int git_config_set_in_file_gently(const char *, const char *, const char *);
- extern void git_config_set_in_file(const char *, const char *, const char *);
- extern int git_config_set_gently(const char *, const char *);
- extern void git_config_set(const char *, const char *);
- extern int git_config_parse_key(const char *, char **, int *);
- extern int git_config_key_is_valid(const char *key);
- extern int git_config_set_multivar_gently(const char *, const char *, const char *, int);
- extern void git_config_set_multivar(const char *, const char *, const char *, int);
- extern int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, int);
- extern void git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
- extern int git_config_rename_section(const char *, const char *);
- extern int git_config_rename_section_in_file(const char *, const char *, const char *);
- extern int git_config_copy_section(const char *, const char *);
- extern int git_config_copy_section_in_file(const char *, const char *, const char *);
- extern const char *git_etc_gitconfig(void);
- extern int git_env_bool(const char *, int);
- extern unsigned long git_env_ulong(const char *, unsigned long);
- extern int git_config_system(void);
- extern int config_error_nonbool(const char *);
+ int git_default_config(const char *, const char *, void *);
+ int git_config_from_file(config_fn_t fn, const char *, void *);
+ int git_config_from_file_with_options(config_fn_t fn, const char *,
+                                     void *,
+                                     const struct config_options *);
+ int git_config_from_mem(config_fn_t fn,
+                       const enum config_origin_type,
+                       const char *name,
+                       const char *buf, size_t len,
+                       void *data, const struct config_options *opts);
+ int git_config_from_blob_oid(config_fn_t fn, const char *name,
+                            const struct object_id *oid, void *data);
+ void git_config_push_parameter(const char *text);
+ int git_config_from_parameters(config_fn_t fn, void *data);
+ void read_early_config(config_fn_t cb, void *data);
++void read_very_early_config(config_fn_t cb, void *data);
+ void git_config(config_fn_t fn, void *);
+ int config_with_options(config_fn_t fn, void *,
+                       struct git_config_source *config_source,
+                       const struct config_options *opts);
+ int git_parse_ssize_t(const char *, ssize_t *);
+ int git_parse_ulong(const char *, unsigned long *);
+ int git_parse_maybe_bool(const char *);
+ int git_config_int(const char *, const char *);
+ int64_t git_config_int64(const char *, const char *);
+ unsigned long git_config_ulong(const char *, const char *);
+ ssize_t git_config_ssize_t(const char *, const char *);
+ int git_config_bool_or_int(const char *, const char *, int *);
+ int git_config_bool(const char *, const char *);
+ int git_config_string(const char **, const char *, const char *);
+ int git_config_pathname(const char **, const char *, const char *);
+ int git_config_expiry_date(timestamp_t *, const char *, const char *);
+ int git_config_color(char *, const char *, const char *);
+ int git_config_set_in_file_gently(const char *, const char *, const char *);
+ void git_config_set_in_file(const char *, const char *, const char *);
+ int git_config_set_gently(const char *, const char *);
+ void git_config_set(const char *, const char *);
+ int git_config_parse_key(const char *, char **, int *);
+ int git_config_key_is_valid(const char *key);
+ int git_config_set_multivar_gently(const char *, const char *, const char *, int);
+ void git_config_set_multivar(const char *, const char *, const char *, int);
+ int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, int);
+ void git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
+ int git_config_rename_section(const char *, const char *);
+ int git_config_rename_section_in_file(const char *, const char *, const char *);
+ int git_config_copy_section(const char *, const char *);
+ int git_config_copy_section_in_file(const char *, const char *, const char *);
+ const char *git_etc_gitconfig(void);
+ int git_env_bool(const char *, int);
+ unsigned long git_env_ulong(const char *, unsigned long);
+ int git_config_system(void);
+ int config_error_nonbool(const char *);
  #if defined(__GNUC__)
  #define config_error_nonbool(s) (config_error_nonbool(s), const_error())
  #endif
  
extern int git_config_parse_parameter(const char *, config_fn_t fn, void *data);
+ int git_config_parse_parameter(const char *, config_fn_t fn, void *data);
  
  enum config_scope {
        CONFIG_SCOPE_UNKNOWN = 0,
        CONFIG_SCOPE_CMDLINE,
  };
  
- extern enum config_scope current_config_scope(void);
extern const char *current_config_origin_type(void);
extern const char *current_config_name(void);
+ enum config_scope current_config_scope(void);
+ const char *current_config_origin_type(void);
+ const char *current_config_name(void);
  
  struct config_include_data {
        int depth;
        const struct config_options *opts;
  };
  #define CONFIG_INCLUDE_INIT { 0 }
extern int git_config_include(const char *name, const char *value, void *data);
+ int git_config_include(const char *name, const char *value, void *data);
  
  /*
   * Match and parse a config key of the form:
   * If the subsection pointer-to-pointer passed in is NULL, returns 0 only if
   * there is no subsection at all.
   */
extern int parse_config_key(const char *var,
-                           const char *section,
-                           const char **subsection, int *subsection_len,
-                           const char **key);
+ int parse_config_key(const char *var,
+                    const char *section,
+                    const char **subsection, int *subsection_len,
+                    const char **key);
  
  struct config_set_element {
        struct hashmap_entry ent;
@@@ -197,71 -192,71 +197,71 @@@ struct config_set 
        struct configset_list list;
  };
  
extern void git_configset_init(struct config_set *cs);
extern int git_configset_add_file(struct config_set *cs, const char *filename);
extern const struct string_list *git_configset_get_value_multi(struct config_set *cs, const char *key);
extern void git_configset_clear(struct config_set *cs);
+ void git_configset_init(struct config_set *cs);
+ int git_configset_add_file(struct config_set *cs, const char *filename);
+ const struct string_list *git_configset_get_value_multi(struct config_set *cs, const char *key);
+ void git_configset_clear(struct config_set *cs);
  
  /*
   * These functions return 1 if not found, and 0 if found, leaving the found
   * value in the 'dest' pointer.
   */
extern int git_configset_get_value(struct config_set *cs, const char *key, const char **dest);
extern int git_configset_get_string_const(struct config_set *cs, const char *key, const char **dest);
extern int git_configset_get_string(struct config_set *cs, const char *key, char **dest);
extern int git_configset_get_int(struct config_set *cs, const char *key, int *dest);
extern int git_configset_get_ulong(struct config_set *cs, const char *key, unsigned long *dest);
extern int git_configset_get_bool(struct config_set *cs, const char *key, int *dest);
extern int git_configset_get_bool_or_int(struct config_set *cs, const char *key, int *is_bool, int *dest);
extern int git_configset_get_maybe_bool(struct config_set *cs, const char *key, int *dest);
extern int git_configset_get_pathname(struct config_set *cs, const char *key, const char **dest);
+ int git_configset_get_value(struct config_set *cs, const char *key, const char **dest);
+ int git_configset_get_string_const(struct config_set *cs, const char *key, const char **dest);
+ int git_configset_get_string(struct config_set *cs, const char *key, char **dest);
+ int git_configset_get_int(struct config_set *cs, const char *key, int *dest);
+ int git_configset_get_ulong(struct config_set *cs, const char *key, unsigned long *dest);
+ int git_configset_get_bool(struct config_set *cs, const char *key, int *dest);
+ int git_configset_get_bool_or_int(struct config_set *cs, const char *key, int *is_bool, int *dest);
+ int git_configset_get_maybe_bool(struct config_set *cs, const char *key, int *dest);
+ int git_configset_get_pathname(struct config_set *cs, const char *key, const char **dest);
  
  /* Functions for reading a repository's config */
  struct repository;
- extern void repo_config(struct repository *repo, config_fn_t fn, void *data);
- extern int repo_config_get_value(struct repository *repo,
-                                const char *key, const char **value);
- extern const struct string_list *repo_config_get_value_multi(struct repository *repo,
-                                                            const char *key);
- extern int repo_config_get_string_const(struct repository *repo,
-                                       const char *key, const char **dest);
- extern int repo_config_get_string(struct repository *repo,
-                                 const char *key, char **dest);
- extern int repo_config_get_int(struct repository *repo,
+ void repo_config(struct repository *repo, config_fn_t fn, void *data);
+ int repo_config_get_value(struct repository *repo,
+                         const char *key, const char **value);
+ const struct string_list *repo_config_get_value_multi(struct repository *repo,
+                                                     const char *key);
+ int repo_config_get_string_const(struct repository *repo,
+                                const char *key, const char **dest);
+ int repo_config_get_string(struct repository *repo,
+                          const char *key, char **dest);
+ int repo_config_get_int(struct repository *repo,
+                       const char *key, int *dest);
+ int repo_config_get_ulong(struct repository *repo,
+                         const char *key, unsigned long *dest);
+ int repo_config_get_bool(struct repository *repo,
+                        const char *key, int *dest);
+ int repo_config_get_bool_or_int(struct repository *repo,
+                               const char *key, int *is_bool, int *dest);
+ int repo_config_get_maybe_bool(struct repository *repo,
                               const char *key, int *dest);
- extern int repo_config_get_ulong(struct repository *repo,
-                                const char *key, unsigned long *dest);
- extern int repo_config_get_bool(struct repository *repo,
-                               const char *key, int *dest);
- extern int repo_config_get_bool_or_int(struct repository *repo,
-                                      const char *key, int *is_bool, int *dest);
- extern int repo_config_get_maybe_bool(struct repository *repo,
-                                     const char *key, int *dest);
- extern int repo_config_get_pathname(struct repository *repo,
-                                   const char *key, const char **dest);
+ int repo_config_get_pathname(struct repository *repo,
+                            const char *key, const char **dest);
  
extern int git_config_get_value(const char *key, const char **value);
extern const struct string_list *git_config_get_value_multi(const char *key);
extern void git_config_clear(void);
extern int git_config_get_string_const(const char *key, const char **dest);
extern int git_config_get_string(const char *key, char **dest);
extern int git_config_get_int(const char *key, int *dest);
extern int git_config_get_ulong(const char *key, unsigned long *dest);
extern int git_config_get_bool(const char *key, int *dest);
extern int git_config_get_bool_or_int(const char *key, int *is_bool, int *dest);
extern int git_config_get_maybe_bool(const char *key, int *dest);
extern int git_config_get_pathname(const char *key, const char **dest);
extern int git_config_get_index_threads(int *dest);
extern int git_config_get_untracked_cache(void);
extern int git_config_get_split_index(void);
extern int git_config_get_max_percent_split_change(void);
extern int git_config_get_fsmonitor(void);
+ int git_config_get_value(const char *key, const char **value);
+ const struct string_list *git_config_get_value_multi(const char *key);
+ void git_config_clear(void);
+ int git_config_get_string_const(const char *key, const char **dest);
+ int git_config_get_string(const char *key, char **dest);
+ int git_config_get_int(const char *key, int *dest);
+ int git_config_get_ulong(const char *key, unsigned long *dest);
+ int git_config_get_bool(const char *key, int *dest);
+ int git_config_get_bool_or_int(const char *key, int *is_bool, int *dest);
+ int git_config_get_maybe_bool(const char *key, int *dest);
+ int git_config_get_pathname(const char *key, const char **dest);
+ int git_config_get_index_threads(int *dest);
+ int git_config_get_untracked_cache(void);
+ int git_config_get_split_index(void);
+ int git_config_get_max_percent_split_change(void);
+ int git_config_get_fsmonitor(void);
  
  /* This dies if the configured or default date is in the future */
extern int git_config_get_expiry(const char *key, const char **output);
+ int git_config_get_expiry(const char *key, const char **output);
  
  /* parse either "this many days" integer, or "5.days.ago" approxidate */
extern int git_config_get_expiry_in_days(const char *key, timestamp_t *, timestamp_t now);
+ int git_config_get_expiry_in_days(const char *key, timestamp_t *, timestamp_t now);
  
  struct key_value_info {
        const char *filename;
        enum config_scope scope;
  };
  
extern NORETURN void git_die_config(const char *key, const char *err, ...) __attribute__((format(printf, 2, 3)));
extern NORETURN void git_die_config_linenr(const char *key, const char *filename, int linenr);
+ NORETURN void git_die_config(const char *key, const char *err, ...) __attribute__((format(printf, 2, 3)));
+ NORETURN void git_die_config_linenr(const char *key, const char *filename, int linenr);
  
  #define LOOKUP_CONFIG(mapping, var) \
        lookup_config(mapping, ARRAY_SIZE(mapping), var)
diff --combined dir.h
index c23313b02126f97e63e5694bdc02907363fe077d,2e6fcba389cc93cd9b8a5f9915c38968d512cc6d..680079bbe3241ff84fc8260009515f03b6ba819e
--- 1/dir.h
--- 2/dir.h
+++ b/dir.h
@@@ -202,7 -202,7 +202,7 @@@ struct dir_struct 
  };
  
  /*Count the number of slashes for string s*/
extern int count_slashes(const char *s);
+ int count_slashes(const char *s);
  
  /*
   * The ordering of these constants is significant, with
  #define MATCHED_RECURSIVELY 1
  #define MATCHED_FNMATCH 2
  #define MATCHED_EXACTLY 3
- extern int simple_length(const char *match);
- extern int no_wildcard(const char *string);
- extern char *common_prefix(const struct pathspec *pathspec);
- extern int match_pathspec(const struct index_state *istate,
-                         const struct pathspec *pathspec,
-                         const char *name, int namelen,
-                         int prefix, char *seen, int is_dir);
- extern int report_path_error(const char *ps_matched, const struct pathspec *pathspec);
- extern int within_depth(const char *name, int namelen, int depth, int max_depth);
- extern int fill_directory(struct dir_struct *dir,
-                         struct index_state *istate,
-                         const struct pathspec *pathspec);
- extern int read_directory(struct dir_struct *, struct index_state *istate,
-                         const char *path, int len,
-                         const struct pathspec *pathspec);
- extern int is_excluded_from_list(const char *pathname, int pathlen,
-                                const char *basename, int *dtype,
-                                struct exclude_list *el,
-                                struct index_state *istate);
+ int simple_length(const char *match);
+ int no_wildcard(const char *string);
+ char *common_prefix(const struct pathspec *pathspec);
+ int match_pathspec(const struct index_state *istate,
+                  const struct pathspec *pathspec,
+                  const char *name, int namelen,
+                  int prefix, char *seen, int is_dir);
 -int report_path_error(const char *ps_matched, const struct pathspec *pathspec, const char *prefix);
++int report_path_error(const char *ps_matched, const struct pathspec *pathspec);
+ int within_depth(const char *name, int namelen, int depth, int max_depth);
+ int fill_directory(struct dir_struct *dir,
+                  struct index_state *istate,
+                  const struct pathspec *pathspec);
+ int read_directory(struct dir_struct *, struct index_state *istate,
+                  const char *path, int len,
+                  const struct pathspec *pathspec);
+ int is_excluded_from_list(const char *pathname, int pathlen,
+                         const char *basename, int *dtype,
+                         struct exclude_list *el,
+                         struct index_state *istate);
  struct dir_entry *dir_add_ignored(struct dir_struct *dir,
                                  struct index_state *istate,
                                  const char *pathname, int len);
   * these implement the matching logic for dir.c:excluded_from_list and
   * attr.c:path_matches()
   */
- extern int match_basename(const char *, int,
-                         const char *, int, int, unsigned);
- extern int match_pathname(const char *, int,
-                         const char *, int,
-                         const char *, int, int, unsigned);
- extern struct exclude *last_exclude_matching(struct dir_struct *dir,
-                                            struct index_state *istate,
-                                            const char *name, int *dtype);
- extern int is_excluded(struct dir_struct *dir,
-                      struct index_state *istate,
-                      const char *name, int *dtype);
- extern struct exclude_list *add_exclude_list(struct dir_struct *dir,
-                                            int group_type, const char *src);
- extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
-                                         struct exclude_list *el, struct  index_state *istate);
- extern void add_excludes_from_file(struct dir_struct *, const char *fname);
- extern int add_excludes_from_blob_to_list(struct object_id *oid,
-                                         const char *base, int baselen,
-                                         struct exclude_list *el);
- extern void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
- extern void add_exclude(const char *string, const char *base,
-                       int baselen, struct exclude_list *el, int srcpos);
- extern void clear_exclude_list(struct exclude_list *el);
- extern void clear_directory(struct dir_struct *dir);
+ int match_basename(const char *, int,
+                  const char *, int, int, unsigned);
+ int match_pathname(const char *, int,
+                  const char *, int,
+                  const char *, int, int, unsigned);
+ struct exclude *last_exclude_matching(struct dir_struct *dir,
+                                     struct index_state *istate,
+                                     const char *name, int *dtype);
+ int is_excluded(struct dir_struct *dir,
+               struct index_state *istate,
+               const char *name, int *dtype);
+ struct exclude_list *add_exclude_list(struct dir_struct *dir,
+                                     int group_type, const char *src);
+ int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
+                                  struct exclude_list *el, struct  index_state *istate);
+ void add_excludes_from_file(struct dir_struct *, const char *fname);
+ int add_excludes_from_blob_to_list(struct object_id *oid,
+                                  const char *base, int baselen,
+                                  struct exclude_list *el);
+ void parse_exclude_pattern(const char **string, int *patternlen, unsigned *flags, int *nowildcardlen);
+ void add_exclude(const char *string, const char *base,
+                int baselen, struct exclude_list *el, int srcpos);
+ void clear_exclude_list(struct exclude_list *el);
+ void clear_directory(struct dir_struct *dir);
 +
 +int repo_file_exists(struct repository *repo, const char *path);
  int file_exists(const char *);
  
extern int is_inside_dir(const char *dir);
extern int dir_inside_of(const char *subdir, const char *dir);
+ int is_inside_dir(const char *dir);
+ int dir_inside_of(const char *subdir, const char *dir);
  
  static inline int is_dot_or_dotdot(const char *name)
  {
                 (name[1] == '.' && name[2] == '\0')));
  }
  
extern int is_empty_dir(const char *dir);
+ int is_empty_dir(const char *dir);
  
extern void setup_standard_excludes(struct dir_struct *dir);
+ void setup_standard_excludes(struct dir_struct *dir);
  
  
  /* Constants for remove_dir_recursively: */
   * This function uses path as temporary scratch space, but restores it
   * before returning.
   */
extern int remove_dir_recursively(struct strbuf *path, int flag);
+ int remove_dir_recursively(struct strbuf *path, int flag);
  
  /* tries to remove the path with empty directories along it, ignores ENOENT */
extern int remove_path(const char *path);
+ int remove_path(const char *path);
  
extern int fspathcmp(const char *a, const char *b);
extern int fspathncmp(const char *a, const char *b, size_t count);
+ int fspathcmp(const char *a, const char *b);
+ int fspathncmp(const char *a, const char *b, size_t count);
  
  /*
   * The prefix part of pattern must not contains wildcards.
   */
  struct pathspec_item;
extern int git_fnmatch(const struct pathspec_item *item,
-                      const char *pattern, const char *string,
-                      int prefix);
+ int git_fnmatch(const struct pathspec_item *item,
+               const char *pattern, const char *string,
+               int prefix);
  
extern int submodule_path_match(const struct index_state *istate,
-                               const struct pathspec *ps,
-                               const char *submodule_name,
-                               char *seen);
+ int submodule_path_match(const struct index_state *istate,
+                        const struct pathspec *ps,
+                        const char *submodule_name,
+                        char *seen);
  
  static inline int ce_path_match(const struct index_state *istate,
                                const struct cache_entry *ce,
@@@ -374,10 -372,10 +374,10 @@@ void remove_untracked_cache(struct inde
   * When `recurse_into_nested` is set, recurse into any nested submodules,
   * connecting them as well.
   */
extern void connect_work_tree_and_git_dir(const char *work_tree,
-                                         const char *git_dir,
-                                         int recurse_into_nested);
extern void relocate_gitdir(const char *path,
-                           const char *old_git_dir,
-                           const char *new_git_dir);
+ void connect_work_tree_and_git_dir(const char *work_tree,
+                                  const char *git_dir,
+                                  int recurse_into_nested);
+ void relocate_gitdir(const char *path,
+                    const char *old_git_dir,
+                    const char *new_git_dir);
  #endif
diff --combined git-compat-util.h
index 4386b3e1c874b587d1bbc0e99394d6c9c016830e,eb3de5372f68ac40f3298fd8b46e0ea473951dff..fd3460108b4f41637def60e8a7232bbaaf075f5c
  #include "compat/win32/path-utils.h"
  #include "compat/mingw.h"
  #elif defined(_MSC_VER)
 +#include "compat/win32/path-utils.h"
  #include "compat/msvc.h"
  #else
  #include <sys/utsname.h>
@@@ -250,7 -249,7 +250,7 @@@ typedef unsigned long uintptr_t
  
  #ifdef MKDIR_WO_TRAILING_SLASH
  #define mkdir(a,b) compat_mkdir_wo_trailing_slash((a),(b))
extern int compat_mkdir_wo_trailing_slash(const char*, mode_t);
+ int compat_mkdir_wo_trailing_slash(const char*, mode_t);
  #endif
  
  #ifdef NO_STRUCT_ITIMERVAL
@@@ -268,9 -267,9 +268,9 @@@ struct itimerval 
  #include <libgen.h>
  #else
  #define basename gitbasename
extern char *gitbasename(char *);
+ char *gitbasename(char *);
  #define dirname gitdirname
extern char *gitdirname(char *);
+ char *gitdirname(char *);
  #endif
  
  #ifndef NO_ICONV
@@@ -447,15 -446,15 +447,15 @@@ static inline char *git_find_last_dir_s
  struct strbuf;
  
  /* General helper functions */
extern void vreportf(const char *prefix, const char *err, va_list params);
extern NORETURN void usage(const char *err);
extern NORETURN void usagef(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
extern void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ void vreportf(const char *prefix, const char *err, va_list params);
+ NORETURN void usage(const char *err);
+ NORETURN void usagef(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
+ void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
  
  #ifndef NO_OPENSSL
  #ifdef APPLE_COMMON_CRYPTO
@@@ -483,15 -482,15 +483,15 @@@ static inline int const_error(void
  #define error_errno(...) (error_errno(__VA_ARGS__), const_error())
  #endif
  
extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
extern void set_error_routine(void (*routine)(const char *err, va_list params));
+ void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
+ void set_error_routine(void (*routine)(const char *err, va_list params));
  extern void (*get_error_routine(void))(const char *err, va_list params);
extern void set_warn_routine(void (*routine)(const char *warn, va_list params));
+ void set_warn_routine(void (*routine)(const char *warn, va_list params));
  extern void (*get_warn_routine(void))(const char *warn, va_list params);
extern void set_die_is_recursing_routine(int (*routine)(void));
+ void set_die_is_recursing_routine(int (*routine)(void));
  
extern int starts_with(const char *str, const char *prefix);
extern int istarts_with(const char *str, const char *prefix);
+ int starts_with(const char *str, const char *prefix);
+ int istarts_with(const char *str, const char *prefix);
  
  /*
   * If the string "str" begins with the string found in "prefix", return 1.
@@@ -614,8 -613,8 +614,8 @@@ static inline int ends_with(const char 
  
  #define mmap git_mmap
  #define munmap git_munmap
extern void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
extern int git_munmap(void *start, size_t length);
+ void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
+ int git_munmap(void *start, size_t length);
  
  #else /* NO_MMAP || USE_WIN32_MMAP */
  
  #undef stat
  #endif
  #define stat(path, buf) git_stat(path, buf)
extern int git_stat(const char *, struct stat *);
+ int git_stat(const char *, struct stat *);
  #ifdef fstat
  #undef fstat
  #endif
  #define fstat(fd, buf) git_fstat(fd, buf)
extern int git_fstat(int, struct stat *);
+ int git_fstat(int, struct stat *);
  #ifdef lstat
  #undef lstat
  #endif
  #define lstat(path, buf) git_lstat(path, buf)
extern int git_lstat(const char *, struct stat *);
+ int git_lstat(const char *, struct stat *);
  #endif
  
  #define DEFAULT_PACKED_GIT_LIMIT \
  
  #ifdef NO_PREAD
  #define pread git_pread
extern ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);
+ ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);
  #endif
  /*
   * Forward decl that will remind us if its twin in cache.h changes.
   * This function is used in compat/pread.c.  But we can't include
   * cache.h there.
   */
extern ssize_t read_in_full(int fd, void *buf, size_t count);
+ ssize_t read_in_full(int fd, void *buf, size_t count);
  
  #ifdef NO_SETENV
  #define setenv gitsetenv
extern int gitsetenv(const char *, const char *, int);
+ int gitsetenv(const char *, const char *, int);
  #endif
  
  #ifdef NO_MKDTEMP
  #define mkdtemp gitmkdtemp
extern char *gitmkdtemp(char *);
+ char *gitmkdtemp(char *);
  #endif
  
  #ifdef NO_UNSETENV
  #define unsetenv gitunsetenv
extern void gitunsetenv(const char *);
+ void gitunsetenv(const char *);
  #endif
  
  #ifdef NO_STRCASESTR
  #define strcasestr gitstrcasestr
extern char *gitstrcasestr(const char *haystack, const char *needle);
+ char *gitstrcasestr(const char *haystack, const char *needle);
  #endif
  
  #ifdef NO_STRLCPY
  #define strlcpy gitstrlcpy
extern size_t gitstrlcpy(char *, const char *, size_t);
+ size_t gitstrlcpy(char *, const char *, size_t);
  #endif
  
  #ifdef NO_STRTOUMAX
  #define strtoumax gitstrtoumax
extern uintmax_t gitstrtoumax(const char *, char **, int);
+ uintmax_t gitstrtoumax(const char *, char **, int);
  #define strtoimax gitstrtoimax
extern intmax_t gitstrtoimax(const char *, char **, int);
+ intmax_t gitstrtoimax(const char *, char **, int);
  #endif
  
  #ifdef NO_HSTRERROR
  #define hstrerror githstrerror
extern const char *githstrerror(int herror);
+ const char *githstrerror(int herror);
  #endif
  
  #ifdef NO_MEMMEM
@@@ -762,7 -761,7 +762,7 @@@ char *gitstrdup(const char *s)
  #  endif
  #  define fopen(a,b) git_fopen(a,b)
  # endif
extern FILE *git_fopen(const char*, const char*);
+ FILE *git_fopen(const char*, const char*);
  #endif
  
  #ifdef SNPRINTF_RETURNS_BOGUS
  #undef snprintf
  #endif
  #define snprintf git_snprintf
extern int git_snprintf(char *str, size_t maxsize,
-                       const char *format, ...);
+ int git_snprintf(char *str, size_t maxsize,
+                const char *format, ...);
  #ifdef vsnprintf
  #undef vsnprintf
  #endif
  #define vsnprintf git_vsnprintf
extern int git_vsnprintf(char *str, size_t maxsize,
-                        const char *format, va_list ap);
+ int git_vsnprintf(char *str, size_t maxsize,
+                 const char *format, va_list ap);
  #endif
  
  #ifdef __GLIBC_PREREQ
@@@ -806,11 -805,11 +806,11 @@@ const char *inet_ntop(int af, const voi
  
  #ifdef NO_PTHREADS
  #define atexit git_atexit
extern int git_atexit(void (*handler)(void));
+ int git_atexit(void (*handler)(void));
  #endif
  
  typedef void (*try_to_free_t)(size_t);
extern try_to_free_t set_try_to_free_routine(try_to_free_t);
+ try_to_free_t set_try_to_free_routine(try_to_free_t);
  
  static inline size_t st_add(size_t a, size_t b)
  {
@@@ -846,28 -845,28 +846,28 @@@ static inline size_t st_sub(size_t a, s
  # define xalloca(size)      (xmalloc(size))
  # define xalloca_free(p)    (free(p))
  #endif
extern char *xstrdup(const char *str);
extern void *xmalloc(size_t size);
extern void *xmallocz(size_t size);
extern void *xmallocz_gently(size_t size);
extern void *xmemdupz(const void *data, size_t len);
extern char *xstrndup(const char *str, size_t len);
extern void *xrealloc(void *ptr, size_t size);
extern void *xcalloc(size_t nmemb, size_t size);
extern void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
extern void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset);
extern int xopen(const char *path, int flags, ...);
extern ssize_t xread(int fd, void *buf, size_t len);
extern ssize_t xwrite(int fd, const void *buf, size_t len);
extern ssize_t xpread(int fd, void *buf, size_t len, off_t offset);
extern int xdup(int fd);
extern FILE *xfopen(const char *path, const char *mode);
extern FILE *xfdopen(int fd, const char *mode);
extern int xmkstemp(char *temp_filename);
extern int xmkstemp_mode(char *temp_filename, int mode);
extern char *xgetcwd(void);
extern FILE *fopen_for_writing(const char *path);
extern FILE *fopen_or_warn(const char *path, const char *mode);
+ char *xstrdup(const char *str);
+ void *xmalloc(size_t size);
+ void *xmallocz(size_t size);
+ void *xmallocz_gently(size_t size);
+ void *xmemdupz(const void *data, size_t len);
+ char *xstrndup(const char *str, size_t len);
+ void *xrealloc(void *ptr, size_t size);
+ void *xcalloc(size_t nmemb, size_t size);
+ void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
+ void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset);
+ int xopen(const char *path, int flags, ...);
+ ssize_t xread(int fd, void *buf, size_t len);
+ ssize_t xwrite(int fd, const void *buf, size_t len);
+ ssize_t xpread(int fd, void *buf, size_t len, off_t offset);
+ int xdup(int fd);
+ FILE *xfopen(const char *path, const char *mode);
+ FILE *xfdopen(int fd, const char *mode);
+ int xmkstemp(char *temp_filename);
+ int xmkstemp_mode(char *temp_filename, int mode);
+ char *xgetcwd(void);
+ FILE *fopen_for_writing(const char *path);
+ FILE *fopen_or_warn(const char *path, const char *mode);
  
  /*
   * FREE_AND_NULL(ptr) is like free(ptr) followed by ptr = NULL. Note
@@@ -967,13 -966,13 +967,13 @@@ static inline size_t xsize_t(off_t len
  }
  
  __attribute__((format (printf, 3, 4)))
extern int xsnprintf(char *dst, size_t max, const char *fmt, ...);
+ int xsnprintf(char *dst, size_t max, const char *fmt, ...);
  
  #ifndef HOST_NAME_MAX
  #define HOST_NAME_MAX 256
  #endif
  
extern int xgethostname(char *buf, size_t len);
+ int xgethostname(char *buf, size_t len);
  
  /* in ctype.c, for kwset users */
  extern const unsigned char tolower_trans_tbl[256];
@@@ -1258,7 -1257,7 +1258,7 @@@ static inline int is_missing_file_error
        return (errno_ == ENOENT || errno_ == ENOTDIR);
  }
  
extern int cmd_main(int, const char **);
+ int cmd_main(int, const char **);
  
  /*
   * Intercept all calls to exit() and route them to trace2 to
@@@ -1281,7 -1280,7 +1281,7 @@@ int trace2_cmd_exit_fl(const char *file
   * an annotation, and does nothing in non-leak-checking builds.
   */
  #ifdef SUPPRESS_ANNOTATED_LEAKS
extern void unleak_memory(const void *ptr, size_t len);
+ void unleak_memory(const void *ptr, size_t len);
  #define UNLEAK(var) unleak_memory(&(var), sizeof(var))
  #else
  #define UNLEAK(var) do {} while (0)
diff --combined http.h
index ddfe52f0232150e9506577ade34dfeaab61fc3ca,c197e4ff79476dc25d6fba6b3eb482f57c909c7c..b429f1cf042bbb61e97e41cd1aacb012c4db834e
--- 1/http.h
--- 2/http.h
+++ b/http.h
@@@ -75,18 -75,18 +75,18 @@@ struct buffer 
  };
  
  /* Curl request read/write callbacks */
extern size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
extern size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
extern size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
+ size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
+ size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
+ size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
  #ifndef NO_CURL_IOCTL
extern curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp);
+ curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp);
  #endif
  
  /* Slot lifecycle functions */
extern struct active_request_slot *get_active_slot(void);
extern int start_active_slot(struct active_request_slot *slot);
extern void run_active_slot(struct active_request_slot *slot);
extern void finish_all_active_slots(void);
+ struct active_request_slot *get_active_slot(void);
+ int start_active_slot(struct active_request_slot *slot);
+ void run_active_slot(struct active_request_slot *slot);
+ void finish_all_active_slots(void);
  
  /*
   * This will run one slot to completion in a blocking manner, similar to how
@@@ -98,15 -98,15 +98,15 @@@ int run_one_slot(struct active_request_
                 struct slot_results *results);
  
  #ifdef USE_CURL_MULTI
extern void fill_active_slots(void);
extern void add_fill_function(void *data, int (*fill)(void *));
extern void step_active_slots(void);
+ void fill_active_slots(void);
+ void add_fill_function(void *data, int (*fill)(void *));
+ void step_active_slots(void);
  #endif
  
extern void http_init(struct remote *remote, const char *url,
-                     int proactive_auth);
extern void http_cleanup(void);
extern struct curl_slist *http_copy_default_headers(void);
+ void http_init(struct remote *remote, const char *url,
+              int proactive_auth);
+ void http_cleanup(void);
+ struct curl_slist *http_copy_default_headers(void);
  
  extern long int git_curl_ipresolve;
  extern int active_requests;
@@@ -146,11 -146,11 +146,11 @@@ void normalize_curl_result(CURLcode *re
                           size_t errorlen);
  
  /* Helpers for modifying and creating URLs */
extern void append_remote_object_url(struct strbuf *buf, const char *url,
-                                    const char *hex,
-                                    int only_two_digit_prefix);
extern char *get_remote_object_url(const char *url, const char *hex,
-                                  int only_two_digit_prefix);
+ void append_remote_object_url(struct strbuf *buf, const char *url,
+                             const char *hex,
+                             int only_two_digit_prefix);
+ char *get_remote_object_url(const char *url, const char *hex,
+                           int only_two_digit_prefix);
  
  /* Options for http_get_*() */
  struct http_get_options {
   */
  int http_get_strbuf(const char *url, struct strbuf *result, struct http_get_options *options);
  
extern int http_fetch_ref(const char *base, struct ref *ref);
+ int http_fetch_ref(const char *base, struct ref *ref);
  
  /* Helpers for fetching packs */
extern int http_get_info_packs(const char *base_url,
-       struct packed_git **packs_head);
+ int http_get_info_packs(const char *base_url,
+                       struct packed_git **packs_head);
  
  struct http_pack_request {
        char *url;
        struct active_request_slot *slot;
  };
  
extern struct http_pack_request *new_http_pack_request(
+ struct http_pack_request *new_http_pack_request(
        struct packed_git *target, const char *base_url);
extern int finish_http_pack_request(struct http_pack_request *preq);
extern void release_http_pack_request(struct http_pack_request *preq);
+ int finish_http_pack_request(struct http_pack_request *preq);
+ void release_http_pack_request(struct http_pack_request *preq);
  
  /* Helpers for fetching object */
  struct http_object_request {
        long http_code;
        struct object_id oid;
        struct object_id real_oid;
 -      git_SHA_CTX c;
 +      git_hash_ctx c;
        git_zstream stream;
        int zret;
        int rename;
        struct active_request_slot *slot;
  };
  
extern struct http_object_request *new_http_object_request(
+ struct http_object_request *new_http_object_request(
        const char *base_url, const struct object_id *oid);
extern void process_http_object_request(struct http_object_request *freq);
extern int finish_http_object_request(struct http_object_request *freq);
extern void abort_http_object_request(struct http_object_request *freq);
extern void release_http_object_request(struct http_object_request *freq);
+ void process_http_object_request(struct http_object_request *freq);
+ int finish_http_object_request(struct http_object_request *freq);
+ void abort_http_object_request(struct http_object_request *freq);
+ void release_http_object_request(struct http_object_request *freq);
  
  /* setup routine for curl_easy_setopt CURLOPT_DEBUGFUNCTION */
  void setup_curl_trace(CURL *handle);
diff --combined khash.h
index a09163b3e3beef8fe90f85003aae974411f6998a,642c0e6e0ce67c735e8b6e354becd087c3c9e08e..af747a683fed88d9c69c5e2571150adc89cb886e
+++ b/khash.h
@@@ -69,14 -69,14 +69,14 @@@ static const double __ac_HASH_UPPER = 0
                khval_t *vals; \
        } kh_##name##_t;
  
- #define __KHASH_PROTOTYPES(name, khkey_t, khval_t)                                            \
-       extern kh_##name##_t *kh_init_##name(void);                                                     \
-       extern void kh_destroy_##name(kh_##name##_t *h);                                        \
-       extern void kh_clear_##name(kh_##name##_t *h);                                          \
-       extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key);      \
-       extern int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
-       extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \
-       extern void kh_del_##name(kh_##name##_t *h, khint_t x);
+ #define __KHASH_PROTOTYPES(name, khkey_t, khval_t)                            \
+       kh_##name##_t *kh_init_##name(void);                                            \
+       void kh_destroy_##name(kh_##name##_t *h);                                       \
+       void kh_clear_##name(kh_##name##_t *h);                                         \
+       khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \
+       int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
+       khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \
+       void kh_del_##name(kh_##name##_t *h, khint_t x);
  
  #define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
        SCOPE kh_##name##_t *kh_init_##name(void) {                                                     \
@@@ -332,22 -332,4 +332,22 @@@ typedef kh_sha1_t khash_sha1
  KHASH_INIT(sha1_pos, const unsigned char *, int, 1, sha1hash, __kh_oid_cmp)
  typedef kh_sha1_pos_t khash_sha1_pos;
  
 +static inline unsigned int oid_hash(struct object_id oid)
 +{
 +      return sha1hash(oid.hash);
 +}
 +
 +static inline int oid_equal(struct object_id a, struct object_id b)
 +{
 +      return oideq(&a, &b);
 +}
 +
 +KHASH_INIT(oid, struct object_id, int, 0, oid_hash, oid_equal)
 +
 +KHASH_INIT(oid_map, struct object_id, void *, 1, oid_hash, oid_equal)
 +typedef kh_oid_t khash_oid_map;
 +
 +KHASH_INIT(oid_pos, struct object_id, int, 1, oid_hash, oid_equal)
 +typedef kh_oid_pos_t khash_oid_pos;
 +
  #endif /* __AC_KHASH_H */
diff --combined object-store.h
index b086f5ecdb82a105b9b3381de9893cb72bc5871c,4a6ca2fd3ac387e4555653af33162858fabad0ae..46a1da79cc8390de89114c127c706fb020d7c82c
@@@ -77,7 -77,7 +77,7 @@@ struct packed_git 
                 freshened:1,
                 do_not_close:1,
                 pack_promisor:1;
 -      unsigned char sha1[20];
 +      unsigned char hash[GIT_MAX_RAWSZ];
        struct revindex_entry *revindex;
        /* something like ".git/objects/pack/xxxxx.pack" */
        char pack_name[FLEX_ARRAY]; /* more */
@@@ -162,10 -162,10 +162,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,
@@@ -227,9 -227,9 +227,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_QUICK 8
  /* Do not check loose object */
  #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.
 + */
 +#define OBJECT_INFO_FOR_PREFETCH (32 + OBJECT_INFO_QUICK)
  
  int oid_object_info_extended(struct repository *r,
                             const struct object_id *,
diff --combined refs.h
index 8f9cbf8a931611b203b6fa45eefdf9c5fa971312,21ca50d210a025a7ea04fcbe05ab117ad2a5b296..2727405b61c4e26538c3e76b528df37078337376
--- 1/refs.h
--- 2/refs.h
+++ b/refs.h
@@@ -111,7 -111,7 +111,7 @@@ int should_autocreate_reflog(const cha
  
  int is_branch(const char *refname);
  
extern int refs_init_db(struct strbuf *err);
+ int refs_init_db(struct strbuf *err);
  
  /*
   * If refname is a non-symbolic reference that refers to a tag object,
@@@ -148,9 -148,7 +148,9 @@@ int refname_match(const char *abbrev_na
  struct argv_array;
  void expand_ref_prefix(struct argv_array *prefixes, const char *prefix);
  
 -int expand_ref(const char *str, int len, struct object_id *oid, char **ref);
 +int expand_ref(struct repository *r, const char *str, int len, struct object_id *oid, char **ref);
 +int repo_dwim_ref(struct repository *r, const char *str, int len, struct object_id *oid, char **ref);
 +int repo_dwim_log(struct repository *r, const char *str, int len, struct object_id *oid, char **ref);
  int dwim_ref(const char *str, int len, struct object_id *oid, char **ref);
  int dwim_log(const char *str, int len, struct object_id *oid, char **ref);
  
@@@ -388,8 -386,7 +388,8 @@@ int refs_create_reflog(struct ref_stor
  int safe_create_reflog(const char *refname, int force_create, struct strbuf *err);
  
  /** Reads log for the value of ref during at_time. **/
 -int read_ref_at(const char *refname, unsigned int flags,
 +int read_ref_at(struct ref_store *refs,
 +              const char *refname, unsigned int flags,
                timestamp_t at_time, int cnt,
                struct object_id *oid, char **msg,
                timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt);
@@@ -465,8 -462,6 +465,8 @@@ int check_refname_format(const char *re
  
  const char *prettify_refname(const char *refname);
  
 +char *refs_shorten_unambiguous_ref(struct ref_store *refs,
 +                                 const char *refname, int strict);
  char *shorten_unambiguous_ref(const char *refname, int strict);
  
  /** rename ref, return 0 on success **/
diff --combined remote.h
index 6a1795947e6f3ff3265a406b2bc43c87842a0833,62bda7ef03d3962e5bdf534052152a4a91b2cfa1..83e885672ba968309c17341b2067f6863acfaaf9
+++ b/remote.h
@@@ -119,38 -119,36 +119,38 @@@ struct ref 
  #define REF_HEADS     (1u << 1)
  #define REF_TAGS      (1u << 2)
  
extern struct ref *find_ref_by_name(const struct ref *list, const char *name);
+ struct ref *find_ref_by_name(const struct ref *list, const char *name);
  
  struct ref *alloc_ref(const char *name);
  struct ref *copy_ref(const struct ref *ref);
  struct ref *copy_ref_list(const struct ref *ref);
  void sort_ref_list(struct ref **, int (*cmp)(const void *, const void *));
extern int count_refspec_match(const char *, struct ref *refs, struct ref **matched_ref);
+ int count_refspec_match(const char *, struct ref *refs, struct ref **matched_ref);
  int ref_compare_name(const void *, const void *);
  
  int check_ref_type(const struct ref *ref, int flags);
  
  /*
 - * Frees the entire list and peers of elements.
 + * Free a single ref and its peer, or an entire list of refs and their peers,
 + * respectively.
   */
 +void free_one_ref(struct ref *ref);
  void free_refs(struct ref *ref);
  
  struct oid_array;
  struct packet_reader;
  struct argv_array;
  struct string_list;
extern struct ref **get_remote_heads(struct packet_reader *reader,
-                                    struct ref **list, unsigned int flags,
-                                    struct oid_array *extra_have,
-                                    struct oid_array *shallow_points);
+ struct ref **get_remote_heads(struct packet_reader *reader,
+                             struct ref **list, unsigned int flags,
+                             struct oid_array *extra_have,
+                             struct oid_array *shallow_points);
  
  /* Used for protocol v2 in order to retrieve refs from a remote */
extern struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
-                                   struct ref **list, int for_push,
-                                   const struct argv_array *ref_prefixes,
-                                   const struct string_list *server_options);
+ struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
+                            struct ref **list, int for_push,
+                            const struct argv_array *ref_prefixes,
+                            const struct string_list *server_options);
  
  int resolve_remote_symref(struct ref *ref, struct ref *list);
  
@@@ -255,8 -253,7 +255,8 @@@ enum ahead_behind_flags 
  
  /* Reporting of tracking info */
  int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
 -                     const char **upstream_name, enum ahead_behind_flags abf);
 +                     const char **upstream_name, int for_push,
 +                     enum ahead_behind_flags abf);
  int format_tracking_info(struct branch *branch, struct strbuf *sb,
                         enum ahead_behind_flags abf);
  
@@@ -290,9 -287,9 +290,9 @@@ struct push_cas_option 
        int alloc;
  };
  
extern int parseopt_push_cas_option(const struct option *, const char *arg, int unset);
+ int parseopt_push_cas_option(const struct option *, const char *arg, int unset);
  
extern int is_empty_cas(const struct push_cas_option *);
+ int is_empty_cas(const struct push_cas_option *);
  void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *);
  
  #endif
diff --combined tree-walk.h
index 3aa381b6a3dd20e4d98f781dde6bcf27bc8b055b,550b8dd9a49911741de12f62bc12a4c6611ceaf3..161e2400f443460fc6606e97d4e356c1f0b478ed
@@@ -16,7 -16,7 +16,7 @@@ struct tree_desc 
        unsigned int size;
  };
  
 -static inline const struct object_id *tree_entry_extract(struct tree_desc *desc, const char **pathp, unsigned int *modep)
 +static inline const struct object_id *tree_entry_extract(struct tree_desc *desc, const char **pathp, unsigned short *modep)
  {
        *pathp = desc->entry.path;
        *modep = desc->entry.mode;
@@@ -51,7 -51,7 +51,7 @@@ struct traverse_info
  typedef int (*traverse_callback_t)(int n, unsigned long mask, unsigned long dirmask, struct name_entry *entry, struct traverse_info *);
  int traverse_trees(struct index_state *istate, int n, struct tree_desc *t, struct traverse_info *info);
  
 -enum get_oid_result get_tree_entry_follow_symlinks(struct object_id *tree_oid, const char *name, struct object_id *result, struct strbuf *result_path, unsigned *mode);
 +enum get_oid_result get_tree_entry_follow_symlinks(struct object_id *tree_oid, const char *name, struct object_id *result, struct strbuf *result_path, unsigned short *mode);
  
  struct traverse_info {
        const char *traverse_path;
@@@ -66,9 -66,9 +66,9 @@@
        int show_all_errors;
  };
  
 -int get_tree_entry(const struct object_id *, const char *, struct object_id *, unsigned *);
 +int get_tree_entry(const struct object_id *, const char *, struct object_id *, unsigned short *);
extern char *make_traverse_path(char *path, const struct traverse_info *info, const struct name_entry *n);
extern void setup_traverse_info(struct traverse_info *info, const char *base);
+ char *make_traverse_path(char *path, const struct traverse_info *info, const struct name_entry *n);
+ void setup_traverse_info(struct traverse_info *info, const char *base);
  
  static inline int traverse_path_len(const struct traverse_info *info, const struct name_entry *n)
  {