From: Junio C Hamano Date: Mon, 13 May 2019 14:50:32 +0000 (+0900) Subject: Merge branch 'dl/no-extern-in-func-decl' X-Git-Tag: v2.22.0-rc0~10 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/4aeeef377347934d6f459e27f7d793de4ce384bb?ds=inline;hp=-c Merge branch 'dl/no-extern-in-func-decl' 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 --- 4aeeef377347934d6f459e27f7d793de4ce384bb diff --combined advice.h index cb5d361614,4a2052eecf..e50f02cdfe --- a/advice.h +++ 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 dd022a6b46,a7bdeea2c8..e60e3dd31c --- a/archive.h +++ 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 2a285eb027,d6c4cc63f5..d62f80fa74 --- a/blame.h +++ 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 ac552ff0d2,a6d3c58fdd..ec7e0954c4 --- a/builtin.h +++ 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, @@@ -110,8 -110,8 +110,8 @@@ 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 @@@ -123,131 -123,131 +123,131 @@@ * 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 67cc2e1806,9f15fee85f..fa8ede9a2d --- a/cache.h +++ 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; @@@ -352,10 -350,10 +352,10 @@@ }; /* 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 @@@ -554,29 -552,29 +554,29 @@@ 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 @@@ -588,7 -586,7 +588,7 @@@ * 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 @@@ -598,17 -596,17 +598,17 @@@ #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 @@@ -617,12 -615,12 +617,12 @@@ * 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 @@@ -634,23 -632,23 +634,23 @@@ * 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) @@@ -674,14 -672,14 +674,14 @@@ /* 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) @@@ -706,11 -704,11 +706,11 @@@ * 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, @@@ -719,15 -717,15 +719,15 @@@ * 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. @@@ -746,7 -744,7 +746,7 @@@ * 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 */ @@@ -755,14 -753,14 +755,14 @@@ #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 @@@ -777,14 -775,14 +777,14 @@@ * 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 @@@ -798,22 -796,22 +798,22 @@@ #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 @@@ -821,11 -819,11 +821,11 @@@ * 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 */ @@@ -834,10 -832,10 +834,10 @@@ #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 @@@ -1047,10 -1045,8 +1047,10 @@@ * 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 @@@ -1418,15 -1401,15 +1418,15 @@@ * 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 @@@ -1485,30 -1468,24 +1485,30 @@@ #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; @@@ -1595,7 -1568,7 +1595,7 @@@ * 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; @@@ -1628,14 -1601,14 +1628,14 @@@ #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 @@@ -1694,10 -1667,10 +1694,10 @@@ 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 @@@ -1706,8 -1679,8 +1706,8 @@@ */ 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) { @@@ -1741,7 -1714,7 +1741,7 @@@ * 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. @@@ -1751,16 -1724,16 +1751,16 @@@ * 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 cc19cb5314,18f05c64d8..f5295ca7f3 --- a/commit.h +++ 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, @@@ -196,7 -189,7 +196,7 @@@ #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; @@@ -283,21 -272,21 +283,21 @@@ 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; @@@ -306,24 -295,24 +306,24 @@@ 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". @@@ -333,24 -322,24 +333,24 @@@ * 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 @@@ -359,9 -348,9 +359,9 @@@ */ 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 @@@ -370,7 -359,7 +370,7 @@@ * 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 36bb23a9d9,c275fe2284..f0ed464004 --- a/config.h +++ 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; @@@ -72,63 -68,62 +72,63 @@@ }; 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, @@@ -138,9 -133,9 +138,9 @@@ 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; @@@ -149,7 -144,7 +149,7 @@@ 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: @@@ -164,10 -159,10 +164,10 @@@ * 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; @@@ -270,8 -265,8 +270,8 @@@ 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 c23313b021,2e6fcba389..680079bbe3 --- a/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 @@@ -213,27 -213,27 +213,27 @@@ #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); @@@ -242,39 -242,37 +242,39 @@@ * 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) { @@@ -283,9 -281,9 +283,9 @@@ (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: */ @@@ -313,26 -311,26 +313,26 @@@ * 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 4386b3e1c8,eb3de5372f..fd3460108b --- a/git-compat-util.h +++ b/git-compat-util.h @@@ -200,7 -200,6 +200,7 @@@ #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 @@@ -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 #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 */ @@@ -669,17 -668,17 +669,17 @@@ #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 \ @@@ -687,50 -686,50 +687,50 @@@ #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 @@@ -770,14 -769,14 +770,14 @@@ #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 ddfe52f023,c197e4ff79..b429f1cf04 --- a/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 { @@@ -204,11 -204,11 +204,11 @@@ */ 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; @@@ -219,10 -219,10 +219,10 @@@ 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 { @@@ -234,19 -234,19 +234,19 @@@ 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 a09163b3e3,642c0e6e0c..af747a683f --- a/khash.h +++ 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 b086f5ecdb,4a6ca2fd3a..46a1da79cc --- a/object-store.h +++ b/object-store.h @@@ -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, @@@ -180,20 -180,20 +180,20 @@@ /* 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 */ @@@ -280,12 -280,6 +280,12 @@@ #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 8f9cbf8a93,21ca50d210..2727405b61 --- a/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 6a1795947e,62bda7ef03..83e885672b --- a/remote.h +++ 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 3aa381b6a3,550b8dd9a4..161e2400f4 --- a/tree-walk.h +++ b/tree-walk.h @@@ -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) {