Kill the_index part 4
cover Kill the_index part 4
This continues the journey of getting rid of the_index at least in library code. The focus of part 4 is diff code. Since 'struct repository *' is passed around more (and even more in part 5), I take this opportunity to remove some the_repository references too.
Besides some small conflicts on 'pu', like the previous part, it also breaks 'pu' because of API changes. The fix is trivial though, just prepend the_repository as the first argument for the broken function calls.
After this and ~20 more patches in part5, the_index is gone from library code.
Nguyễn Thái Ngọc Duy (21):
archive.c: remove implicit dependency the_repository read-cache.c: remove 'const' from index_has_changes() combine-diff.c: remove implicit dependency on the_index diff.c: remove the_index dependency in textconv() functions grep.c: remove implicit dependency on the_index diff.c: remove implicit dependency on the_index read-cache.c: remove implicit dependency on the_index diff-lib.c: remove implicit dependency on the_index ll-merge.c: remove implicit dependency on the_index merge-blobs.c: remove implicit dependency on the_index merge.c: remove implicit dependency on the_index patch-ids.c: remove implicit dependency on the_index sha1-file.c: remove implicit dependency on the_index rerere.c: remove implicit dependency on the_index userdiff.c: remove implicit dependency on the_index line-range.c: remove implicit dependency on the_index submodule.c: remove implicit dependency on the_index tree-diff.c: remove implicit dependency on the_index ws.c: remove implicit dependency on the_index wt-status.c: remove implicit dependency on the_index wt-status.c: remove implicit dependency the_repository
apply.c | 19 +-- archive-zip.c | 14 ++- archive.c | 2 +- blame.c | 27 +++-- builtin/am.c | 4 +- builtin/blame.c | 2 +- builtin/cat-file.c | 6 +- builtin/checkout.c | 3 +- builtin/commit.c | 4 +- builtin/diff.c | 2 +- builtin/difftool.c | 2 +- builtin/grep.c | 7 +- builtin/hash-object.c | 2 +- builtin/log.c | 9 +- builtin/merge-tree.c | 2 +- builtin/merge.c | 12 +- builtin/pull.c | 12 +- builtin/range-diff.c | 2 +- builtin/replace.c | 2 +- builtin/rerere.c | 6 +- builtin/reset.c | 1 + builtin/update-index.c | 2 +- cache.h | 14 ++- combine-diff.c | 32 ++--- diff-lib.c | 17 +-- diff-no-index.c | 9 +- diff.c | 259 +++++++++++++++++++++++------------------ diff.h | 19 ++- diffcore-break.c | 12 +- diffcore-delta.c | 12 +- diffcore-pickaxe.c | 8 +- diffcore-rename.c | 35 +++--- diffcore.h | 13 ++- grep.c | 34 +++--- grep.h | 10 +- line-log.c | 25 ++-- line-range.c | 22 ++-- line-range.h | 6 +- ll-merge.c | 17 +-- ll-merge.h | 5 +- merge-blobs.c | 16 ++- merge-blobs.h | 7 +- merge-recursive.c | 5 +- merge.c | 20 ++-- notes-merge.c | 9 +- patch-ids.c | 4 +- patch-ids.h | 3 +- read-cache.c | 33 +++--- ref-filter.c | 2 +- rerere.c | 121 ++++++++++--------- rerere.h | 9 +- revision.c | 8 +- sequencer.c | 16 +-- sha1-file.c | 50 ++++---- submodule.c | 28 +++-- submodule.h | 9 +- transport.c | 9 +- tree-diff.c | 2 +- userdiff.c | 5 +- userdiff.h | 3 +- ws.c | 5 +- wt-status.c | 88 ++++++++------ wt-status.h | 21 +++- 63 files changed, 682 insertions(+), 482 deletions(-)
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 1/21 archive.c: remove implicit dependency the_repository
--- archive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
archive.c +1 -1
@@ -391,7 +391,7 @@ static void parse_treeish_arg(const char **argv,if (get_oid (name, &oid))die ("Not a valid object name" ); - commit =lookup_commit_reference_gently (the_repository, &oid,1 ); + commit =lookup_commit_reference_gently (ar_args->repo, &oid,1 );if (commit) { commit_sha1 = commit->object.oid.hash; archive_time = commit->date;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 3/21 combine-diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- combine-diff.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
combine-diff.c +2 -1
@@ -1054,7 +1054,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,if (is_file) {struct strbuf buf =STRBUF_INIT ; -if (convert_to_git (&the_index, elem->path, result, len, &buf, global_conv_flags_eol)) { +if (convert_to_git (rev->diffopt.repo->index, + elem->path, result, len, &buf, global_conv_flags_eol)) {free (result); result =strbuf_detach (&buf, &len); result_size = len;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 4/21 diff.c: remove the_index dependency in textconv() functions
In reply to Nguyễn Thái Ngọc Duy--- blame.c | 7 ++++--- builtin/cat-file.c | 6 ++++-- builtin/log.c | 3 ++- combine-diff.c | 27 ++++++++++++++++----------- diff.c | 17 +++++++++-------- diff.h | 9 +++++++-- diffcore-pickaxe.c | 4 ++-- grep.c | 2 +- 8 files changed, 45 insertions(+), 30 deletions(-)
blame.c +4 -3
@@ -234,7 +234,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo,switch (st.st_mode &S_IFMT ) {case S_IFREG :if (opt->flags.allow_textconv && -textconv_object (read_from, mode, &null_oid,0 , &buf_ptr, &buf_len)) +textconv_object (repo, read_from, mode, &null_oid,0 , &buf_ptr, &buf_len))strbuf_attach (&buf, buf_ptr, buf_len, buf_len +1 );else if (strbuf_read_file (&buf, read_from, st.st_size) != st.st_size)die_errno ("cannot open or read '%s'" , read_from);
@@ -318,7 +318,8 @@ static void fill_origin_blob(struct diff_options *opt, (*num_read_blob)++;if (opt->flags.allow_textconv && -textconv_object (o->path, o->mode, &o->blob_oid,1 , &file->ptr, &file_size)) +textconv_object (opt->repo, o->path, o->mode, + &o->blob_oid,1 , &file->ptr, &file_size)) ;else file->ptr = read_object_file(&o->blob_oid, &type,
@@ -1859,7 +1860,7 @@ void setup_scoreboard(struct blame_scoreboard *sb,die (_ ("no such path %s in %s" ), path, final_commit_name);if (sb->revs->diffopt.flags.allow_textconv && -textconv_object (path, o->mode, &o->blob_oid,1 , (char **) &sb->final_buf, +textconv_object (sb->repo, path, o->mode, &o->blob_oid,1 , (char **) &sb->final_buf, &sb->final_buf_size)) ;else
builtin/cat-file.c +4 -2
@@ -113,7 +113,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,die ("git cat-file --textconv %s: <object> must be <sha1:path>" , obj_name); -if (textconv_object (path, obj_context.mode, &oid,1 , &buf, &size)) +if (textconv_object (the_repository, path, obj_context.mode, + &oid,1 , &buf, &size))break ;/* else fallthrough */
@@ -305,7 +306,8 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d oid_to_hex(oid), data->rest); }else if (opt->cmdmode =='c' ) {enum object_type type; -if (!textconv_object (data->rest,0100644 , oid, +if (!textconv_object (the_repository, + data->rest,0100644 , oid,1 , &contents, &size)) contents = read_object_file(oid, &type,
builtin/log.c +2 -1
@@ -507,7 +507,8 @@ static int show_blob_object(const struct object_id *oid, struct rev_info *rev, c &oidc, &obj_context))die (_ ("Not a valid object name %s" ), obj_name);if (!obj_context.path || - !textconv_object (obj_context.path, obj_context.mode, &oidc,1 , &buf, &size)) { + !textconv_object (the_repository, obj_context.path, + obj_context.mode, &oidc,1 , &buf, &size)) {free (obj_context.path);return stream_blob_to_fd (1 , oid,NULL ,0 ); }
combine-diff.c +16 -11
@@ -285,7 +285,8 @@ static struct lline *coalesce_lines(struct lline *base, int *lenbase,return base; } -static char *grab_blob (const struct object_id *oid,unsigned int mode, +static char *grab_blob (struct repository *repo, +const struct object_id *oid,unsigned int mode,unsigned long *size,struct userdiff_driver *textconv,const char *path) {
@@ -304,7 +305,7 @@ static char *grab_blob(const struct object_id *oid, unsigned int mode, }else if (textconv) {struct diff_filespec *df =alloc_filespec (path);fill_filespec (df, oid,1 , mode); - *size =fill_textconv (textconv, df, &blob); + *size =fill_textconv (repo, textconv, df, &blob);free_filespec (df); }else { blob =read_object_file (oid, &type, size);
@@ -389,7 +390,8 @@ static void consume_line(void *state_, char *line, unsigned long len) } } -static void combine_diff(const struct object_id *parent, unsigned int mode, +static void combine_diff(struct repository *repo, + const struct object_id *parent, unsigned int mode, mmfile_t *result_file, struct sline *sline, unsigned int cnt, int n, int num_parent, int result_deleted,
@@ -407,7 +409,7 @@ static void combine_diff(const struct object_id *parent, unsigned int mode,if (result_deleted)return ;/* result deleted */ - parent_file.ptr =grab_blob (parent, mode, &sz, textconv, path); + parent_file.ptr =grab_blob (repo, parent, mode, &sz, textconv, path); parent_file.size = sz;memset (&xpp,0 ,sizeof (xpp)); xpp.flags = flags;
@@ -993,7 +995,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,/* Read the result of merge first */ if (!working_tree_file) - result =grab_blob (&elem->oid, elem->mode, &result_size, + result =grab_blob (opt->repo, &elem->oid, elem->mode, &result_size, textconv, elem->path);else {/* Used by diff-tree to read from the working tree */
@@ -1016,15 +1018,16 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent, }else if (S_ISDIR (st.st_mode)) {struct object_id oid;if (resolve_gitlink_ref (elem->path,"HEAD" , &oid) <0 ) - result =grab_blob (&elem->oid, elem->mode, - &result_size,NULL ,NULL ); + result =grab_blob (opt->repo, &elem->oid, + elem->mode, &result_size, +NULL ,NULL );else - result =grab_blob (&oid, elem->mode, + result =grab_blob (opt->repo, &oid, elem->mode, &result_size,NULL ,NULL ); }else if (textconv) {struct diff_filespec *df =alloc_filespec (elem->path);fill_filespec (df, &null_oid,0 , st.st_mode); - result_size =fill_textconv (textconv, df, &result); + result_size =fill_textconv (opt->repo, textconv, df, &result);free_filespec (df); }else if (0 <= (fd =open (elem->path,O_RDONLY ))) {size_t len =xsize_t (st.st_size);
@@ -1090,7 +1093,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,for (i =0 ; !is_binary && i < num_parent; i++) {char *buf;unsigned long size; - buf =grab_blob (&elem->parent[i].oid, + buf =grab_blob (opt->repo, + &elem->parent[i].oid, elem->parent[i].mode, &size,NULL ,NULL );if (buffer_is_binary (buf, size))
@@ -1146,7 +1150,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent, } }if (i <= j) - combine_diff(&elem->parent[i].oid, + combine_diff(opt->repo, + &elem->parent[i].oid, elem->parent[i].mode, &result_file, sline, cnt, i, num_parent, result_deleted,
diff.c +9 -8
@@ -1700,8 +1700,8 @@ static void emit_rewrite_diff(const char *name_a,quote_two_c_style (&a_name, a_prefix, name_a,0 );quote_two_c_style (&b_name, b_prefix, name_b,0 ); - size_one =fill_textconv (textconv_one, one, &data_one); - size_two =fill_textconv (textconv_two, two, &data_two); + size_one =fill_textconv (o->repo, textconv_one, one, &data_one); + size_two =fill_textconv (o->repo, textconv_two, two, &data_two);memset (&ecbdata,0 ,sizeof (ecbdata)); ecbdata.color_diff =want_color (o->use_color);
@@ -3462,8 +3462,8 @@ static void builtin_diff(const char *name_a,strbuf_reset (&header); } - mf1.size =fill_textconv (textconv_one, one, &mf1.ptr); - mf2.size =fill_textconv (textconv_two, two, &mf2.ptr); + mf1.size =fill_textconv (o->repo, textconv_one, one, &mf1.ptr); + mf2.size =fill_textconv (o->repo, textconv_two, two, &mf2.ptr); pe =diff_funcname_pattern (one);if (!pe)
@@ -6337,11 +6337,11 @@ static char *run_textconv(struct repository *repo,return strbuf_detach (&buf, outsize); } -size_t fill_textconv (struct userdiff_driver *driver, +size_t fill_textconv (struct repository *repo, +struct userdiff_driver *driver,struct diff_filespec *df,char **outbuf) { -struct repository *repo = the_repository;size_t size;if (!driver) {
@@ -6386,7 +6386,8 @@ size_t fill_textconv(struct userdiff_driver *driver,return size; } -int textconv_object(const char *path, +int textconv_object(struct repository *repo, + const char *path, unsigned mode, const struct object_id *oid, int oid_valid,
@@ -6404,7 +6405,7 @@ int textconv_object(const char *path,return 0 ; } - *buf_size =fill_textconv (textconv, df, buf); + *buf_size =fill_textconv (repo, textconv, df, buf);free_filespec (df);return 1 ; }
diff.h +7 -2
@@ -442,7 +442,8 @@ int index_differs_from(const char *def, const struct diff_flags *flags,* struct. If it is non-NULL, then "outbuf" points to a newly allocated buffer * that should be freed by the caller. */ -size_t fill_textconv (struct userdiff_driver *driver, +size_t fill_textconv (struct repository *repo, +struct userdiff_driver *driver,struct diff_filespec *df,char **outbuf);
@@ -458,7 +459,11 @@ struct userdiff_driver *get_textconv(struct diff_filespec *one);* if the textconv driver exists. * Return 1 if the conversion succeeds, 0 otherwise. */ -int textconv_object (const char *path,unsigned mode,const struct object_id *oid,int oid_valid,char **buf,unsigned long *buf_size); +int textconv_object (struct repository *repo, +const char *path, +unsigned mode, +const struct object_id *oid,int oid_valid, +char **buf,unsigned long *buf_size);int parse_rename_score (const char **cp_p);
diffcore-pickaxe.c +2 -2
@@ -153,8 +153,8 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,if (textconv_one == textconv_two &&diff_unmodified_pair (p))return 0 ; - mf1.size =fill_textconv (textconv_one, p->one, &mf1.ptr); - mf2.size =fill_textconv (textconv_two, p->two, &mf2.ptr); + mf1.size =fill_textconv (o->repo, textconv_one, p->one, &mf1.ptr); + mf2.size =fill_textconv (o->repo, textconv_two, p->two, &mf2.ptr); ret = fn(DIFF_FILE_VALID(p->one) ? &mf1 : NULL, DIFF_FILE_VALID(p->two) ? &mf2 : NULL,
grep.c +1 -1
@@ -1741,7 +1741,7 @@ static int fill_textconv_grep(struct userdiff_driver *driver,* structure. */ grep_read_lock (); - size =fill_textconv (driver, df, &buf); + size =fill_textconv (the_repository, driver, df, &buf);grep_read_unlock ();free_filespec (df);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 2/21 read-cache.c: remove 'const' from index_has_changes()
In reply to Nguyễn Thái Ngọc DuyThis function calls do_diff_cache() which eventually needs to set this "istate" to unpack_options->src_index (*). This is an unfornate fact that unpack_trees() _will_ destroy src_index so we can't really pass a const index_state there. Just remove 'const'.
(*) Right now diff_cache() in diff-lib.c assigns the_index to
src_index. But the plan is to get rid of the_index, so it should be 'istate' from here that gets assigned to src_index.
--- builtin/reset.c | 1 + cache.h | 2 +- diff.c | 174 +++++++++++++++++++++++++++------------------- diff.h | 3 + diffcore-break.c | 12 ++-- diffcore-delta.c | 12 ++-- diffcore-rename.c | 35 ++++++---- diffcore.h | 13 ++-- line-log.c | 21 +++--- read-cache.c | 2 +- 10 files changed, 162 insertions(+), 113 deletions(-)
builtin/reset.c +1 -0
@@ -159,6 +159,7 @@ static int read_from_tree(const struct pathspec *pathspec, opt.format_callback = update_index_from_diff; opt.format_callback_data = &intent_to_add; opt.flags.override_submodule_config =1 ; + opt.repo = the_repository;if (do_diff_cache (tree_oid, &opt))return 1 ;
cache.h +1 -1
@@ -703,7 +703,7 @@ extern int unmerged_index(const struct index_state *);* provided, the space-separated list of files that differ will be appended * to it. */ -extern int index_has_changes (const struct index_state *istate, +extern int index_has_changes (struct index_state *istate,struct tree *tree,struct strbuf *sb);
diff.c +101 -73
495 lines not on this page · raw message
diff.h +3 -0
@@ -18,6 +18,7 @@ struct userdiff_driver;struct oid_array ;struct commit ;struct combine_diff_path ; +struct repository ;typedef int (*pathchange_fn_t )(struct diff_options *options,struct combine_diff_path *path);
@@ -220,6 +221,8 @@ struct diff_options {/* XDF_WHITESPACE_FLAGS regarding block detection are set at 2, 3, 4 */ #define COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE (1<<5)int color_moved_ws_handling; + +struct repository *repo; };void diff_emit_submodule_del (struct diff_options *o,const char *line);
diffcore-break.c +7 -5
@@ -5,7 +5,8 @@#include "diff.h" #include "diffcore.h" -static int should_break (struct diff_filespec *src, +static int should_break (struct repository *repo, +struct diff_filespec *src,struct diff_filespec *dst,int break_score,int *merge_score_p)
@@ -61,7 +62,8 @@ static int should_break(struct diff_filespec *src, !oidcmp(&src->oid, &dst->oid))return 0 ;/* they are the same */ -if (diff_populate_filespec (src,0 ) ||diff_populate_filespec (dst,0 )) +if (diff_populate_filespec (repo, src,0 ) || +diff_populate_filespec (repo, dst,0 ))return 0 ;/* error but caught downstream */ max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -71,7 +73,7 @@ static int should_break(struct diff_filespec *src,if (!src->size)return 0 ;/* we do not let empty files get renamed */ -if (diffcore_count_changes (src, dst, +if (diffcore_count_changes (repo, src, dst, &src->cnt_data, &dst->cnt_data, &src_copied, &literal_added))return 0 ;
@@ -114,7 +116,7 @@ static int should_break(struct diff_filespec *src,return 1 ; } -void diffcore_break (int break_score) +void diffcore_break (struct repository *repo,int break_score) {struct diff_queue_struct *q = &diff_queued_diff;struct diff_queue_struct outq;
@@ -178,7 +180,7 @@ void diffcore_break(int break_score) object_type(p->one->mode) == OBJ_BLOB && object_type(p->two->mode) == OBJ_BLOB && !strcmp(p->one->path, p->two->path)) { -if (should_break (p->one, p->two, +if (should_break (repo, p->one, p->two, break_score, &score)) {/* Split this into delete and create */ struct diff_filespec *null_one, *null_two;
diffcore-delta.c +7 -5
@@ -121,14 +121,15 @@ static int spanhash_cmp(const void *a_, const void *b_) a->hashval > b->hashval ?1 :0 ; } -static struct spanhash_top *hash_chars (struct diff_filespec *one) +static struct spanhash_top *hash_chars (struct repository *repo, +struct diff_filespec *one) {int i, n;unsigned int accum1, accum2, hashval;struct spanhash_top *hash;unsigned char *buf = one->data;unsigned int sz = one->size; -int is_text = !diff_filespec_is_binary (one); +int is_text = !diff_filespec_is_binary (repo, one); i =INITIAL_HASH_SIZE ; hash = xmalloc(st_add(sizeof(*hash),
@@ -162,7 +163,8 @@ static struct spanhash_top *hash_chars(struct diff_filespec *one)return hash; } -int diffcore_count_changes(struct diff_filespec *src, +int diffcore_count_changes(struct repository *repo, + struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p,
@@ -177,14 +179,14 @@ int diffcore_count_changes(struct diff_filespec *src,if (src_count_p) src_count = *src_count_p;if (!src_count) { - src_count =hash_chars (src); + src_count =hash_chars (repo, src);if (src_count_p) *src_count_p = src_count; }if (dst_count_p) dst_count = *dst_count_p;if (!dst_count) { - dst_count =hash_chars (dst); + dst_count =hash_chars (repo, dst);if (dst_count_p) *dst_count_p = dst_count; }
diffcore-rename.c +22 -13
@@ -128,7 +128,8 @@ struct diff_score {short name_score; }; -static int estimate_similarity (struct diff_filespec *src, +static int estimate_similarity (struct repository *repo, +struct diff_filespec *src,struct diff_filespec *dst,int minimum_score) {
@@ -165,10 +166,10 @@ static int estimate_similarity(struct diff_filespec *src,* say whether the size is valid or not!) */ if (!src->cnt_data && -diff_populate_filespec (src,CHECK_SIZE_ONLY )) +diff_populate_filespec (repo, src,CHECK_SIZE_ONLY ))return 0 ;if (!dst->cnt_data && -diff_populate_filespec (dst,CHECK_SIZE_ONLY )) +diff_populate_filespec (repo, dst,CHECK_SIZE_ONLY ))return 0 ; max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -186,12 +187,12 @@ static int estimate_similarity(struct diff_filespec *src,if (max_size * (MAX_SCORE -minimum_score) < delta_size *MAX_SCORE )return 0 ; -if (!src->cnt_data &&diff_populate_filespec (src,0 )) +if (!src->cnt_data &&diff_populate_filespec (repo, src,0 ))return 0 ; -if (!dst->cnt_data &&diff_populate_filespec (dst,0 )) +if (!dst->cnt_data &&diff_populate_filespec (repo, dst,0 ))return 0 ; -if (diffcore_count_changes (src, dst, +if (diffcore_count_changes (repo, src, dst, &src->cnt_data, &dst->cnt_data, &src_copied, &literal_added))return 0 ;
@@ -256,10 +257,11 @@ struct file_similarity {struct diff_filespec *filespec; }; -static unsigned int hash_filespec (struct diff_filespec *filespec) +static unsigned int hash_filespec (struct repository *repo, +struct diff_filespec *filespec) {if (!filespec->oid_valid) { -if (diff_populate_filespec (filespec,0 )) +if (diff_populate_filespec (repo, filespec,0 ))return 0 ;hash_object_file (filespec->data, filespec->size,"blob" , &filespec->oid);
@@ -280,7 +282,9 @@ static int find_identical_files(struct hashmap *srcs,/* * Find the best source match for specified destination. */ - p =hashmap_get_from_hash (srcs,hash_filespec (target),NULL ); + p =hashmap_get_from_hash (srcs, +hash_filespec (options->repo, target), +NULL );for (; p; p =hashmap_get_next (srcs, p)) {int score;struct diff_filespec *source = p->filespec;
@@ -316,14 +320,16 @@ static int find_identical_files(struct hashmap *srcs,return renames; } -static void insert_file_table (struct hashmap *table,int index,struct diff_filespec *filespec) +static void insert_file_table (struct repository *repo, +struct hashmap *table,int index, +struct diff_filespec *filespec) {struct file_similarity *entry =xmalloc (sizeof (*entry)); entry->index = index; entry->filespec = filespec; -hashmap_entry_init (entry,hash_filespec (filespec)); +hashmap_entry_init (entry,hash_filespec (repo, filespec));hashmap_add (table, entry); }
@@ -344,7 +350,9 @@ static int find_exact_renames(struct diff_options *options)*/ hashmap_init (&file_table,NULL ,NULL , rename_src_nr);for (i = rename_src_nr-1 ; i >=0 ; i--) -insert_file_table (&file_table, i, rename_src[i].p->one); +insert_file_table (options->repo, + &file_table, i, + rename_src[i].p->one);/* Walk the destinations and find best source match */ for (i =0 ; i < rename_dst_nr; i++)
@@ -557,7 +565,8 @@ void diffcore_rename(struct diff_options *options) diff_unmodified_pair(rename_src[j].p))continue ; - this_src.score =estimate_similarity (one, two, + this_src.score =estimate_similarity (options->repo, + one, two, minimum_score); this_src.name_score =basename_same (one, two); this_src.dst = i;
diffcore.h +7 -6
@@ -7,6 +7,8 @@#include "cache.h" struct diff_options ; +struct repository ; +struct userdiff_driver ;/* This header file is internal between diff.c and its diff transformers * (e.g. diffcore-rename, diffcore-pickaxe). Never include this header
@@ -26,8 +28,6 @@ struct diff_options;#define MINIMUM_BREAK_SIZE 400/* do not break a file smaller than this */ -struct userdiff_driver ; -struct diff_filespec {struct object_id oid;char *path;
@@ -61,10 +61,10 @@ void fill_filespec(struct diff_filespec *, const struct object_id *,#define CHECK_SIZE_ONLY 1#define CHECK_BINARY 2 -int diff_populate_filespec (struct diff_filespec *,unsigned int ); +int diff_populate_filespec (struct repository *,struct diff_filespec *,unsigned int );void diff_free_filespec_data (struct diff_filespec *);void diff_free_filespec_blob (struct diff_filespec *); -int diff_filespec_is_binary (struct diff_filespec *); +int diff_filespec_is_binary (struct repository *,struct diff_filespec *);struct diff_filepair {struct diff_filespec *one;
@@ -111,7 +111,7 @@ struct diff_filepair *diff_queue(struct diff_queue_struct *, struct diff_filespec *);void diff_q (struct diff_queue_struct *,struct diff_filepair *); -void diffcore_break (int ); +void diffcore_break (struct repository *,int );void diffcore_rename (struct diff_options *);void diffcore_merge_broken (void );void diffcore_pickaxe (struct diff_options *);
@@ -142,7 +142,8 @@ void diff_debug_queue(const char *, struct diff_queue_struct *); #define diff_debug_queue(a,b) do { /* nothing */ } while (0)#endif -int diffcore_count_changes(struct diff_filespec *src, +int diffcore_count_changes(struct repository *repo, + struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p,
line-log.c +12 -9
@@ -508,7 +508,9 @@ static void fill_blob_sha1(struct commit *commit, struct diff_filespec *spec)return ; } -static void fill_line_ends (struct diff_filespec *spec,long *lines, +static void fill_line_ends (struct repository *repo, +struct diff_filespec *spec, +long *lines,unsigned long **line_ends) {int num =0 , size =50 ;
@@ -516,7 +518,7 @@ static void fill_line_ends(struct diff_filespec *spec, long *lines,unsigned long *ends =NULL ;char *data =NULL ; -if (diff_populate_filespec (spec,0 )) +if (diff_populate_filespec (repo, spec,0 ))die ("Cannot read blob %s" ,oid_to_hex (&spec->oid));ALLOC_ARRAY (ends, size);
@@ -555,7 +557,8 @@ static const char *nth_line(void *data, long line) }static struct line_log_data * -parse_lines (struct commit *commit,const char *prefix,struct string_list *args) +parse_lines (struct repository *repo,struct commit *commit, +const char *prefix,struct string_list *args) {long lines =0 ;unsigned long *ends =NULL ;
@@ -583,7 +586,7 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) spec =alloc_filespec (full_name);fill_blob_sha1 (commit, spec); -fill_line_ends (spec, &lines, &ends); +fill_line_ends (repo, spec, &lines, &ends); cb_data.spec = spec; cb_data.lines = lines; cb_data.line_ends = ends;
@@ -739,7 +742,7 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_liststruct line_log_data *range; commit =check_single_commit (rev); - range =parse_lines (commit, prefix, args); + range =parse_lines (rev->diffopt.repo, commit, prefix, args);add_line_range (rev, commit, range);if (!rev->diffopt.detect_rename) {
@@ -891,8 +894,8 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rangreturn ;if (pair->one->oid_valid) -fill_line_ends (pair->one, &p_lines, &p_ends); -fill_line_ends (pair->two, &t_lines, &t_ends); +fill_line_ends (rev->diffopt.repo, pair->one, &p_lines, &p_ends); +fill_line_ends (rev->diffopt.repo, pair->two, &t_lines, &t_ends);fprintf (opt->file,"%s%sdiff --git a/%s b/%s%s\n" , prefix, c_meta, pair->one->path, pair->two->path, c_reset); fprintf(opt->file, "%s%s--- %s%s%s\n", prefix, c_meta,
@@ -1008,12 +1011,12 @@ static int process_diff_filepair(struct rev_info *rev,return 0 ;assert (pair->two->oid_valid); -diff_populate_filespec (pair->two,0 ); +diff_populate_filespec (rev->diffopt.repo, pair->two,0 ); file_target.ptr = pair->two->data; file_target.size = pair->two->size;if (pair->one->oid_valid) { -diff_populate_filespec (pair->one,0 ); +diff_populate_filespec (rev->diffopt.repo, pair->one,0 ); file_parent.ptr = pair->one->data; file_parent.size = pair->one->size; }else {
read-cache.c +1 -1
@@ -2122,7 +2122,7 @@ int unmerged_index(const struct index_state *istate)return 0 ; } -int index_has_changes (const struct index_state *istate, +int index_has_changes (struct index_state *istate,struct tree *tree,struct strbuf *sb) {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 5/21 grep.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/grep.c | 4 ++-- builtin/log.c | 2 +- grep.c | 13 ++++++++----- grep.h | 7 +++++-- revision.c | 4 ++-- 5 files changed, 18 insertions(+), 12 deletions(-)
builtin/grep.c +2 -2
@@ -904,9 +904,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix) OPT_END() }; -init_grep_defaults (); +init_grep_defaults (the_repository);git_config (grep_cmd_config,NULL ); -grep_init (&opt, prefix); +grep_init (&opt, the_repository, prefix);/* * If there is no -- then the paths must exist in the working
builtin/log.c +1 -1
@@ -115,7 +115,7 @@ static int log_line_range_callback(const struct option *option, const char *arg,static void init_log_defaults (void ) { -init_grep_defaults (); +init_grep_defaults (the_repository);init_diff_ui_defaults (); decoration_style =auto_decoration_style ();
grep.c +8 -5
@@ -42,7 +42,7 @@ static void color_set(char *dst, const char *color_bytes)* We could let the compiler do this, but without C99 initializers * the code gets unwieldy and unreadable, so... */ -void init_grep_defaults (void ) +void init_grep_defaults (struct repository *repo) {struct grep_opt *opt = &grep_defaults;static int run_once;
@@ -52,6 +52,7 @@ void init_grep_defaults(void) run_once++;memset (opt,0 ,sizeof (*opt)); + opt->repo = repo; opt->relative =1 ; opt->pathname =1 ; opt->max_depth =-1 ;
@@ -149,12 +150,13 @@ int grep_config(const char *var, const char *value, void *cb)* default values from the template we read the configuration * information in an earlier call to git_config(grep_config). */ -void grep_init (struct grep_opt *opt,const char *prefix) +void grep_init (struct grep_opt *opt,struct repository *repo,const char *prefix) {struct grep_opt *def = &grep_defaults;int i;memset (opt,0 ,sizeof (*opt)); + opt->repo = repo; opt->prefix = prefix; opt->prefix_length = (prefix && *prefix) ?strlen (prefix) :0 ; opt->pattern_tail = &opt->pattern_list;
@@ -1708,7 +1710,8 @@ static int look_ahead(struct grep_opt *opt,return 0 ; } -static int fill_textconv_grep (struct userdiff_driver *driver, +static int fill_textconv_grep (struct repository *repo, +struct userdiff_driver *driver,struct grep_source *gs) {struct diff_filespec *df;
@@ -1741,7 +1744,7 @@ static int fill_textconv_grep(struct userdiff_driver *driver,* structure. */ grep_read_lock (); - size =fill_textconv (the_repository, driver, df, &buf); + size =fill_textconv (repo, driver, df, &buf);grep_read_unlock ();free_filespec (df);
@@ -1837,7 +1840,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle try_lookahead =should_lookahead (opt); -if (fill_textconv_grep (textconv, gs) <0 ) +if (fill_textconv_grep (opt->repo, textconv, gs) <0 )return 0 ; bol = gs->buf;
grep.h +5 -2
@@ -36,6 +36,8 @@ typedef int pcre2_jit_stack;#include "thread-utils.h" #include "userdiff.h" +struct repository ; +enum grep_pat_token {GREP_PATTERN ,GREP_PATTERN_HEAD ,
@@ -136,6 +138,7 @@ struct grep_opt {struct grep_pat *header_list;struct grep_pat **header_tail;struct grep_expr *pattern_expression; +struct repository *repo;const char *prefix;int prefix_length;regex_t regexp;
@@ -183,9 +186,9 @@ struct grep_opt {void *output_priv; }; -extern void init_grep_defaults (void ); +extern void init_grep_defaults (struct repository *);extern int grep_config (const char *var,const char *value,void *); -extern void grep_init (struct grep_opt *,const char *prefix); +extern void grep_init (struct grep_opt *,struct repository *repo,const char *prefix);void grep_commit_pattern_type (enum grep_pattern_type ,struct grep_opt *opt);extern void append_grep_pat (struct grep_opt *opt,const char *pat,size_t patlen,const char *origin,int no,enum grep_pat_token t);
revision.c +2 -2
@@ -1464,8 +1464,8 @@ void init_revisions(struct rev_info *revs, const char *prefix) revs->commit_format =CMIT_FMT_DEFAULT ; revs->expand_tabs_in_log_default =8 ; -init_grep_defaults (); -grep_init (&revs->grep_filter, prefix); +init_grep_defaults (the_repository); +grep_init (&revs->grep_filter, the_repository, prefix); revs->grep_filter.status_only =1 ;diff_setup (&revs->diffopt);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 6/21 diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- blame.c | 20 +++++++++++--------- builtin/diff.c | 2 +- builtin/log.c | 2 +- builtin/merge.c | 2 +- builtin/range-diff.c | 2 +- diff-no-index.c | 9 +++++++-- diff.c | 4 ++-- diff.h | 4 ++-- merge-recursive.c | 2 +- notes-merge.c | 4 ++-- patch-ids.c | 2 +- read-cache.c | 2 +- revision.c | 2 +- tree-diff.c | 2 +- 14 files changed, 33 insertions(+), 26 deletions(-)
blame.c +11 -9
@@ -543,8 +543,9 @@ static int fill_blob_sha1_and_mode(struct repository *repo,* We have an origin -- check if the same path exists in the * parent and return an origin structure to represent it. */ -static struct blame_origin *find_origin (struct commit *parent, -struct blame_origin *origin) +static struct blame_origin *find_origin (struct repository *repo, +struct commit *parent, +struct blame_origin *origin) {struct blame_origin *porigin;struct diff_options diff_opts;
@@ -564,7 +565,7 @@ static struct blame_origin *find_origin(struct commit *parent,* and origin first. Most of the time they are the * same and diff-tree is fairly efficient about this. */ -diff_setup (&diff_opts); +diff_setup (&diff_opts, repo); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =0 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -631,14 +632,15 @@ static struct blame_origin *find_origin(struct commit *parent,* We have an origin -- find the path that corresponds to it in its * parent and return an origin structure to represent it. */ -static struct blame_origin *find_rename (struct commit *parent, -struct blame_origin *origin) +static struct blame_origin *find_rename (struct repository *repo, +struct commit *parent, +struct blame_origin *origin) {struct blame_origin *porigin =NULL ;struct diff_options diff_opts;int i; -diff_setup (&diff_opts); +diff_setup (&diff_opts, repo); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =DIFF_DETECT_RENAME ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1262,7 +1264,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,if (!unblamed)return ;/* nothing remains for this target */ -diff_setup (&diff_opts); +diff_setup (&diff_opts, sb->repo); diff_opts.flags.recursive =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1444,7 +1446,7 @@ static void pass_blame(struct blame_scoreboard *sb, struct blame_origin *origin,* common cases, then we look for renames in the second pass. */ for (pass =0 ; pass <2 - sb->no_whole_file_rename; pass++) { -struct blame_origin *(*find)(struct commit *,struct blame_origin *); +struct blame_origin *(*find)(struct repository *,struct commit *,struct blame_origin *); find = pass ? find_rename : find_origin; for (i = 0, sg = first_scapegoat(revs, commit, sb->reverse);
@@ -1457,7 +1459,7 @@ static void pass_blame(struct blame_scoreboard *sb, struct blame_origin *origin,continue ;if (parse_commit (p))continue ; - porigin =find (p, origin); + porigin =find (sb->repo, p, origin);if (!porigin)continue ;if (!oidcmp (&porigin->blob_oid, &origin->blob_oid)) {
builtin/diff.c +1 -1
@@ -339,7 +339,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) }if (no_index)/* If this is a no-index diff, just run it and exit there. */ -diff_no_index (&rev, argc, argv); +diff_no_index (the_repository, &rev, argc, argv);/* Otherwise, we are doing the usual "git" diff */ rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;
builtin/log.c +1 -1
@@ -1361,7 +1361,7 @@ static void prepare_bases(struct base_tree_info *bases,return ;init_commit_base (&commit_base); -diff_setup (&diffopt); +diff_setup (&diffopt, the_repository); diffopt.flags.recursive =1 ;diff_setup_done (&diffopt);
builtin/merge.c +1 -1
@@ -452,7 +452,7 @@ static void finish(struct commit *head_commit, }if (new_head && show_diffstat) {struct diff_options opts; -diff_setup (&opts); +diff_setup (&opts, the_repository); opts.stat_width =-1 ;/* use full terminal width */ opts.stat_graph_width =-1 ;/* respect statGraphWidth config */ opts.output_format |=
builtin/range-diff.c +1 -1
@@ -34,7 +34,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL ); -diff_setup (&diffopt); +diff_setup (&diffopt, the_repository); diffopt.output_format =DIFF_FORMAT_PATCH ; diffopt.flags.suppress_diff_headers =1 ; diffopt.output_prefix = output_prefix_cb;
diff-no-index.c +7 -2
@@ -233,7 +233,8 @@ static void fixup_paths(const char **path, struct strbuf *replacement) } } -void diff_no_index (struct rev_info *revs, +void diff_no_index (struct repository *repo, +struct rev_info *revs,int argc,const char **argv) {int i;
@@ -241,7 +242,11 @@ void diff_no_index(struct rev_info *revs,struct strbuf replacement =STRBUF_INIT ;const char *prefix = revs->prefix; -diff_setup (&revs->diffopt); +/* +* FIXME: --no-index should not look at index and we should be +* able to pass NULL repo. Maybe later. +*/ +diff_setup (&revs->diffopt, repo);for (i =1 ; i < argc -2 ; ) {int j;if (!strcmp (argv[i],"--no-index" ))
diff.c +2 -2
@@ -4390,12 +4390,12 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)builtin_checkdiff (name, other, attr_path, p->one, p->two, o); } -void diff_setup (struct diff_options *options) +void diff_setup (struct diff_options *options,struct repository *repo) {memcpy (options, &default_diff_options,sizeof (*options)); options->file = stdout; - options->repo->index = &the_index; + options->repo = repo; options->abbrev =DEFAULT_ABBREV ; options->line_termination ='\n' ;
diff.h +2 -2
@@ -336,7 +336,7 @@ int git_diff_basic_config(const char *var, const char *value, void *cb);int git_diff_heuristic_config (const char *var,const char *value,void *cb);void init_diff_ui_defaults (void );int git_diff_ui_config (const char *var,const char *value,void *cb); -void diff_setup (struct diff_options *); +void diff_setup (struct diff_options *,struct repository *);int diff_opt_parse (struct diff_options *,const char **,int ,const char *);void diff_setup_done (struct diff_options *);int git_config_rename (const char *var,const char *value);
@@ -426,7 +426,7 @@ int diff_flush_patch_id(struct diff_options *, struct object_id *, int);int diff_result_code (struct diff_options *,int ); -void diff_no_index (struct rev_info *,int ,const char **); +void diff_no_index (struct repository *,struct rev_info *,int ,const char **);int index_differs_from (const char *def,const struct diff_flags *flags,int ita_invisible_in_index);
merge-recursive.c +1 -1
@@ -1812,7 +1812,7 @@ static struct diff_queue_struct *get_diffpairs(struct merge_options *o,struct diff_queue_struct *ret;struct diff_options opts; -diff_setup (&opts); +diff_setup (&opts, the_repository); opts.flags.recursive =1 ; opts.flags.rename_empty =0 ; opts.detect_rename =merge_detect_rename (o);
notes-merge.c +2 -2
@@ -126,7 +126,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,trace_printf ("\tdiff_tree_remote(base = %.7s, remote = %.7s)\n" ,oid_to_hex (base),oid_to_hex (remote)); -diff_setup (&opt); +diff_setup (&opt, the_repository); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
@@ -189,7 +189,7 @@ static void diff_tree_local(struct notes_merge_options *o,trace_printf ("\tdiff_tree_local(len = %i, base = %.7s, local = %.7s)\n" , len,oid_to_hex (base),oid_to_hex (local)); -diff_setup (&opt); +diff_setup (&opt, the_repository); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
patch-ids.c +1 -1
@@ -59,7 +59,7 @@ static int patch_id_cmp(const void *cmpfn_data,int init_patch_ids (struct patch_ids *ids) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts); +diff_setup (&ids->diffopts, the_repository); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
read-cache.c +1 -1
@@ -2137,7 +2137,7 @@ int index_has_changes(struct index_state *istate,if (tree || !get_oid_tree ("HEAD" , &cmp)) {struct diff_options opt; -diff_setup (&opt); +diff_setup (&opt, the_repository); opt.flags.exit_with_status =1 ;if (!sb) opt.flags.quick =1 ;
revision.c +1 -1
@@ -1468,7 +1468,7 @@ void init_revisions(struct rev_info *revs, const char *prefix)grep_init (&revs->grep_filter, the_repository, prefix); revs->grep_filter.status_only =1 ; -diff_setup (&revs->diffopt); +diff_setup (&revs->diffopt, the_repository);if (prefix && !revs->diffopt.prefix) { revs->diffopt.prefix = prefix; revs->diffopt.prefix_length =strlen (prefix);
tree-diff.c +1 -1
@@ -607,7 +607,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -diff_setup (&diff_opts); +diff_setup (&diff_opts, the_repository); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 7/21 read-cache.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- read-cache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
read-cache.c +2 -2
@@ -823,7 +823,7 @@ struct cache_entry *make_cache_entry(struct index_state *istate, ce->ce_namelen = len; ce->ce_mode =create_ce_mode (mode); - ret =refresh_cache_entry (&the_index, ce, refresh_options); + ret =refresh_cache_entry (istate, ce, refresh_options);if (ret != ce)discard_cache_entry (ce);return ret;
@@ -1493,7 +1493,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,if (ignore_submodules &&S_ISGITLINK (ce->ce_mode))continue ; -if (pathspec && !ce_path_match (&the_index, ce, pathspec, seen)) +if (pathspec && !ce_path_match (istate, ce, pathspec, seen)) filtered =1 ;if (ce_stage (ce)) {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 10/21 merge-blobs.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/merge-tree.c | 2 +- merge-blobs.c | 15 +++++++++++---- merge-blobs.h | 7 +++++-- 3 files changed, 17 insertions(+), 7 deletions(-)
builtin/merge-tree.c +1 -1
@@ -76,7 +76,7 @@ static void *result(struct merge_list *entry, unsigned long *size) their =NULL ;if (entry) their = entry->blob; -return merge_blobs (path, base, our, their, size); +return merge_blobs (&the_index, path, base, our, their, size); }static void *origin (struct merge_list *entry,unsigned long *size)
merge-blobs.c +11 -4
@@ -29,7 +29,12 @@ static void free_mmfile(mmfile_t *f)free (f->ptr); } -static void *three_way_filemerge (const char *path,mmfile_t *base,mmfile_t *our,mmfile_t *their,unsigned long *size) +static void *three_way_filemerge (struct index_state *istate, +const char *path, +mmfile_t *base, +mmfile_t *our, +mmfile_t *their, +unsigned long *size) {int merge_status;mmbuffer_t res;
@@ -42,7 +47,7 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *our*/ merge_status =ll_merge (&res, path, base,NULL , our,".our" , their,".their" , - &the_index,NULL ); + istate,NULL );if (merge_status <0 )return NULL ;
@@ -50,7 +55,9 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *ourreturn res.ptr; } -void *merge_blobs (const char *path,struct blob *base,struct blob *our,struct blob *their,unsigned long *size) +void *merge_blobs (struct index_state *istate,const char *path, +struct blob *base,struct blob *our, +struct blob *their,unsigned long *size) {void *res =NULL ;mmfile_t f1, f2, common;
@@ -83,7 +90,7 @@ void *merge_blobs(const char *path, struct blob *base, struct blob *our, struct common.ptr =xstrdup ("" ); common.size =0 ; } - res =three_way_filemerge (path, &common, &f1, &f2, size); + res =three_way_filemerge (istate, path, &common, &f1, &f2, size);free_mmfile (&common); out_free_f2_f1:free_mmfile (&f2);
merge-blobs.h +5 -2
@@ -1,8 +1,11 @@#ifndef MERGE_BLOBS_H #define MERGE_BLOBS_H -#include "blob.h" +struct blob ; +struct index_state ; -extern void *merge_blobs (const char *,struct blob *,struct blob *,struct blob *,unsigned long *); +extern void *merge_blobs (struct index_state *,const char *, +struct blob *,struct blob *, +struct blob *,unsigned long *);#endif /* MERGE_BLOBS_H */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 9/21 ll-merge.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- apply.c | 9 ++++++--- builtin/checkout.c | 3 ++- diff.c | 2 +- ll-merge.c | 17 +++++++++-------- ll-merge.h | 5 ++++- merge-blobs.c | 3 ++- merge-recursive.c | 3 ++- notes-merge.c | 3 ++- rerere.c | 10 ++++++---- 9 files changed, 34 insertions(+), 21 deletions(-)
apply.c +6 -3
@@ -3467,7 +3467,8 @@ static int load_preimage(struct apply_state *state,return 0 ; } -static int three_way_merge(struct image *image, +static int three_way_merge(struct apply_state *state, + struct image *image, char *path, const struct object_id *base, const struct object_id *ours,
@@ -3483,7 +3484,9 @@ static int three_way_merge(struct image *image, status =ll_merge (&result, path, &base_file,"base" , &our_file,"ours" , - &their_file,"theirs" ,NULL ); + &their_file,"theirs" , + state->repo->index, +NULL );free (base_file.ptr);free (our_file.ptr);free (their_file.ptr);
@@ -3595,7 +3598,7 @@ static int try_threeway(struct apply_state *state,clear_image (&tmp_image);/* in-core three-way merge between post and our using pre as base */ - status =three_way_merge (image, patch->new_name, + status =three_way_merge (state, image, patch->new_name, &pre_oid, &our_oid, &post_oid);if (status <0 ) {if (state->apply_verbosity > verbosity_silent)
builtin/checkout.c +2 -1
@@ -208,7 +208,8 @@ static int checkout_merged(int pos, const struct checkout *state)* merge.renormalize set, too */ status =ll_merge (&result_buf, path, &ancestor,"base" , - &ours,"ours" , &theirs,"theirs" ,NULL ); + &ours,"ours" , &theirs,"theirs" , + state->istate,NULL );free (ancestor.ptr);free (ours.ptr);free (theirs.ptr);
diff.c +1 -1
@@ -3637,7 +3637,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b, data.lineno =0 ; data.o = o; data.ws_rule =whitespace_rule (attr_path); - data.conflict_marker_size =ll_merge_marker_size (attr_path); + data.conflict_marker_size =ll_merge_marker_size (o->repo->index, attr_path);if (fill_mmfile (o->repo, &mf1, one) <0 ||fill_mmfile (o->repo, &mf2, two) <0 )
ll-merge.c +9 -8
@@ -336,10 +336,10 @@ static const struct ll_merge_driver *find_ll_merge_driver(const char *merge_attrreturn &ll_merge_drv[LL_TEXT_MERGE ]; } -static void normalize_file (mmfile_t *mm,const char *path) +static void normalize_file (mmfile_t *mm,const char *path,struct index_state *istate) {struct strbuf strbuf =STRBUF_INIT ; -if (renormalize_buffer (&the_index, path, mm->ptr, mm->size, &strbuf)) { +if (renormalize_buffer (istate, path, mm->ptr, mm->size, &strbuf)) {free (mm->ptr); mm->size = strbuf.len; mm->ptr =strbuf_detach (&strbuf,NULL );
@@ -351,6 +351,7 @@ int ll_merge(mmbuffer_t *result_buf, mmfile_t *ancestor, const char *ancestor_label, mmfile_t *ours, const char *our_label, mmfile_t *theirs, const char *their_label, + struct index_state *istate, const struct ll_merge_options *opts) { static struct attr_check *check;
@@ -363,15 +364,15 @@ int ll_merge(mmbuffer_t *result_buf, opts = &default_opts;if (opts->renormalize) { -normalize_file (ancestor, path); -normalize_file (ours, path); -normalize_file (theirs, path); +normalize_file (ancestor, path, istate); +normalize_file (ours, path, istate); +normalize_file (theirs, path, istate); }if (!check) check =attr_check_initl ("merge" ,"conflict-marker-size" ,NULL ); -if (!git_check_attr (&the_index, path, check)) { +if (!git_check_attr (istate, path, check)) { ll_driver_name = check->items[0 ].value;if (check->items[1 ].value) { marker_size =atoi (check->items[1 ].value);
@@ -391,14 +392,14 @@ int ll_merge(mmbuffer_t *result_buf, opts, marker_size); } -int ll_merge_marker_size (const char *path) +int ll_merge_marker_size (struct index_state *istate,const char *path) {static struct attr_check *check;int marker_size =DEFAULT_CONFLICT_MARKER_SIZE ;if (!check) check =attr_check_initl ("conflict-marker-size" ,NULL ); -if (!git_check_attr (&the_index, path, check) && check->items[0 ].value) { +if (!git_check_attr (istate, path, check) && check->items[0 ].value) { marker_size =atoi (check->items[0 ].value);if (marker_size <=0 ) marker_size =DEFAULT_CONFLICT_MARKER_SIZE ;
ll-merge.h +4 -1
@@ -7,6 +7,8 @@#include "xdiff/xdiff.h" +struct index_state ; +struct ll_merge_options {unsigned virtual_ancestor :1 ;unsigned variant :2 ;/* favor ours, favor theirs, or union merge */
@@ -19,8 +21,9 @@ int ll_merge(mmbuffer_t *result_buf, mmfile_t *ancestor, const char *ancestor_label, mmfile_t *ours, const char *our_label, mmfile_t *theirs, const char *their_label, + struct index_state *istate, const struct ll_merge_options *opts); -int ll_merge_marker_size (const char *path); +int ll_merge_marker_size (struct index_state *istate,const char *path);#endif
merge-blobs.c +2 -1
@@ -41,7 +41,8 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *our* common ancestor. */ merge_status =ll_merge (&res, path, base,NULL , - our,".our" , their,".their" ,NULL ); + our,".our" , their,".their" , + &the_index,NULL );if (merge_status <0 )return NULL ;
merge-recursive.c +2 -1
@@ -1083,7 +1083,8 @@ static int merge_3way(struct merge_options *o,read_mmblob (&src2, &b->oid); merge_status =ll_merge (result_buf, a->path, &orig, base_name, - &src1, name1, &src2, name2, &ll_opts); + &src1, name1, &src2, name2, + &the_index, &ll_opts);free (base_name);free (name1);
notes-merge.c +2 -1
@@ -348,7 +348,8 @@ static int ll_merge_in_worktree(struct notes_merge_options *o,read_mmblob (&remote, &p->remote); status =ll_merge (&result_buf,oid_to_hex (&p->obj), &base,NULL , - &local, o->local_ref, &remote, o->remote_ref,NULL ); + &local, o->local_ref, &remote, o->remote_ref, + &the_index,NULL );free (base.ptr);free (local.ptr);
rerere.c +6 -4
@@ -478,7 +478,7 @@ static int handle_file(const char *path, unsigned char *sha1, const char *output {int hunk_no =0 ;struct rerere_io_file io; -int marker_size =ll_merge_marker_size (path); +int marker_size =ll_merge_marker_size (&the_index, path);memset (&io,0 ,sizeof (io)); io.io.getline = rerere_file_getline;
@@ -641,7 +641,8 @@ static int try_merge(const struct rerere_id *id, const char *path,* A three-way merge. Note that this honors user-customizable * low-level merge driver settings. */ - ret =ll_merge (result, path, &base,NULL , cur,"" , &other,"" ,NULL ); + ret =ll_merge (result, path, &base,NULL , cur,"" , &other,"" , + &the_index,NULL );free (base.ptr);free (other.ptr);
@@ -960,7 +961,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpuconst struct cache_entry *ce;int pos, len, i, hunk_no;struct rerere_io_mem io; -int marker_size =ll_merge_marker_size (path); +int marker_size =ll_merge_marker_size (&the_index, path);/* * Reproduce the conflicted merge in-core
@@ -995,7 +996,8 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu*/ ll_merge (&result, path, &mmfile[0 ],NULL , &mmfile[1 ],"ours" , - &mmfile[2 ],"theirs" ,NULL ); + &mmfile[2 ],"theirs" , + &the_index,NULL );for (i =0 ; i <3 ; i++)free (mmfile[i].ptr);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 12/21 patch-ids.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/log.c | 2 +- patch-ids.c | 4 ++-- patch-ids.h | 3 ++- revision.c | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-)
builtin/log.c +1 -1
@@ -914,7 +914,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)if ((flags1 &UNINTERESTING ) == (flags2 &UNINTERESTING ))die (_ ("Not a range." )); -init_patch_ids (ids); +init_patch_ids (ids, the_repository);/* given a range a..b get all patch ids for b..a */ init_revisions (&check_rev, rev->prefix);
patch-ids.c +2 -2
@@ -56,10 +56,10 @@ static int patch_id_cmp(const void *cmpfn_data,return oidcmp (&a->patch_id, &b->patch_id); } -int init_patch_ids (struct patch_ids *ids) +int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, the_repository); +diff_setup (&ids->diffopts, repo); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
patch-ids.h +2 -1
@@ -6,6 +6,7 @@struct commit ;struct object_id ; +struct repository ;struct patch_id {struct hashmap_entry ent;
@@ -20,7 +21,7 @@ struct patch_ids {int commit_patch_id (struct commit *commit,struct diff_options *options,struct object_id *oid,int ); -int init_patch_ids (struct patch_ids *); +int init_patch_ids (struct patch_ids *,struct repository *);int free_patch_ids (struct patch_ids *);struct patch_id *add_commit_patch_id (struct commit *,struct patch_ids *);struct patch_id *has_commit_patch_id (struct commit *,struct patch_ids *);
revision.c +1 -1
@@ -877,7 +877,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)return ; left_first = left_count < right_count; -init_patch_ids (&ids); +init_patch_ids (&ids, the_repository); ids.diffopts.pathspec = revs->diffopt.pathspec;/* Compute patch-ids for one side */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 8/21 diff-lib.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- diff-lib.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
diff-lib.c +10 -7
@@ -70,7 +70,7 @@ static int match_stat_with_submodule(struct diff_options *diffopt, struct stat *st, unsigned ce_option, unsigned *dirty_submodule) { - int changed = ce_match_stat(ce, st, ce_option); + int changed = ie_match_stat(diffopt->repo->index, ce, st, ce_option);if (S_ISGITLINK (ce->ce_mode)) {struct diff_flags orig_flags = diffopt->flags;if (!diffopt->flags.override_submodule_config)
@@ -93,15 +93,16 @@ int run_diff_files(struct rev_info *revs, unsigned int option)unsigned ce_option = ((option &DIFF_RACY_IS_MODIFIED ) ?CE_MATCH_RACY_IS_DIRTY :0 );uint64_t start =getnanotime (); +struct index_state *istate = revs->diffopt.repo->index;diff_set_mnemonic_prefix (&revs->diffopt,"i/" ,"w/" );if (diff_unmerged_stage <0 ) diff_unmerged_stage =2 ; - entries = active_nr; + entries = istate->cache_nr;for (i =0 ; i < entries; i++) {unsigned int oldmode, newmode; -struct cache_entry *ce = active_cache[i]; +struct cache_entry *ce = istate->cache[i];int changed;unsigned dirty_submodule =0 ;const struct object_id *old_oid, *new_oid;
@@ -109,7 +110,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option)if (diff_can_quit_early (&revs->diffopt))break ; -if (!ce_path_match (&the_index, ce, &revs->prune_data,NULL )) +if (!ce_path_match (istate, ce, &revs->prune_data,NULL ))continue ;if (ce_stage (ce)) {
@@ -145,7 +146,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option) dpath->mode = wt_mode;while (i < entries) { -struct cache_entry *nce = active_cache[i]; +struct cache_entry *nce = istate->cache[i];int stage;if (strcmp (ce->name, nce->name))
@@ -474,7 +475,9 @@ static int oneway_diff(const struct cache_entry * const *src,if (tree == o->df_conflict_entry) tree =NULL ; -if (ce_path_match (&the_index, idx ? idx : tree, &revs->prune_data,NULL )) { +if (ce_path_match (revs->diffopt.repo->index, + idx ? idx : tree, + &revs->prune_data,NULL )) {do_oneway_diff (o, idx, tree);if (diff_can_quit_early (&revs->diffopt)) { o->exiting_early =1 ;
@@ -506,7 +509,7 @@ static int diff_cache(struct rev_info *revs, opts.merge =1 ; opts.fn = oneway_diff; opts.unpack_data = revs; - opts.src_index = &the_index; + opts.src_index = revs->diffopt.repo->index; opts.dst_index =NULL ; opts.pathspec = &revs->diffopt.pathspec; opts.pathspec->recursive =1 ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 14/21 rerere.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc DuyThe reason rerere(), rerere_forget() and rerere_remaining() take a struct repository instead of struct index_state is not obvious from the patch:
deep in update_paths() and find_conflict(), hold_locked_index() and read_index() are called. These functions assumes the index path at $GIT_DIR/index which is not always true when you take an arbitrary index state. Taking a repository will allow us to point to the right index path later when we replace them with repo_ versions.
--- apply.c | 2 +- builtin/am.c | 4 +- builtin/commit.c | 2 +- builtin/merge.c | 2 +- builtin/rerere.c | 6 +-- rerere.c | 119 +++++++++++++++++++++++++---------------------- rerere.h | 9 ++-- sequencer.c | 4 +- 8 files changed, 79 insertions(+), 69 deletions(-)
apply.c +1 -1
@@ -4630,7 +4630,7 @@ static int write_out_results(struct apply_state *state, struct patch *list) }string_list_clear (&cpath,0 ); -rerere (0 ); +rerere (state->repo,0 ); }return errs;
builtin/am.c +2 -2
@@ -1603,7 +1603,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa o.verbosity =0 ;if (merge_recursive_generic (&o, &our_tree, &their_tree,1 , bases, &result)) { -rerere (state->allow_rerere_autoupdate); +rerere (the_repository, state->allow_rerere_autoupdate);free (their_tree_name);return error (_ ("Failed to merge in the changes." )); }
@@ -1898,7 +1898,7 @@ static void am_resolve(struct am_state *state) goto next; } -rerere (0 ); +rerere (the_repository,0 );do_commit (state);
builtin/commit.c +1 -1
@@ -1651,7 +1651,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)"new_index file. Check that disk is not full and quota is\n" "not exceeded, and then \"git reset HEAD\" to recover.")); -rerere (0 ); +rerere (the_repository,0 );run_command_v_opt (argv_gc_auto,RUN_GIT_CMD );run_commit_hook (use_editor,get_index_file (),"post-commit" ,NULL );if (amend && !no_post_rewrite) {
builtin/merge.c +1 -1
@@ -899,7 +899,7 @@ static int suggest_conflicts(void)fputs (msgbuf.buf, fp);strbuf_release (&msgbuf);fclose (fp); -rerere (allow_rerere_auto); +rerere (the_repository, allow_rerere_auto);printf (_ ("Automatic merge failed; " "fix conflicts and then commit the result.\n" ));return 1 ;
builtin/rerere.c +3 -3
@@ -70,7 +70,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix) flags =RERERE_NOAUTOUPDATE ;if (argc <1 ) -return rerere (flags); +return rerere (the_repository, flags);if (!strcmp (argv[0 ],"forget" )) {struct pathspec pathspec;
@@ -78,7 +78,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)warning ("'git rerere forget' without paths is deprecated" );parse_pathspec (&pathspec,0 ,PATHSPEC_PREFER_CWD , prefix, argv +1 ); -return rerere_forget (&pathspec); +return rerere_forget (the_repository, &pathspec); }if (!strcmp (argv[0 ],"clear" )) {
@@ -91,7 +91,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)for (i =0 ; i < merge_rr.nr; i++)printf ("%s\n" , merge_rr.items[i].string); }else if (!strcmp (argv[0 ],"remaining" )) { -rerere_remaining (&merge_rr); +rerere_remaining (the_repository, &merge_rr);for (i =0 ; i < merge_rr.nr; i++) {if (merge_rr.items[i].util !=RERERE_RESOLVED )printf ("%s\n" , merge_rr.items[i].string);
rerere.c +64 -55
361 lines not on this page · raw message
rerere.h +5 -4
@@ -4,6 +4,7 @@#include "string-list.h" struct pathspec ; +struct repository ;#define RERERE_AUTOUPDATE 01#define RERERE_NOAUTOUPDATE 02
@@ -22,8 +23,8 @@ struct rerere_id {int variant; }; -int setup_rerere (struct string_list *,int ); -int rerere (int ); +extern int setup_rerere (struct string_list *,int ); +extern int rerere (struct repository *repo,int );/* * Given the conflict ID and the name of a "file" used for replaying * the recorded resolution (e.g. "preimage", "postimage"), return the
@@ -31,8 +32,8 @@ int rerere(int);* return the path to the directory that houses these files. */ const char *rerere_path (const struct rerere_id *,const char *file); -int rerere_forget (struct pathspec *); -int rerere_remaining (struct string_list *); +int rerere_forget (struct repository *,struct pathspec *); +int rerere_remaining (struct repository *,struct string_list *);void rerere_clear (struct string_list *);void rerere_gc (struct string_list *);
sequencer.c +2 -2
@@ -1827,7 +1827,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, : _("could not apply %s... %s"), short_commit_name(commit), msg.subject);print_advice (res ==1 , opts); -rerere (opts->allow_rerere_auto); +rerere (the_repository, opts->allow_rerere_auto); goto leave; }
@@ -3146,7 +3146,7 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,rollback_lock_file (&lock);if (ret) -rerere (opts->allow_rerere_auto); +rerere (the_repository, opts->allow_rerere_auto);else /* * In case of problems, we now want to return a positive
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 16/21 line-range.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/blame.c | 2 +- line-log.c | 4 ++-- line-range.c | 22 ++++++++++++++-------- line-range.h | 6 ++++-- 4 files changed, 21 insertions(+), 13 deletions(-)
builtin/blame.c +1 -1
@@ -1001,7 +1001,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)long bottom, top;if (parse_range_arg (range_list.items[range_i].string, nth_line_cb, &sb, lno, anchor, - &bottom, &top, sb.path)) + &bottom, &top, sb.path, &the_index))usage (blame_usage);if ((!lno && (top || bottom)) || lno < bottom) die(Q_("file %s has only %lu line",
line-log.c +2 -2
@@ -574,7 +574,7 @@ parse_lines(struct repository *repo, struct commit *commit,long begin =0 , end =0 ;long anchor; - name_part =skip_range_arg (item->string); + name_part =skip_range_arg (item->string, repo->index);if (!name_part || *name_part !=':' || !name_part[1 ])die ("-L argument not 'start,end:file' or ':funcname:file': %s" , item->string);
@@ -599,7 +599,7 @@ parse_lines(struct repository *repo, struct commit *commit,if (parse_range_arg (range_part, nth_line, &cb_data, lines, anchor, &begin, &end, - full_name)) + full_name, repo->index))die ("malformed -L argument '%s'" , range_part);if ((!lines && (begin || end)) || lines < begin)die ("file %s has only %lu lines" , name_part, lines);
line-range.c +14 -8
@@ -163,9 +163,10 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char } } -static const char *parse_range_funcname (const char *arg,nth_line_fn_t nth_line_cb, -void *cb_data,long lines,long anchor,long *begin,long *end, -const char *path) +static const char *parse_range_funcname ( +const char *arg,nth_line_fn_t nth_line_cb, +void *cb_data,long lines,long anchor,long *begin,long *end, +const char *path,struct index_state *istate) {char *pattern;const char *term;
@@ -198,7 +199,7 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ anchor--;/* input is in human terms */ start =nth_line_cb (cb_data, anchor); - drv =userdiff_find_by_path (&the_index, path); + drv =userdiff_find_by_path (istate, path);if (drv && drv->funcname.pattern) {const struct userdiff_funcname *pe = &drv->funcname; xecfg =xcalloc (1 ,sizeof (*xecfg));
@@ -244,7 +245,8 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_int parse_range_arg (const char *arg,nth_line_fn_t nth_line_cb,void *cb_data,long lines,long anchor, -long *begin,long *end,const char *path) +long *begin,long *end, +const char *path,struct index_state *istate) { *begin = *end =0 ;
@@ -254,7 +256,9 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, anchor = lines +1 ;if (*arg ==':' || (*arg =='^' && *(arg +1 ) ==':' )) { - arg =parse_range_funcname (arg, nth_line_cb, cb_data, lines, anchor, begin, end, path); + arg =parse_range_funcname (arg, nth_line_cb, cb_data, + lines, anchor, begin, end, + path, istate);if (!arg || *arg)return -1 ;return 0 ;
@@ -275,10 +279,12 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb,return 0 ; } -const char *skip_range_arg (const char *arg) +const char *skip_range_arg (const char *arg,struct index_state *istate) {if (*arg ==':' || (*arg =='^' && *(arg +1 ) ==':' )) -return parse_range_funcname (arg,NULL ,NULL ,0 ,0 ,NULL ,NULL ,NULL ); +return parse_range_funcname (arg,NULL ,NULL , +0 ,0 ,NULL ,NULL , +NULL , istate); arg =parse_loc (arg,NULL ,NULL ,0 ,-1 ,NULL );
line-range.h +4 -2
@@ -1,6 +1,8 @@#ifndef LINE_RANGE_H #define LINE_RANGE_H +struct index_state ; +/* * Parse one item in an -L begin,end option w.r.t. the notional file * object 'cb_data' consisting of 'lines' lines.
@@ -23,7 +25,7 @@ int parse_range_arg(const char *arg,nth_line_fn_t nth_line_cb, void *cb_data, long lines, long anchor, long *begin, long *end, - const char *path); + const char *path, struct index_state *istate);/* * Scan past a range argument that could be parsed by
@@ -34,6 +36,6 @@ int parse_range_arg(const char *arg,* NULL in case the argument is obviously malformed. */ -const char *skip_range_arg (const char *arg); +const char *skip_range_arg (const char *arg,struct index_state *istate);#endif /* LINE_RANGE_H */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 18/21 tree-diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- tree-diff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tree-diff.c +1 -1
@@ -607,7 +607,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -diff_setup (&diff_opts, the_repository); +diff_setup (&diff_opts, opt->repo); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 15/21 userdiff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- archive-zip.c | 14 +++++++++----- builtin/grep.c | 3 ++- combine-diff.c | 2 +- diff.c | 40 +++++++++++++++++++++++----------------- diff.h | 3 ++- diffcore-pickaxe.c | 4 ++-- grep.c | 21 ++++++++++++--------- grep.h | 3 ++- line-range.c | 2 +- userdiff.c | 5 +++-- userdiff.h | 3 ++- 11 files changed, 59 insertions(+), 41 deletions(-)
archive-zip.c +9 -5
@@ -264,9 +264,10 @@ static int has_only_ascii(const char *s) } } -static int entry_is_binary (const char *path,const void *buffer,size_t size) +static int entry_is_binary (struct index_state *istate,const char *path, +const void *buffer,size_t size) { -struct userdiff_driver *driver =userdiff_find_by_path (path); +struct userdiff_driver *driver =userdiff_find_by_path (istate, path);if (!driver) driver =userdiff_find_by_name ("default" );if (driver->binary !=-1 )
@@ -352,7 +353,8 @@ static int write_zip_entry(struct archiver_args *args,return error (_ ("cannot read %s" ),oid_to_hex (oid)); crc =crc32 (crc, buffer, size); - is_binary =entry_is_binary (path_without_prefix, + is_binary =entry_is_binary (args->repo->index, + path_without_prefix, buffer, size); out = buffer; }
@@ -428,7 +430,8 @@ static int write_zip_entry(struct archiver_args *args,break ; crc =crc32 (crc, buf, readlen);if (is_binary ==-1 ) - is_binary =entry_is_binary (path_without_prefix, + is_binary =entry_is_binary (args->repo->index, + path_without_prefix, buf, readlen);write_or_die (1 , buf, readlen); }
@@ -460,7 +463,8 @@ static int write_zip_entry(struct archiver_args *args,break ; crc =crc32 (crc, buf, readlen);if (is_binary ==-1 ) - is_binary =entry_is_binary (path_without_prefix, + is_binary =entry_is_binary (args->repo->index, + path_without_prefix, buf, readlen); zstream.next_in = buf;
builtin/grep.c +2 -1
@@ -103,7 +103,8 @@ static void add_work(struct grep_opt *opt, const struct grep_source *gs) todo[todo_end].source = *gs;if (opt->binary !=GREP_BINARY_TEXT ) -grep_source_load_driver (&todo[todo_end].source); +grep_source_load_driver (&todo[todo_end].source, + opt->repo->index); todo[todo_end].done =0 ;strbuf_reset (&todo[todo_end].out); todo_end = (todo_end +1 ) %ARRAY_SIZE (todo);
combine-diff.c +1 -1
@@ -987,7 +987,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,const char *line_prefix =diff_line_prefix (opt); context = opt->context; - userdiff =userdiff_find_by_path (elem->path); + userdiff =userdiff_find_by_path (opt->repo->index, elem->path);if (!userdiff) userdiff =userdiff_find_by_name ("default" );if (opt->flags.allow_textconv)
diff.c +23 -17
@@ -2093,23 +2093,25 @@ static void diff_words_flush(struct emit_callback *ecbdata) } } -static void diff_filespec_load_driver (struct diff_filespec *one) +static void diff_filespec_load_driver (struct diff_filespec *one, +struct index_state *istate) {/* Use already-loaded driver */ if (one->driver)return ;if (S_ISREG (one->mode)) - one->driver =userdiff_find_by_path (one->path); + one->driver =userdiff_find_by_path (istate, one->path);/* Fallback to default settings */ if (!one->driver) one->driver =userdiff_find_by_name ("default" ); } -static const char *userdiff_word_regex (struct diff_filespec *one) +static const char *userdiff_word_regex (struct diff_filespec *one, +struct index_state *istate) { -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, istate);return one->driver->word_regex; }
@@ -2132,9 +2134,9 @@ static void init_diff_words_data(struct emit_callback *ecbdata,xcalloc (1 ,sizeof (struct emitted_diff_symbols ));if (!o->word_regex) - o->word_regex =userdiff_word_regex (one); + o->word_regex =userdiff_word_regex (one, o->repo->index);if (!o->word_regex) - o->word_regex =userdiff_word_regex (two); + o->word_regex =userdiff_word_regex (two, o->repo->index);if (!o->word_regex) o->word_regex = diff_word_regex_cfg;if (o->word_regex) {
@@ -3257,7 +3259,7 @@ int diff_filespec_is_binary(struct repository *repo, struct diff_filespec *one) {if (one->is_binary ==-1 ) { -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, repo->index);if (one->driver->binary !=-1 ) one->is_binary = one->driver->binary;else {
@@ -3273,9 +3275,10 @@ int diff_filespec_is_binary(struct repository *repo,return one->is_binary; } -static const struct userdiff_funcname *diff_funcname_pattern (struct diff_filespec *one) +static const struct userdiff_funcname * +diff_funcname_pattern (struct diff_options *o,struct diff_filespec *one) { -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, o->repo->index);return one->driver->funcname.pattern ? &one->driver->funcname :NULL ; }
@@ -3287,12 +3290,13 @@ void diff_set_mnemonic_prefix(struct diff_options *options, const char *a, const options->b_prefix = b; } -struct userdiff_driver *get_textconv (struct diff_filespec *one) +struct userdiff_driver *get_textconv (struct index_state *istate, +struct diff_filespec *one) {if (!DIFF_FILE_VALID (one))return NULL ; -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, istate);return userdiff_get_textconv (one->driver); }
@@ -3342,8 +3346,8 @@ static void builtin_diff(const char *name_a, }if (o->flags.allow_textconv) { - textconv_one =get_textconv (one); - textconv_two =get_textconv (two); + textconv_one =get_textconv (o->repo->index, one); + textconv_two =get_textconv (o->repo->index, two); }/* Never use a non-valid filename anywhere if at all possible */
@@ -3465,9 +3469,9 @@ static void builtin_diff(const char *name_a, mf1.size =fill_textconv (o->repo, textconv_one, one, &mf1.ptr); mf2.size =fill_textconv (o->repo, textconv_two, two, &mf2.ptr); - pe =diff_funcname_pattern (one); + pe =diff_funcname_pattern (o, one);if (!pe) - pe =diff_funcname_pattern (two); + pe =diff_funcname_pattern (o, two);memset (&xpp,0 ,sizeof (xpp));memset (&xecfg,0 ,sizeof (xecfg));
@@ -4223,7 +4227,9 @@ static void run_diff_cmd(const char *pgm,if (o->flags.allow_external) { -struct userdiff_driver *drv =userdiff_find_by_path (attr_path); +struct userdiff_driver *drv; + + drv =userdiff_find_by_path (o->repo->index, attr_path);if (drv && drv->external) pgm = drv->external; }
@@ -6399,7 +6405,7 @@ int textconv_object(struct repository *repo, df =alloc_filespec (path);fill_filespec (df, oid, oid_valid, mode); - textconv =get_textconv (df); + textconv =get_textconv (repo->index, df);if (!textconv) {free_filespec (df);return 0 ;
diff.h +2 -1
@@ -452,7 +452,8 @@ size_t fill_textconv(struct repository *repo,* and only if it has textconv enabled (otherwise return NULL). The result * can be passed to fill_textconv(). */ -struct userdiff_driver *get_textconv (struct diff_filespec *one); +struct userdiff_driver *get_textconv (struct index_state *istate, +struct diff_filespec *one);/* * Prepare diff_filespec and convert it using diff textconv API
diffcore-pickaxe.c +2 -2
@@ -139,8 +139,8 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,return 0 ;if (o->flags.allow_textconv) { - textconv_one =get_textconv (p->one); - textconv_two =get_textconv (p->two); + textconv_one =get_textconv (o->repo->index, p->one); + textconv_two =get_textconv (o->repo->index, p->two); }/*
grep.c +12 -9
@@ -11,7 +11,8 @@#include "help.h" static int grep_source_load (struct grep_source *gs); -static int grep_source_is_binary (struct grep_source *gs); +static int grep_source_is_binary (struct grep_source *gs, +struct index_state *istate);static struct grep_opt grep_defaults;
@@ -1547,7 +1548,7 @@ static int match_funcname(struct grep_opt *opt, struct grep_source *gs, char *bo {xdemitconf_t *xecfg = opt->priv;if (xecfg && !xecfg->find_func) { -grep_source_load_driver (gs); +grep_source_load_driver (gs, opt->repo->index);if (gs->driver->funcname.pattern) {const struct userdiff_funcname *pe = &gs->driver->funcname;xdiff_set_find_func (xecfg, pe->pattern, pe->cflags);
@@ -1804,7 +1805,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle opt->last_shown =0 ;if (opt->allow_textconv) { -grep_source_load_driver (gs); +grep_source_load_driver (gs, opt->repo->index);/* * We might set up the shared textconv cache data here, which * is not thread-safe.
@@ -1821,11 +1822,11 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colleif (!textconv) {switch (opt->binary) {case GREP_BINARY_DEFAULT : -if (grep_source_is_binary (gs)) +if (grep_source_is_binary (gs, opt->repo->index)) binary_match_only =1 ;break ;case GREP_BINARY_NOMATCH : -if (grep_source_is_binary (gs)) +if (grep_source_is_binary (gs, opt->repo->index))return 0 ;/* Assume unmatch */ break ;case GREP_BINARY_TEXT :
@@ -2171,22 +2172,24 @@ static int grep_source_load(struct grep_source *gs)BUG ("invalid grep_source type to load" ); } -void grep_source_load_driver (struct grep_source *gs) +void grep_source_load_driver (struct grep_source *gs, +struct index_state *istate) {if (gs->driver)return ;grep_attr_lock ();if (gs->path) - gs->driver =userdiff_find_by_path (gs->path); + gs->driver =userdiff_find_by_path (istate, gs->path);if (!gs->driver) gs->driver =userdiff_find_by_name ("default" );grep_attr_unlock (); } -static int grep_source_is_binary (struct grep_source *gs) +static int grep_source_is_binary (struct grep_source *gs, +struct index_state *istate) { -grep_source_load_driver (gs); +grep_source_load_driver (gs, istate);if (gs->driver->binary !=-1 )return gs->driver->binary;
grep.h +2 -1
@@ -220,7 +220,8 @@ void grep_source_init(struct grep_source *gs, enum grep_source_type type, const void *identifier);void grep_source_clear_data (struct grep_source *gs);void grep_source_clear (struct grep_source *gs); -void grep_source_load_driver (struct grep_source *gs); +void grep_source_load_driver (struct grep_source *gs, +struct index_state *istate);int grep_source (struct grep_opt *opt,struct grep_source *gs);
line-range.c +1 -1
@@ -198,7 +198,7 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ anchor--;/* input is in human terms */ start =nth_line_cb (cb_data, anchor); - drv =userdiff_find_by_path (path); + drv =userdiff_find_by_path (&the_index, path);if (drv && drv->funcname.pattern) {const struct userdiff_funcname *pe = &drv->funcname; xecfg =xcalloc (1 ,sizeof (*xecfg));
userdiff.c +3 -2
@@ -270,7 +270,8 @@ struct userdiff_driver *userdiff_find_by_name(const char *name) {return userdiff_find_by_namelen (name, len); } -struct userdiff_driver *userdiff_find_by_path (const char *path) +struct userdiff_driver *userdiff_find_by_path (struct index_state *istate, +const char *path) {static struct attr_check *check;
@@ -278,7 +279,7 @@ struct userdiff_driver *userdiff_find_by_path(const char *path) check =attr_check_initl ("diff" ,NULL );if (!path)return NULL ; -if (git_check_attr (&the_index, path, check)) +if (git_check_attr (istate, path, check))return NULL ;if (ATTR_TRUE (check->items[0 ].value))
userdiff.h +2 -1
@@ -21,7 +21,8 @@ struct userdiff_driver {int userdiff_config (const char *k,const char *v);struct userdiff_driver *userdiff_find_by_name (const char *name); -struct userdiff_driver *userdiff_find_by_path (const char *path); +struct userdiff_driver *userdiff_find_by_path (struct index_state *istate, +const char *path);/* * Initialize any textconv-related fields in the driver and return it, or NULL
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 17/21 submodule.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/pull.c | 2 +- submodule.c | 28 +++++++++++++++++----------- submodule.h | 9 ++++++--- transport.c | 9 ++++++--- 4 files changed, 30 insertions(+), 18 deletions(-)
builtin/pull.c +1 -1
@@ -944,7 +944,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)int ret =0 ;if ((recurse_submodules ==RECURSE_SUBMODULES_ON || recurse_submodules ==RECURSE_SUBMODULES_ON_DEMAND ) && -submodule_touches_in_range (&rebase_fork_point, &curr_head)) +submodule_touches_in_range (&the_index, &rebase_fork_point, &curr_head))die (_ ("cannot rebase with locally recorded submodule modifications" ));if (!autostash) {struct commit_list *list =NULL ;
submodule.c +17 -11
@@ -766,7 +766,8 @@ static void collect_changed_submodules_cb(struct diff_queue_struct *q,* have a corresponding 'struct oid_array' (in the 'util' field) which lists * what the submodule pointers were updated to during the change. */ -static void collect_changed_submodules (struct string_list *changed, +static void collect_changed_submodules (struct index_state *istate, +struct string_list *changed,struct argv_array *argv) {struct rev_info rev;
@@ -930,8 +931,10 @@ static int submodule_needs_pushing(const char *path, struct oid_array *commits)return 0 ; } -int find_unpushed_submodules (struct oid_array *commits, -const char *remotes_name,struct string_list *needs_pushing) +int find_unpushed_submodules (struct index_state *istate, +struct oid_array *commits, +const char *remotes_name, +struct string_list *needs_pushing) {struct string_list submodules =STRING_LIST_INIT_DUP ;struct string_list_item *name;
@@ -943,7 +946,7 @@ int find_unpushed_submodules(struct oid_array *commits,argv_array_push (&argv,"--not" );argv_array_pushf (&argv,"--remotes=%s" , remotes_name); -collect_changed_submodules (&submodules, &argv); +collect_changed_submodules (istate, &submodules, &argv);for_each_string_list_item (name, &submodules) {struct oid_array *commits = name->util;
@@ -1044,7 +1047,8 @@ static void submodule_push_check(const char *path, const char *head,die ("process for submodule '%s' failed" , path); } -int push_unpushed_submodules(struct oid_array *commits, +int push_unpushed_submodules(struct index_state *istate, + struct oid_array *commits, const struct remote *remote, const struct refspec *rs, const struct string_list *push_options,
@@ -1053,7 +1057,8 @@ int push_unpushed_submodules(struct oid_array *commits,int i, ret =1 ;struct string_list needs_pushing =STRING_LIST_INIT_DUP ; -if (!find_unpushed_submodules (commits, remote->name, &needs_pushing)) +if (!find_unpushed_submodules (istate, commits, + remote->name, &needs_pushing))return 1 ;/*
@@ -1110,7 +1115,7 @@ void check_for_new_submodule_commits(struct object_id *oid)oid_array_append (&ref_tips_after_fetch, oid); } -static void calculate_changed_submodule_paths (void ) +static void calculate_changed_submodule_paths (struct index_state *istate) {struct argv_array argv =ARGV_ARRAY_INIT ;struct string_list changed_submodules =STRING_LIST_INIT_DUP ;
@@ -1131,7 +1136,7 @@ static void calculate_changed_submodule_paths(void)* Collect all submodules (whether checked out or not) for which new * commits have been recorded upstream in "changed_submodule_names". */ -collect_changed_submodules (&changed_submodules, &argv); +collect_changed_submodules (istate, &changed_submodules, &argv);for_each_string_list_item (name, &changed_submodules) {struct oid_array *commits = name->util;
@@ -1158,7 +1163,8 @@ static void calculate_changed_submodule_paths(void) initialized_fetch_ref_tips =0 ; } -int submodule_touches_in_range (struct object_id *excl_oid, +int submodule_touches_in_range (struct index_state *istate, +struct object_id *excl_oid,struct object_id *incl_oid) {struct string_list subs =STRING_LIST_INIT_DUP ;
@@ -1176,7 +1182,7 @@ int submodule_touches_in_range(struct object_id *excl_oid,argv_array_push (&args,oid_to_hex (excl_oid)); } -collect_changed_submodules (&subs, &args); +collect_changed_submodules (istate, &subs, &args); ret = subs.nr;argv_array_clear (&args);
@@ -1346,7 +1352,7 @@ int fetch_populated_submodules(struct repository *r,argv_array_push (&spf.args,"--recurse-submodules-default" );/* default value, "--submodule-prefix" and its value are added later */ -calculate_changed_submodule_paths (); +calculate_changed_submodule_paths (r->index); run_processes_parallel(max_parallel_jobs, get_next_submodule, fetch_start_failure,
submodule.h +6 -3
@@ -102,13 +102,16 @@ int add_submodule_odb(const char *path);* Checks if there are submodule changes in a..b. If a is the null OID, * checks b and all its ancestors instead. */ -int submodule_touches_in_range (struct object_id *a, +int submodule_touches_in_range (struct index_state *istate, +struct object_id *a,struct object_id *b); -int find_unpushed_submodules (struct oid_array *commits, +int find_unpushed_submodules (struct index_state *istate, +struct oid_array *commits,const char *remotes_name,struct string_list *needs_pushing);struct refspec ; -int push_unpushed_submodules(struct oid_array *commits, +int push_unpushed_submodules(struct index_state *istate, + struct oid_array *commits, const struct remote *remote, const struct refspec *rs, const struct string_list *push_options,
transport.c +6 -3
@@ -1139,7 +1139,8 @@ int transport_push(struct transport *transport,oid_array_append (&commits, &ref->new_oid); - if (!push_unpushed_submodules(&commits, + if (!push_unpushed_submodules(&the_index, + &commits, transport->remote, rs, transport->push_options,
@@ -1163,8 +1164,10 @@ int transport_push(struct transport *transport,oid_array_append (&commits, &ref->new_oid); -if (find_unpushed_submodules (&commits, transport->remote->name, - &needs_pushing)) { +if (find_unpushed_submodules (&the_index, + &commits, + transport->remote->name, + &needs_pushing)) {oid_array_clear (&commits);die_with_unpushed_submodules (&needs_pushing); }
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 19/21 ws.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- apply.c | 8 +++++--- cache.h | 2 +- diff.c | 6 +++--- ws.c | 5 ++--- 4 files changed, 11 insertions(+), 10 deletions(-)
apply.c +5 -3
@@ -2131,10 +2131,12 @@ static int parse_chunk(struct apply_state *state, char *buffer, unsigned long siif (!use_patch (state, patch)) patch->ws_rule =0 ; +else if (patch->new_name) + patch->ws_rule =whitespace_rule (state->repo->index, + patch->new_name);else - patch->ws_rule =whitespace_rule (patch->new_name - ? patch->new_name - : patch->old_name); + patch->ws_rule =whitespace_rule (state->repo->index, + patch->old_name); patchsize = parse_single_patch(state, buffer + offset + hdrsize,
cache.h +1 -1
@@ -1684,7 +1684,7 @@ void shift_tree_by(const struct object_id *, const struct object_id *, struct ob/* All WS_* -- when extended, adapt diff.c emit_symbol */ #define WS_RULE_MASK 07777extern unsigned whitespace_rule_cfg; -extern unsigned whitespace_rule (const char *); +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);
diff.c +3 -3
@@ -1705,7 +1705,7 @@ static void emit_rewrite_diff(const char *name_a,memset (&ecbdata,0 ,sizeof (ecbdata)); ecbdata.color_diff =want_color (o->use_color); - ecbdata.ws_rule =whitespace_rule (name_b); + ecbdata.ws_rule =whitespace_rule (o->repo->index, name_b); ecbdata.opt = o;if (ecbdata.ws_rule &WS_BLANK_AT_EOF ) {mmfile_t mf1, mf2;
@@ -3480,7 +3480,7 @@ static void builtin_diff(const char *name_a, lbl[0 ] =NULL ; ecbdata.label_path = lbl; ecbdata.color_diff =want_color (o->use_color); - ecbdata.ws_rule =whitespace_rule (name_b); + ecbdata.ws_rule =whitespace_rule (o->repo->index, name_b);if (ecbdata.ws_rule &WS_BLANK_AT_EOF )check_blank_at_eof (&mf1, &mf2, &ecbdata); ecbdata.opt = o;
@@ -3640,7 +3640,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b, data.filename = name_b ? name_b : name_a; data.lineno =0 ; data.o = o; - data.ws_rule =whitespace_rule (attr_path); + data.ws_rule =whitespace_rule (o->repo->index, attr_path); data.conflict_marker_size =ll_merge_marker_size (o->repo->index, attr_path); if (fill_mmfile(o->repo, &mf1, one) < 0 ||
ws.c +2 -3
@@ -3,7 +3,6 @@* * Copyright (c) 2007 Junio C Hamano */ -#include "cache.h" #include "attr.h"
@@ -71,14 +70,14 @@ unsigned parse_whitespace_rule(const char *string)return rule; } -unsigned whitespace_rule (const char *pathname) +unsigned whitespace_rule (struct index_state *istate,const char *pathname) {static struct attr_check *attr_whitespace_rule;if (!attr_whitespace_rule) attr_whitespace_rule =attr_check_initl ("whitespace" ,NULL ); -if (!git_check_attr (&the_index, pathname, attr_whitespace_rule)) { +if (!git_check_attr (istate, pathname, attr_whitespace_rule)) {const char *value; value = attr_whitespace_rule->items[0 ].value;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 20/21 wt-status.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/commit.c | 2 +- builtin/pull.c | 3 ++- sequencer.c | 6 ++--- wt-status.c | 64 ++++++++++++++++++++++++++++-------------------- wt-status.h | 17 +++++++++---- 5 files changed, 56 insertions(+), 36 deletions(-)
builtin/commit.c +1 -1
@@ -183,7 +183,7 @@ static void determine_whence(struct wt_status *s)static void status_init_config (struct wt_status *s,config_fn_t fn) { -wt_status_prepare (s); +wt_status_prepare (s, the_repository);init_diff_ui_defaults ();git_config (fn, s);determine_whence (s);
builtin/pull.c +2 -1
@@ -887,7 +887,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)die (_ ("Updating an unborn branch with changes added to the index." ));if (!autostash) -require_clean_work_tree (N_ ("pull with rebase" ), +require_clean_work_tree (the_repository, +N_ ("pull with rebase" ),_ ("please commit or stash them." ),1 ,0 );if (get_rebase_fork_point (&rebase_fork_point, repo, *refspecs))
sequencer.c +3 -3
@@ -2679,7 +2679,7 @@ static int do_exec(const char *command_line)if (discard_cache () <0 ||read_cache () <0 )return error (_ ("could not read index" )); - dirty =require_clean_work_tree ("rebase" ,NULL ,1 ,1 ); + dirty =require_clean_work_tree (the_repository,"rebase" ,NULL ,1 ,1 );if (status) { warning(_("execution failed: %s\n%s"
@@ -3550,10 +3550,10 @@ static int commit_staged_changes(struct replay_opts *opts,unsigned int flags =ALLOW_EMPTY |EDIT_MSG ;unsigned int final_fixup =0 , is_clean; -if (has_unstaged_changes (1 )) +if (has_unstaged_changes (the_repository,1 ))return error (_ ("cannot rebase: You have unstaged changes." )); - is_clean = !has_uncommitted_changes (0 ); + is_clean = !has_uncommitted_changes (the_repository,0 );if (file_exists (rebase_path_amend ())) {struct strbuf rev =STRBUF_INIT ;
wt-status.c +38 -26
178 lines not on this page · raw message
wt-status.h +12 -5
@@ -7,6 +7,7 @@#include "pathspec.h" #include "remote.h" +struct repository ;struct worktree ;enum color_wt_status {
@@ -65,6 +66,7 @@ enum wt_status_format { };struct wt_status { +struct repository *repo;int is_initial;char *branch;const char *reference;
@@ -127,7 +129,7 @@ struct wt_status_state {size_t wt_status_locate_end (const char *s,size_t len);void wt_status_add_cut_line (FILE *fp); -void wt_status_prepare (struct wt_status *s); +void wt_status_prepare (struct wt_status *s,struct repository *repo);void wt_status_print (struct wt_status *s);void wt_status_collect (struct wt_status *s);void wt_status_get_state (struct wt_status_state *state,int get_detached_from);
@@ -142,9 +144,14 @@ __attribute__((format (printf, 3, 4)))void status_printf (struct wt_status *s,const char *color,const char *fmt, ...);/* The following functions expect that the caller took care of reading the index. */ -int has_unstaged_changes (int ignore_submodules); -int has_uncommitted_changes (int ignore_submodules); -int require_clean_work_tree (const char *action,const char *hint, -int ignore_submodules,int gently); +int has_unstaged_changes (struct repository *repo, +int ignore_submodules); +int has_uncommitted_changes (struct repository *repo, +int ignore_submodules); +int require_clean_work_tree (struct repository *repo, +const char *action, +const char *hint, +int ignore_submodules, +int gently);#endif /* STATUS_H */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 21/21 wt-status.c: remove implicit dependency the_repository
In reply to Nguyễn Thái Ngọc Duy--- ref-filter.c | 2 +- wt-status.c | 24 +++++++++++++----------- wt-status.h | 4 +++- 3 files changed, 17 insertions(+), 13 deletions(-)
ref-filter.c +1 -1
@@ -1409,7 +1409,7 @@ char *get_head_description(void)struct strbuf desc =STRBUF_INIT ;struct wt_status_state state;memset (&state,0 ,sizeof (state)); -wt_status_get_state (&state,1 ); +wt_status_get_state (the_repository, &state,1 );if (state.rebase_in_progress || state.rebase_interactive_in_progress) {if (state.branch)
wt-status.c +13 -11
@@ -1322,7 +1322,7 @@ static void show_rebase_in_progress(struct wt_status *s,status_printf_ln (s, color,_ (" (use \"git rebase --abort\" to check out the original branch)" )); } - }else if (state->rebase_in_progress || !stat (git_path_merge_msg (the_repository), &st)) { + }else if (state->rebase_in_progress || !stat (git_path_merge_msg (s->repo), &st)) {print_rebase_state (s, state, color);if (s->hints) status_printf_ln(s, color,
@@ -1477,7 +1477,8 @@ static int grab_1st_switch(struct object_id *ooid, struct object_id *noid,return 1 ; } -static void wt_status_get_detached_from (struct wt_status_state *state) +static void wt_status_get_detached_from (struct repository *repo, +struct wt_status_state *state) {struct grab_1st_switch_cbdata cb;struct commit *commit;
@@ -1494,7 +1495,7 @@ static void wt_status_get_detached_from(struct wt_status_state *state)/* sha1 is a commit? match without further lookup */ (!oidcmp (&cb.noid, &oid) ||/* perhaps sha1 is a tag, try to dereference to a commit */ - ((commit =lookup_commit_reference_gently (the_repository, &oid,1 )) !=NULL && + ((commit =lookup_commit_reference_gently (repo, &oid,1 )) !=NULL && !oidcmp(&cb.noid, &commit->object.oid)))) { const char *from = ref;if (!skip_prefix (from,"refs/tags/" , &from))
@@ -1551,30 +1552,31 @@ int wt_status_check_bisect(const struct worktree *wt,return 0 ; } -void wt_status_get_state (struct wt_status_state *state, +void wt_status_get_state (struct repository *repo, +struct wt_status_state *state,int get_detached_from) {struct stat st;struct object_id oid; -if (!stat (git_path_merge_head (the_repository), &st)) { +if (!stat (git_path_merge_head (repo), &st)) { state->merge_in_progress =1 ; }else if (wt_status_check_rebase (NULL , state)) { ;/* all set */ - }else if (!stat (git_path_cherry_pick_head (the_repository), &st) && + }else if (!stat (git_path_cherry_pick_head (repo), &st) && !get_oid ("CHERRY_PICK_HEAD" , &oid)) { state->cherry_pick_in_progress =1 ;oidcpy (&state->cherry_pick_head_oid, &oid); }wt_status_check_bisect (NULL , state); -if (!stat (git_path_revert_head (the_repository), &st) && +if (!stat (git_path_revert_head (repo), &st) && !get_oid ("REVERT_HEAD" , &oid)) { state->revert_in_progress =1 ;oidcpy (&state->revert_head_oid, &oid); }if (get_detached_from) -wt_status_get_detached_from (state); +wt_status_get_detached_from (repo, state); } static void wt_longstatus_print_state(struct wt_status *s,
@@ -1602,7 +1604,7 @@ static void wt_longstatus_print(struct wt_status *s)struct wt_status_state state;memset (&state,0 ,sizeof (state)); -wt_status_get_state (&state, +wt_status_get_state (s->repo, &state, s->branch && !strcmp (s->branch,"HEAD" ));if (s->branch) {
@@ -1947,7 +1949,7 @@ static void wt_porcelain_v2_print_tracking(struct wt_status *s)char eol = s->null_termination ?'\0' :'\n' ;memset (&state,0 ,sizeof (state)); -wt_status_get_state (&state, s->branch && !strcmp (s->branch,"HEAD" )); +wt_status_get_state (s->repo, &state, s->branch && !strcmp (s->branch,"HEAD" )); fprintf(s->fp, "# branch.oid %s%c", (s->is_initial ? "(initial)" : sha1_to_hex(s->sha1_commit)),
@@ -2355,7 +2357,7 @@ int has_uncommitted_changes(struct repository *repo,* We have no head (or it's corrupt); use the empty tree, * which will complain if the index is non-empty. */ -struct tree *tree =lookup_tree (the_repository, the_hash_algo->empty_tree); +struct tree *tree =lookup_tree (repo, the_hash_algo->empty_tree);add_pending_object (&rev_info, &tree->object,"" ); }
wt-status.h +3 -1
@@ -132,7 +132,9 @@ void wt_status_add_cut_line(FILE *fp);void wt_status_prepare (struct wt_status *s,struct repository *repo);void wt_status_print (struct wt_status *s);void wt_status_collect (struct wt_status *s); -void wt_status_get_state (struct wt_status_state *state,int get_detached_from); +void wt_status_get_state (struct repository *repo, +struct wt_status_state *state, +int get_detached_from);int wt_status_check_rebase (const struct worktree *wt,struct wt_status_state *state); int wt_status_check_bisect(const struct worktree *wt,
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 11/21 merge.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/merge.c | 8 +++++--- builtin/pull.c | 7 +++++-- cache.h | 6 ++++-- merge.c | 20 +++++++++++--------- sequencer.c | 6 +++--- 5 files changed, 28 insertions(+), 19 deletions(-)
builtin/merge.c +5 -3
@@ -728,8 +728,9 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,die (_ ("unable to write %s" ),get_index_file ());return clean ?0 :1 ; }else { -return try_merge_command (strategy, xopts_nr, xopts, - common, head_arg, remoteheads); +return try_merge_command (the_repository, + strategy, xopts_nr, xopts, + common, head_arg, remoteheads); } }
@@ -1470,7 +1471,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) goto done; } -if (checkout_fast_forward (&head_commit->object.oid, +if (checkout_fast_forward (the_repository, + &head_commit->object.oid, &commit->object.oid, overwrite_ignore)) { ret =1 ;
builtin/pull.c +5 -2
@@ -562,7 +562,9 @@ static int pull_into_void(const struct object_id *merge_head,* index/worktree changes that the user already made on the unborn * branch. */ -if (checkout_fast_forward (the_hash_algo->empty_tree, merge_head,0 )) +if (checkout_fast_forward (the_repository, + the_hash_algo->empty_tree, + merge_head,0 ))return 1 ;if (update_ref ("initial pull" ,"HEAD" , merge_head, curr_head,0 ,UPDATE_REFS_DIE_ON_ERR ))
@@ -915,7 +917,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)"fast-forwarding your working tree from\n" "commit %s."), oid_to_hex(&orig_head)); -if (checkout_fast_forward (&orig_head, &curr_head,0 )) +if (checkout_fast_forward (the_repository, &orig_head, + &curr_head,0 )) die(_("Cannot fast-forward your working tree.\n" "After making sure that you saved anything precious from\n" "$ git diff %s\n"
cache.h +4 -2
@@ -1706,10 +1706,12 @@ extern struct startup_info *startup_info;/* merge.c */ struct commit_list ; -int try_merge_command (const char *strategy,size_t xopts_nr, +int try_merge_command (struct repository *repo, +const char *strategy,size_t xopts_nr,const char **xopts,struct commit_list *common,const char *head_arg,struct commit_list *remotes); -int checkout_fast_forward (const struct object_id *from, +int checkout_fast_forward (struct repository *repo, +const struct object_id *from,const struct object_id *to,int overwrite_ignore);
merge.c +11 -9
@@ -14,7 +14,8 @@ static const char *merge_argument(struct commit *commit)return oid_to_hex (commit ? &commit->object.oid : the_hash_algo->empty_tree); } -int try_merge_command (const char *strategy,size_t xopts_nr, +int try_merge_command (struct repository *repo, +const char *strategy,size_t xopts_nr,const char **xopts,struct commit_list *common,const char *head_arg,struct commit_list *remotes) {
@@ -35,15 +36,16 @@ int try_merge_command(const char *strategy, size_t xopts_nr, ret =run_command_v_opt (args.argv,RUN_GIT_CMD );argv_array_clear (&args); -discard_cache (); -if (read_cache () <0 ) +discard_index (repo->index); +if (read_index (repo->index) <0 )die (_ ("failed to read the cache" )); -resolve_undo_clear (); +resolve_undo_clear_index (repo->index);return ret; } -int checkout_fast_forward (const struct object_id *head, +int checkout_fast_forward (struct repository *repo, +const struct object_id *head,const struct object_id *remote,int overwrite_ignore) {
@@ -54,7 +56,7 @@ int checkout_fast_forward(const struct object_id *head,struct dir_struct dir;struct lock_file lock_file =LOCK_INIT ; -refresh_cache (REFRESH_QUIET ); +refresh_index (repo->index,REFRESH_QUIET ,NULL ,NULL ,NULL );if (hold_locked_index (&lock_file,LOCK_REPORT_ON_ERROR ) <0 )return -1 ;
@@ -86,8 +88,8 @@ int checkout_fast_forward(const struct object_id *head, } opts.head_idx =1 ; - opts.src_index = &the_index; - opts.dst_index = &the_index; + opts.src_index = repo->index; + opts.dst_index = repo->index; opts.update =1 ; opts.verbose_update =1 ; opts.merge =1 ;
@@ -101,7 +103,7 @@ int checkout_fast_forward(const struct object_id *head, }clear_unpack_trees_porcelain (&opts); -if (write_locked_index (&the_index, &lock_file,COMMIT_LOCK )) +if (write_locked_index (repo->index, &lock_file,COMMIT_LOCK ))return error (_ ("unable to write new index file" ));return 0 ; }
sequencer.c +3 -3
@@ -470,8 +470,8 @@ static int fast_forward_to(const struct object_id *to, const struct object_id *fstruct strbuf sb =STRBUF_INIT ;struct strbuf err =STRBUF_INIT ; -read_cache (); -if (checkout_fast_forward (from, to,1 )) +read_index (&the_index); +if (checkout_fast_forward (the_repository, from, to,1 ))return -1 ;/* the callee should have complained already */ strbuf_addf (&sb,_ ("%s: fast-forward" ),_ (action_name (opts)));
@@ -1798,7 +1798,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,commit_list_insert (base, &common);commit_list_insert (next, &remotes); - res |=try_merge_command (opts->strategy, + res |=try_merge_command (the_repository, opts->strategy, opts->xopts_nr, (const char **)opts->xopts, common,oid_to_hex (&head), remotes);free_commit_list (common);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH 13/21 sha1-file.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/difftool.c | 2 +- builtin/hash-object.c | 2 +- builtin/replace.c | 2 +- builtin/update-index.c | 2 +- cache.h | 4 ++-- diff.c | 20 ++++++++--------- notes-merge.c | 2 +- read-cache.c | 25 ++++++++++++--------- sha1-file.c | 50 ++++++++++++++++++++++++------------------ 9 files changed, 61 insertions(+), 48 deletions(-)
builtin/difftool.c +1 -1
@@ -112,7 +112,7 @@ static int use_wt_file(const char *workdir, const char *name,int fd =open (buf.buf,O_RDONLY );if (fd >=0 && - !index_fd (&wt_oid, fd, &st,OBJ_BLOB , name,0 )) { + !index_fd (&the_index, &wt_oid, fd, &st,OBJ_BLOB , name,0 )) {if (is_null_oid (oid)) {oidcpy (oid, &wt_oid); use =1 ;
builtin/hash-object.c +1 -1
@@ -40,7 +40,7 @@ static void hash_fd(int fd, const char *type, const char *path, unsigned flags,if (fstat (fd, &st) <0 || (literally ?hash_literally (&oid, fd, type, flags) - :index_fd (&oid, fd, &st,type_from_string (type), path, flags))) + :index_fd (&the_index, &oid, fd, &st,type_from_string (type), path, flags)))die ((flags &HASH_WRITE_OBJECT ) ?"Unable to add %s to database" :"Unable to hash %s" , path);
builtin/replace.c +1 -1
@@ -295,7 +295,7 @@ static int import_object(struct object_id *oid, enum object_type type,close (fd);return -1 ; } -if (index_fd (oid, fd, &st, type,NULL , flags) <0 ) +if (index_fd (&the_index, oid, fd, &st, type,NULL , flags) <0 )return error (_ ("unable to write object to database" ));/* index_fd close()s fd for us */ }
builtin/update-index.c +1 -1
@@ -282,7 +282,7 @@ static int add_one_path(const struct cache_entry *old, const char *path, int lenfill_stat_cache_info (ce, st); ce->ce_mode =ce_mode_from_stat (old, st->st_mode); -if (index_path (&ce->oid, path, st, +if (index_path (&the_index, &ce->oid, path, st, info_only ?0 :HASH_WRITE_OBJECT )) {discard_cache_entry (ce);return -1 ;
cache.h +2 -2
@@ -787,8 +787,8 @@ extern int ie_modified(struct index_state *, const struct cache_entry *, struct#define HASH_WRITE_OBJECT 1#define HASH_FORMAT_CHECK 2#define HASH_RENORMALIZE 4 -extern int index_fd (struct object_id *oid,int fd,struct stat *st,enum object_type type,const char *path,unsigned flags); -extern int index_path (struct object_id *oid,const char *path,struct stat *st,unsigned flags); +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);/* * Record to sd the data from st that we use to check whether a file
diff.c +10 -10
@@ -4252,7 +4252,7 @@ static void run_diff_cmd(const char *pgm,fprintf (o->file,"* Unmerged path %s\n" , name); } -static void diff_fill_oid_info (struct diff_filespec *one) +static void diff_fill_oid_info (struct diff_filespec *one,struct index_state *istate) {if (DIFF_FILE_VALID (one)) {if (!one->oid_valid) {
@@ -4263,7 +4263,7 @@ static void diff_fill_oid_info(struct diff_filespec *one) }if (lstat (one->path, &st) <0 )die_errno ("stat '%s'" , one->path); -if (index_path (&one->oid, one->path, &st,0 )) +if (index_path (istate, &one->oid, one->path, &st,0 ))die ("cannot hash %s" , one->path); } }
@@ -4311,8 +4311,8 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)return ; } -diff_fill_oid_info (one); -diff_fill_oid_info (two); +diff_fill_oid_info (one, o->repo->index); +diff_fill_oid_info (two, o->repo->index); if (!pgm && DIFF_FILE_VALID(one) && DIFF_FILE_VALID(two) &&
@@ -4359,8 +4359,8 @@ static void run_diffstat(struct diff_filepair *p, struct diff_options *o,if (o->prefix_length)strip_prefix (o->prefix_length, &name, &other); -diff_fill_oid_info (p->one); -diff_fill_oid_info (p->two); +diff_fill_oid_info (p->one, o->repo->index); +diff_fill_oid_info (p->two, o->repo->index);builtin_diffstat (name, other, p->one, p->two, diffstat, o, p);
@@ -4384,8 +4384,8 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)if (o->prefix_length)strip_prefix (o->prefix_length, &name, &other); -diff_fill_oid_info (p->one); -diff_fill_oid_info (p->two); +diff_fill_oid_info (p->one, o->repo->index); +diff_fill_oid_info (p->two, o->repo->index);builtin_checkdiff (name, other, attr_path, p->one, p->two, o); }
@@ -5685,8 +5685,8 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oidif (DIFF_PAIR_UNMERGED (p))continue ; -diff_fill_oid_info (p->one); -diff_fill_oid_info (p->two); +diff_fill_oid_info (p->one, options->repo->index); +diff_fill_oid_info (p->two, options->repo->index); len1 =remove_space (p->one->path,strlen (p->one->path)); len2 =remove_space (p->two->path,strlen (p->two->path));
notes-merge.c +1 -1
@@ -710,7 +710,7 @@ int notes_merge_commit(struct notes_merge_options *o,/* write file as blob, and add to partial_tree */ if (stat (path.buf, &st))die_errno ("Failed to stat '%s'" , path.buf); -if (index_path (&blob_oid, path.buf, &st,HASH_WRITE_OBJECT )) +if (index_path (&the_index, &blob_oid, path.buf, &st,HASH_WRITE_OBJECT ))die ("Failed to write blob object from '%s'" , path.buf);if (add_note (partial_tree, &obj_oid, &blob_oid,NULL )) die("Failed to add resolved note '%s' to notes tree",
read-cache.c +15 -10
@@ -205,14 +205,16 @@ void fill_stat_cache_info(struct cache_entry *ce, struct stat *st) } } -static int ce_compare_data (const struct cache_entry *ce,struct stat *st) +static int ce_compare_data (struct index_state *istate, +const struct cache_entry *ce, +struct stat *st) {int match =-1 ;int fd =git_open_cloexec (ce->name,O_RDONLY );if (fd >=0 ) {struct object_id oid; -if (!index_fd (&oid, fd, st,OBJ_BLOB , ce->name,0 )) +if (!index_fd (istate, &oid, fd, st,OBJ_BLOB , ce->name,0 )) match =oidcmp (&oid, &ce->oid);/* index_fd() closed the file descriptor already */ }
@@ -257,11 +259,13 @@ static int ce_compare_gitlink(const struct cache_entry *ce)return oidcmp (&oid, &ce->oid); } -static int ce_modified_check_fs (const struct cache_entry *ce,struct stat *st) +static int ce_modified_check_fs (struct index_state *istate, +const struct cache_entry *ce, +struct stat *st) {switch (st->st_mode &S_IFMT ) {case S_IFREG : -if (ce_compare_data (ce, st)) +if (ce_compare_data (istate, ce, st))return DATA_CHANGED ;break ;case S_IFLNK :
@@ -407,7 +411,7 @@ int ie_match_stat(struct index_state *istate,if (assume_racy_is_modified) changed |=DATA_CHANGED ;else - changed |=ce_modified_check_fs (ce, st); + changed |=ce_modified_check_fs (istate, ce, st); }return changed;
@@ -447,7 +451,7 @@ int ie_modified(struct index_state *istate, (S_ISGITLINK(ce->ce_mode) || ce->ce_stat_data.sd_size != 0))return changed; - changed_fs =ce_modified_check_fs (ce, st); + changed_fs =ce_modified_check_fs (istate, ce, st);if (changed_fs)return changed | changed_fs;return 0 ;
@@ -753,7 +757,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, } }if (!intent_only) { -if (index_path (&ce->oid, path, st, newflags)) { +if (index_path (istate, &ce->oid, path, st, newflags)) {discard_cache_entry (ce);return error ("unable to index file %s" , path); }
@@ -2230,7 +2234,8 @@ static int ce_flush(git_hash_ctx *context, int fd, unsigned char *hash)return (write_in_full (fd, write_buffer, left) <0 ) ?-1 :0 ; } -static void ce_smudge_racily_clean_entry (struct cache_entry *ce) +static void ce_smudge_racily_clean_entry (struct index_state *istate, +struct cache_entry *ce) {/* * The only thing we care about in this function is to smudge the
@@ -2249,7 +2254,7 @@ static void ce_smudge_racily_clean_entry(struct cache_entry *ce)return ;if (ce_match_stat_basic (ce, &st))return ; -if (ce_modified_check_fs (ce, &st)) { +if (ce_modified_check_fs (istate, ce, &st)) {/* This is "racily clean"; smudge it. Note that this * is a tricky code. At first glance, it may appear * that it can break with this sequence:
@@ -2494,7 +2499,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,if (ce->ce_flags &CE_REMOVE )continue ;if (!ce_uptodate (ce) &&is_racy_timestamp (istate, ce)) -ce_smudge_racily_clean_entry (ce); +ce_smudge_racily_clean_entry (istate, ce);if (is_null_oid (&ce->oid)) {static const char msg[] ="cache entry has null sha1: %s" ;static int allow =-1 ;
sha1-file.c +29 -21
134 lines not on this page · raw message
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
Quoted 5 lines · Nguyễn Thái Ngọc Duy
This continues the journey of getting rid of
the_indexat least in library code. The focus of part 4 is diff code. Since 'struct repository *' is passed around more (and even more in part 5), I take this opportunity to remove somethe_repositoryreferences too.
yay! Thank you for continuing on the_index!
Quoted 5 lines
Besides some small conflicts on 'pu', like the previous part, it also breaks 'pu' because of API changes. The fix is trivial though, just prepend
the_repositoryas the first argument for the broken function calls.
This sounds like a problem. I said the same when sending the object store lookup series, which ended via3a2a1dc1707 (Merge branch 'sb/object-store-lookup', 2018-08-02) in master, but I do recall Junio being somewhat unhappy about it[1].
By just adding the argument to the function, it might merge easily but not compile, which would have to be fixed up; and that object store series seemed to touch a lot of functions that were also used in series in-flight.
I have since lost track of the refactoring and focused more on submodules again, but plan to come back to more 'repositorification'.
Quoted 2 lines
After this and ~20 more patches in part5,
the_indexis gone from library code.
This sounds promising! I'll take a look.
Quoted 1 line
diff.c | 259 +++++++++++++++++++++++------------------
Ugh? That sounds like there is an interesting change coming.
Stefan
Re: [PATCH 02/21] read-cache.c: remove 'const' from index_has_changes()
In reply to Nguyễn Thái Ngọc DuyQuoted 3 lines · Nguyễn Thái Ngọc Duy
This function calls
do_diff_cache()which eventually needs to set this "istate" tounpack_options->src_index(*). This is an unfornate fact
unfortunate
diff.c
Quoted 1 line
diff.c +0
-0
Unlike I thought in the cover letter, this is just adding the repository all over the place and not adding new code, despite the size.
A cursory read seems to make sense, though I'd nitpick on the choice of the variable name as I used to use 'r' for the repository struct. I am not saying that is better, but we could think if we want to strive for some consistency eventually. (for example most strbufs are named 'sb', as they are temporary helpers with no explicit naming required. So maybe we could strive to name all "repository pass throughs" to be "repo" or "r").
It's sad to see the diff code invaded by the need of the_repository, but the dependency is there, so it is better to have it explicit than implicit.
Thanks,
Stefan
Re: [PATCH 12/21] patch-ids.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duypatch-ids.c static int patch_id_cmp(const void *cmpfn_data, · line 62
Quoted 6 lines
patch-ids.c +2
-2-int init_patch_ids (struct patch_ids *ids) +int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, the_repository); +diff_setup (&ids->diffopts, repo);
Just realized when looking at this diff, though it applies to other patches as well. (and reading Documentation/technical/api-diff.txt confirms my thinking IMHO)
What makes the repository argument any special compared to the rest of the diff options?
So I would expect the setup to look like
memset(ids, 0, sizeof(*ids));
ids->diffopts->repo = the_repository;
diff_setup(&ids->diffopts);here and in diff_setup, we'd have
if (!options->repo)
options->repo = the_repository;or even put the_repository into default_diff_options, but then I wonder how this deals with no-repo invocations (git diff --no-index examples for bug reports)
Re: [PATCH 02/21] read-cache.c: remove 'const' from index_has_changes()
In reply to Stefan BellerQuoted 13 lines · Stefan Beller
Quoted 3 lines · Nguyễn Thái Ngọc Duy
This function calls
do_diff_cache()which eventually needs to set this "istate" tounpack_options->src_index(*). This is an unfornate factunfortunate
diff.c
Quoted 1 line
diff.c +0
-0Unlike I thought in the cover letter, this is just adding the repository all over the place and not adding new code, despite the size.
Quoted 7 lines
A cursory read seems to make sense, though I'd nitpick on the choice of the variable name as I used to use 'r' for the repository struct. I am not saying that is better, but we could think if we want to strive for some consistency eventually. (for example most strbufs are named 'sb', as they are temporary helpers with no explicit naming required. So maybe we could strive to name all "repository pass throughs" to be "repo" or "r").
"r" it is! I forgot about it. But this is for local variable or argument names only right? The field name (in diff_options for example) should stay something more descriptive like repo, I think.
Signature · 1 line
Duy
Quoted 10 lines · Stefan Beller
Quoted 4 lines
Besides some small conflicts on 'pu', like the previous part, it also breaks 'pu' because of API changes. The fix is trivial though, just prepend
the_repositoryas the first argument for the broken function calls.This sounds like a problem. I said the same when sending the object store lookup series, which ended via
3a2a1dc1707(Merge branch 'sb/object-store-lookup', 2018-08-02) in master, but I do recall Junio being somewhat unhappy about it[1].
Quoted 4 lines
By just adding the argument to the function, it might merge easily but not compile, which would have to be fixed up; and that object store series seemed to touch a lot of functions that were also used in series in-flight.
Which is why I state it clearly here so Junio could choose not to pick this series up (I'm totally ok with that, I could wait until the dust settles and send again).
Another option is me adding a patch that renames diff_setup() to diff_setup2() or something that takes 'struct repository *', leaving diff_setup() as a light wrapper around diff_setup2(). I would need to wait until in-flight series are merged, then rename diff_setup2() back to diff_setup(). Not sure if it's worth doing.
Quoted 3 lines
Quoted 1 line
diff.c | 259 +++++++++++++++++++++++------------------Ugh? That sounds like there is an interesting change coming.
Yeah. sequencer.c also needs struct repository in lots of places (sha1-name.c comes second). But at least builtin/ code looks a lot like it's supposed to be when 'struct repository *' is introduced, we now have lots of function calls there that pass the_repository...
Signature · 1 line
Duy
Re: [PATCH 02/21] read-cache.c: remove 'const' from index_has_changes()
In reply to Duy NguyenQuoted 3 lines
"r" it is! I forgot about it. But this is for local variable or argument names only right? The field name (in
diff_optionsfor example) should stay something more descriptive like repo, I think.
Yea I agree, we should have more descriptive things in long lived structs.
Thanks,
Stefan
Re: [PATCH 12/21] patch-ids.c: remove implicit dependency on the_index
In reply to Stefan BellerQuoted 21 lines · Stefan Beller
patch-ids.c static int patch_id_cmp(const void *cmpfn_data, · line 62
Quoted 7 lines
patch-ids.c +2
-2-int init_patch_ids (struct patch_ids *ids) +int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, the_repository); +diff_setup (&ids->diffopts, repo);Just realized when looking at this diff, though it applies to other patches as well. (and reading
Documentation/technical/api-diff.txtconfirms my thinking IMHO)What makes the repository argument any special compared to the rest of the diff options?
So I would expect the setup to look like
memset(ids, 0, sizeof(*ids)); ids->diffopts->repo = the_repository; diff_setup(&ids->diffopts);
Quoted 8 lines
here and in
diff_setup, we'd haveif (!options->repo) options->repo = the_repository;or even put
the_repositoryintodefault_diff_options, but then I wonder how this deals with no-repo invocations (git diff --no-index examples for bug reports)
That makes "repo" field optional and I'm very much against falling back to the_repository. revisions.c in the end does not have any the_repository reference, and it's actually undefined for most files. This makes accidentally adding the_repository back much more difficult.
Yes the --no-index stuff will have to be taken care of at some point, but I think for now we could just put "struct repository *" in place first to see what it looks like, then go from there.
Signature · 1 line
Duy
v2 cover Kill the_index part 4
In reply to Nguyễn Thái Ngọc Duyv2 changes:
- the 'repo' argument is renamed to 'r' in most places. I still keep 'repo' as the name if it's not the first argument (i.e. it's some normal parameter and not the "this" object in C++ sense).
- I accidentally merged the diff.c changes into the 'read-cache.c:
remove const...' patch last time. It's now split up.
- wt-status.c is swapped out and revision.c takes its place at the end of the series. I figure revision.c and diff.c usually play hand in hand, might as well keep them in one part.
- The last patch is just to make sure 'pu' still builds after resolving conflicts, in case Junio picks it up. If 'stash' and 'rebase' topics enter 'master' first, I could just drop this one. Otherwise I'll revert it some time later.
Nguyễn Thái Ngọc Duy (24):
archive.c: remove implicit dependency the_repository read-cache.c: remove 'const' from index_has_changes() diff.c: reduce implicit dependency on the_index combine-diff.c: remove implicit dependency on the_index blame.c: rename "repo" argument to "r"
diff.c: remove the_index dependency in textconv() functions grep.c: remove implicit dependency on the_index diff.c: remove implicit dependency on the_index read-cache.c: remove implicit dependency on the_index diff-lib.c: remove implicit dependency on the_index ll-merge.c: remove implicit dependency on the_index merge-blobs.c: remove implicit dependency on the_index merge.c: remove implicit dependency on the_index patch-ids.c: remove implicit dependency on the_index sha1-file.c: remove implicit dependency on the_index rerere.c: remove implicit dependency on the_index userdiff.c: remove implicit dependency on the_index line-range.c: remove implicit dependency on the_index submodule.c: remove implicit dependency on the_index tree-diff.c: remove implicit dependency on the_index ws.c: remove implicit dependency on the_index revision.c: remove implicit dependency on the_index revision.c: reduce implicit dependency the_repository Rename functions to avoid breaking in-flight topics
apply.c | 19 ++- archive-zip.c | 14 +- archive.c | 2 +- bisect.c | 4 +- blame.c | 63 ++++---- builtin/add.c | 4 +- builtin/am.c | 10 +- builtin/blame.c | 4 +- builtin/cat-file.c | 6 +- builtin/checkout.c | 7 +- builtin/commit.c | 4 +- builtin/describe.c | 4 +- builtin/diff-files.c | 2 +- builtin/diff-index.c | 2 +- builtin/diff-tree.c | 2 +- builtin/diff.c | 4 +- builtin/difftool.c | 2 +- builtin/fast-export.c | 2 +- builtin/fmt-merge-msg.c | 2 +- builtin/grep.c | 7 +- builtin/hash-object.c | 2 +- builtin/log.c | 25 +-- builtin/merge-tree.c | 2 +- builtin/merge.c | 16 +- builtin/pack-objects.c | 2 +- builtin/prune.c | 2 +- builtin/pull.c | 9 +- builtin/range-diff.c | 2 +- builtin/reflog.c | 2 +- builtin/replace.c | 2 +- builtin/rerere.c | 6 +- builtin/reset.c | 1 + builtin/rev-list.c | 2 +- builtin/revert.c | 2 +- builtin/shortlog.c | 2 +- builtin/submodule--helper.c | 2 +- builtin/update-index.c | 2 +- bundle.c | 4 +- cache.h | 14 +- combine-diff.c | 32 ++-- diff-lib.c | 21 +-- diff-no-index.c | 9 +- diff.c | 261 ++++++++++++++++++------------- diff.h | 20 ++- diffcore-break.c | 12 +- diffcore-delta.c | 12 +- diffcore-pickaxe.c | 8 +- diffcore-rename.c | 35 +++-- diffcore.h | 13 +- grep.c | 34 ++-- grep.h | 10 +- http-push.c | 2 +- line-log.c | 25 +-- line-range.c | 22 ++- line-range.h | 6 +- list-objects.c | 8 +- ll-merge.c | 17 +- ll-merge.h | 5 +- merge-blobs.c | 16 +- merge-blobs.h | 7 +- merge-recursive.c | 7 +- merge.c | 20 +-- notes-merge.c | 9 +- pack-bitmap-write.c | 2 +- patch-ids.c | 4 +- patch-ids.h | 3 +- read-cache.c | 33 ++-- ref-filter.c | 2 +- remote.c | 2 +- rerere.c | 121 +++++++------- rerere.h | 10 +- revision.c | 76 ++++----- revision.h | 13 +- sequencer.c | 18 +-- sha1-file.c | 50 +++--- shallow.c | 2 +- submodule.c | 34 ++-- submodule.h | 9 +- t/helper/test-revision-walking.c | 2 +- transport.c | 9 +- tree-diff.c | 2 +- userdiff.c | 5 +- userdiff.h | 3 +- ws.c | 5 +- wt-status.c | 10 +- 85 files changed, 740 insertions(+), 549 deletions(-)
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 1/24 archive.c: remove implicit dependency the_repository
The new "repo" field in archive_args has been added since b612ee202a (archive.c: avoid access to the_index - 2018-08-13). Use it instead of hard coding the_repository.
--- archive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
archive.c +1 -1
@@ -391,7 +391,7 @@ static void parse_treeish_arg(const char **argv,if (get_oid (name, &oid))die ("Not a valid object name" ); - commit =lookup_commit_reference_gently (the_repository, &oid,1 ); + commit =lookup_commit_reference_gently (ar_args->repo, &oid,1 );if (commit) { commit_sha1 = commit->object.oid.hash; archive_time = commit->date;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 2/24 read-cache.c: remove 'const' from index_has_changes()
In reply to Nguyễn Thái Ngọc DuyThis function calls do_diff_cache() which eventually needs to set this "istate" to unpack_options->src_index (*). This is an unfortunate fact that unpack_trees() _will_ destroy src_index so we can't really pass a const index_state there. Just remove 'const'.
(*) Right now diff_cache() in diff-lib.c assigns the_index to
src_index. But the plan is to get rid of the_index, so it should be 'istate' from here that gets assigned to src_index.
--- cache.h | 2 +- read-cache.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
cache.h +1 -1
@@ -703,7 +703,7 @@ extern int unmerged_index(const struct index_state *);* provided, the space-separated list of files that differ will be appended * to it. */ -extern int index_has_changes (const struct index_state *istate, +extern int index_has_changes (struct index_state *istate,struct tree *tree,struct strbuf *sb);
read-cache.c +1 -1
@@ -2122,7 +2122,7 @@ int unmerged_index(const struct index_state *istate)return 0 ; } -int index_has_changes (const struct index_state *istate, +int index_has_changes (struct index_state *istate,struct tree *tree,struct strbuf *sb) {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 4/24 combine-diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- combine-diff.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
combine-diff.c +2 -1
@@ -1054,7 +1054,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,if (is_file) {struct strbuf buf =STRBUF_INIT ; -if (convert_to_git (&the_index, elem->path, result, len, &buf, global_conv_flags_eol)) { +if (convert_to_git (rev->diffopt.repo->index, + elem->path, result, len, &buf, global_conv_flags_eol)) {free (result); result =strbuf_detach (&buf, &len); result_size = len;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 3/24 diff.c: reduce implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duydiff and textconv code has so widespread use that it's hard to simply update their api and all call sites at once because it would result in a big patch. For now reduce the_index references to two places:diff_setup() and fill_textconv().
--- builtin/reset.c | 1 + diff.c | 176 +++++++++++++++++++++++++++------------------- diff.h | 3 + diffcore-break.c | 12 ++-- diffcore-delta.c | 12 ++-- diffcore-rename.c | 35 +++++---- diffcore.h | 13 ++-- line-log.c | 21 +++--- 8 files changed, 161 insertions(+), 112 deletions(-)
builtin/reset.c +1 -0
@@ -159,6 +159,7 @@ static int read_from_tree(const struct pathspec *pathspec, opt.format_callback = update_index_from_diff; opt.format_callback_data = &intent_to_add; opt.flags.override_submodule_config =1 ; + opt.repo = the_repository;if (do_diff_cache (tree_oid, &opt))return 1 ;
diff.c +102 -74
497 lines not on this page · raw message
diff.h +3 -0
@@ -18,6 +18,7 @@ struct userdiff_driver;struct oid_array ;struct commit ;struct combine_diff_path ; +struct repository ;typedef int (*pathchange_fn_t )(struct diff_options *options,struct combine_diff_path *path);
@@ -220,6 +221,8 @@ struct diff_options {/* XDF_WHITESPACE_FLAGS regarding block detection are set at 2, 3, 4 */ #define COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE (1<<5)int color_moved_ws_handling; + +struct repository *repo; };void diff_emit_submodule_del (struct diff_options *o,const char *line);
diffcore-break.c +7 -5
@@ -5,7 +5,8 @@#include "diff.h" #include "diffcore.h" -static int should_break (struct diff_filespec *src, +static int should_break (struct repository *r, +struct diff_filespec *src,struct diff_filespec *dst,int break_score,int *merge_score_p)
@@ -61,7 +62,8 @@ static int should_break(struct diff_filespec *src, !oidcmp(&src->oid, &dst->oid))return 0 ;/* they are the same */ -if (diff_populate_filespec (src,0 ) ||diff_populate_filespec (dst,0 )) +if (diff_populate_filespec (r, src,0 ) || +diff_populate_filespec (r, dst,0 ))return 0 ;/* error but caught downstream */ max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -71,7 +73,7 @@ static int should_break(struct diff_filespec *src,if (!src->size)return 0 ;/* we do not let empty files get renamed */ -if (diffcore_count_changes (src, dst, +if (diffcore_count_changes (r, src, dst, &src->cnt_data, &dst->cnt_data, &src_copied, &literal_added))return 0 ;
@@ -114,7 +116,7 @@ static int should_break(struct diff_filespec *src,return 1 ; } -void diffcore_break (int break_score) +void diffcore_break (struct repository *r,int break_score) {struct diff_queue_struct *q = &diff_queued_diff;struct diff_queue_struct outq;
@@ -178,7 +180,7 @@ void diffcore_break(int break_score) object_type(p->one->mode) == OBJ_BLOB && object_type(p->two->mode) == OBJ_BLOB && !strcmp(p->one->path, p->two->path)) { -if (should_break (p->one, p->two, +if (should_break (r, p->one, p->two, break_score, &score)) {/* Split this into delete and create */ struct diff_filespec *null_one, *null_two;
diffcore-delta.c +7 -5
@@ -121,14 +121,15 @@ static int spanhash_cmp(const void *a_, const void *b_) a->hashval > b->hashval ?1 :0 ; } -static struct spanhash_top *hash_chars (struct diff_filespec *one) +static struct spanhash_top *hash_chars (struct repository *r, +struct diff_filespec *one) {int i, n;unsigned int accum1, accum2, hashval;struct spanhash_top *hash;unsigned char *buf = one->data;unsigned int sz = one->size; -int is_text = !diff_filespec_is_binary (one); +int is_text = !diff_filespec_is_binary (r, one); i =INITIAL_HASH_SIZE ; hash = xmalloc(st_add(sizeof(*hash),
@@ -162,7 +163,8 @@ static struct spanhash_top *hash_chars(struct diff_filespec *one)return hash; } -int diffcore_count_changes(struct diff_filespec *src, +int diffcore_count_changes(struct repository *r, + struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p,
@@ -177,14 +179,14 @@ int diffcore_count_changes(struct diff_filespec *src,if (src_count_p) src_count = *src_count_p;if (!src_count) { - src_count =hash_chars (src); + src_count =hash_chars (r, src);if (src_count_p) *src_count_p = src_count; }if (dst_count_p) dst_count = *dst_count_p;if (!dst_count) { - dst_count =hash_chars (dst); + dst_count =hash_chars (r, dst);if (dst_count_p) *dst_count_p = dst_count; }
diffcore-rename.c +22 -13
@@ -128,7 +128,8 @@ struct diff_score {short name_score; }; -static int estimate_similarity (struct diff_filespec *src, +static int estimate_similarity (struct repository *r, +struct diff_filespec *src,struct diff_filespec *dst,int minimum_score) {
@@ -165,10 +166,10 @@ static int estimate_similarity(struct diff_filespec *src,* say whether the size is valid or not!) */ if (!src->cnt_data && -diff_populate_filespec (src,CHECK_SIZE_ONLY )) +diff_populate_filespec (r, src,CHECK_SIZE_ONLY ))return 0 ;if (!dst->cnt_data && -diff_populate_filespec (dst,CHECK_SIZE_ONLY )) +diff_populate_filespec (r, dst,CHECK_SIZE_ONLY ))return 0 ; max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -186,12 +187,12 @@ static int estimate_similarity(struct diff_filespec *src,if (max_size * (MAX_SCORE -minimum_score) < delta_size *MAX_SCORE )return 0 ; -if (!src->cnt_data &&diff_populate_filespec (src,0 )) +if (!src->cnt_data &&diff_populate_filespec (r, src,0 ))return 0 ; -if (!dst->cnt_data &&diff_populate_filespec (dst,0 )) +if (!dst->cnt_data &&diff_populate_filespec (r, dst,0 ))return 0 ; -if (diffcore_count_changes (src, dst, +if (diffcore_count_changes (r, src, dst, &src->cnt_data, &dst->cnt_data, &src_copied, &literal_added))return 0 ;
@@ -256,10 +257,11 @@ struct file_similarity {struct diff_filespec *filespec; }; -static unsigned int hash_filespec (struct diff_filespec *filespec) +static unsigned int hash_filespec (struct repository *r, +struct diff_filespec *filespec) {if (!filespec->oid_valid) { -if (diff_populate_filespec (filespec,0 )) +if (diff_populate_filespec (r, filespec,0 ))return 0 ;hash_object_file (filespec->data, filespec->size,"blob" , &filespec->oid);
@@ -280,7 +282,9 @@ static int find_identical_files(struct hashmap *srcs,/* * Find the best source match for specified destination. */ - p =hashmap_get_from_hash (srcs,hash_filespec (target),NULL ); + p =hashmap_get_from_hash (srcs, +hash_filespec (options->repo, target), +NULL );for (; p; p =hashmap_get_next (srcs, p)) {int score;struct diff_filespec *source = p->filespec;
@@ -316,14 +320,16 @@ static int find_identical_files(struct hashmap *srcs,return renames; } -static void insert_file_table (struct hashmap *table,int index,struct diff_filespec *filespec) +static void insert_file_table (struct repository *r, +struct hashmap *table,int index, +struct diff_filespec *filespec) {struct file_similarity *entry =xmalloc (sizeof (*entry)); entry->index = index; entry->filespec = filespec; -hashmap_entry_init (entry,hash_filespec (filespec)); +hashmap_entry_init (entry,hash_filespec (r, filespec));hashmap_add (table, entry); }
@@ -344,7 +350,9 @@ static int find_exact_renames(struct diff_options *options)*/ hashmap_init (&file_table,NULL ,NULL , rename_src_nr);for (i = rename_src_nr-1 ; i >=0 ; i--) -insert_file_table (&file_table, i, rename_src[i].p->one); +insert_file_table (options->repo, + &file_table, i, + rename_src[i].p->one);/* Walk the destinations and find best source match */ for (i =0 ; i < rename_dst_nr; i++)
@@ -557,7 +565,8 @@ void diffcore_rename(struct diff_options *options) diff_unmodified_pair(rename_src[j].p))continue ; - this_src.score =estimate_similarity (one, two, + this_src.score =estimate_similarity (options->repo, + one, two, minimum_score); this_src.name_score =basename_same (one, two); this_src.dst = i;
diffcore.h +7 -6
@@ -7,6 +7,8 @@#include "cache.h" struct diff_options ; +struct repository ; +struct userdiff_driver ;/* This header file is internal between diff.c and its diff transformers * (e.g. diffcore-rename, diffcore-pickaxe). Never include this header
@@ -26,8 +28,6 @@ struct diff_options;#define MINIMUM_BREAK_SIZE 400/* do not break a file smaller than this */ -struct userdiff_driver ; -struct diff_filespec {struct object_id oid;char *path;
@@ -61,10 +61,10 @@ void fill_filespec(struct diff_filespec *, const struct object_id *,#define CHECK_SIZE_ONLY 1#define CHECK_BINARY 2 -int diff_populate_filespec (struct diff_filespec *,unsigned int ); +int diff_populate_filespec (struct repository *,struct diff_filespec *,unsigned int );void diff_free_filespec_data (struct diff_filespec *);void diff_free_filespec_blob (struct diff_filespec *); -int diff_filespec_is_binary (struct diff_filespec *); +int diff_filespec_is_binary (struct repository *,struct diff_filespec *);struct diff_filepair {struct diff_filespec *one;
@@ -111,7 +111,7 @@ struct diff_filepair *diff_queue(struct diff_queue_struct *, struct diff_filespec *);void diff_q (struct diff_queue_struct *,struct diff_filepair *); -void diffcore_break (int ); +void diffcore_break (struct repository *,int );void diffcore_rename (struct diff_options *);void diffcore_merge_broken (void );void diffcore_pickaxe (struct diff_options *);
@@ -142,7 +142,8 @@ void diff_debug_queue(const char *, struct diff_queue_struct *); #define diff_debug_queue(a,b) do { /* nothing */ } while (0)#endif -int diffcore_count_changes(struct diff_filespec *src, +int diffcore_count_changes(struct repository *r, + struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p,
line-log.c +12 -9
@@ -508,7 +508,9 @@ static void fill_blob_sha1(struct commit *commit, struct diff_filespec *spec)return ; } -static void fill_line_ends (struct diff_filespec *spec,long *lines, +static void fill_line_ends (struct repository *r, +struct diff_filespec *spec, +long *lines,unsigned long **line_ends) {int num =0 , size =50 ;
@@ -516,7 +518,7 @@ static void fill_line_ends(struct diff_filespec *spec, long *lines,unsigned long *ends =NULL ;char *data =NULL ; -if (diff_populate_filespec (spec,0 )) +if (diff_populate_filespec (r, spec,0 ))die ("Cannot read blob %s" ,oid_to_hex (&spec->oid));ALLOC_ARRAY (ends, size);
@@ -555,7 +557,8 @@ static const char *nth_line(void *data, long line) }static struct line_log_data * -parse_lines (struct commit *commit,const char *prefix,struct string_list *args) +parse_lines (struct repository *r,struct commit *commit, +const char *prefix,struct string_list *args) {long lines =0 ;unsigned long *ends =NULL ;
@@ -583,7 +586,7 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) spec =alloc_filespec (full_name);fill_blob_sha1 (commit, spec); -fill_line_ends (spec, &lines, &ends); +fill_line_ends (r, spec, &lines, &ends); cb_data.spec = spec; cb_data.lines = lines; cb_data.line_ends = ends;
@@ -739,7 +742,7 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_liststruct line_log_data *range; commit =check_single_commit (rev); - range =parse_lines (commit, prefix, args); + range =parse_lines (rev->diffopt.repo, commit, prefix, args);add_line_range (rev, commit, range);if (!rev->diffopt.detect_rename) {
@@ -891,8 +894,8 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rangreturn ;if (pair->one->oid_valid) -fill_line_ends (pair->one, &p_lines, &p_ends); -fill_line_ends (pair->two, &t_lines, &t_ends); +fill_line_ends (rev->diffopt.repo, pair->one, &p_lines, &p_ends); +fill_line_ends (rev->diffopt.repo, pair->two, &t_lines, &t_ends);fprintf (opt->file,"%s%sdiff --git a/%s b/%s%s\n" , prefix, c_meta, pair->one->path, pair->two->path, c_reset); fprintf(opt->file, "%s%s--- %s%s%s\n", prefix, c_meta,
@@ -1008,12 +1011,12 @@ static int process_diff_filepair(struct rev_info *rev,return 0 ;assert (pair->two->oid_valid); -diff_populate_filespec (pair->two,0 ); +diff_populate_filespec (rev->diffopt.repo, pair->two,0 ); file_target.ptr = pair->two->data; file_target.size = pair->two->size;if (pair->one->oid_valid) { -diff_populate_filespec (pair->one,0 ); +diff_populate_filespec (rev->diffopt.repo, pair->one,0 ); file_parent.ptr = pair->one->data; file_parent.size = pair->one->size; }else {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 5/24 blame.c: rename "repo" argument to "r"
In reply to Nguyễn Thái Ngọc DuyThe current naming convention for 'struct repository *' is 'r' for temporary variables or arguments. I did not notice this. Since we're updating blame.c again in the next patch, let's fix this.
--- blame.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-)
blame.c +18 -18
@@ -90,7 +90,7 @@ static struct blame_origin *get_origin(struct commit *commit, const char *path) -static void verify_working_tree_path (struct repository *repo, +static void verify_working_tree_path (struct repository *r,struct commit *work_tree,const char *path) {struct commit_list *parents;
@@ -102,15 +102,15 @@ static void verify_working_tree_path(struct repository *repo,unsigned mode;if (!get_tree_entry (commit_oid, path, &blob_oid, &mode) && -oid_object_info (repo, &blob_oid,NULL ) ==OBJ_BLOB ) +oid_object_info (r, &blob_oid,NULL ) ==OBJ_BLOB )return ; } - pos =index_name_pos (repo->index, path,strlen (path)); + pos =index_name_pos (r->index, path,strlen (path));if (pos >=0 ) ;/* path is in the index */ -else if (-1 - pos < repo->index->cache_nr && - !strcmp (repo->index->cache[-1 - pos]->name, path)) +else if (-1 - pos < r->index->cache_nr && + !strcmp (r->index->cache[-1 - pos]->name, path)) ;/* path is in the index, unmerged */ else die ("no such path '%s' in HEAD" , path);
@@ -166,7 +166,7 @@ static void set_commit_buffer_from_strbuf(struct commit *c, struct strbuf *sb)* Prepare a dummy commit that represents the work tree (or staged) item. * Note that annotating work tree item never works in the reverse. */ -static struct commit *fake_working_tree_commit (struct repository *repo, +static struct commit *fake_working_tree_commit (struct repository *r,struct diff_options *opt,const char *path,const char *contents_from)
@@ -183,7 +183,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo,unsigned mode;struct strbuf msg =STRBUF_INIT ; -read_index (repo->index); +read_index (r->index);time (&now); commit =alloc_commit_node (the_repository); commit->object.parsed =1 ;
@@ -195,7 +195,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo, parent_tail =append_parent (parent_tail, &head_oid);append_merge_parents (parent_tail); -verify_working_tree_path (repo, commit, path); +verify_working_tree_path (r, commit, path); origin =make_origin (commit, path);
@@ -253,7 +253,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo,if (strbuf_read (&buf,0 ,0 ) <0 )die_errno ("failed to read from stdin" ); } -convert_to_git (repo->index, path, buf.buf, buf.len, &buf,0 ); +convert_to_git (r->index, path, buf.buf, buf.len, &buf,0 ); origin->file.ptr = buf.buf; origin->file.size = buf.len;pretend_object_file (buf.buf, buf.len,OBJ_BLOB , &origin->blob_oid);
@@ -264,28 +264,28 @@ static struct commit *fake_working_tree_commit(struct repository *repo,* bits; we are not going to write this index out -- we just * want to run "diff-index --cached". */ -discard_index (repo->index); -read_index (repo->index); +discard_index (r->index); +read_index (r->index); len =strlen (path);if (!mode) { -int pos =index_name_pos (repo->index, path, len); +int pos =index_name_pos (r->index, path, len);if (0 <= pos) - mode = repo->index->cache[pos]->ce_mode; + mode = r->index->cache[pos]->ce_mode;else /* Let's not bother reading from HEAD tree */ mode =S_IFREG |0644 ; } - ce =make_empty_cache_entry (repo->index, len); + ce =make_empty_cache_entry (r->index, len);oidcpy (&ce->oid, &origin->blob_oid);memcpy (ce->name, path, len); ce->ce_flags =create_ce_flags (0 ); ce->ce_namelen = len; ce->ce_mode =create_ce_mode (mode); -add_index_entry (repo->index, ce, +add_index_entry (r->index, ce,ADD_CACHE_OK_TO_ADD |ADD_CACHE_OK_TO_REPLACE ); -cache_tree_invalidate_path (repo->index, path); +cache_tree_invalidate_path (r->index, path);return commit; }
@@ -520,14 +520,14 @@ static void queue_blames(struct blame_scoreboard *sb, struct blame_origin *porig* * This also fills origin->mode for corresponding tree path. */ -static int fill_blob_sha1_and_mode (struct repository *repo, +static int fill_blob_sha1_and_mode (struct repository *r,struct blame_origin *origin) {if (!is_null_oid (&origin->blob_oid))return 0 ;if (get_tree_entry (&origin->commit->object.oid, origin->path, &origin->blob_oid, &origin->mode)) goto error_out; -if (oid_object_info (repo, &origin->blob_oid,NULL ) !=OBJ_BLOB ) +if (oid_object_info (r, &origin->blob_oid,NULL ) !=OBJ_BLOB ) goto error_out;return 0 ; error_out:
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 6/24 diff.c: remove the_index dependency in textconv() functions
In reply to Nguyễn Thái Ngọc Duy--- blame.c | 7 ++++--- builtin/cat-file.c | 6 ++++-- builtin/log.c | 3 ++- combine-diff.c | 27 ++++++++++++++++----------- diff.c | 17 +++++++++-------- diff.h | 9 +++++++-- diffcore-pickaxe.c | 4 ++-- grep.c | 2 +- 8 files changed, 45 insertions(+), 30 deletions(-)
blame.c +4 -3
@@ -234,7 +234,7 @@ static struct commit *fake_working_tree_commit(struct repository *r,switch (st.st_mode &S_IFMT ) {case S_IFREG :if (opt->flags.allow_textconv && -textconv_object (read_from, mode, &null_oid,0 , &buf_ptr, &buf_len)) +textconv_object (r, read_from, mode, &null_oid,0 , &buf_ptr, &buf_len))strbuf_attach (&buf, buf_ptr, buf_len, buf_len +1 );else if (strbuf_read_file (&buf, read_from, st.st_size) != st.st_size)die_errno ("cannot open or read '%s'" , read_from);
@@ -318,7 +318,8 @@ static void fill_origin_blob(struct diff_options *opt, (*num_read_blob)++;if (opt->flags.allow_textconv && -textconv_object (o->path, o->mode, &o->blob_oid,1 , &file->ptr, &file_size)) +textconv_object (opt->repo, o->path, o->mode, + &o->blob_oid,1 , &file->ptr, &file_size)) ;else file->ptr = read_object_file(&o->blob_oid, &type,
@@ -1857,7 +1858,7 @@ void setup_scoreboard(struct blame_scoreboard *sb,die (_ ("no such path %s in %s" ), path, final_commit_name);if (sb->revs->diffopt.flags.allow_textconv && -textconv_object (path, o->mode, &o->blob_oid,1 , (char **) &sb->final_buf, +textconv_object (sb->repo, path, o->mode, &o->blob_oid,1 , (char **) &sb->final_buf, &sb->final_buf_size)) ;else
builtin/cat-file.c +4 -2
@@ -113,7 +113,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,die ("git cat-file --textconv %s: <object> must be <sha1:path>" , obj_name); -if (textconv_object (path, obj_context.mode, &oid,1 , &buf, &size)) +if (textconv_object (the_repository, path, obj_context.mode, + &oid,1 , &buf, &size))break ;/* else fallthrough */
@@ -305,7 +306,8 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d oid_to_hex(oid), data->rest); }else if (opt->cmdmode =='c' ) {enum object_type type; -if (!textconv_object (data->rest,0100644 , oid, +if (!textconv_object (the_repository, + data->rest,0100644 , oid,1 , &contents, &size)) contents = read_object_file(oid, &type,
builtin/log.c +2 -1
@@ -507,7 +507,8 @@ static int show_blob_object(const struct object_id *oid, struct rev_info *rev, c &oidc, &obj_context))die (_ ("Not a valid object name %s" ), obj_name);if (!obj_context.path || - !textconv_object (obj_context.path, obj_context.mode, &oidc,1 , &buf, &size)) { + !textconv_object (the_repository, obj_context.path, + obj_context.mode, &oidc,1 , &buf, &size)) {free (obj_context.path);return stream_blob_to_fd (1 , oid,NULL ,0 ); }
combine-diff.c +16 -11
@@ -285,7 +285,8 @@ static struct lline *coalesce_lines(struct lline *base, int *lenbase,return base; } -static char *grab_blob (const struct object_id *oid,unsigned int mode, +static char *grab_blob (struct repository *r, +const struct object_id *oid,unsigned int mode,unsigned long *size,struct userdiff_driver *textconv,const char *path) {
@@ -304,7 +305,7 @@ static char *grab_blob(const struct object_id *oid, unsigned int mode, }else if (textconv) {struct diff_filespec *df =alloc_filespec (path);fill_filespec (df, oid,1 , mode); - *size =fill_textconv (textconv, df, &blob); + *size =fill_textconv (r, textconv, df, &blob);free_filespec (df); }else { blob =read_object_file (oid, &type, size);
@@ -389,7 +390,8 @@ static void consume_line(void *state_, char *line, unsigned long len) } } -static void combine_diff(const struct object_id *parent, unsigned int mode, +static void combine_diff(struct repository *r, + const struct object_id *parent, unsigned int mode, mmfile_t *result_file, struct sline *sline, unsigned int cnt, int n, int num_parent, int result_deleted,
@@ -407,7 +409,7 @@ static void combine_diff(const struct object_id *parent, unsigned int mode,if (result_deleted)return ;/* result deleted */ - parent_file.ptr =grab_blob (parent, mode, &sz, textconv, path); + parent_file.ptr =grab_blob (r, parent, mode, &sz, textconv, path); parent_file.size = sz;memset (&xpp,0 ,sizeof (xpp)); xpp.flags = flags;
@@ -993,7 +995,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,/* Read the result of merge first */ if (!working_tree_file) - result =grab_blob (&elem->oid, elem->mode, &result_size, + result =grab_blob (opt->repo, &elem->oid, elem->mode, &result_size, textconv, elem->path);else {/* Used by diff-tree to read from the working tree */
@@ -1016,15 +1018,16 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent, }else if (S_ISDIR (st.st_mode)) {struct object_id oid;if (resolve_gitlink_ref (elem->path,"HEAD" , &oid) <0 ) - result =grab_blob (&elem->oid, elem->mode, - &result_size,NULL ,NULL ); + result =grab_blob (opt->repo, &elem->oid, + elem->mode, &result_size, +NULL ,NULL );else - result =grab_blob (&oid, elem->mode, + result =grab_blob (opt->repo, &oid, elem->mode, &result_size,NULL ,NULL ); }else if (textconv) {struct diff_filespec *df =alloc_filespec (elem->path);fill_filespec (df, &null_oid,0 , st.st_mode); - result_size =fill_textconv (textconv, df, &result); + result_size =fill_textconv (opt->repo, textconv, df, &result);free_filespec (df); }else if (0 <= (fd =open (elem->path,O_RDONLY ))) {size_t len =xsize_t (st.st_size);
@@ -1090,7 +1093,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,for (i =0 ; !is_binary && i < num_parent; i++) {char *buf;unsigned long size; - buf =grab_blob (&elem->parent[i].oid, + buf =grab_blob (opt->repo, + &elem->parent[i].oid, elem->parent[i].mode, &size,NULL ,NULL );if (buffer_is_binary (buf, size))
@@ -1146,7 +1150,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent, } }if (i <= j) - combine_diff(&elem->parent[i].oid, + combine_diff(opt->repo, + &elem->parent[i].oid, elem->parent[i].mode, &result_file, sline, cnt, i, num_parent, result_deleted,
diff.c +9 -8
@@ -1700,8 +1700,8 @@ static void emit_rewrite_diff(const char *name_a,quote_two_c_style (&a_name, a_prefix, name_a,0 );quote_two_c_style (&b_name, b_prefix, name_b,0 ); - size_one =fill_textconv (textconv_one, one, &data_one); - size_two =fill_textconv (textconv_two, two, &data_two); + size_one =fill_textconv (o->repo, textconv_one, one, &data_one); + size_two =fill_textconv (o->repo, textconv_two, two, &data_two);memset (&ecbdata,0 ,sizeof (ecbdata)); ecbdata.color_diff =want_color (o->use_color);
@@ -3462,8 +3462,8 @@ static void builtin_diff(const char *name_a,strbuf_reset (&header); } - mf1.size =fill_textconv (textconv_one, one, &mf1.ptr); - mf2.size =fill_textconv (textconv_two, two, &mf2.ptr); + mf1.size =fill_textconv (o->repo, textconv_one, one, &mf1.ptr); + mf2.size =fill_textconv (o->repo, textconv_two, two, &mf2.ptr); pe =diff_funcname_pattern (one);if (!pe)
@@ -6337,11 +6337,11 @@ static char *run_textconv(struct repository *r,return strbuf_detach (&buf, outsize); } -size_t fill_textconv (struct userdiff_driver *driver, +size_t fill_textconv (struct repository *r, +struct userdiff_driver *driver,struct diff_filespec *df,char **outbuf) { -struct repository *r = the_repository;size_t size;if (!driver) {
@@ -6386,7 +6386,8 @@ size_t fill_textconv(struct userdiff_driver *driver,return size; } -int textconv_object(const char *path, +int textconv_object(struct repository *r, + const char *path, unsigned mode, const struct object_id *oid, int oid_valid,
@@ -6404,7 +6405,7 @@ int textconv_object(const char *path,return 0 ; } - *buf_size =fill_textconv (textconv, df, buf); + *buf_size =fill_textconv (r, textconv, df, buf);free_filespec (df);return 1 ; }
diff.h +7 -2
@@ -442,7 +442,8 @@ int index_differs_from(const char *def, const struct diff_flags *flags,* struct. If it is non-NULL, then "outbuf" points to a newly allocated buffer * that should be freed by the caller. */ -size_t fill_textconv (struct userdiff_driver *driver, +size_t fill_textconv (struct repository *r, +struct userdiff_driver *driver,struct diff_filespec *df,char **outbuf);
@@ -458,7 +459,11 @@ struct userdiff_driver *get_textconv(struct diff_filespec *one);* if the textconv driver exists. * Return 1 if the conversion succeeds, 0 otherwise. */ -int textconv_object (const char *path,unsigned mode,const struct object_id *oid,int oid_valid,char **buf,unsigned long *buf_size); +int textconv_object (struct repository *repo, +const char *path, +unsigned mode, +const struct object_id *oid,int oid_valid, +char **buf,unsigned long *buf_size);int parse_rename_score (const char **cp_p);
diffcore-pickaxe.c +2 -2
@@ -153,8 +153,8 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,if (textconv_one == textconv_two &&diff_unmodified_pair (p))return 0 ; - mf1.size =fill_textconv (textconv_one, p->one, &mf1.ptr); - mf2.size =fill_textconv (textconv_two, p->two, &mf2.ptr); + mf1.size =fill_textconv (o->repo, textconv_one, p->one, &mf1.ptr); + mf2.size =fill_textconv (o->repo, textconv_two, p->two, &mf2.ptr); ret = fn(DIFF_FILE_VALID(p->one) ? &mf1 : NULL, DIFF_FILE_VALID(p->two) ? &mf2 : NULL,
grep.c +1 -1
@@ -1741,7 +1741,7 @@ static int fill_textconv_grep(struct userdiff_driver *driver,* structure. */ grep_read_lock (); - size =fill_textconv (driver, df, &buf); + size =fill_textconv (the_repository, driver, df, &buf);grep_read_unlock ();free_filespec (df);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 7/24 grep.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/grep.c | 4 ++-- builtin/log.c | 2 +- grep.c | 13 ++++++++----- grep.h | 7 +++++-- revision.c | 4 ++-- 5 files changed, 18 insertions(+), 12 deletions(-)
builtin/grep.c +2 -2
@@ -904,9 +904,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix) OPT_END() }; -init_grep_defaults (); +init_grep_defaults (the_repository);git_config (grep_cmd_config,NULL ); -grep_init (&opt, prefix); +grep_init (&opt, the_repository, prefix);/* * If there is no -- then the paths must exist in the working
builtin/log.c +1 -1
@@ -115,7 +115,7 @@ static int log_line_range_callback(const struct option *option, const char *arg,static void init_log_defaults (void ) { -init_grep_defaults (); +init_grep_defaults (the_repository);init_diff_ui_defaults (); decoration_style =auto_decoration_style ();
grep.c +8 -5
@@ -42,7 +42,7 @@ static void color_set(char *dst, const char *color_bytes)* We could let the compiler do this, but without C99 initializers * the code gets unwieldy and unreadable, so... */ -void init_grep_defaults (void ) +void init_grep_defaults (struct repository *repo) {struct grep_opt *opt = &grep_defaults;static int run_once;
@@ -52,6 +52,7 @@ void init_grep_defaults(void) run_once++;memset (opt,0 ,sizeof (*opt)); + opt->repo = repo; opt->relative =1 ; opt->pathname =1 ; opt->max_depth =-1 ;
@@ -149,12 +150,13 @@ int grep_config(const char *var, const char *value, void *cb)* default values from the template we read the configuration * information in an earlier call to git_config(grep_config). */ -void grep_init (struct grep_opt *opt,const char *prefix) +void grep_init (struct grep_opt *opt,struct repository *repo,const char *prefix) {struct grep_opt *def = &grep_defaults;int i;memset (opt,0 ,sizeof (*opt)); + opt->repo = repo; opt->prefix = prefix; opt->prefix_length = (prefix && *prefix) ?strlen (prefix) :0 ; opt->pattern_tail = &opt->pattern_list;
@@ -1708,7 +1710,8 @@ static int look_ahead(struct grep_opt *opt,return 0 ; } -static int fill_textconv_grep (struct userdiff_driver *driver, +static int fill_textconv_grep (struct repository *r, +struct userdiff_driver *driver,struct grep_source *gs) {struct diff_filespec *df;
@@ -1741,7 +1744,7 @@ static int fill_textconv_grep(struct userdiff_driver *driver,* structure. */ grep_read_lock (); - size =fill_textconv (the_repository, driver, df, &buf); + size =fill_textconv (r, driver, df, &buf);grep_read_unlock ();free_filespec (df);
@@ -1837,7 +1840,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle try_lookahead =should_lookahead (opt); -if (fill_textconv_grep (textconv, gs) <0 ) +if (fill_textconv_grep (opt->repo, textconv, gs) <0 )return 0 ; bol = gs->buf;
grep.h +5 -2
@@ -36,6 +36,8 @@ typedef int pcre2_jit_stack;#include "thread-utils.h" #include "userdiff.h" +struct repository ; +enum grep_pat_token {GREP_PATTERN ,GREP_PATTERN_HEAD ,
@@ -136,6 +138,7 @@ struct grep_opt {struct grep_pat *header_list;struct grep_pat **header_tail;struct grep_expr *pattern_expression; +struct repository *repo;const char *prefix;int prefix_length;regex_t regexp;
@@ -183,9 +186,9 @@ struct grep_opt {void *output_priv; }; -extern void init_grep_defaults (void ); +extern void init_grep_defaults (struct repository *);extern int grep_config (const char *var,const char *value,void *); -extern void grep_init (struct grep_opt *,const char *prefix); +extern void grep_init (struct grep_opt *,struct repository *repo,const char *prefix);void grep_commit_pattern_type (enum grep_pattern_type ,struct grep_opt *opt);extern void append_grep_pat (struct grep_opt *opt,const char *pat,size_t patlen,const char *origin,int no,enum grep_pat_token t);
revision.c +2 -2
@@ -1464,8 +1464,8 @@ void init_revisions(struct rev_info *revs, const char *prefix) revs->commit_format =CMIT_FMT_DEFAULT ; revs->expand_tabs_in_log_default =8 ; -init_grep_defaults (); -grep_init (&revs->grep_filter, prefix); +init_grep_defaults (the_repository); +grep_init (&revs->grep_filter, the_repository, prefix); revs->grep_filter.status_only =1 ;diff_setup (&revs->diffopt);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 9/24 read-cache.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- read-cache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
read-cache.c +2 -2
@@ -823,7 +823,7 @@ struct cache_entry *make_cache_entry(struct index_state *istate, ce->ce_namelen = len; ce->ce_mode =create_ce_mode (mode); - ret =refresh_cache_entry (&the_index, ce, refresh_options); + ret =refresh_cache_entry (istate, ce, refresh_options);if (ret != ce)discard_cache_entry (ce);return ret;
@@ -1493,7 +1493,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,if (ignore_submodules &&S_ISGITLINK (ce->ce_mode))continue ; -if (pathspec && !ce_path_match (&the_index, ce, pathspec, seen)) +if (pathspec && !ce_path_match (istate, ce, pathspec, seen)) filtered =1 ;if (ce_stage (ce)) {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 8/24 diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- blame.c | 20 +++++++++++--------- builtin/diff.c | 2 +- builtin/log.c | 2 +- builtin/merge.c | 2 +- builtin/range-diff.c | 2 +- diff-no-index.c | 9 +++++++-- diff.c | 4 ++-- diff.h | 4 ++-- merge-recursive.c | 2 +- notes-merge.c | 4 ++-- patch-ids.c | 2 +- read-cache.c | 2 +- revision.c | 2 +- tree-diff.c | 2 +- 14 files changed, 33 insertions(+), 26 deletions(-)
blame.c +11 -9
@@ -541,8 +541,9 @@ static int fill_blob_sha1_and_mode(struct repository *r,* We have an origin -- check if the same path exists in the * parent and return an origin structure to represent it. */ -static struct blame_origin *find_origin (struct commit *parent, -struct blame_origin *origin) +static struct blame_origin *find_origin (struct repository *r, +struct commit *parent, +struct blame_origin *origin) {struct blame_origin *porigin;struct diff_options diff_opts;
@@ -562,7 +563,7 @@ static struct blame_origin *find_origin(struct commit *parent,* and origin first. Most of the time they are the * same and diff-tree is fairly efficient about this. */ -diff_setup (&diff_opts); +diff_setup (&diff_opts, r); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =0 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -629,14 +630,15 @@ static struct blame_origin *find_origin(struct commit *parent,* We have an origin -- find the path that corresponds to it in its * parent and return an origin structure to represent it. */ -static struct blame_origin *find_rename (struct commit *parent, -struct blame_origin *origin) +static struct blame_origin *find_rename (struct repository *r, +struct commit *parent, +struct blame_origin *origin) {struct blame_origin *porigin =NULL ;struct diff_options diff_opts;int i; -diff_setup (&diff_opts); +diff_setup (&diff_opts, r); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =DIFF_DETECT_RENAME ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1260,7 +1262,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,if (!unblamed)return ;/* nothing remains for this target */ -diff_setup (&diff_opts); +diff_setup (&diff_opts, sb->repo); diff_opts.flags.recursive =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1442,7 +1444,7 @@ static void pass_blame(struct blame_scoreboard *sb, struct blame_origin *origin,* common cases, then we look for renames in the second pass. */ for (pass =0 ; pass <2 - sb->no_whole_file_rename; pass++) { -struct blame_origin *(*find)(struct commit *,struct blame_origin *); +struct blame_origin *(*find)(struct repository *,struct commit *,struct blame_origin *); find = pass ? find_rename : find_origin; for (i = 0, sg = first_scapegoat(revs, commit, sb->reverse);
@@ -1455,7 +1457,7 @@ static void pass_blame(struct blame_scoreboard *sb, struct blame_origin *origin,continue ;if (parse_commit (p))continue ; - porigin =find (p, origin); + porigin =find (sb->repo, p, origin);if (!porigin)continue ;if (!oidcmp (&porigin->blob_oid, &origin->blob_oid)) {
builtin/diff.c +1 -1
@@ -339,7 +339,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) }if (no_index)/* If this is a no-index diff, just run it and exit there. */ -diff_no_index (&rev, argc, argv); +diff_no_index (the_repository, &rev, argc, argv);/* Otherwise, we are doing the usual "git" diff */ rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;
builtin/log.c +1 -1
@@ -1361,7 +1361,7 @@ static void prepare_bases(struct base_tree_info *bases,return ;init_commit_base (&commit_base); -diff_setup (&diffopt); +diff_setup (&diffopt, the_repository); diffopt.flags.recursive =1 ;diff_setup_done (&diffopt);
builtin/merge.c +1 -1
@@ -452,7 +452,7 @@ static void finish(struct commit *head_commit, }if (new_head && show_diffstat) {struct diff_options opts; -diff_setup (&opts); +diff_setup (&opts, the_repository); opts.stat_width =-1 ;/* use full terminal width */ opts.stat_graph_width =-1 ;/* respect statGraphWidth config */ opts.output_format |=
builtin/range-diff.c +1 -1
@@ -34,7 +34,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL ); -diff_setup (&diffopt); +diff_setup (&diffopt, the_repository); diffopt.output_format =DIFF_FORMAT_PATCH ; diffopt.flags.suppress_diff_headers =1 ; diffopt.output_prefix = output_prefix_cb;
diff-no-index.c +7 -2
@@ -233,7 +233,8 @@ static void fixup_paths(const char **path, struct strbuf *replacement) } } -void diff_no_index (struct rev_info *revs, +void diff_no_index (struct repository *r, +struct rev_info *revs,int argc,const char **argv) {int i;
@@ -241,7 +242,11 @@ void diff_no_index(struct rev_info *revs,struct strbuf replacement =STRBUF_INIT ;const char *prefix = revs->prefix; -diff_setup (&revs->diffopt); +/* +* FIXME: --no-index should not look at index and we should be +* able to pass NULL repo. Maybe later. +*/ +diff_setup (&revs->diffopt, r);for (i =1 ; i < argc -2 ; ) {int j;if (!strcmp (argv[i],"--no-index" ))
diff.c +2 -2
@@ -4390,12 +4390,12 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)builtin_checkdiff (name, other, attr_path, p->one, p->two, o); } -void diff_setup (struct diff_options *options) +void diff_setup (struct diff_options *options,struct repository *repo) {memcpy (options, &default_diff_options,sizeof (*options)); options->file = stdout; - options->repo->index = &the_index; + options->repo = repo; options->abbrev =DEFAULT_ABBREV ; options->line_termination ='\n' ;
diff.h +2 -2
@@ -336,7 +336,7 @@ int git_diff_basic_config(const char *var, const char *value, void *cb);int git_diff_heuristic_config (const char *var,const char *value,void *cb);void init_diff_ui_defaults (void );int git_diff_ui_config (const char *var,const char *value,void *cb); -void diff_setup (struct diff_options *); +void diff_setup (struct diff_options *,struct repository *);int diff_opt_parse (struct diff_options *,const char **,int ,const char *);void diff_setup_done (struct diff_options *);int git_config_rename (const char *var,const char *value);
@@ -426,7 +426,7 @@ int diff_flush_patch_id(struct diff_options *, struct object_id *, int);int diff_result_code (struct diff_options *,int ); -void diff_no_index (struct rev_info *,int ,const char **); +void diff_no_index (struct repository *,struct rev_info *,int ,const char **);int index_differs_from (const char *def,const struct diff_flags *flags,int ita_invisible_in_index);
merge-recursive.c +1 -1
@@ -1812,7 +1812,7 @@ static struct diff_queue_struct *get_diffpairs(struct merge_options *o,struct diff_queue_struct *ret;struct diff_options opts; -diff_setup (&opts); +diff_setup (&opts, the_repository); opts.flags.recursive =1 ; opts.flags.rename_empty =0 ; opts.detect_rename =merge_detect_rename (o);
notes-merge.c +2 -2
@@ -126,7 +126,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,trace_printf ("\tdiff_tree_remote(base = %.7s, remote = %.7s)\n" ,oid_to_hex (base),oid_to_hex (remote)); -diff_setup (&opt); +diff_setup (&opt, the_repository); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
@@ -189,7 +189,7 @@ static void diff_tree_local(struct notes_merge_options *o,trace_printf ("\tdiff_tree_local(len = %i, base = %.7s, local = %.7s)\n" , len,oid_to_hex (base),oid_to_hex (local)); -diff_setup (&opt); +diff_setup (&opt, the_repository); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
patch-ids.c +1 -1
@@ -59,7 +59,7 @@ static int patch_id_cmp(const void *cmpfn_data,int init_patch_ids (struct patch_ids *ids) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts); +diff_setup (&ids->diffopts, the_repository); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
read-cache.c +1 -1
@@ -2137,7 +2137,7 @@ int index_has_changes(struct index_state *istate,if (tree || !get_oid_tree ("HEAD" , &cmp)) {struct diff_options opt; -diff_setup (&opt); +diff_setup (&opt, the_repository); opt.flags.exit_with_status =1 ;if (!sb) opt.flags.quick =1 ;
revision.c +1 -1
@@ -1468,7 +1468,7 @@ void init_revisions(struct rev_info *revs, const char *prefix)grep_init (&revs->grep_filter, the_repository, prefix); revs->grep_filter.status_only =1 ; -diff_setup (&revs->diffopt); +diff_setup (&revs->diffopt, the_repository);if (prefix && !revs->diffopt.prefix) { revs->diffopt.prefix = prefix; revs->diffopt.prefix_length =strlen (prefix);
tree-diff.c +1 -1
@@ -605,7 +605,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -diff_setup (&diff_opts); +diff_setup (&diff_opts, the_repository); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 10/24 diff-lib.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- diff-lib.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
diff-lib.c +10 -7
@@ -70,7 +70,7 @@ static int match_stat_with_submodule(struct diff_options *diffopt, struct stat *st, unsigned ce_option, unsigned *dirty_submodule) { - int changed = ce_match_stat(ce, st, ce_option); + int changed = ie_match_stat(diffopt->repo->index, ce, st, ce_option);if (S_ISGITLINK (ce->ce_mode)) {struct diff_flags orig_flags = diffopt->flags;if (!diffopt->flags.override_submodule_config)
@@ -93,15 +93,16 @@ int run_diff_files(struct rev_info *revs, unsigned int option)unsigned ce_option = ((option &DIFF_RACY_IS_MODIFIED ) ?CE_MATCH_RACY_IS_DIRTY :0 );uint64_t start =getnanotime (); +struct index_state *istate = revs->diffopt.repo->index;diff_set_mnemonic_prefix (&revs->diffopt,"i/" ,"w/" );if (diff_unmerged_stage <0 ) diff_unmerged_stage =2 ; - entries = active_nr; + entries = istate->cache_nr;for (i =0 ; i < entries; i++) {unsigned int oldmode, newmode; -struct cache_entry *ce = active_cache[i]; +struct cache_entry *ce = istate->cache[i];int changed;unsigned dirty_submodule =0 ;const struct object_id *old_oid, *new_oid;
@@ -109,7 +110,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option)if (diff_can_quit_early (&revs->diffopt))break ; -if (!ce_path_match (&the_index, ce, &revs->prune_data,NULL )) +if (!ce_path_match (istate, ce, &revs->prune_data,NULL ))continue ;if (ce_stage (ce)) {
@@ -145,7 +146,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option) dpath->mode = wt_mode;while (i < entries) { -struct cache_entry *nce = active_cache[i]; +struct cache_entry *nce = istate->cache[i];int stage;if (strcmp (ce->name, nce->name))
@@ -474,7 +475,9 @@ static int oneway_diff(const struct cache_entry * const *src,if (tree == o->df_conflict_entry) tree =NULL ; -if (ce_path_match (&the_index, idx ? idx : tree, &revs->prune_data,NULL )) { +if (ce_path_match (revs->diffopt.repo->index, + idx ? idx : tree, + &revs->prune_data,NULL )) {do_oneway_diff (o, idx, tree);if (diff_can_quit_early (&revs->diffopt)) { o->exiting_early =1 ;
@@ -506,7 +509,7 @@ static int diff_cache(struct rev_info *revs, opts.merge =1 ; opts.fn = oneway_diff; opts.unpack_data = revs; - opts.src_index = &the_index; + opts.src_index = revs->diffopt.repo->index; opts.dst_index =NULL ; opts.pathspec = &revs->diffopt.pathspec; opts.pathspec->recursive =1 ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 11/24 ll-merge.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- apply.c | 9 ++++++--- builtin/checkout.c | 3 ++- diff.c | 2 +- ll-merge.c | 17 +++++++++-------- ll-merge.h | 5 ++++- merge-blobs.c | 3 ++- merge-recursive.c | 3 ++- notes-merge.c | 3 ++- rerere.c | 10 ++++++---- 9 files changed, 34 insertions(+), 21 deletions(-)
apply.c +6 -3
@@ -3467,7 +3467,8 @@ static int load_preimage(struct apply_state *state,return 0 ; } -static int three_way_merge(struct image *image, +static int three_way_merge(struct apply_state *state, + struct image *image, char *path, const struct object_id *base, const struct object_id *ours,
@@ -3483,7 +3484,9 @@ static int three_way_merge(struct image *image, status =ll_merge (&result, path, &base_file,"base" , &our_file,"ours" , - &their_file,"theirs" ,NULL ); + &their_file,"theirs" , + state->repo->index, +NULL );free (base_file.ptr);free (our_file.ptr);free (their_file.ptr);
@@ -3595,7 +3598,7 @@ static int try_threeway(struct apply_state *state,clear_image (&tmp_image);/* in-core three-way merge between post and our using pre as base */ - status =three_way_merge (image, patch->new_name, + status =three_way_merge (state, image, patch->new_name, &pre_oid, &our_oid, &post_oid);if (status <0 ) {if (state->apply_verbosity > verbosity_silent)
builtin/checkout.c +2 -1
@@ -208,7 +208,8 @@ static int checkout_merged(int pos, const struct checkout *state)* merge.renormalize set, too */ status =ll_merge (&result_buf, path, &ancestor,"base" , - &ours,"ours" , &theirs,"theirs" ,NULL ); + &ours,"ours" , &theirs,"theirs" , + state->istate,NULL );free (ancestor.ptr);free (ours.ptr);free (theirs.ptr);
diff.c +1 -1
@@ -3637,7 +3637,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b, data.lineno =0 ; data.o = o; data.ws_rule =whitespace_rule (attr_path); - data.conflict_marker_size =ll_merge_marker_size (attr_path); + data.conflict_marker_size =ll_merge_marker_size (o->repo->index, attr_path);if (fill_mmfile (o->repo, &mf1, one) <0 ||fill_mmfile (o->repo, &mf2, two) <0 )
ll-merge.c +9 -8
@@ -336,10 +336,10 @@ static const struct ll_merge_driver *find_ll_merge_driver(const char *merge_attrreturn &ll_merge_drv[LL_TEXT_MERGE ]; } -static void normalize_file (mmfile_t *mm,const char *path) +static void normalize_file (mmfile_t *mm,const char *path,struct index_state *istate) {struct strbuf strbuf =STRBUF_INIT ; -if (renormalize_buffer (&the_index, path, mm->ptr, mm->size, &strbuf)) { +if (renormalize_buffer (istate, path, mm->ptr, mm->size, &strbuf)) {free (mm->ptr); mm->size = strbuf.len; mm->ptr =strbuf_detach (&strbuf,NULL );
@@ -351,6 +351,7 @@ int ll_merge(mmbuffer_t *result_buf, mmfile_t *ancestor, const char *ancestor_label, mmfile_t *ours, const char *our_label, mmfile_t *theirs, const char *their_label, + struct index_state *istate, const struct ll_merge_options *opts) { static struct attr_check *check;
@@ -363,15 +364,15 @@ int ll_merge(mmbuffer_t *result_buf, opts = &default_opts;if (opts->renormalize) { -normalize_file (ancestor, path); -normalize_file (ours, path); -normalize_file (theirs, path); +normalize_file (ancestor, path, istate); +normalize_file (ours, path, istate); +normalize_file (theirs, path, istate); }if (!check) check =attr_check_initl ("merge" ,"conflict-marker-size" ,NULL ); -if (!git_check_attr (&the_index, path, check)) { +if (!git_check_attr (istate, path, check)) { ll_driver_name = check->items[0 ].value;if (check->items[1 ].value) { marker_size =atoi (check->items[1 ].value);
@@ -391,14 +392,14 @@ int ll_merge(mmbuffer_t *result_buf, opts, marker_size); } -int ll_merge_marker_size (const char *path) +int ll_merge_marker_size (struct index_state *istate,const char *path) {static struct attr_check *check;int marker_size =DEFAULT_CONFLICT_MARKER_SIZE ;if (!check) check =attr_check_initl ("conflict-marker-size" ,NULL ); -if (!git_check_attr (&the_index, path, check) && check->items[0 ].value) { +if (!git_check_attr (istate, path, check) && check->items[0 ].value) { marker_size =atoi (check->items[0 ].value);if (marker_size <=0 ) marker_size =DEFAULT_CONFLICT_MARKER_SIZE ;
ll-merge.h +4 -1
@@ -7,6 +7,8 @@#include "xdiff/xdiff.h" +struct index_state ; +struct ll_merge_options {unsigned virtual_ancestor :1 ;unsigned variant :2 ;/* favor ours, favor theirs, or union merge */
@@ -19,8 +21,9 @@ int ll_merge(mmbuffer_t *result_buf, mmfile_t *ancestor, const char *ancestor_label, mmfile_t *ours, const char *our_label, mmfile_t *theirs, const char *their_label, + struct index_state *istate, const struct ll_merge_options *opts); -int ll_merge_marker_size (const char *path); +int ll_merge_marker_size (struct index_state *istate,const char *path);#endif
merge-blobs.c +2 -1
@@ -41,7 +41,8 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *our* common ancestor. */ merge_status =ll_merge (&res, path, base,NULL , - our,".our" , their,".their" ,NULL ); + our,".our" , their,".their" , + &the_index,NULL );if (merge_status <0 )return NULL ;
merge-recursive.c +2 -1
@@ -1083,7 +1083,8 @@ static int merge_3way(struct merge_options *o,read_mmblob (&src2, &b->oid); merge_status =ll_merge (result_buf, a->path, &orig, base_name, - &src1, name1, &src2, name2, &ll_opts); + &src1, name1, &src2, name2, + &the_index, &ll_opts);free (base_name);free (name1);
notes-merge.c +2 -1
@@ -348,7 +348,8 @@ static int ll_merge_in_worktree(struct notes_merge_options *o,read_mmblob (&remote, &p->remote); status =ll_merge (&result_buf,oid_to_hex (&p->obj), &base,NULL , - &local, o->local_ref, &remote, o->remote_ref,NULL ); + &local, o->local_ref, &remote, o->remote_ref, + &the_index,NULL );free (base.ptr);free (local.ptr);
rerere.c +6 -4
@@ -478,7 +478,7 @@ static int handle_file(const char *path, unsigned char *sha1, const char *output {int hunk_no =0 ;struct rerere_io_file io; -int marker_size =ll_merge_marker_size (path); +int marker_size =ll_merge_marker_size (&the_index, path);memset (&io,0 ,sizeof (io)); io.io.getline = rerere_file_getline;
@@ -641,7 +641,8 @@ static int try_merge(const struct rerere_id *id, const char *path,* A three-way merge. Note that this honors user-customizable * low-level merge driver settings. */ - ret =ll_merge (result, path, &base,NULL , cur,"" , &other,"" ,NULL ); + ret =ll_merge (result, path, &base,NULL , cur,"" , &other,"" , + &the_index,NULL );free (base.ptr);free (other.ptr);
@@ -960,7 +961,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpuconst struct cache_entry *ce;int pos, len, i, hunk_no;struct rerere_io_mem io; -int marker_size =ll_merge_marker_size (path); +int marker_size =ll_merge_marker_size (&the_index, path);/* * Reproduce the conflicted merge in-core
@@ -995,7 +996,8 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu*/ ll_merge (&result, path, &mmfile[0 ],NULL , &mmfile[1 ],"ours" , - &mmfile[2 ],"theirs" ,NULL ); + &mmfile[2 ],"theirs" , + &the_index,NULL );for (i =0 ; i <3 ; i++)free (mmfile[i].ptr);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 12/24 merge-blobs.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/merge-tree.c | 2 +- merge-blobs.c | 15 +++++++++++---- merge-blobs.h | 7 +++++-- 3 files changed, 17 insertions(+), 7 deletions(-)
builtin/merge-tree.c +1 -1
@@ -76,7 +76,7 @@ static void *result(struct merge_list *entry, unsigned long *size) their =NULL ;if (entry) their = entry->blob; -return merge_blobs (path, base, our, their, size); +return merge_blobs (&the_index, path, base, our, their, size); }static void *origin (struct merge_list *entry,unsigned long *size)
merge-blobs.c +11 -4
@@ -29,7 +29,12 @@ static void free_mmfile(mmfile_t *f)free (f->ptr); } -static void *three_way_filemerge (const char *path,mmfile_t *base,mmfile_t *our,mmfile_t *their,unsigned long *size) +static void *three_way_filemerge (struct index_state *istate, +const char *path, +mmfile_t *base, +mmfile_t *our, +mmfile_t *their, +unsigned long *size) {int merge_status;mmbuffer_t res;
@@ -42,7 +47,7 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *our*/ merge_status =ll_merge (&res, path, base,NULL , our,".our" , their,".their" , - &the_index,NULL ); + istate,NULL );if (merge_status <0 )return NULL ;
@@ -50,7 +55,9 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *ourreturn res.ptr; } -void *merge_blobs (const char *path,struct blob *base,struct blob *our,struct blob *their,unsigned long *size) +void *merge_blobs (struct index_state *istate,const char *path, +struct blob *base,struct blob *our, +struct blob *their,unsigned long *size) {void *res =NULL ;mmfile_t f1, f2, common;
@@ -83,7 +90,7 @@ void *merge_blobs(const char *path, struct blob *base, struct blob *our, struct common.ptr =xstrdup ("" ); common.size =0 ; } - res =three_way_filemerge (path, &common, &f1, &f2, size); + res =three_way_filemerge (istate, path, &common, &f1, &f2, size);free_mmfile (&common); out_free_f2_f1:free_mmfile (&f2);
merge-blobs.h +5 -2
@@ -1,8 +1,11 @@#ifndef MERGE_BLOBS_H #define MERGE_BLOBS_H -#include "blob.h" +struct blob ; +struct index_state ; -extern void *merge_blobs (const char *,struct blob *,struct blob *,struct blob *,unsigned long *); +extern void *merge_blobs (struct index_state *,const char *, +struct blob *,struct blob *, +struct blob *,unsigned long *);#endif /* MERGE_BLOBS_H */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 13/24 merge.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/merge.c | 8 +++++--- builtin/pull.c | 7 +++++-- cache.h | 6 ++++-- merge.c | 20 +++++++++++--------- sequencer.c | 6 +++--- 5 files changed, 28 insertions(+), 19 deletions(-)
builtin/merge.c +5 -3
@@ -728,8 +728,9 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,die (_ ("unable to write %s" ),get_index_file ());return clean ?0 :1 ; }else { -return try_merge_command (strategy, xopts_nr, xopts, - common, head_arg, remoteheads); +return try_merge_command (the_repository, + strategy, xopts_nr, xopts, + common, head_arg, remoteheads); } }
@@ -1470,7 +1471,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) goto done; } -if (checkout_fast_forward (&head_commit->object.oid, +if (checkout_fast_forward (the_repository, + &head_commit->object.oid, &commit->object.oid, overwrite_ignore)) { ret =1 ;
builtin/pull.c +5 -2
@@ -562,7 +562,9 @@ static int pull_into_void(const struct object_id *merge_head,* index/worktree changes that the user already made on the unborn * branch. */ -if (checkout_fast_forward (the_hash_algo->empty_tree, merge_head,0 )) +if (checkout_fast_forward (the_repository, + the_hash_algo->empty_tree, + merge_head,0 ))return 1 ;if (update_ref ("initial pull" ,"HEAD" , merge_head, curr_head,0 ,UPDATE_REFS_DIE_ON_ERR ))
@@ -915,7 +917,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)"fast-forwarding your working tree from\n" "commit %s."), oid_to_hex(&orig_head)); -if (checkout_fast_forward (&orig_head, &curr_head,0 )) +if (checkout_fast_forward (the_repository, &orig_head, + &curr_head,0 )) die(_("Cannot fast-forward your working tree.\n" "After making sure that you saved anything precious from\n" "$ git diff %s\n"
cache.h +4 -2
@@ -1716,10 +1716,12 @@ extern struct startup_info *startup_info;/* merge.c */ struct commit_list ; -int try_merge_command (const char *strategy,size_t xopts_nr, +int try_merge_command (struct repository *r, +const char *strategy,size_t xopts_nr,const char **xopts,struct commit_list *common,const char *head_arg,struct commit_list *remotes); -int checkout_fast_forward (const struct object_id *from, +int checkout_fast_forward (struct repository *r, +const struct object_id *from,const struct object_id *to,int overwrite_ignore);
merge.c +11 -9
@@ -14,7 +14,8 @@ static const char *merge_argument(struct commit *commit)return oid_to_hex (commit ? &commit->object.oid : the_hash_algo->empty_tree); } -int try_merge_command (const char *strategy,size_t xopts_nr, +int try_merge_command (struct repository *r, +const char *strategy,size_t xopts_nr,const char **xopts,struct commit_list *common,const char *head_arg,struct commit_list *remotes) {
@@ -35,15 +36,16 @@ int try_merge_command(const char *strategy, size_t xopts_nr, ret =run_command_v_opt (args.argv,RUN_GIT_CMD );argv_array_clear (&args); -discard_cache (); -if (read_cache () <0 ) +discard_index (r->index); +if (read_index (r->index) <0 )die (_ ("failed to read the cache" )); -resolve_undo_clear (); +resolve_undo_clear_index (r->index);return ret; } -int checkout_fast_forward (const struct object_id *head, +int checkout_fast_forward (struct repository *r, +const struct object_id *head,const struct object_id *remote,int overwrite_ignore) {
@@ -54,7 +56,7 @@ int checkout_fast_forward(const struct object_id *head,struct dir_struct dir;struct lock_file lock_file =LOCK_INIT ; -refresh_cache (REFRESH_QUIET ); +refresh_index (r->index,REFRESH_QUIET ,NULL ,NULL ,NULL );if (hold_locked_index (&lock_file,LOCK_REPORT_ON_ERROR ) <0 )return -1 ;
@@ -86,8 +88,8 @@ int checkout_fast_forward(const struct object_id *head, } opts.head_idx =1 ; - opts.src_index = &the_index; - opts.dst_index = &the_index; + opts.src_index = r->index; + opts.dst_index = r->index; opts.update =1 ; opts.verbose_update =1 ; opts.merge =1 ;
@@ -101,7 +103,7 @@ int checkout_fast_forward(const struct object_id *head, }clear_unpack_trees_porcelain (&opts); -if (write_locked_index (&the_index, &lock_file,COMMIT_LOCK )) +if (write_locked_index (r->index, &lock_file,COMMIT_LOCK ))return error (_ ("unable to write new index file" ));return 0 ; }
sequencer.c +3 -3
@@ -470,8 +470,8 @@ static int fast_forward_to(const struct object_id *to, const struct object_id *fstruct strbuf sb =STRBUF_INIT ;struct strbuf err =STRBUF_INIT ; -read_cache (); -if (checkout_fast_forward (from, to,1 )) +read_index (&the_index); +if (checkout_fast_forward (the_repository, from, to,1 ))return -1 ;/* the callee should have complained already */ strbuf_addf (&sb,_ ("%s: fast-forward" ),_ (action_name (opts)));
@@ -1798,7 +1798,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,commit_list_insert (base, &common);commit_list_insert (next, &remotes); - res |=try_merge_command (opts->strategy, + res |=try_merge_command (the_repository, opts->strategy, opts->xopts_nr, (const char **)opts->xopts, common,oid_to_hex (&head), remotes);free_commit_list (common);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 14/24 patch-ids.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/log.c | 2 +- patch-ids.c | 4 ++-- patch-ids.h | 3 ++- revision.c | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-)
builtin/log.c +1 -1
@@ -914,7 +914,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)if ((flags1 &UNINTERESTING ) == (flags2 &UNINTERESTING ))die (_ ("Not a range." )); -init_patch_ids (ids); +init_patch_ids (ids, the_repository);/* given a range a..b get all patch ids for b..a */ init_revisions (&check_rev, rev->prefix);
patch-ids.c +2 -2
@@ -56,10 +56,10 @@ static int patch_id_cmp(const void *cmpfn_data,return oidcmp (&a->patch_id, &b->patch_id); } -int init_patch_ids (struct patch_ids *ids) +int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, the_repository); +diff_setup (&ids->diffopts, repo); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
patch-ids.h +2 -1
@@ -6,6 +6,7 @@struct commit ;struct object_id ; +struct repository ;struct patch_id {struct hashmap_entry ent;
@@ -20,7 +21,7 @@ struct patch_ids {int commit_patch_id (struct commit *commit,struct diff_options *options,struct object_id *oid,int ); -int init_patch_ids (struct patch_ids *); +int init_patch_ids (struct patch_ids *,struct repository *);int free_patch_ids (struct patch_ids *);struct patch_id *add_commit_patch_id (struct commit *,struct patch_ids *);struct patch_id *has_commit_patch_id (struct commit *,struct patch_ids *);
revision.c +1 -1
@@ -877,7 +877,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)return ; left_first = left_count < right_count; -init_patch_ids (&ids); +init_patch_ids (&ids, the_repository); ids.diffopts.pathspec = revs->diffopt.pathspec;/* Compute patch-ids for one side */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 15/24 sha1-file.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/difftool.c | 2 +- builtin/hash-object.c | 2 +- builtin/replace.c | 2 +- builtin/update-index.c | 2 +- cache.h | 4 ++-- diff.c | 20 ++++++++--------- notes-merge.c | 2 +- read-cache.c | 25 ++++++++++++--------- sha1-file.c | 50 ++++++++++++++++++++++++------------------ 9 files changed, 61 insertions(+), 48 deletions(-)
builtin/difftool.c +1 -1
@@ -112,7 +112,7 @@ static int use_wt_file(const char *workdir, const char *name,int fd =open (buf.buf,O_RDONLY );if (fd >=0 && - !index_fd (&wt_oid, fd, &st,OBJ_BLOB , name,0 )) { + !index_fd (&the_index, &wt_oid, fd, &st,OBJ_BLOB , name,0 )) {if (is_null_oid (oid)) {oidcpy (oid, &wt_oid); use =1 ;
builtin/hash-object.c +1 -1
@@ -40,7 +40,7 @@ static void hash_fd(int fd, const char *type, const char *path, unsigned flags,if (fstat (fd, &st) <0 || (literally ?hash_literally (&oid, fd, type, flags) - :index_fd (&oid, fd, &st,type_from_string (type), path, flags))) + :index_fd (&the_index, &oid, fd, &st,type_from_string (type), path, flags)))die ((flags &HASH_WRITE_OBJECT ) ?"Unable to add %s to database" :"Unable to hash %s" , path);
builtin/replace.c +1 -1
@@ -295,7 +295,7 @@ static int import_object(struct object_id *oid, enum object_type type,close (fd);return -1 ; } -if (index_fd (oid, fd, &st, type,NULL , flags) <0 ) +if (index_fd (&the_index, oid, fd, &st, type,NULL , flags) <0 )return error (_ ("unable to write object to database" ));/* index_fd close()s fd for us */ }
builtin/update-index.c +1 -1
@@ -282,7 +282,7 @@ static int add_one_path(const struct cache_entry *old, const char *path, int lenfill_stat_cache_info (ce, st); ce->ce_mode =ce_mode_from_stat (old, st->st_mode); -if (index_path (&ce->oid, path, st, +if (index_path (&the_index, &ce->oid, path, st, info_only ?0 :HASH_WRITE_OBJECT )) {discard_cache_entry (ce);return -1 ;
cache.h +2 -2
@@ -787,8 +787,8 @@ extern int ie_modified(struct index_state *, const struct cache_entry *, struct#define HASH_WRITE_OBJECT 1#define HASH_FORMAT_CHECK 2#define HASH_RENORMALIZE 4 -extern int index_fd (struct object_id *oid,int fd,struct stat *st,enum object_type type,const char *path,unsigned flags); -extern int index_path (struct object_id *oid,const char *path,struct stat *st,unsigned flags); +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);/* * Record to sd the data from st that we use to check whether a file
diff.c +10 -10
@@ -4252,7 +4252,7 @@ static void run_diff_cmd(const char *pgm,fprintf (o->file,"* Unmerged path %s\n" , name); } -static void diff_fill_oid_info (struct diff_filespec *one) +static void diff_fill_oid_info (struct diff_filespec *one,struct index_state *istate) {if (DIFF_FILE_VALID (one)) {if (!one->oid_valid) {
@@ -4263,7 +4263,7 @@ static void diff_fill_oid_info(struct diff_filespec *one) }if (lstat (one->path, &st) <0 )die_errno ("stat '%s'" , one->path); -if (index_path (&one->oid, one->path, &st,0 )) +if (index_path (istate, &one->oid, one->path, &st,0 ))die ("cannot hash %s" , one->path); } }
@@ -4311,8 +4311,8 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)return ; } -diff_fill_oid_info (one); -diff_fill_oid_info (two); +diff_fill_oid_info (one, o->repo->index); +diff_fill_oid_info (two, o->repo->index); if (!pgm && DIFF_FILE_VALID(one) && DIFF_FILE_VALID(two) &&
@@ -4359,8 +4359,8 @@ static void run_diffstat(struct diff_filepair *p, struct diff_options *o,if (o->prefix_length)strip_prefix (o->prefix_length, &name, &other); -diff_fill_oid_info (p->one); -diff_fill_oid_info (p->two); +diff_fill_oid_info (p->one, o->repo->index); +diff_fill_oid_info (p->two, o->repo->index);builtin_diffstat (name, other, p->one, p->two, diffstat, o, p);
@@ -4384,8 +4384,8 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)if (o->prefix_length)strip_prefix (o->prefix_length, &name, &other); -diff_fill_oid_info (p->one); -diff_fill_oid_info (p->two); +diff_fill_oid_info (p->one, o->repo->index); +diff_fill_oid_info (p->two, o->repo->index);builtin_checkdiff (name, other, attr_path, p->one, p->two, o); }
@@ -5685,8 +5685,8 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oidif (DIFF_PAIR_UNMERGED (p))continue ; -diff_fill_oid_info (p->one); -diff_fill_oid_info (p->two); +diff_fill_oid_info (p->one, options->repo->index); +diff_fill_oid_info (p->two, options->repo->index); len1 =remove_space (p->one->path,strlen (p->one->path)); len2 =remove_space (p->two->path,strlen (p->two->path));
notes-merge.c +1 -1
@@ -710,7 +710,7 @@ int notes_merge_commit(struct notes_merge_options *o,/* write file as blob, and add to partial_tree */ if (stat (path.buf, &st))die_errno ("Failed to stat '%s'" , path.buf); -if (index_path (&blob_oid, path.buf, &st,HASH_WRITE_OBJECT )) +if (index_path (&the_index, &blob_oid, path.buf, &st,HASH_WRITE_OBJECT ))die ("Failed to write blob object from '%s'" , path.buf);if (add_note (partial_tree, &obj_oid, &blob_oid,NULL )) die("Failed to add resolved note '%s' to notes tree",
read-cache.c +15 -10
@@ -205,14 +205,16 @@ void fill_stat_cache_info(struct cache_entry *ce, struct stat *st) } } -static int ce_compare_data (const struct cache_entry *ce,struct stat *st) +static int ce_compare_data (struct index_state *istate, +const struct cache_entry *ce, +struct stat *st) {int match =-1 ;int fd =git_open_cloexec (ce->name,O_RDONLY );if (fd >=0 ) {struct object_id oid; -if (!index_fd (&oid, fd, st,OBJ_BLOB , ce->name,0 )) +if (!index_fd (istate, &oid, fd, st,OBJ_BLOB , ce->name,0 )) match =oidcmp (&oid, &ce->oid);/* index_fd() closed the file descriptor already */ }
@@ -257,11 +259,13 @@ static int ce_compare_gitlink(const struct cache_entry *ce)return oidcmp (&oid, &ce->oid); } -static int ce_modified_check_fs (const struct cache_entry *ce,struct stat *st) +static int ce_modified_check_fs (struct index_state *istate, +const struct cache_entry *ce, +struct stat *st) {switch (st->st_mode &S_IFMT ) {case S_IFREG : -if (ce_compare_data (ce, st)) +if (ce_compare_data (istate, ce, st))return DATA_CHANGED ;break ;case S_IFLNK :
@@ -407,7 +411,7 @@ int ie_match_stat(struct index_state *istate,if (assume_racy_is_modified) changed |=DATA_CHANGED ;else - changed |=ce_modified_check_fs (ce, st); + changed |=ce_modified_check_fs (istate, ce, st); }return changed;
@@ -447,7 +451,7 @@ int ie_modified(struct index_state *istate, (S_ISGITLINK(ce->ce_mode) || ce->ce_stat_data.sd_size != 0))return changed; - changed_fs =ce_modified_check_fs (ce, st); + changed_fs =ce_modified_check_fs (istate, ce, st);if (changed_fs)return changed | changed_fs;return 0 ;
@@ -753,7 +757,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, } }if (!intent_only) { -if (index_path (&ce->oid, path, st, newflags)) { +if (index_path (istate, &ce->oid, path, st, newflags)) {discard_cache_entry (ce);return error ("unable to index file %s" , path); }
@@ -2230,7 +2234,8 @@ static int ce_flush(git_hash_ctx *context, int fd, unsigned char *hash)return (write_in_full (fd, write_buffer, left) <0 ) ?-1 :0 ; } -static void ce_smudge_racily_clean_entry (struct cache_entry *ce) +static void ce_smudge_racily_clean_entry (struct index_state *istate, +struct cache_entry *ce) {/* * The only thing we care about in this function is to smudge the
@@ -2249,7 +2254,7 @@ static void ce_smudge_racily_clean_entry(struct cache_entry *ce)return ;if (ce_match_stat_basic (ce, &st))return ; -if (ce_modified_check_fs (ce, &st)) { +if (ce_modified_check_fs (istate, ce, &st)) {/* This is "racily clean"; smudge it. Note that this * is a tricky code. At first glance, it may appear * that it can break with this sequence:
@@ -2494,7 +2499,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,if (ce->ce_flags &CE_REMOVE )continue ;if (!ce_uptodate (ce) &&is_racy_timestamp (istate, ce)) -ce_smudge_racily_clean_entry (ce); +ce_smudge_racily_clean_entry (istate, ce);if (is_null_oid (&ce->oid)) {static const char msg[] ="cache entry has null sha1: %s" ;static int allow =-1 ;
sha1-file.c +29 -21
134 lines not on this page · raw message
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 16/24 rerere.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc DuyThe reason rerere(), rerere_forget() and rerere_remaining() take a struct repository instead of struct index_state is not obvious from the patch:
deep in update_paths() and find_conflict(), hold_locked_index() and read_index() are called. These functions assumes the index path at $GIT_DIR/index which is not always true when you take an arbitrary index state. Taking a repository will allow us to point to the right index path later when we replace them with repo_ versions.
--- apply.c | 2 +- builtin/am.c | 4 +- builtin/commit.c | 2 +- builtin/merge.c | 2 +- builtin/rerere.c | 6 +-- rerere.c | 119 +++++++++++++++++++++++++---------------------- rerere.h | 9 ++-- sequencer.c | 4 +- 8 files changed, 79 insertions(+), 69 deletions(-)
apply.c +1 -1
@@ -4630,7 +4630,7 @@ static int write_out_results(struct apply_state *state, struct patch *list) }string_list_clear (&cpath,0 ); -rerere (0 ); +rerere (state->repo,0 ); }return errs;
builtin/am.c +2 -2
@@ -1603,7 +1603,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa o.verbosity =0 ;if (merge_recursive_generic (&o, &our_tree, &their_tree,1 , bases, &result)) { -rerere (state->allow_rerere_autoupdate); +rerere (the_repository, state->allow_rerere_autoupdate);free (their_tree_name);return error (_ ("Failed to merge in the changes." )); }
@@ -1898,7 +1898,7 @@ static void am_resolve(struct am_state *state) goto next; } -rerere (0 ); +rerere (the_repository,0 );do_commit (state);
builtin/commit.c +1 -1
@@ -1651,7 +1651,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)"new_index file. Check that disk is not full and quota is\n" "not exceeded, and then \"git reset HEAD\" to recover.")); -rerere (0 ); +rerere (the_repository,0 );run_command_v_opt (argv_gc_auto,RUN_GIT_CMD );run_commit_hook (use_editor,get_index_file (),"post-commit" ,NULL );if (amend && !no_post_rewrite) {
builtin/merge.c +1 -1
@@ -899,7 +899,7 @@ static int suggest_conflicts(void)fputs (msgbuf.buf, fp);strbuf_release (&msgbuf);fclose (fp); -rerere (allow_rerere_auto); +rerere (the_repository, allow_rerere_auto);printf (_ ("Automatic merge failed; " "fix conflicts and then commit the result.\n" ));return 1 ;
builtin/rerere.c +3 -3
@@ -70,7 +70,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix) flags =RERERE_NOAUTOUPDATE ;if (argc <1 ) -return rerere (flags); +return rerere (the_repository, flags);if (!strcmp (argv[0 ],"forget" )) {struct pathspec pathspec;
@@ -78,7 +78,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)warning ("'git rerere forget' without paths is deprecated" );parse_pathspec (&pathspec,0 ,PATHSPEC_PREFER_CWD , prefix, argv +1 ); -return rerere_forget (&pathspec); +return rerere_forget (the_repository, &pathspec); }if (!strcmp (argv[0 ],"clear" )) {
@@ -91,7 +91,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)for (i =0 ; i < merge_rr.nr; i++)printf ("%s\n" , merge_rr.items[i].string); }else if (!strcmp (argv[0 ],"remaining" )) { -rerere_remaining (&merge_rr); +rerere_remaining (the_repository, &merge_rr);for (i =0 ; i < merge_rr.nr; i++) {if (merge_rr.items[i].util !=RERERE_RESOLVED )printf ("%s\n" , merge_rr.items[i].string);
rerere.c +64 -55
361 lines not on this page · raw message
rerere.h +5 -4
@@ -4,6 +4,7 @@#include "string-list.h" struct pathspec ; +struct repository ;#define RERERE_AUTOUPDATE 01#define RERERE_NOAUTOUPDATE 02
@@ -22,8 +23,8 @@ struct rerere_id {int variant; }; -int setup_rerere (struct string_list *,int ); -int rerere (int ); +extern int setup_rerere (struct string_list *,int ); +extern int rerere (struct repository *repo,int );/* * Given the conflict ID and the name of a "file" used for replaying * the recorded resolution (e.g. "preimage", "postimage"), return the
@@ -31,8 +32,8 @@ int rerere(int);* return the path to the directory that houses these files. */ const char *rerere_path (const struct rerere_id *,const char *file); -int rerere_forget (struct pathspec *); -int rerere_remaining (struct string_list *); +int rerere_forget (struct repository *,struct pathspec *); +int rerere_remaining (struct repository *,struct string_list *);void rerere_clear (struct string_list *);void rerere_gc (struct string_list *);
sequencer.c +2 -2
@@ -1827,7 +1827,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, : _("could not apply %s... %s"), short_commit_name(commit), msg.subject);print_advice (res ==1 , opts); -rerere (opts->allow_rerere_auto); +rerere (the_repository, opts->allow_rerere_auto); goto leave; }
@@ -3146,7 +3146,7 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,rollback_lock_file (&lock);if (ret) -rerere (opts->allow_rerere_auto); +rerere (the_repository, opts->allow_rerere_auto);else /* * In case of problems, we now want to return a positive
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 18/24 line-range.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/blame.c | 2 +- line-log.c | 4 ++-- line-range.c | 22 ++++++++++++++-------- line-range.h | 6 ++++-- 4 files changed, 21 insertions(+), 13 deletions(-)
builtin/blame.c +1 -1
@@ -1001,7 +1001,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)long bottom, top;if (parse_range_arg (range_list.items[range_i].string, nth_line_cb, &sb, lno, anchor, - &bottom, &top, sb.path)) + &bottom, &top, sb.path, &the_index))usage (blame_usage);if ((!lno && (top || bottom)) || lno < bottom) die(Q_("file %s has only %lu line",
line-log.c +2 -2
@@ -574,7 +574,7 @@ parse_lines(struct repository *r, struct commit *commit,long begin =0 , end =0 ;long anchor; - name_part =skip_range_arg (item->string); + name_part =skip_range_arg (item->string, r->index);if (!name_part || *name_part !=':' || !name_part[1 ])die ("-L argument not 'start,end:file' or ':funcname:file': %s" , item->string);
@@ -599,7 +599,7 @@ parse_lines(struct repository *r, struct commit *commit,if (parse_range_arg (range_part, nth_line, &cb_data, lines, anchor, &begin, &end, - full_name)) + full_name, r->index))die ("malformed -L argument '%s'" , range_part);if ((!lines && (begin || end)) || lines < begin)die ("file %s has only %lu lines" , name_part, lines);
line-range.c +14 -8
@@ -163,9 +163,10 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char } } -static const char *parse_range_funcname (const char *arg,nth_line_fn_t nth_line_cb, -void *cb_data,long lines,long anchor,long *begin,long *end, -const char *path) +static const char *parse_range_funcname ( +const char *arg,nth_line_fn_t nth_line_cb, +void *cb_data,long lines,long anchor,long *begin,long *end, +const char *path,struct index_state *istate) {char *pattern;const char *term;
@@ -198,7 +199,7 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ anchor--;/* input is in human terms */ start =nth_line_cb (cb_data, anchor); - drv =userdiff_find_by_path (&the_index, path); + drv =userdiff_find_by_path (istate, path);if (drv && drv->funcname.pattern) {const struct userdiff_funcname *pe = &drv->funcname; xecfg =xcalloc (1 ,sizeof (*xecfg));
@@ -244,7 +245,8 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_int parse_range_arg (const char *arg,nth_line_fn_t nth_line_cb,void *cb_data,long lines,long anchor, -long *begin,long *end,const char *path) +long *begin,long *end, +const char *path,struct index_state *istate) { *begin = *end =0 ;
@@ -254,7 +256,9 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, anchor = lines +1 ;if (*arg ==':' || (*arg =='^' && *(arg +1 ) ==':' )) { - arg =parse_range_funcname (arg, nth_line_cb, cb_data, lines, anchor, begin, end, path); + arg =parse_range_funcname (arg, nth_line_cb, cb_data, + lines, anchor, begin, end, + path, istate);if (!arg || *arg)return -1 ;return 0 ;
@@ -275,10 +279,12 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb,return 0 ; } -const char *skip_range_arg (const char *arg) +const char *skip_range_arg (const char *arg,struct index_state *istate) {if (*arg ==':' || (*arg =='^' && *(arg +1 ) ==':' )) -return parse_range_funcname (arg,NULL ,NULL ,0 ,0 ,NULL ,NULL ,NULL ); +return parse_range_funcname (arg,NULL ,NULL , +0 ,0 ,NULL ,NULL , +NULL , istate); arg =parse_loc (arg,NULL ,NULL ,0 ,-1 ,NULL );
line-range.h +4 -2
@@ -1,6 +1,8 @@#ifndef LINE_RANGE_H #define LINE_RANGE_H +struct index_state ; +/* * Parse one item in an -L begin,end option w.r.t. the notional file * object 'cb_data' consisting of 'lines' lines.
@@ -23,7 +25,7 @@ int parse_range_arg(const char *arg,nth_line_fn_t nth_line_cb, void *cb_data, long lines, long anchor, long *begin, long *end, - const char *path); + const char *path, struct index_state *istate);/* * Scan past a range argument that could be parsed by
@@ -34,6 +36,6 @@ int parse_range_arg(const char *arg,* NULL in case the argument is obviously malformed. */ -const char *skip_range_arg (const char *arg); +const char *skip_range_arg (const char *arg,struct index_state *istate);#endif /* LINE_RANGE_H */
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 17/24 userdiff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- archive-zip.c | 14 +++++++++----- builtin/grep.c | 3 ++- combine-diff.c | 2 +- diff.c | 40 +++++++++++++++++++++++----------------- diff.h | 3 ++- diffcore-pickaxe.c | 4 ++-- grep.c | 21 ++++++++++++--------- grep.h | 3 ++- line-range.c | 2 +- userdiff.c | 5 +++-- userdiff.h | 3 ++- 11 files changed, 59 insertions(+), 41 deletions(-)
archive-zip.c +9 -5
@@ -264,9 +264,10 @@ static int has_only_ascii(const char *s) } } -static int entry_is_binary (const char *path,const void *buffer,size_t size) +static int entry_is_binary (struct index_state *istate,const char *path, +const void *buffer,size_t size) { -struct userdiff_driver *driver =userdiff_find_by_path (path); +struct userdiff_driver *driver =userdiff_find_by_path (istate, path);if (!driver) driver =userdiff_find_by_name ("default" );if (driver->binary !=-1 )
@@ -352,7 +353,8 @@ static int write_zip_entry(struct archiver_args *args,return error (_ ("cannot read %s" ),oid_to_hex (oid)); crc =crc32 (crc, buffer, size); - is_binary =entry_is_binary (path_without_prefix, + is_binary =entry_is_binary (args->repo->index, + path_without_prefix, buffer, size); out = buffer; }
@@ -428,7 +430,8 @@ static int write_zip_entry(struct archiver_args *args,break ; crc =crc32 (crc, buf, readlen);if (is_binary ==-1 ) - is_binary =entry_is_binary (path_without_prefix, + is_binary =entry_is_binary (args->repo->index, + path_without_prefix, buf, readlen);write_or_die (1 , buf, readlen); }
@@ -460,7 +463,8 @@ static int write_zip_entry(struct archiver_args *args,break ; crc =crc32 (crc, buf, readlen);if (is_binary ==-1 ) - is_binary =entry_is_binary (path_without_prefix, + is_binary =entry_is_binary (args->repo->index, + path_without_prefix, buf, readlen); zstream.next_in = buf;
builtin/grep.c +2 -1
@@ -103,7 +103,8 @@ static void add_work(struct grep_opt *opt, const struct grep_source *gs) todo[todo_end].source = *gs;if (opt->binary !=GREP_BINARY_TEXT ) -grep_source_load_driver (&todo[todo_end].source); +grep_source_load_driver (&todo[todo_end].source, + opt->repo->index); todo[todo_end].done =0 ;strbuf_reset (&todo[todo_end].out); todo_end = (todo_end +1 ) %ARRAY_SIZE (todo);
combine-diff.c +1 -1
@@ -987,7 +987,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,const char *line_prefix =diff_line_prefix (opt); context = opt->context; - userdiff =userdiff_find_by_path (elem->path); + userdiff =userdiff_find_by_path (opt->repo->index, elem->path);if (!userdiff) userdiff =userdiff_find_by_name ("default" );if (opt->flags.allow_textconv)
diff.c +23 -17
@@ -2093,23 +2093,25 @@ static void diff_words_flush(struct emit_callback *ecbdata) } } -static void diff_filespec_load_driver (struct diff_filespec *one) +static void diff_filespec_load_driver (struct diff_filespec *one, +struct index_state *istate) {/* Use already-loaded driver */ if (one->driver)return ;if (S_ISREG (one->mode)) - one->driver =userdiff_find_by_path (one->path); + one->driver =userdiff_find_by_path (istate, one->path);/* Fallback to default settings */ if (!one->driver) one->driver =userdiff_find_by_name ("default" ); } -static const char *userdiff_word_regex (struct diff_filespec *one) +static const char *userdiff_word_regex (struct diff_filespec *one, +struct index_state *istate) { -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, istate);return one->driver->word_regex; }
@@ -2132,9 +2134,9 @@ static void init_diff_words_data(struct emit_callback *ecbdata,xcalloc (1 ,sizeof (struct emitted_diff_symbols ));if (!o->word_regex) - o->word_regex =userdiff_word_regex (one); + o->word_regex =userdiff_word_regex (one, o->repo->index);if (!o->word_regex) - o->word_regex =userdiff_word_regex (two); + o->word_regex =userdiff_word_regex (two, o->repo->index);if (!o->word_regex) o->word_regex = diff_word_regex_cfg;if (o->word_regex) {
@@ -3257,7 +3259,7 @@ int diff_filespec_is_binary(struct repository *r, struct diff_filespec *one) {if (one->is_binary ==-1 ) { -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, r->index);if (one->driver->binary !=-1 ) one->is_binary = one->driver->binary;else {
@@ -3273,9 +3275,10 @@ int diff_filespec_is_binary(struct repository *r,return one->is_binary; } -static const struct userdiff_funcname *diff_funcname_pattern (struct diff_filespec *one) +static const struct userdiff_funcname * +diff_funcname_pattern (struct diff_options *o,struct diff_filespec *one) { -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, o->repo->index);return one->driver->funcname.pattern ? &one->driver->funcname :NULL ; }
@@ -3287,12 +3290,13 @@ void diff_set_mnemonic_prefix(struct diff_options *options, const char *a, const options->b_prefix = b; } -struct userdiff_driver *get_textconv (struct diff_filespec *one) +struct userdiff_driver *get_textconv (struct index_state *istate, +struct diff_filespec *one) {if (!DIFF_FILE_VALID (one))return NULL ; -diff_filespec_load_driver (one); +diff_filespec_load_driver (one, istate);return userdiff_get_textconv (one->driver); }
@@ -3342,8 +3346,8 @@ static void builtin_diff(const char *name_a, }if (o->flags.allow_textconv) { - textconv_one =get_textconv (one); - textconv_two =get_textconv (two); + textconv_one =get_textconv (o->repo->index, one); + textconv_two =get_textconv (o->repo->index, two); }/* Never use a non-valid filename anywhere if at all possible */
@@ -3465,9 +3469,9 @@ static void builtin_diff(const char *name_a, mf1.size =fill_textconv (o->repo, textconv_one, one, &mf1.ptr); mf2.size =fill_textconv (o->repo, textconv_two, two, &mf2.ptr); - pe =diff_funcname_pattern (one); + pe =diff_funcname_pattern (o, one);if (!pe) - pe =diff_funcname_pattern (two); + pe =diff_funcname_pattern (o, two);memset (&xpp,0 ,sizeof (xpp));memset (&xecfg,0 ,sizeof (xecfg));
@@ -4223,7 +4227,9 @@ static void run_diff_cmd(const char *pgm,if (o->flags.allow_external) { -struct userdiff_driver *drv =userdiff_find_by_path (attr_path); +struct userdiff_driver *drv; + + drv =userdiff_find_by_path (o->repo->index, attr_path);if (drv && drv->external) pgm = drv->external; }
@@ -6399,7 +6405,7 @@ int textconv_object(struct repository *r, df =alloc_filespec (path);fill_filespec (df, oid, oid_valid, mode); - textconv =get_textconv (df); + textconv =get_textconv (r->index, df);if (!textconv) {free_filespec (df);return 0 ;
diff.h +2 -1
@@ -452,7 +452,8 @@ size_t fill_textconv(struct repository *r,* and only if it has textconv enabled (otherwise return NULL). The result * can be passed to fill_textconv(). */ -struct userdiff_driver *get_textconv (struct diff_filespec *one); +struct userdiff_driver *get_textconv (struct index_state *istate, +struct diff_filespec *one);/* * Prepare diff_filespec and convert it using diff textconv API
diffcore-pickaxe.c +2 -2
@@ -139,8 +139,8 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,return 0 ;if (o->flags.allow_textconv) { - textconv_one =get_textconv (p->one); - textconv_two =get_textconv (p->two); + textconv_one =get_textconv (o->repo->index, p->one); + textconv_two =get_textconv (o->repo->index, p->two); }/*
grep.c +12 -9
@@ -11,7 +11,8 @@#include "help.h" static int grep_source_load (struct grep_source *gs); -static int grep_source_is_binary (struct grep_source *gs); +static int grep_source_is_binary (struct grep_source *gs, +struct index_state *istate);static struct grep_opt grep_defaults;
@@ -1547,7 +1548,7 @@ static int match_funcname(struct grep_opt *opt, struct grep_source *gs, char *bo {xdemitconf_t *xecfg = opt->priv;if (xecfg && !xecfg->find_func) { -grep_source_load_driver (gs); +grep_source_load_driver (gs, opt->repo->index);if (gs->driver->funcname.pattern) {const struct userdiff_funcname *pe = &gs->driver->funcname;xdiff_set_find_func (xecfg, pe->pattern, pe->cflags);
@@ -1804,7 +1805,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle opt->last_shown =0 ;if (opt->allow_textconv) { -grep_source_load_driver (gs); +grep_source_load_driver (gs, opt->repo->index);/* * We might set up the shared textconv cache data here, which * is not thread-safe.
@@ -1821,11 +1822,11 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colleif (!textconv) {switch (opt->binary) {case GREP_BINARY_DEFAULT : -if (grep_source_is_binary (gs)) +if (grep_source_is_binary (gs, opt->repo->index)) binary_match_only =1 ;break ;case GREP_BINARY_NOMATCH : -if (grep_source_is_binary (gs)) +if (grep_source_is_binary (gs, opt->repo->index))return 0 ;/* Assume unmatch */ break ;case GREP_BINARY_TEXT :
@@ -2171,22 +2172,24 @@ static int grep_source_load(struct grep_source *gs)BUG ("invalid grep_source type to load" ); } -void grep_source_load_driver (struct grep_source *gs) +void grep_source_load_driver (struct grep_source *gs, +struct index_state *istate) {if (gs->driver)return ;grep_attr_lock ();if (gs->path) - gs->driver =userdiff_find_by_path (gs->path); + gs->driver =userdiff_find_by_path (istate, gs->path);if (!gs->driver) gs->driver =userdiff_find_by_name ("default" );grep_attr_unlock (); } -static int grep_source_is_binary (struct grep_source *gs) +static int grep_source_is_binary (struct grep_source *gs, +struct index_state *istate) { -grep_source_load_driver (gs); +grep_source_load_driver (gs, istate);if (gs->driver->binary !=-1 )return gs->driver->binary;
grep.h +2 -1
@@ -220,7 +220,8 @@ void grep_source_init(struct grep_source *gs, enum grep_source_type type, const void *identifier);void grep_source_clear_data (struct grep_source *gs);void grep_source_clear (struct grep_source *gs); -void grep_source_load_driver (struct grep_source *gs); +void grep_source_load_driver (struct grep_source *gs, +struct index_state *istate);int grep_source (struct grep_opt *opt,struct grep_source *gs);
line-range.c +1 -1
@@ -198,7 +198,7 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ anchor--;/* input is in human terms */ start =nth_line_cb (cb_data, anchor); - drv =userdiff_find_by_path (path); + drv =userdiff_find_by_path (&the_index, path);if (drv && drv->funcname.pattern) {const struct userdiff_funcname *pe = &drv->funcname; xecfg =xcalloc (1 ,sizeof (*xecfg));
userdiff.c +3 -2
@@ -270,7 +270,8 @@ struct userdiff_driver *userdiff_find_by_name(const char *name) {return userdiff_find_by_namelen (name, len); } -struct userdiff_driver *userdiff_find_by_path (const char *path) +struct userdiff_driver *userdiff_find_by_path (struct index_state *istate, +const char *path) {static struct attr_check *check;
@@ -278,7 +279,7 @@ struct userdiff_driver *userdiff_find_by_path(const char *path) check =attr_check_initl ("diff" ,NULL );if (!path)return NULL ; -if (git_check_attr (&the_index, path, check)) +if (git_check_attr (istate, path, check))return NULL ;if (ATTR_TRUE (check->items[0 ].value))
userdiff.h +2 -1
@@ -21,7 +21,8 @@ struct userdiff_driver {int userdiff_config (const char *k,const char *v);struct userdiff_driver *userdiff_find_by_name (const char *name); -struct userdiff_driver *userdiff_find_by_path (const char *path); +struct userdiff_driver *userdiff_find_by_path (struct index_state *istate, +const char *path);/* * Initialize any textconv-related fields in the driver and return it, or NULL
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 19/24 submodule.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- builtin/pull.c | 2 +- submodule.c | 28 +++++++++++++++++----------- submodule.h | 9 ++++++--- transport.c | 9 ++++++--- 4 files changed, 30 insertions(+), 18 deletions(-)
builtin/pull.c +1 -1
@@ -944,7 +944,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)int ret =0 ;if ((recurse_submodules ==RECURSE_SUBMODULES_ON || recurse_submodules ==RECURSE_SUBMODULES_ON_DEMAND ) && -submodule_touches_in_range (&rebase_fork_point, &curr_head)) +submodule_touches_in_range (&the_index, &rebase_fork_point, &curr_head))die (_ ("cannot rebase with locally recorded submodule modifications" ));if (!autostash) {struct commit_list *list =NULL ;
submodule.c +17 -11
@@ -766,7 +766,8 @@ static void collect_changed_submodules_cb(struct diff_queue_struct *q,* have a corresponding 'struct oid_array' (in the 'util' field) which lists * what the submodule pointers were updated to during the change. */ -static void collect_changed_submodules (struct string_list *changed, +static void collect_changed_submodules (struct index_state *istate, +struct string_list *changed,struct argv_array *argv) {struct rev_info rev;
@@ -930,8 +931,10 @@ static int submodule_needs_pushing(const char *path, struct oid_array *commits)return 0 ; } -int find_unpushed_submodules (struct oid_array *commits, -const char *remotes_name,struct string_list *needs_pushing) +int find_unpushed_submodules (struct index_state *istate, +struct oid_array *commits, +const char *remotes_name, +struct string_list *needs_pushing) {struct string_list submodules =STRING_LIST_INIT_DUP ;struct string_list_item *name;
@@ -943,7 +946,7 @@ int find_unpushed_submodules(struct oid_array *commits,argv_array_push (&argv,"--not" );argv_array_pushf (&argv,"--remotes=%s" , remotes_name); -collect_changed_submodules (&submodules, &argv); +collect_changed_submodules (istate, &submodules, &argv);for_each_string_list_item (name, &submodules) {struct oid_array *commits = name->util;
@@ -1044,7 +1047,8 @@ static void submodule_push_check(const char *path, const char *head,die ("process for submodule '%s' failed" , path); } -int push_unpushed_submodules(struct oid_array *commits, +int push_unpushed_submodules(struct index_state *istate, + struct oid_array *commits, const struct remote *remote, const struct refspec *rs, const struct string_list *push_options,
@@ -1053,7 +1057,8 @@ int push_unpushed_submodules(struct oid_array *commits,int i, ret =1 ;struct string_list needs_pushing =STRING_LIST_INIT_DUP ; -if (!find_unpushed_submodules (commits, remote->name, &needs_pushing)) +if (!find_unpushed_submodules (istate, commits, + remote->name, &needs_pushing))return 1 ;/*
@@ -1110,7 +1115,7 @@ void check_for_new_submodule_commits(struct object_id *oid)oid_array_append (&ref_tips_after_fetch, oid); } -static void calculate_changed_submodule_paths (void ) +static void calculate_changed_submodule_paths (struct index_state *istate) {struct argv_array argv =ARGV_ARRAY_INIT ;struct string_list changed_submodules =STRING_LIST_INIT_DUP ;
@@ -1131,7 +1136,7 @@ static void calculate_changed_submodule_paths(void)* Collect all submodules (whether checked out or not) for which new * commits have been recorded upstream in "changed_submodule_names". */ -collect_changed_submodules (&changed_submodules, &argv); +collect_changed_submodules (istate, &changed_submodules, &argv);for_each_string_list_item (name, &changed_submodules) {struct oid_array *commits = name->util;
@@ -1158,7 +1163,8 @@ static void calculate_changed_submodule_paths(void) initialized_fetch_ref_tips =0 ; } -int submodule_touches_in_range (struct object_id *excl_oid, +int submodule_touches_in_range (struct index_state *istate, +struct object_id *excl_oid,struct object_id *incl_oid) {struct string_list subs =STRING_LIST_INIT_DUP ;
@@ -1176,7 +1182,7 @@ int submodule_touches_in_range(struct object_id *excl_oid,argv_array_push (&args,oid_to_hex (excl_oid)); } -collect_changed_submodules (&subs, &args); +collect_changed_submodules (istate, &subs, &args); ret = subs.nr;argv_array_clear (&args);
@@ -1346,7 +1352,7 @@ int fetch_populated_submodules(struct repository *r,argv_array_push (&spf.args,"--recurse-submodules-default" );/* default value, "--submodule-prefix" and its value are added later */ -calculate_changed_submodule_paths (); +calculate_changed_submodule_paths (r->index); run_processes_parallel(max_parallel_jobs, get_next_submodule, fetch_start_failure,
submodule.h +6 -3
@@ -102,13 +102,16 @@ int add_submodule_odb(const char *path);* Checks if there are submodule changes in a..b. If a is the null OID, * checks b and all its ancestors instead. */ -int submodule_touches_in_range (struct object_id *a, +int submodule_touches_in_range (struct index_state *istate, +struct object_id *a,struct object_id *b); -int find_unpushed_submodules (struct oid_array *commits, +int find_unpushed_submodules (struct index_state *istate, +struct oid_array *commits,const char *remotes_name,struct string_list *needs_pushing);struct refspec ; -int push_unpushed_submodules(struct oid_array *commits, +int push_unpushed_submodules(struct index_state *istate, + struct oid_array *commits, const struct remote *remote, const struct refspec *rs, const struct string_list *push_options,
transport.c +6 -3
@@ -1139,7 +1139,8 @@ int transport_push(struct transport *transport,oid_array_append (&commits, &ref->new_oid); - if (!push_unpushed_submodules(&commits, + if (!push_unpushed_submodules(&the_index, + &commits, transport->remote, rs, transport->push_options,
@@ -1163,8 +1164,10 @@ int transport_push(struct transport *transport,oid_array_append (&commits, &ref->new_oid); -if (find_unpushed_submodules (&commits, transport->remote->name, - &needs_pushing)) { +if (find_unpushed_submodules (&the_index, + &commits, + transport->remote->name, + &needs_pushing)) {oid_array_clear (&commits);die_with_unpushed_submodules (&needs_pushing); }
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 20/24 tree-diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- tree-diff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tree-diff.c +1 -1
@@ -605,7 +605,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -diff_setup (&diff_opts, the_repository); +diff_setup (&diff_opts, opt->repo); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 21/24 ws.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- apply.c | 8 +++++--- cache.h | 2 +- diff.c | 6 +++--- ws.c | 5 ++--- 4 files changed, 11 insertions(+), 10 deletions(-)
apply.c +5 -3
@@ -2131,10 +2131,12 @@ static int parse_chunk(struct apply_state *state, char *buffer, unsigned long siif (!use_patch (state, patch)) patch->ws_rule =0 ; +else if (patch->new_name) + patch->ws_rule =whitespace_rule (state->repo->index, + patch->new_name);else - patch->ws_rule =whitespace_rule (patch->new_name - ? patch->new_name - : patch->old_name); + patch->ws_rule =whitespace_rule (state->repo->index, + patch->old_name); patchsize = parse_single_patch(state, buffer + offset + hdrsize,
cache.h +1 -1
@@ -1694,7 +1694,7 @@ void shift_tree_by(const struct object_id *, const struct object_id *, struct ob/* All WS_* -- when extended, adapt diff.c emit_symbol */ #define WS_RULE_MASK 07777extern unsigned whitespace_rule_cfg; -extern unsigned whitespace_rule (const char *); +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);
diff.c +3 -3
@@ -1705,7 +1705,7 @@ static void emit_rewrite_diff(const char *name_a,memset (&ecbdata,0 ,sizeof (ecbdata)); ecbdata.color_diff =want_color (o->use_color); - ecbdata.ws_rule =whitespace_rule (name_b); + ecbdata.ws_rule =whitespace_rule (o->repo->index, name_b); ecbdata.opt = o;if (ecbdata.ws_rule &WS_BLANK_AT_EOF ) {mmfile_t mf1, mf2;
@@ -3480,7 +3480,7 @@ static void builtin_diff(const char *name_a, lbl[0 ] =NULL ; ecbdata.label_path = lbl; ecbdata.color_diff =want_color (o->use_color); - ecbdata.ws_rule =whitespace_rule (name_b); + ecbdata.ws_rule =whitespace_rule (o->repo->index, name_b);if (ecbdata.ws_rule &WS_BLANK_AT_EOF )check_blank_at_eof (&mf1, &mf2, &ecbdata); ecbdata.opt = o;
@@ -3640,7 +3640,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b, data.filename = name_b ? name_b : name_a; data.lineno =0 ; data.o = o; - data.ws_rule =whitespace_rule (attr_path); + data.ws_rule =whitespace_rule (o->repo->index, attr_path); data.conflict_marker_size =ll_merge_marker_size (o->repo->index, attr_path); if (fill_mmfile(o->repo, &mf1, one) < 0 ||
ws.c +2 -3
@@ -3,7 +3,6 @@* * Copyright (c) 2007 Junio C Hamano */ -#include "cache.h" #include "attr.h"
@@ -71,14 +70,14 @@ unsigned parse_whitespace_rule(const char *string)return rule; } -unsigned whitespace_rule (const char *pathname) +unsigned whitespace_rule (struct index_state *istate,const char *pathname) {static struct attr_check *attr_whitespace_rule;if (!attr_whitespace_rule) attr_whitespace_rule =attr_check_initl ("whitespace" ,NULL ); -if (!git_check_attr (&the_index, pathname, attr_whitespace_rule)) { +if (!git_check_attr (istate, pathname, attr_whitespace_rule)) {const char *value; value = attr_whitespace_rule->items[0 ].value;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 23/24 revision.c: reduce implicit dependency the_repository
In reply to Nguyễn Thái Ngọc Duy--- list-objects.c | 8 +++++--- revision.c | 44 +++++++++++++++++++++++--------------------- revision.h | 2 +- 3 files changed, 29 insertions(+), 25 deletions(-)
list-objects.c +5 -3
@@ -196,7 +196,7 @@ static void mark_edge_parents_uninteresting(struct commit *commit,struct commit *parent = parents->item;if (!(parent->object.flags &UNINTERESTING ))continue ; -mark_tree_uninteresting (get_commit_tree (parent)); +mark_tree_uninteresting (revs->repo,get_commit_tree (parent));if (revs->edge_hint && !(parent->object.flags &SHOWN )) { parent->object.flags |=SHOWN ;show_edge (parent);
@@ -213,7 +213,8 @@ void mark_edges_uninteresting(struct rev_info *revs, show_edge_fn show_edge)struct commit *commit = list->item;if (commit->object.flags &UNINTERESTING ) { -mark_tree_uninteresting (get_commit_tree (commit)); +mark_tree_uninteresting (revs->repo, +get_commit_tree (commit));if (revs->edge_hint_aggressive && !(commit->object.flags &SHOWN )) { commit->object.flags |=SHOWN ;show_edge (commit);
@@ -228,7 +229,8 @@ void mark_edges_uninteresting(struct rev_info *revs, show_edge_fn show_edge)struct commit *commit = (struct commit *)obj;if (obj->type !=OBJ_COMMIT || !(obj->flags &UNINTERESTING ))continue ; -mark_tree_uninteresting (get_commit_tree (commit)); +mark_tree_uninteresting (revs->repo, +get_commit_tree (commit));if (!(obj->flags &SHOWN )) { obj->flags |=SHOWN ;show_edge (commit);
revision.c +23 -21
149 lines not on this page · raw message
revision.h +1 -1
@@ -277,7 +277,7 @@ void put_revision_mark(const struct rev_info *revs, const struct commit *commit);void mark_parents_uninteresting (struct commit *commit); -void mark_tree_uninteresting (struct tree *tree); +void mark_tree_uninteresting (struct repository *r,struct tree *tree);void show_object_with_name (FILE *,struct object *,const char *);
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 22/24 revision.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy"remove" is probably a strong word because the dependency is still there, hidden behind the_repository. This patch is almost mechanical, all call sites are updated to take the_repository, no exception.
--- bisect.c | 4 ++-- builtin/add.c | 4 ++-- builtin/am.c | 6 +++--- builtin/blame.c | 2 +- builtin/checkout.c | 4 ++-- builtin/commit.c | 2 +- builtin/describe.c | 4 ++-- builtin/diff-files.c | 2 +- builtin/diff-index.c | 2 +- builtin/diff-tree.c | 2 +- builtin/diff.c | 2 +- builtin/fast-export.c | 2 +- builtin/fmt-merge-msg.c | 2 +- builtin/log.c | 16 ++++++++-------- builtin/merge.c | 4 ++-- builtin/pack-objects.c | 2 +- builtin/prune.c | 2 +- builtin/reflog.c | 2 +- builtin/rev-list.c | 2 +- builtin/revert.c | 2 +- builtin/shortlog.c | 2 +- builtin/submodule--helper.c | 2 +- bundle.c | 4 ++-- diff-lib.c | 4 ++-- http-push.c | 2 +- merge-recursive.c | 2 +- pack-bitmap-write.c | 2 +- ref-filter.c | 2 +- remote.c | 2 +- revision.c | 32 ++++++++++++++++++-------------- revision.h | 10 +++++++--- sequencer.c | 8 ++++---- shallow.c | 2 +- submodule.c | 6 +++--- t/helper/test-revision-walking.c | 2 +- wt-status.c | 10 +++++----- 36 files changed, 84 insertions(+), 76 deletions(-)
bisect.c +2 -2
@@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,struct argv_array rev_argv =ARGV_ARRAY_INIT ;int i; -init_revisions (revs, prefix); +init_revisions (revs, the_repository, prefix); revs->abbrev =0 ; revs->commit_format =CMIT_FMT_UNSPECIFIED ;
@@ -889,7 +889,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)struct rev_info opt;/* diff-tree init */ -init_revisions (&opt, prefix); +init_revisions (&opt, the_repository, prefix);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ opt.abbrev =0 ; opt.diff =1 ;
builtin/add.c +2 -2
@@ -110,7 +110,7 @@ int add_files_to_cache(const char *prefix,memset (&data,0 ,sizeof (data)); data.flags = flags; -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix);setup_revisions (0 ,NULL , &rev,NULL );if (pathspec)copy_pathspec (&rev.prune_data, pathspec);
@@ -232,7 +232,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)if (read_cache () <0 )die (_ ("Could not read the index" )); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.diffopt.context =7 ; argc =setup_revisions (argc, argv, &rev,NULL );
builtin/am.c +3 -3
@@ -1372,7 +1372,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *commFILE *fp; fp =xfopen (am_path (state,"patch" ),"w" ); -init_revisions (&rev_info,NULL ); +init_revisions (&rev_info, the_repository,NULL ); rev_info.diff =1 ; rev_info.abbrev =0 ; rev_info.disable_stdin =1 ;
@@ -1407,7 +1407,7 @@ static void write_index_patch(const struct am_state *state) the_repository->hash_algo->empty_tree); fp =xfopen (am_path (state,"patch" ),"w" ); -init_revisions (&rev_info,NULL ); +init_revisions (&rev_info, the_repository,NULL ); rev_info.diff =1 ; rev_info.disable_stdin =1 ; rev_info.no_commit_id =1 ;
@@ -1565,7 +1565,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pastruct rev_info rev_info;const char *diff_filter_str ="--diff-filter=AM" ; -init_revisions (&rev_info,NULL ); +init_revisions (&rev_info, the_repository,NULL ); rev_info.diffopt.output_format =DIFF_FORMAT_NAME_STATUS ;diff_opt_parse (&rev_info.diffopt, &diff_filter_str,1 , rev_info.prefix);add_pending_oid (&rev_info,"HEAD" , &our_tree,0 );
builtin/blame.c +1 -1
@@ -830,7 +830,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)setup_default_color_by_age ();git_config (git_blame_config, &output_option); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); revs.date_mode = blame_date_mode; revs.diffopt.flags.allow_textconv =1 ; revs.diffopt.flags.follow_renames =1 ;
builtin/checkout.c +2 -2
@@ -392,7 +392,7 @@ static void show_local_changes(struct object *head, {struct rev_info rev;/* I think we want full paths, even if we're in a subdirectory. */ -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL ); rev.diffopt.flags = opts->flags; rev.diffopt.output_format |=DIFF_FORMAT_NAME_STATUS ;diff_setup_done (&rev.diffopt);
@@ -801,7 +801,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *nestruct rev_info revs;struct object *object = &old_commit->object; -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );setup_revisions (0 ,NULL , &revs,NULL ); object->flags &= ~UNINTERESTING ;
builtin/commit.c +1 -1
@@ -980,7 +980,7 @@ static const char *find_author_by_nickname(const char *name)const char *av[20 ];int ac =0 ; -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );strbuf_addf (&buf,"--author=%s" , name); av[++ac] ="--all" ; av[++ac] ="-i" ;
builtin/describe.c +2 -2
@@ -488,7 +488,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst)"--objects" ,"--in-commit-order" ,"--reverse" ,"HEAD" , NULL); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );if (setup_revisions (args.argc, args.argv, &revs,NULL ) >1 )BUG ("setup_revisions could not handle all args?" );
@@ -636,7 +636,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)if (0 <= fd)update_index_if_able (&the_index, &index_lock); -init_revisions (&revs, prefix); +init_revisions (&revs, the_repository, prefix);argv_array_pushv (&args, diff_index_args);if (setup_revisions (args.argc, args.argv, &revs,NULL ) !=1 )BUG ("malformed internal diff-index command line" );
builtin/diff-files.c +1 -1
@@ -25,7 +25,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)usage (diff_files_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-index.c +1 -1
@@ -22,7 +22,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)usage (diff_cache_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-tree.c +1 -1
@@ -110,7 +110,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)usage (diff_tree_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -init_revisions (opt, prefix); +init_revisions (opt, the_repository, prefix);if (read_cache () <0 )die (_ ("index file corrupt" )); opt->abbrev =0 ;
builtin/diff.c +1 -1
@@ -318,7 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL );precompose_argv (argc, argv); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix);if (no_index && argc != i +2 ) {if (no_index ==DIFF_NO_INDEX_IMPLICIT ) {
builtin/fast-export.c +1 -1
@@ -1033,7 +1033,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)/* we handle encodings */ git_config (git_default_config,NULL ); -init_revisions (&revs, prefix); +init_revisions (&revs, the_repository, prefix);init_revision_sources (&revision_sources); revs.topo_order =1 ; revs.sources = &revision_sources;
builtin/fmt-merge-msg.c +1 -1
@@ -642,7 +642,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,struct rev_info rev; head =lookup_commit_or_die (&head_oid,"HEAD" ); -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL ); rev.commit_format =CMIT_FMT_ONELINE ; rev.ignore_merges =1 ; rev.limited =1 ;
builtin/log.c +8 -8
@@ -467,7 +467,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.diff =1 ; rev.simplify_history =0 ;memset (&opt,0 ,sizeof (opt));
@@ -585,7 +585,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)git_config (git_log_config,NULL );memset (&match_all,0 ,sizeof (match_all)); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.diff =1 ; rev.always_show_header =1 ; rev.no_walk =REVISION_WALK_NO_WALK_SORTED ;
@@ -665,7 +665,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix);init_reflog_walk (&rev.reflog_info); rev.verbose_header =1 ;memset (&opt,0 ,sizeof (opt));
@@ -704,7 +704,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.always_show_header =1 ;memset (&opt,0 ,sizeof (opt)); opt.def ="HEAD" ;
@@ -917,7 +917,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)init_patch_ids (ids, the_repository);/* given a range a..b get all patch ids for b..a */ -init_revisions (&check_rev, rev->prefix); +init_revisions (&check_rev, the_repository, rev->prefix); check_rev.max_parents =1 ; o1->flags ^=UNINTERESTING ; o2->flags ^=UNINTERESTING ;
@@ -1367,7 +1367,7 @@ static void prepare_bases(struct base_tree_info *bases,oidcpy (&bases->base_commit, &base->object.oid); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); revs.max_parents =1 ; revs.topo_order =1 ;for (i =0 ; i < total; i++) {
@@ -1528,7 +1528,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) extra_cc.strdup_strings =1 ;init_log_defaults ();git_config (git_format_config,NULL ); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.commit_format =CMIT_FMT_EMAIL ; rev.expand_tabs_in_log_default =0 ; rev.verbose_header =1 ;
@@ -1939,7 +1939,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix) } } -init_revisions (&revs, prefix); +init_revisions (&revs, the_repository, prefix); revs.max_parents =1 ;if (add_pending_commit (head, &revs,0 ))
builtin/merge.c +2 -2
@@ -389,7 +389,7 @@ static void squash_message(struct commit *commit, struct commit_list *remoteheadprintf (_ ("Squash commit -- not updating HEAD\n" )); -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL ); rev.ignore_merges =1 ; rev.commit_format =CMIT_FMT_MEDIUM ;
@@ -911,7 +911,7 @@ static int evaluate_result(void)struct rev_info rev;/* Check how many files differ. */ -init_revisions (&rev,"" ); +init_revisions (&rev, the_repository,"" );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ;
builtin/pack-objects.c +1 -1
@@ -2989,7 +2989,7 @@ static void get_object_list(int ac, const char **av)char line[1000 ];int flags =0 ; -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
builtin/prune.c +1 -1
@@ -120,7 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix) save_commit_buffer =0 ; read_replace_refs =0 ; ref_paranoia =1 ; -init_revisions (&revs, prefix); +init_revisions (&revs, the_repository, prefix); argc =parse_options (argc, argv, prefix, options, prune_usage,0 );
builtin/reflog.c +1 -1
@@ -567,7 +567,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)* from reflog if the repository was pruned with older git. */ if (cb.cmd.stalefix) { -init_revisions (&cb.cmd.revs, prefix); +init_revisions (&cb.cmd.revs, the_repository, prefix);if (flags &EXPIRE_REFLOGS_VERBOSE )printf ("Marking reachable objects..." );mark_reachable_objects (&cb.cmd.revs,0 ,0 ,NULL );
builtin/rev-list.c +1 -1
@@ -370,7 +370,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)usage (rev_list_usage);git_config (git_default_config,NULL ); -init_revisions (&revs, prefix); +init_revisions (&revs, the_repository, prefix); revs.abbrev =DEFAULT_ABBREV ; revs.commit_format =CMIT_FMT_UNSPECIFIED ;
builtin/revert.c +1 -1
@@ -174,7 +174,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) }else {struct setup_revision_opt s_r_opt; opts->revs =xmalloc (sizeof (*opts->revs)); -init_revisions (opts->revs,NULL ); +init_revisions (opts->revs, the_repository,NULL ); opts->revs->no_walk =REVISION_WALK_NO_WALK_UNSORTED ;if (argc <2 )usage_with_options (usage_str, options);
builtin/shortlog.c +1 -1
@@ -278,7 +278,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)git_config (git_default_config,NULL );shortlog_init (&log); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix);parse_options_start (&ctx, argc, argv, prefix, options,PARSE_OPT_KEEP_DASHDASH |PARSE_OPT_KEEP_ARGV0 );
builtin/submodule--helper.c +1 -1
@@ -792,7 +792,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, path, NULL);git_config (git_diff_basic_config,NULL ); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix); rev.abbrev =0 ; diff_files_args.argc = setup_revisions(diff_files_args.argc, diff_files_args.argv,
bundle.c +2 -2
@@ -140,7 +140,7 @@ int verify_bundle(struct bundle_header *header, int verbose)int i, ret =0 , req_nr;const char *message =_ ("Repository lacks these prerequisite commits:" ); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );for (i =0 ; i < p->nr; i++) {struct ref_list_entry *e = p->list + i;struct object *o =parse_object (the_repository, &e->oid);
@@ -441,7 +441,7 @@ int create_bundle(struct bundle_header *header, const char *path,/* init revs to list objects for pack-objects later */ save_commit_buffer =0 ; -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );/* write prerequisites */ if (compute_and_write_prerequisites (bundle_fd, &revs, argc, argv))
diff-lib.c +2 -2
@@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) {struct rev_info revs; -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );copy_pathspec (&revs.prune_data, &opt->pathspec); revs.diffopt = *opt;
@@ -557,7 +557,7 @@ int index_differs_from(const char *def, const struct diff_flags *flags,struct rev_info rev;struct setup_revision_opt opt; -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = def;setup_revisions (0 ,NULL , &rev, &opt);
http-push.c +1 -1
@@ -1925,7 +1925,7 @@ int cmd_main(int argc, const char **argv)if (!push_all && !is_null_oid (&ref->old_oid))argv_array_pushf (&commit_argv,"^%s" ,oid_to_hex (&ref->old_oid)); -init_revisions (&revs,setup_git_directory ()); +init_revisions (&revs, the_repository,setup_git_directory ());setup_revisions (commit_argv.argc, commit_argv.argv, &revs,NULL ); revs.edge_hint =0 ;/* just in case */
merge-recursive.c +1 -1
@@ -1115,7 +1115,7 @@ static int find_first_merges(struct object_array *result, const char *path,/* get all revisions that merge commit a */ xsnprintf (merged_revision,sizeof (merged_revision),"^%s" ,oid_to_hex (&a->object.oid)); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); rev_opts.submodule = path;/* FIXME: can't handle linked worktrees in submodules yet */ revs.single_worktree = path !=NULL ;
pack-bitmap-write.c +1 -1
@@ -261,7 +261,7 @@ void bitmap_writer_build(struct packing_data *to_pack)if (writer.show_progress) writer.progress =start_progress ("Building bitmaps" , writer.selected_nr); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); revs.tag_objects =1 ; revs.tree_objects =1 ; revs.blob_objects =1 ;
ref-filter.c +1 -1
@@ -2138,7 +2138,7 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata)struct ref_array *array = ref_cbdata->array;struct commit **to_clear =xcalloc (sizeof (struct commit *), array->nr); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );for (i =0 ; i < array->nr; i++) {struct ref_array_item *item = array->items[i];
remote.c +1 -1
@@ -1903,7 +1903,7 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, oid_to_hex(&theirs->object.oid));argv_array_push (&argv,"--" ); -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL );setup_revisions (argv.argc, argv.argv, &revs,NULL );if (prepare_revision_walk (&revs))die ("revision walk setup failed" );
revision.c +18 -14
@@ -877,7 +877,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)return ; left_first = left_count < right_count; -init_patch_ids (&ids, the_repository); +init_patch_ids (&ids, revs->repo); ids.diffopts.pathspec = revs->diffopt.pathspec;/* Compute patch-ids for one side */
@@ -1370,8 +1370,8 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) {struct worktree **worktrees, **p; -read_cache (); -do_add_index_objects_to_pending (revs, &the_index); +read_index (revs->repo->index); +do_add_index_objects_to_pending (revs, revs->repo->index);if (revs->single_worktree)return ;
@@ -1439,10 +1439,13 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,return 1 ; } -void init_revisions (struct rev_info *revs,const char *prefix) +void init_revisions (struct rev_info *revs, +struct repository *repo, +const char *prefix) {memset (revs,0 ,sizeof (*revs)); + revs->repo = repo; revs->abbrev =DEFAULT_ABBREV ; revs->ignore_merges =1 ; revs->simplify_history =1 ;
@@ -1464,11 +1467,11 @@ void init_revisions(struct rev_info *revs, const char *prefix) revs->commit_format =CMIT_FMT_DEFAULT ; revs->expand_tabs_in_log_default =8 ; -init_grep_defaults (the_repository); -grep_init (&revs->grep_filter, the_repository, prefix); +init_grep_defaults (revs->repo); +grep_init (&revs->grep_filter, revs->repo, prefix); revs->grep_filter.status_only =1 ; -diff_setup (&revs->diffopt, the_repository); +diff_setup (&revs->diffopt, revs->repo);if (prefix && !revs->diffopt.prefix) { revs->diffopt.prefix = prefix; revs->diffopt.prefix_length =strlen (prefix);
@@ -1496,6 +1499,7 @@ static void prepare_show_merge(struct rev_info *revs)struct object_id oid;const char **prune =NULL ;int i, prune_num =1 ;/* counting terminating NULL */ +struct index_state *istate = revs->repo->index;if (get_oid ("HEAD" , &oid))die ("--merge without HEAD?" );
@@ -1511,20 +1515,20 @@ static void prepare_show_merge(struct rev_info *revs)free_commit_list (bases); head->object.flags |=SYMMETRIC_LEFT ; -if (!active_nr) -read_cache (); -for (i =0 ; i < active_nr; i++) { -const struct cache_entry *ce = active_cache[i]; +if (!istate->cache_nr) +read_index (istate); +for (i =0 ; i < istate->cache_nr; i++) { +const struct cache_entry *ce = istate->cache[i];if (!ce_stage (ce))continue ; -if (ce_path_match (&the_index, ce, &revs->prune_data,NULL )) { +if (ce_path_match (istate, ce, &revs->prune_data,NULL )) { prune_num++;REALLOC_ARRAY (prune, prune_num); prune[prune_num-2 ] = ce->name; prune[prune_num-1 ] =NULL ; } -while ((i+1 < active_nr) && -ce_same_name (ce, active_cache[i+1 ])) +while ((i+1 < istate->cache_nr) && +ce_same_name (ce, istate->cache[i+1 ])) i++; }clear_pathspec (&revs->prune_data);
revision.h +7 -3
@@ -28,8 +28,9 @@#define DECORATE_SHORT_REFS 1#define DECORATE_FULL_REFS 2 -struct rev_info ;struct log_info ; +struct repository ; +struct rev_info ;struct string_list ;struct saved_parents ; define_shared_commit_slab(revision_sources, char *);
@@ -60,6 +61,7 @@ struct rev_info {/* Starting list */ struct commit_list *commits;struct object_array pending; +struct repository *repo;/* Parents of shown commits */ struct object_array boundary_commits;
@@ -248,12 +250,14 @@ extern volatile show_early_output_fn_t show_early_output;struct setup_revision_opt {const char *def;void (*tweak)(struct rev_info *,struct setup_revision_opt *); -const char *submodule; +const char *submodule;/* TODO: drop this and use rev_info->repo */ int assume_dashdash;unsigned revarg_opt; }; -void init_revisions (struct rev_info *revs,const char *prefix); +void init_revisions (struct rev_info *revs, +struct repository *repo, +const char *prefix);int setup_revisions (int argc,const char **argv,struct rev_info *revs,struct setup_revision_opt *); void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
sequencer.c +4 -4
@@ -1143,7 +1143,7 @@ void print_commit_summary(const char *prefix, const struct object_id *oid,strbuf_release (&author_ident);strbuf_release (&committer_ident); -init_revisions (&rev, prefix); +init_revisions (&rev, the_repository, prefix);setup_revisions (0 ,NULL , &rev,NULL ); rev.diff =1 ;
@@ -2566,7 +2566,7 @@ static int make_patch(struct commit *commit, struct replay_opts *opts)strbuf_addf (&buf,"%s/patch" ,get_dir (opts));memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -init_revisions (&log_tree_opt,NULL ); +init_revisions (&log_tree_opt, the_repository,NULL ); log_tree_opt.abbrev =0 ; log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_PATCH ;
@@ -3477,7 +3477,7 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)struct object_id orig, head;memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -init_revisions (&log_tree_opt,NULL ); +init_revisions (&log_tree_opt, the_repository,NULL ); log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_DIFFSTAT ;
@@ -4212,7 +4212,7 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,const char *insn = flags &TODO_LIST_ABBREVIATE_CMDS ?"p" :"pick" ;int rebase_merges = flags &TODO_LIST_REBASE_MERGES ; -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); revs.verbose_header =1 ;if (!rebase_merges) revs.max_parents =1 ;
shallow.c +1 -1
@@ -184,7 +184,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,is_repository_shallow (the_repository);/* make sure shallows are read */ -init_revisions (&revs,NULL ); +init_revisions (&revs, the_repository,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
submodule.c +3 -3
@@ -428,7 +428,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path, {struct commit_list *list; -init_revisions (rev,NULL ); +init_revisions (rev, the_repository,NULL );setup_revisions (0 ,NULL , rev,NULL ); rev->left_right =1 ; rev->first_parent_only =1 ;
@@ -773,7 +773,7 @@ static void collect_changed_submodules(struct index_state *istate,struct rev_info rev;const struct commit *commit; -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL );setup_revisions (argv->argc, argv->argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
@@ -784,7 +784,7 @@ static void collect_changed_submodules(struct index_state *istate, data.changed = changed; data.commit_oid = &commit->object.oid; -init_revisions (&diff_rev,NULL ); +init_revisions (&diff_rev, the_repository,NULL ); diff_rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; diff_rev.diffopt.format_callback = collect_changed_submodules_cb; diff_rev.diffopt.format_callback_data = &data;
t/helper/test-revision-walking.c +1 -1
@@ -32,7 +32,7 @@ static int run_revision_walk(void)int argc =ARRAY_SIZE (argv) -1 ;int got_revision =0 ; -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL );setup_revisions (argc, argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
wt-status.c +5 -5
@@ -582,7 +582,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) {struct rev_info rev; -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; rev.diffopt.flags.dirty_submodules =1 ;
@@ -607,7 +607,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)struct rev_info rev;struct setup_revision_opt opt; -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = s->is_initial ?empty_tree_oid_hex () : s->reference;setup_revisions (0 ,NULL , &rev, &opt);
@@ -982,7 +982,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)int dirty_submodules;const char *c =color (WT_STATUS_HEADER , s); -init_revisions (&rev,NULL ); +init_revisions (&rev, the_repository,NULL ); rev.diffopt.flags.allow_textconv =1 ; rev.diffopt.ita_invisible_in_index =1 ;
@@ -2314,7 +2314,7 @@ int has_unstaged_changes(int ignore_submodules)struct rev_info rev_info;int result; -init_revisions (&rev_info,NULL ); +init_revisions (&rev_info, the_repository,NULL );if (ignore_submodules) { rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.override_submodule_config =1 ;
@@ -2336,7 +2336,7 @@ int has_uncommitted_changes(int ignore_submodules)if (is_cache_unborn ())return 0 ; -init_revisions (&rev_info,NULL ); +init_revisions (&rev_info, the_repository,NULL );if (ignore_submodules) rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.quick =1 ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v2 24/24 Rename functions to avoid breaking in-flight topics
In reply to Nguyễn Thái Ngọc DuyThe three functions init_revisions(), diff_setup() and rerere() are prefixed temporarily with repo_ to avoid breaking other topics which add new call sites for these functions. This is a temporary measure. Once everything is merged, it will be reverted and the new call sites fixed.
--- apply.c | 2 +- bisect.c | 4 ++-- blame.c | 6 +++--- builtin/add.c | 4 ++-- builtin/am.c | 10 +++++----- builtin/blame.c | 2 +- builtin/checkout.c | 4 ++-- builtin/commit.c | 4 ++-- builtin/describe.c | 4 ++-- builtin/diff-files.c | 2 +- builtin/diff-index.c | 2 +- builtin/diff-tree.c | 2 +- builtin/diff.c | 2 +- builtin/fast-export.c | 2 +- builtin/fmt-merge-msg.c | 2 +- builtin/log.c | 18 +++++++++--------- builtin/merge.c | 8 ++++---- builtin/pack-objects.c | 2 +- builtin/prune.c | 2 +- builtin/range-diff.c | 2 +- builtin/reflog.c | 2 +- builtin/rerere.c | 2 +- builtin/rev-list.c | 2 +- builtin/revert.c | 2 +- builtin/shortlog.c | 2 +- builtin/submodule--helper.c | 2 +- bundle.c | 4 ++-- diff-lib.c | 4 ++-- diff-no-index.c | 2 +- diff.c | 2 +- diff.h | 3 ++- http-push.c | 2 +- merge-recursive.c | 4 ++-- notes-merge.c | 4 ++-- pack-bitmap-write.c | 2 +- patch-ids.c | 2 +- read-cache.c | 2 +- ref-filter.c | 2 +- remote.c | 2 +- rerere.c | 2 +- rerere.h | 3 ++- revision.c | 4 ++-- revision.h | 3 ++- sequencer.c | 12 ++++++------ shallow.c | 2 +- submodule.c | 6 +++--- t/helper/test-revision-walking.c | 2 +- tree-diff.c | 2 +- wt-status.c | 10 +++++----- 49 files changed, 90 insertions(+), 87 deletions(-)
apply.c +1 -1
@@ -4632,7 +4632,7 @@ static int write_out_results(struct apply_state *state, struct patch *list) }string_list_clear (&cpath,0 ); -rerere (state->repo,0 ); +repo_rerere (state->repo,0 ); }return errs;
bisect.c +2 -2
@@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,struct argv_array rev_argv =ARGV_ARRAY_INIT ;int i; -init_revisions (revs, the_repository, prefix); +repo_init_revisions (revs, the_repository, prefix); revs->abbrev =0 ; revs->commit_format =CMIT_FMT_UNSPECIFIED ;
@@ -889,7 +889,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)struct rev_info opt;/* diff-tree init */ -init_revisions (&opt, the_repository, prefix); +repo_init_revisions (&opt, the_repository, prefix);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ opt.abbrev =0 ; opt.diff =1 ;
blame.c +3 -3
@@ -563,7 +563,7 @@ static struct blame_origin *find_origin(struct repository *r,* and origin first. Most of the time they are the * same and diff-tree is fairly efficient about this. */ -diff_setup (&diff_opts, r); +repo_diff_setup (&diff_opts, r); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =0 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -638,7 +638,7 @@ static struct blame_origin *find_rename(struct repository *r,struct diff_options diff_opts;int i; -diff_setup (&diff_opts, r); +repo_diff_setup (&diff_opts, r); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =DIFF_DETECT_RENAME ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1262,7 +1262,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,if (!unblamed)return ;/* nothing remains for this target */ -diff_setup (&diff_opts, sb->repo); +repo_diff_setup (&diff_opts, sb->repo); diff_opts.flags.recursive =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
builtin/add.c +2 -2
@@ -110,7 +110,7 @@ int add_files_to_cache(const char *prefix,memset (&data,0 ,sizeof (data)); data.flags = flags; -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix);setup_revisions (0 ,NULL , &rev,NULL );if (pathspec)copy_pathspec (&rev.prune_data, pathspec);
@@ -232,7 +232,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)if (read_cache () <0 )die (_ ("Could not read the index" )); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.diffopt.context =7 ; argc =setup_revisions (argc, argv, &rev,NULL );
builtin/am.c +5 -5
@@ -1372,7 +1372,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *commFILE *fp; fp =xfopen (am_path (state,"patch" ),"w" ); -init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (&rev_info, the_repository,NULL ); rev_info.diff =1 ; rev_info.abbrev =0 ; rev_info.disable_stdin =1 ;
@@ -1407,7 +1407,7 @@ static void write_index_patch(const struct am_state *state) the_repository->hash_algo->empty_tree); fp =xfopen (am_path (state,"patch" ),"w" ); -init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (&rev_info, the_repository,NULL ); rev_info.diff =1 ; rev_info.disable_stdin =1 ; rev_info.no_commit_id =1 ;
@@ -1565,7 +1565,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pastruct rev_info rev_info;const char *diff_filter_str ="--diff-filter=AM" ; -init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (&rev_info, the_repository,NULL ); rev_info.diffopt.output_format =DIFF_FORMAT_NAME_STATUS ;diff_opt_parse (&rev_info.diffopt, &diff_filter_str,1 , rev_info.prefix);add_pending_oid (&rev_info,"HEAD" , &our_tree,0 );
@@ -1603,7 +1603,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa o.verbosity =0 ;if (merge_recursive_generic (&o, &our_tree, &their_tree,1 , bases, &result)) { -rerere (the_repository, state->allow_rerere_autoupdate); +repo_rerere (the_repository, state->allow_rerere_autoupdate);free (their_tree_name);return error (_ ("Failed to merge in the changes." )); }
@@ -1898,7 +1898,7 @@ static void am_resolve(struct am_state *state) goto next; } -rerere (the_repository,0 ); +repo_rerere (the_repository,0 );do_commit (state);
builtin/blame.c +1 -1
@@ -830,7 +830,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)setup_default_color_by_age ();git_config (git_blame_config, &output_option); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); revs.date_mode = blame_date_mode; revs.diffopt.flags.allow_textconv =1 ; revs.diffopt.flags.follow_renames =1 ;
builtin/checkout.c +2 -2
@@ -392,7 +392,7 @@ static void show_local_changes(struct object *head, {struct rev_info rev;/* I think we want full paths, even if we're in a subdirectory. */ -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL ); rev.diffopt.flags = opts->flags; rev.diffopt.output_format |=DIFF_FORMAT_NAME_STATUS ;diff_setup_done (&rev.diffopt);
@@ -801,7 +801,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *nestruct rev_info revs;struct object *object = &old_commit->object; -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );setup_revisions (0 ,NULL , &revs,NULL ); object->flags &= ~UNINTERESTING ;
builtin/commit.c +2 -2
@@ -980,7 +980,7 @@ static const char *find_author_by_nickname(const char *name)const char *av[20 ];int ac =0 ; -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );strbuf_addf (&buf,"--author=%s" , name); av[++ac] ="--all" ; av[++ac] ="-i" ;
@@ -1651,7 +1651,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)"new_index file. Check that disk is not full and quota is\n" "not exceeded, and then \"git reset HEAD\" to recover.")); -rerere (the_repository,0 ); +repo_rerere (the_repository,0 );run_command_v_opt (argv_gc_auto,RUN_GIT_CMD );run_commit_hook (use_editor,get_index_file (),"post-commit" ,NULL );if (amend && !no_post_rewrite) {
builtin/describe.c +2 -2
@@ -488,7 +488,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst)"--objects" ,"--in-commit-order" ,"--reverse" ,"HEAD" , NULL); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );if (setup_revisions (args.argc, args.argv, &revs,NULL ) >1 )BUG ("setup_revisions could not handle all args?" );
@@ -636,7 +636,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)if (0 <= fd)update_index_if_able (&the_index, &index_lock); -init_revisions (&revs, the_repository, prefix); +repo_init_revisions (&revs, the_repository, prefix);argv_array_pushv (&args, diff_index_args);if (setup_revisions (args.argc, args.argv, &revs,NULL ) !=1 )BUG ("malformed internal diff-index command line" );
builtin/diff-files.c +1 -1
@@ -25,7 +25,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)usage (diff_files_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-index.c +1 -1
@@ -22,7 +22,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)usage (diff_cache_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-tree.c +1 -1
@@ -110,7 +110,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)usage (diff_tree_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -init_revisions (opt, the_repository, prefix); +repo_init_revisions (opt, the_repository, prefix);if (read_cache () <0 )die (_ ("index file corrupt" )); opt->abbrev =0 ;
builtin/diff.c +1 -1
@@ -318,7 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL );precompose_argv (argc, argv); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix);if (no_index && argc != i +2 ) {if (no_index ==DIFF_NO_INDEX_IMPLICIT ) {
builtin/fast-export.c +1 -1
@@ -1033,7 +1033,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)/* we handle encodings */ git_config (git_default_config,NULL ); -init_revisions (&revs, the_repository, prefix); +repo_init_revisions (&revs, the_repository, prefix);init_revision_sources (&revision_sources); revs.topo_order =1 ; revs.sources = &revision_sources;
builtin/fmt-merge-msg.c +1 -1
@@ -642,7 +642,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,struct rev_info rev; head =lookup_commit_or_die (&head_oid,"HEAD" ); -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL ); rev.commit_format =CMIT_FMT_ONELINE ; rev.ignore_merges =1 ; rev.limited =1 ;
builtin/log.c +9 -9
@@ -467,7 +467,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.diff =1 ; rev.simplify_history =0 ;memset (&opt,0 ,sizeof (opt));
@@ -585,7 +585,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)git_config (git_log_config,NULL );memset (&match_all,0 ,sizeof (match_all)); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.diff =1 ; rev.always_show_header =1 ; rev.no_walk =REVISION_WALK_NO_WALK_SORTED ;
@@ -665,7 +665,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix);init_reflog_walk (&rev.reflog_info); rev.verbose_header =1 ;memset (&opt,0 ,sizeof (opt));
@@ -704,7 +704,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.always_show_header =1 ;memset (&opt,0 ,sizeof (opt)); opt.def ="HEAD" ;
@@ -917,7 +917,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)init_patch_ids (ids, the_repository);/* given a range a..b get all patch ids for b..a */ -init_revisions (&check_rev, the_repository, rev->prefix); +repo_init_revisions (&check_rev, the_repository, rev->prefix); check_rev.max_parents =1 ; o1->flags ^=UNINTERESTING ; o2->flags ^=UNINTERESTING ;
@@ -1361,13 +1361,13 @@ static void prepare_bases(struct base_tree_info *bases,return ;init_commit_base (&commit_base); -diff_setup (&diffopt, the_repository); +repo_diff_setup (&diffopt, the_repository); diffopt.flags.recursive =1 ;diff_setup_done (&diffopt);oidcpy (&bases->base_commit, &base->object.oid); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); revs.max_parents =1 ; revs.topo_order =1 ;for (i =0 ; i < total; i++) {
@@ -1528,7 +1528,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) extra_cc.strdup_strings =1 ;init_log_defaults ();git_config (git_format_config,NULL ); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.commit_format =CMIT_FMT_EMAIL ; rev.expand_tabs_in_log_default =0 ; rev.verbose_header =1 ;
@@ -1939,7 +1939,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix) } } -init_revisions (&revs, the_repository, prefix); +repo_init_revisions (&revs, the_repository, prefix); revs.max_parents =1 ;if (add_pending_commit (head, &revs,0 ))
builtin/merge.c +4 -4
@@ -389,7 +389,7 @@ static void squash_message(struct commit *commit, struct commit_list *remoteheadprintf (_ ("Squash commit -- not updating HEAD\n" )); -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL ); rev.ignore_merges =1 ; rev.commit_format =CMIT_FMT_MEDIUM ;
@@ -452,7 +452,7 @@ static void finish(struct commit *head_commit, }if (new_head && show_diffstat) {struct diff_options opts; -diff_setup (&opts, the_repository); +repo_diff_setup (&opts, the_repository); opts.stat_width =-1 ;/* use full terminal width */ opts.stat_graph_width =-1 ;/* respect statGraphWidth config */ opts.output_format |=
@@ -899,7 +899,7 @@ static int suggest_conflicts(void)fputs (msgbuf.buf, fp);strbuf_release (&msgbuf);fclose (fp); -rerere (the_repository, allow_rerere_auto); +repo_rerere (the_repository, allow_rerere_auto);printf (_ ("Automatic merge failed; " "fix conflicts and then commit the result.\n" ));return 1 ;
@@ -911,7 +911,7 @@ static int evaluate_result(void)struct rev_info rev;/* Check how many files differ. */ -init_revisions (&rev, the_repository,"" ); +repo_init_revisions (&rev, the_repository,"" );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ;
builtin/pack-objects.c +1 -1
@@ -2989,7 +2989,7 @@ static void get_object_list(int ac, const char **av)char line[1000 ];int flags =0 ; -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
builtin/prune.c +1 -1
@@ -120,7 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix) save_commit_buffer =0 ; read_replace_refs =0 ; ref_paranoia =1 ; -init_revisions (&revs, the_repository, prefix); +repo_init_revisions (&revs, the_repository, prefix); argc =parse_options (argc, argv, prefix, options, prune_usage,0 );
builtin/range-diff.c +1 -1
@@ -34,7 +34,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL ); -diff_setup (&diffopt, the_repository); +repo_diff_setup (&diffopt, the_repository); diffopt.output_format =DIFF_FORMAT_PATCH ; diffopt.flags.suppress_diff_headers =1 ; diffopt.output_prefix = output_prefix_cb;
builtin/reflog.c +1 -1
@@ -567,7 +567,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)* from reflog if the repository was pruned with older git. */ if (cb.cmd.stalefix) { -init_revisions (&cb.cmd.revs, the_repository, prefix); +repo_init_revisions (&cb.cmd.revs, the_repository, prefix);if (flags &EXPIRE_REFLOGS_VERBOSE )printf ("Marking reachable objects..." );mark_reachable_objects (&cb.cmd.revs,0 ,0 ,NULL );
builtin/rerere.c +1 -1
@@ -70,7 +70,7 @@ int cmd_rerere(int argc, const char **argv, const char *prefix) flags =RERERE_NOAUTOUPDATE ;if (argc <1 ) -return rerere (the_repository, flags); +return repo_rerere (the_repository, flags);if (!strcmp (argv[0 ],"forget" )) {struct pathspec pathspec;
builtin/rev-list.c +1 -1
@@ -370,7 +370,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)usage (rev_list_usage);git_config (git_default_config,NULL ); -init_revisions (&revs, the_repository, prefix); +repo_init_revisions (&revs, the_repository, prefix); revs.abbrev =DEFAULT_ABBREV ; revs.commit_format =CMIT_FMT_UNSPECIFIED ;
builtin/revert.c +1 -1
@@ -174,7 +174,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) }else {struct setup_revision_opt s_r_opt; opts->revs =xmalloc (sizeof (*opts->revs)); -init_revisions (opts->revs, the_repository,NULL ); +repo_init_revisions (opts->revs, the_repository,NULL ); opts->revs->no_walk =REVISION_WALK_NO_WALK_UNSORTED ;if (argc <2 )usage_with_options (usage_str, options);
builtin/shortlog.c +1 -1
@@ -278,7 +278,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)git_config (git_default_config,NULL );shortlog_init (&log); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix);parse_options_start (&ctx, argc, argv, prefix, options,PARSE_OPT_KEEP_DASHDASH |PARSE_OPT_KEEP_ARGV0 );
builtin/submodule--helper.c +1 -1
@@ -792,7 +792,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, path, NULL);git_config (git_diff_basic_config,NULL ); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix); rev.abbrev =0 ; diff_files_args.argc = setup_revisions(diff_files_args.argc, diff_files_args.argv,
bundle.c +2 -2
@@ -140,7 +140,7 @@ int verify_bundle(struct bundle_header *header, int verbose)int i, ret =0 , req_nr;const char *message =_ ("Repository lacks these prerequisite commits:" ); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );for (i =0 ; i < p->nr; i++) {struct ref_list_entry *e = p->list + i;struct object *o =parse_object (the_repository, &e->oid);
@@ -441,7 +441,7 @@ int create_bundle(struct bundle_header *header, const char *path,/* init revs to list objects for pack-objects later */ save_commit_buffer =0 ; -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );/* write prerequisites */ if (compute_and_write_prerequisites (bundle_fd, &revs, argc, argv))
diff-lib.c +2 -2
@@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) {struct rev_info revs; -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );copy_pathspec (&revs.prune_data, &opt->pathspec); revs.diffopt = *opt;
@@ -557,7 +557,7 @@ int index_differs_from(const char *def, const struct diff_flags *flags,struct rev_info rev;struct setup_revision_opt opt; -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = def;setup_revisions (0 ,NULL , &rev, &opt);
diff-no-index.c +1 -1
@@ -246,7 +246,7 @@ void diff_no_index(struct repository *r,* FIXME: --no-index should not look at index and we should be * able to pass NULL repo. Maybe later. */ -diff_setup (&revs->diffopt, r); +repo_diff_setup (&revs->diffopt, r);for (i =1 ; i < argc -2 ; ) {int j;if (!strcmp (argv[i],"--no-index" ))
diff.c +1 -1
@@ -4396,7 +4396,7 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)builtin_checkdiff (name, other, attr_path, p->one, p->two, o); } -void diff_setup (struct diff_options *options,struct repository *repo) +void repo_diff_setup (struct diff_options *options,struct repository *repo) {memcpy (options, &default_diff_options,sizeof (*options));
diff.h +2 -1
@@ -336,7 +336,8 @@ int git_diff_basic_config(const char *var, const char *value, void *cb);int git_diff_heuristic_config (const char *var,const char *value,void *cb);void init_diff_ui_defaults (void );int git_diff_ui_config (const char *var,const char *value,void *cb); -void diff_setup (struct diff_options *,struct repository *); +void repo_diff_setup (struct diff_options *,struct repository *); +#define diff_setup (opts) repo_diff_setup(opts, the_repository)int diff_opt_parse (struct diff_options *,const char **,int ,const char *);void diff_setup_done (struct diff_options *);int git_config_rename (const char *var,const char *value);
http-push.c +1 -1
@@ -1925,7 +1925,7 @@ int cmd_main(int argc, const char **argv)if (!push_all && !is_null_oid (&ref->old_oid))argv_array_pushf (&commit_argv,"^%s" ,oid_to_hex (&ref->old_oid)); -init_revisions (&revs, the_repository,setup_git_directory ()); +repo_init_revisions (&revs, the_repository,setup_git_directory ());setup_revisions (commit_argv.argc, commit_argv.argv, &revs,NULL ); revs.edge_hint =0 ;/* just in case */
merge-recursive.c +2 -2
@@ -1115,7 +1115,7 @@ static int find_first_merges(struct object_array *result, const char *path,/* get all revisions that merge commit a */ xsnprintf (merged_revision,sizeof (merged_revision),"^%s" ,oid_to_hex (&a->object.oid)); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); rev_opts.submodule = path;/* FIXME: can't handle linked worktrees in submodules yet */ revs.single_worktree = path !=NULL ;
@@ -1813,7 +1813,7 @@ static struct diff_queue_struct *get_diffpairs(struct merge_options *o,struct diff_queue_struct *ret;struct diff_options opts; -diff_setup (&opts, the_repository); +repo_diff_setup (&opts, the_repository); opts.flags.recursive =1 ; opts.flags.rename_empty =0 ; opts.detect_rename =merge_detect_rename (o);
notes-merge.c +2 -2
@@ -126,7 +126,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,trace_printf ("\tdiff_tree_remote(base = %.7s, remote = %.7s)\n" ,oid_to_hex (base),oid_to_hex (remote)); -diff_setup (&opt, the_repository); +repo_diff_setup (&opt, the_repository); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
@@ -189,7 +189,7 @@ static void diff_tree_local(struct notes_merge_options *o,trace_printf ("\tdiff_tree_local(len = %i, base = %.7s, local = %.7s)\n" , len,oid_to_hex (base),oid_to_hex (local)); -diff_setup (&opt, the_repository); +repo_diff_setup (&opt, the_repository); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
pack-bitmap-write.c +1 -1
@@ -261,7 +261,7 @@ void bitmap_writer_build(struct packing_data *to_pack)if (writer.show_progress) writer.progress =start_progress ("Building bitmaps" , writer.selected_nr); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); revs.tag_objects =1 ; revs.tree_objects =1 ; revs.blob_objects =1 ;
patch-ids.c +1 -1
@@ -59,7 +59,7 @@ static int patch_id_cmp(const void *cmpfn_data,int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, repo); +repo_diff_setup (&ids->diffopts, repo); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
read-cache.c +1 -1
@@ -2141,7 +2141,7 @@ int index_has_changes(struct index_state *istate,if (tree || !get_oid_tree ("HEAD" , &cmp)) {struct diff_options opt; -diff_setup (&opt, the_repository); +repo_diff_setup (&opt, the_repository); opt.flags.exit_with_status =1 ;if (!sb) opt.flags.quick =1 ;
ref-filter.c +1 -1
@@ -2138,7 +2138,7 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata)struct ref_array *array = ref_cbdata->array;struct commit **to_clear =xcalloc (sizeof (struct commit *), array->nr); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );for (i =0 ; i < array->nr; i++) {struct ref_array_item *item = array->items[i];
remote.c +1 -1
@@ -1903,7 +1903,7 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, oid_to_hex(&theirs->object.oid));argv_array_push (&argv,"--" ); -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL );setup_revisions (argv.argc, argv.argv, &revs,NULL );if (prepare_revision_walk (&revs))die ("revision walk setup failed" );
rerere.c +1 -1
@@ -915,7 +915,7 @@ int setup_rerere(struct string_list *merge_rr, int flags)* perform mergy operations, possibly leaving conflicted index entries * and working tree files. */ -int rerere (struct repository *r,int flags) +int repo_rerere (struct repository *r,int flags) {struct string_list merge_rr =STRING_LIST_INIT_DUP ;int fd, status;
rerere.h +2 -1
@@ -24,7 +24,8 @@ struct rerere_id { };extern int setup_rerere (struct string_list *,int ); -extern int rerere (struct repository *repo,int ); +extern int repo_rerere (struct repository *repo,int ); +#define rerere (flags) repo_rerere(the_repository, flags)/* * Given the conflict ID and the name of a "file" used for replaying * the recorded resolution (e.g. "preimage", "postimage"), return the
revision.c +2 -2
@@ -1440,7 +1440,7 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,return 1 ; } -void init_revisions (struct rev_info *revs, +void repo_init_revisions (struct rev_info *revs,struct repository *repo,const char *prefix) {
@@ -1472,7 +1472,7 @@ void init_revisions(struct rev_info *revs,grep_init (&revs->grep_filter, revs->repo, prefix); revs->grep_filter.status_only =1 ; -diff_setup (&revs->diffopt, revs->repo); +repo_diff_setup (&revs->diffopt, revs->repo);if (prefix && !revs->diffopt.prefix) { revs->diffopt.prefix = prefix; revs->diffopt.prefix_length =strlen (prefix);
revision.h +2 -1
@@ -255,9 +255,10 @@ struct setup_revision_opt {unsigned revarg_opt; }; -void init_revisions (struct rev_info *revs, +void repo_init_revisions (struct rev_info *revs,struct repository *repo,const char *prefix); +#define init_revisions (revs, prefix) repo_init_revisions(revs, the_repository, prefix)int setup_revisions (int argc,const char **argv,struct rev_info *revs,struct setup_revision_opt *); void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
sequencer.c +6 -6
@@ -1143,7 +1143,7 @@ void print_commit_summary(const char *prefix, const struct object_id *oid,strbuf_release (&author_ident);strbuf_release (&committer_ident); -init_revisions (&rev, the_repository, prefix); +repo_init_revisions (&rev, the_repository, prefix);setup_revisions (0 ,NULL , &rev,NULL ); rev.diff =1 ;
@@ -1827,7 +1827,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, : _("could not apply %s... %s"), short_commit_name(commit), msg.subject);print_advice (res ==1 , opts); -rerere (the_repository, opts->allow_rerere_auto); +repo_rerere (the_repository, opts->allow_rerere_auto); goto leave; }
@@ -2566,7 +2566,7 @@ static int make_patch(struct commit *commit, struct replay_opts *opts)strbuf_addf (&buf,"%s/patch" ,get_dir (opts));memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -init_revisions (&log_tree_opt, the_repository,NULL ); +repo_init_revisions (&log_tree_opt, the_repository,NULL ); log_tree_opt.abbrev =0 ; log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_PATCH ;
@@ -3146,7 +3146,7 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,rollback_lock_file (&lock);if (ret) -rerere (the_repository, opts->allow_rerere_auto); +repo_rerere (the_repository, opts->allow_rerere_auto);else /* * In case of problems, we now want to return a positive
@@ -3477,7 +3477,7 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)struct object_id orig, head;memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -init_revisions (&log_tree_opt, the_repository,NULL ); +repo_init_revisions (&log_tree_opt, the_repository,NULL ); log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_DIFFSTAT ;
@@ -4212,7 +4212,7 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,const char *insn = flags &TODO_LIST_ABBREVIATE_CMDS ?"p" :"pick" ;int rebase_merges = flags &TODO_LIST_REBASE_MERGES ; -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); revs.verbose_header =1 ;if (!rebase_merges) revs.max_parents =1 ;
shallow.c +1 -1
@@ -184,7 +184,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,is_repository_shallow (the_repository);/* make sure shallows are read */ -init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (&revs, the_repository,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
submodule.c +3 -3
@@ -428,7 +428,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path, {struct commit_list *list; -init_revisions (rev, the_repository,NULL ); +repo_init_revisions (rev, the_repository,NULL );setup_revisions (0 ,NULL , rev,NULL ); rev->left_right =1 ; rev->first_parent_only =1 ;
@@ -773,7 +773,7 @@ static void collect_changed_submodules(struct index_state *istate,struct rev_info rev;const struct commit *commit; -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL );setup_revisions (argv->argc, argv->argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
@@ -784,7 +784,7 @@ static void collect_changed_submodules(struct index_state *istate, data.changed = changed; data.commit_oid = &commit->object.oid; -init_revisions (&diff_rev, the_repository,NULL ); +repo_init_revisions (&diff_rev, the_repository,NULL ); diff_rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; diff_rev.diffopt.format_callback = collect_changed_submodules_cb; diff_rev.diffopt.format_callback_data = &data;
t/helper/test-revision-walking.c +1 -1
@@ -32,7 +32,7 @@ static int run_revision_walk(void)int argc =ARRAY_SIZE (argv) -1 ;int got_revision =0 ; -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL );setup_revisions (argc, argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
tree-diff.c +1 -1
@@ -605,7 +605,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -diff_setup (&diff_opts, opt->repo); +repo_diff_setup (&diff_opts, opt->repo); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
wt-status.c +5 -5
@@ -582,7 +582,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) {struct rev_info rev; -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; rev.diffopt.flags.dirty_submodules =1 ;
@@ -607,7 +607,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)struct rev_info rev;struct setup_revision_opt opt; -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = s->is_initial ?empty_tree_oid_hex () : s->reference;setup_revisions (0 ,NULL , &rev, &opt);
@@ -982,7 +982,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)int dirty_submodules;const char *c =color (WT_STATUS_HEADER , s); -init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (&rev, the_repository,NULL ); rev.diffopt.flags.allow_textconv =1 ; rev.diffopt.ita_invisible_in_index =1 ;
@@ -2314,7 +2314,7 @@ int has_unstaged_changes(int ignore_submodules)struct rev_info rev_info;int result; -init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (&rev_info, the_repository,NULL );if (ignore_submodules) { rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.override_submodule_config =1 ;
@@ -2336,7 +2336,7 @@ int has_uncommitted_changes(int ignore_submodules)if (is_cache_unborn ())return 0 ; -init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (&rev_info, the_repository,NULL );if (ignore_submodules) rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.quick =1 ;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
Re: [PATCH 12/21] patch-ids.c: remove implicit dependency on the_index
In reply to Duy NguyenQuoted 32 lines · Duy Nguyen
Quoted 21 lines · Stefan Beller
patch-ids.c static int patch_id_cmp(const void *cmpfn_data, · line 62
Quoted 7 lines
patch-ids.c +2
-2-int init_patch_ids (struct patch_ids *ids) +int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, the_repository); +diff_setup (&ids->diffopts, repo);Just realized when looking at this diff, though it applies to other patches as well. (and reading
Documentation/technical/api-diff.txtconfirms my thinking IMHO)What makes the repository argument any special compared to the rest of the diff options?
So I would expect the setup to look like
memset(ids, 0, sizeof(*ids)); ids->diffopts->repo = the_repository; diff_setup(&ids->diffopts);Quoted 8 lines
here and in
diff_setup, we'd haveif (!options->repo) options->repo = the_repository;or even put
the_repositoryintodefault_diff_options, but then I wonder how this deals with no-repo invocations (git diff --no-index examples for bug reports)
Quoted 5 lines
That makes "repo" field optional and I'm very much against falling back to
the_repository.revisions.cin the end does not have anythe_repositoryreference, and it's actually undefined for most files. This makes accidentally addingthe_repositoryback much more difficult.
Thanks for the clear explanation. I agree that this is a good approach with these reasons given. So in case a resend is needed, maybe add these to the commit message, as it explains why we deviate from the pattern here.
Quoted 3 lines
Yes the --no-index stuff will have to be taken care of at some point, but I think for now we could just put "struct repository *" in place first to see what it looks like, then go from there.
I would think repo = NULL would do? But we can defer this discussion to later.
Thanks,
Stefan
Re: [PATCH v2 22/24] revision.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc DuyQuoted 50 lines · Nguyễn Thái Ngọc Duy
"remove" is probably a strong word because the dependency is still there, hidden behind
the_repository. This patch is almost mechanical, all call sites are updated to takethe_repository, no exception.Signed-off-by Nguyễn Thái Ngọc Duy <[email protected]>--- bisect.c | 4 ++-- builtin/add.c | 4 ++-- builtin/am.c | 6 +++--- builtin/blame.c | 2 +- builtin/checkout.c | 4 ++-- builtin/commit.c | 2 +- builtin/describe.c | 4 ++-- builtin/diff-files.c | 2 +- builtin/diff-index.c | 2 +- builtin/diff-tree.c | 2 +- builtin/diff.c | 2 +- builtin/fast-export.c | 2 +- builtin/fmt-merge-msg.c | 2 +- builtin/log.c | 16 ++++++++-------- builtin/merge.c | 4 ++-- builtin/pack-objects.c | 2 +- builtin/prune.c | 2 +- builtin/reflog.c | 2 +- builtin/rev-list.c | 2 +- builtin/revert.c | 2 +- builtin/shortlog.c | 2 +- builtin/submodule--helper.c | 2 +- bundle.c | 4 ++-- diff-lib.c | 4 ++-- http-push.c | 2 +- merge-recursive.c | 2 +- pack-bitmap-write.c | 2 +- ref-filter.c | 2 +- remote.c | 2 +- revision.c | 32 ++++++++++++++++++-------------- revision.h | 10 +++++++--- sequencer.c | 8 ++++---- shallow.c | 2 +- submodule.c | 6 +++--- t/helper/test-revision-walking.c | 2 +- wt-status.c | 10 +++++----- 36 files changed, 84 insertions(+), 76 deletions(-)bisect.c +0
-0
bisect.c static void bisect_rev_setup(struct rev_info *revs, const char *prefix, · line 635
Quoted 5 lines
bisect.c +1
-1@@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,struct argv_array rev_argv =ARGV_ARRAY_INIT ;int i; -init_revisions (revs, prefix); +init_revisions (revs, the_repository, prefix);
Thanks for this patch!
At first I wondered why we put the repository as the second argument, but that comes down to personal preference, so I wanted to keep it silent. (FWIW: Thinking about it, I'd either go with this order or with (repo, prefix, revs)
as it puts the target struct to initialize either first or last, and then the repo
struct first in the number of parameters. I think the order is fine after thinking
about it.)
However we have Documentation/technical/api-revision-walking.txt which would break with this change:
init_revisions::
Initialize a rev_info structure with default values. The second parameter may be NULL or can be prefix path, [...]
The second parameter changes, so we'd want to update the docs eventually, too. for now I'd think a cheap s/second/prefix/ would do in that part of the doc.
That said, we can do that on top depending on quickly this merges down (it touches a lot of code, so keeping the churn down would be nice).
Thanks,
Stefan
Re: [PATCH v2 24/24] Rename functions to avoid breaking in-flight topics
In reply to Nguyễn Thái Ngọc DuyQuoted 6 lines · Nguyễn Thái Ngọc Duy
The three functions
init_revisions(),diff_setup()andrerere()are prefixed temporarily withrepo_to avoid breaking other topics which add new call sites for these functions. This is a temporary measure. Once everything is merged, it will be reverted and the new call sites fixed.
Thanks for writing the whole series; it was a pleasant read.
Stefan
Re: [PATCH v2 22/24] revision.c: remove implicit dependency on the_index
In reply to Stefan BellerQuoted 9 lines · Stefan Beller
bisect.c static void bisect_rev_setup(struct rev_info *revs, const char *prefix, · line 635
Quoted 2 lines
bisect.c +1
-1-init_revisions (revs, prefix); +init_revisions (revs, the_repository, prefix);Thanks for this patch!
At first I wondered why we put the repository as the second argument, but that comes down to personal preference, so I wanted to keep it silent. (FWIW: Thinking about it, I'd either go with this order or with (repo, prefix, revs)
FWIW, I would also find it more natural to have the_repository as the first parameter, for the same reason why the "index" functions (as opposed to "cache" convenience wrappers) have the_index as the first one.
Re: [PATCH v2 24/24] Rename functions to avoid breaking in-flight topics
In reply to Nguyễn Thái Ngọc DuyQuoted 5 lines · Nguyễn Thái Ngọc Duy
The three functions
init_revisions(),diff_setup()andrerere()are prefixed temporarily withrepo_to avoid breaking other topics which add new call sites for these functions. This is a temporary measure. Once everything is merged, it will be reverted and the new call sites fixed.
That's a sensible thing to do, but isn't it too late at 24/24 stage? IOW, doesn't in-flight topics break if up to 23/24 of this series is merged?
IOW, the one that teaches "work in this repository" to rerere(int) for example should have introduced
repo_rerere(struct repository *, int); #define rerere(x) repo_rerere(the_repository, x)
in its own step, not this late in the series, no?
Quoted 13 lines
apply.c +1
-1@@ -4632,7 +4632,7 @@ static int write_out_results(struct apply_state *state, struct patch *list) }string_list_clear (&cpath,0 ); -rerere (state->repo,0 ); +repo_rerere (state->repo,0 ); }return errs;
Re: [PATCH v2 24/24] Rename functions to avoid breaking in-flight topics
Quoted 9 lines · Junio C Hamano
Quoted 5 lines · Nguyễn Thái Ngọc Duy
The three functions
init_revisions(),diff_setup()andrerere()are prefixed temporarily withrepo_to avoid breaking other topics which add new call sites for these functions. This is a temporary measure. Once everything is merged, it will be reverted and the new call sites fixed.
Quoted 3 lines
That's a sensible thing to do, but isn't it too late at 24/24 stage? IOW, doesn't in-flight topics break if up to 23/24 of this series is merged?
Presumably you merge the tip of this series (which contains 24/24) with the other in-flight topics, that make new uses of init_revisions(revs, prefix), which 24/24 allows. Going on either parent side of such a merge will have working commits, that compile.
So from that POV it doesn't matter when the #define is introduced.
Quoted 7 lines
IOW, the one that teaches "work in this repository" to rerere(int) for example should have introduced
repo_rerere(struct repository *, int); #define rerere(x) repo_rerere(the_repository, x)in its own step, not this late in the series, no?
That might make for a better presentation to reviewers now and here, but at some later date, we would want to 'git revert 24/24' after fixing all in-flights of today. And with that in mind it makes sense to separate out all these changes into this patch, as that allows us to have the revert rename back to easy names.
You may be asking this question as it was done differently in the series sb/object-store-lookup. But there the #define's served a different purpose. That series used the #define to aid author&reviewer to know where dependencies to the_repository are and which function is done already.
This series solely uses the #define after the main series is done to aid the maintainer to merge it which as you noted was one of the problems with that other approach. The downside of the series as it is presented here is that it is very easy to miss some hidden dependency, that leads to a bug only discovered later (e.g. some function still uses the_repository, when working on a submodule for example, but as that function is used in some corner case our test suite would not find it).
So why don't we try this approach as well and see how well it goes over time?
Thanks,
Stefan
Re: [PATCH v2 24/24] Rename functions to avoid breaking in-flight topics
Quoted 6 lines · Stefan Beller
Presumably you merge the tip of this series (which contains 24/24) with the other in-flight topics, that make new uses of
init_revisions(revs, prefix), which 24/24 allows. Going on either parent side of such a merge will have working commits, that compile.So from that POV it doesn't matter when the #define is introduced.
But that is not a very interesting point of view anyway.
Quoted 2 lines
now and here, but at some later date, we would want to 'git revert 24/24' after fixing all in-flights of today.
No. We do not want to revert the whole thing.
If the function that takes a_repository is called repo_rerere(), as opposed to just rerere(), it should keep that name after we deprecate the function rerere().
We will want to get rid of #define that gives a thin wrapper and make everybody use the API that requires a_repository parameter.
And from that point of view, it is backwards not to introduce repo_rerere() when rerere.c gains a variant that can work in an arbitrary repository, not limited to the_repository, and fix it up saying "oops, we were wrong and this will break topics in flight" at the very end.
Re: [PATCH 12/21] patch-ids.c: remove implicit dependency on the_index
In reply to Stefan BellerQuoted 40 lines · Stefan Beller
Quoted 32 lines · Duy Nguyen
Quoted 21 lines · Stefan Beller
patch-ids.c static int patch_id_cmp(const void *cmpfn_data, · line 62
Quoted 7 lines
patch-ids.c +2
-2-int init_patch_ids (struct patch_ids *ids) +int init_patch_ids (struct patch_ids *ids,struct repository *repo) {memset (ids,0 ,sizeof (*ids)); -diff_setup (&ids->diffopts, the_repository); +diff_setup (&ids->diffopts, repo);Just realized when looking at this diff, though it applies to other patches as well. (and reading
Documentation/technical/api-diff.txtconfirms my thinking IMHO)What makes the repository argument any special compared to the rest of the diff options?
So I would expect the setup to look like
memset(ids, 0, sizeof(*ids)); ids->diffopts->repo = the_repository; diff_setup(&ids->diffopts);Quoted 8 lines
here and in
diff_setup, we'd haveif (!options->repo) options->repo = the_repository;or even put
the_repositoryintodefault_diff_options, but then I wonder how this deals with no-repo invocations (git diff --no-index examples for bug reports)Quoted 5 lines
That makes "repo" field optional and I'm very much against falling back to
the_repository.revisions.cin the end does not have anythe_repositoryreference, and it's actually undefined for most files. This makes accidentally addingthe_repositoryback much more difficult.
Quoted 4 lines
Thanks for the clear explanation. I agree that this is a good approach with these reasons given. So in case a resend is needed, maybe add these to the commit message, as it explains why we deviate from the pattern here.
Actually I looked at it again and diff_setup() clears diffopts as the first step, so any assignments prior to the diff_setup() call has no effect.
Quoted 6 lines
Quoted 3 lines
Yes the --no-index stuff will have to be taken care of at some point, but I think for now we could just put "struct repository *" in place first to see what it looks like, then go from there.
I would think repo = NULL would do? But we can defer this discussion to later.
Yes. But the the_hash_algo currently points to the_repository->hash_algo. We need to at least make the_hash_algo independent from 'struct repository *', then figure out how to set the_hash_algo without $GIT_DIR/config file...
Signature · 1 line
Duy
Re: [PATCH v2 24/24] Rename functions to avoid breaking in-flight topics
In reply to Junio C HamanoQuoted 9 lines · Junio C Hamano
Quoted 2 lines
now and here, but at some later date, we would want to 'git revert 24/24' after fixing all in-flights of today.
No. We do not want to revert the whole thing.
If the function that takes
a_repositoryis calledrepo_rerere(), as opposed to justrerere(), it should keep that name after we deprecate the functionrerere().
Quoted 8 lines
We will want to get rid of #define that gives a thin wrapper and make everybody use the API that requires
a_repositoryparameter.And from that point of view, it is backwards not to introduce
repo_rerere()whenrerere.cgains a variant that can work in an arbitrary repository, not limited tothe_repository, and fix it up saying "oops, we were wrong and this will break topics in flight" at the very end.
In the end, there's no variant, only one function that always takes 'struct repository *' and I wanted to keep the shorter name 'rerere'. But let's go with adding repo_rerere() and deprecating rerere(). If it turns out later that repo_rerere is too long (or it's repo_xyz everywhere) then we can do another rename.
Signature · 1 line
Duy
PATCH v3 1/23 archive.c: remove implicit dependency the_repository
In reply to Nguyễn Thái Ngọc DuyThe new "repo" field in archive_args has been added since b612ee202a (archive.c: avoid access to the_index - 2018-08-13). Use it instead of hard coding the_repository.
--- archive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
archive.c +1 -1
@@ -391,7 +391,7 @@ static void parse_treeish_arg(const char **argv,if (get_oid (name, &oid))die ("Not a valid object name" ); - commit =lookup_commit_reference_gently (the_repository, &oid,1 ); + commit =lookup_commit_reference_gently (ar_args->repo, &oid,1 );if (commit) { commit_sha1 = commit->object.oid.hash; archive_time = commit->date;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v3 2/23 read-cache.c: remove 'const' from index_has_changes()
In reply to Nguyễn Thái Ngọc DuyThis function calls do_diff_cache() which eventually needs to set this "istate" to unpack_options->src_index (*). This is an unfortunate fact that unpack_trees() _will_ destroy src_index so we can't really pass a const index_state there. Just remove 'const'.
(*) Right now diff_cache() in diff-lib.c assigns the_index to
src_index. But the plan is to get rid of the_index, so it should be 'istate' from here that gets assigned to src_index.
--- cache.h | 2 +- read-cache.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
cache.h +1 -1
@@ -703,7 +703,7 @@ extern int unmerged_index(const struct index_state *);* provided, the space-separated list of files that differ will be appended * to it. */ -extern int index_has_changes (const struct index_state *istate, +extern int index_has_changes (struct index_state *istate,struct tree *tree,struct strbuf *sb);
read-cache.c +1 -1
@@ -2122,7 +2122,7 @@ int unmerged_index(const struct index_state *istate)return 0 ; } -int index_has_changes (const struct index_state *istate, +int index_has_changes (struct index_state *istate,struct tree *tree,struct strbuf *sb) {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v3 3/23 diff.c: reduce implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duydiff and textconv code has so widespread use that it's hard to simply update their api and all call sites at once because it would result in a big patch. For now reduce the_index references to two places:diff_setup() and fill_textconv().
--- builtin/reset.c | 1 + diff.c | 176 +++++++++++++++++++++++++++------------------- diff.h | 3 + diffcore-break.c | 12 ++-- diffcore-delta.c | 12 ++-- diffcore-rename.c | 35 +++++---- diffcore.h | 13 ++-- line-log.c | 21 +++--- 8 files changed, 161 insertions(+), 112 deletions(-)
builtin/reset.c +1 -0
@@ -159,6 +159,7 @@ static int read_from_tree(const struct pathspec *pathspec, opt.format_callback = update_index_from_diff; opt.format_callback_data = &intent_to_add; opt.flags.override_submodule_config =1 ; + opt.repo = the_repository;if (do_diff_cache (tree_oid, &opt))return 1 ;
diff.c +102 -74
497 lines not on this page · raw message
diff.h +3 -0
@@ -18,6 +18,7 @@ struct userdiff_driver;struct oid_array ;struct commit ;struct combine_diff_path ; +struct repository ;typedef int (*pathchange_fn_t )(struct diff_options *options,struct combine_diff_path *path);
@@ -220,6 +221,8 @@ struct diff_options {/* XDF_WHITESPACE_FLAGS regarding block detection are set at 2, 3, 4 */ #define COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE (1<<5)int color_moved_ws_handling; + +struct repository *repo; };void diff_emit_submodule_del (struct diff_options *o,const char *line);
diffcore-break.c +7 -5
@@ -5,7 +5,8 @@#include "diff.h" #include "diffcore.h" -static int should_break (struct diff_filespec *src, +static int should_break (struct repository *r, +struct diff_filespec *src,struct diff_filespec *dst,int break_score,int *merge_score_p)
@@ -61,7 +62,8 @@ static int should_break(struct diff_filespec *src, !oidcmp(&src->oid, &dst->oid))return 0 ;/* they are the same */ -if (diff_populate_filespec (src,0 ) ||diff_populate_filespec (dst,0 )) +if (diff_populate_filespec (r, src,0 ) || +diff_populate_filespec (r, dst,0 ))return 0 ;/* error but caught downstream */ max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -71,7 +73,7 @@ static int should_break(struct diff_filespec *src,if (!src->size)return 0 ;/* we do not let empty files get renamed */ -if (diffcore_count_changes (src, dst, +if (diffcore_count_changes (r, src, dst, &src->cnt_data, &dst->cnt_data, &src_copied, &literal_added))return 0 ;
@@ -114,7 +116,7 @@ static int should_break(struct diff_filespec *src,return 1 ; } -void diffcore_break (int break_score) +void diffcore_break (struct repository *r,int break_score) {struct diff_queue_struct *q = &diff_queued_diff;struct diff_queue_struct outq;
@@ -178,7 +180,7 @@ void diffcore_break(int break_score) object_type(p->one->mode) == OBJ_BLOB && object_type(p->two->mode) == OBJ_BLOB && !strcmp(p->one->path, p->two->path)) { -if (should_break (p->one, p->two, +if (should_break (r, p->one, p->two, break_score, &score)) {/* Split this into delete and create */ struct diff_filespec *null_one, *null_two;
diffcore-delta.c +7 -5
@@ -121,14 +121,15 @@ static int spanhash_cmp(const void *a_, const void *b_) a->hashval > b->hashval ?1 :0 ; } -static struct spanhash_top *hash_chars (struct diff_filespec *one) +static struct spanhash_top *hash_chars (struct repository *r, +struct diff_filespec *one) {int i, n;unsigned int accum1, accum2, hashval;struct spanhash_top *hash;unsigned char *buf = one->data;unsigned int sz = one->size; -int is_text = !diff_filespec_is_binary (one); +int is_text = !diff_filespec_is_binary (r, one); i =INITIAL_HASH_SIZE ; hash = xmalloc(st_add(sizeof(*hash),
@@ -162,7 +163,8 @@ static struct spanhash_top *hash_chars(struct diff_filespec *one)return hash; } -int diffcore_count_changes(struct diff_filespec *src, +int diffcore_count_changes(struct repository *r, + struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p,
@@ -177,14 +179,14 @@ int diffcore_count_changes(struct diff_filespec *src,if (src_count_p) src_count = *src_count_p;if (!src_count) { - src_count =hash_chars (src); + src_count =hash_chars (r, src);if (src_count_p) *src_count_p = src_count; }if (dst_count_p) dst_count = *dst_count_p;if (!dst_count) { - dst_count =hash_chars (dst); + dst_count =hash_chars (r, dst);if (dst_count_p) *dst_count_p = dst_count; }
diffcore-rename.c +22 -13
@@ -128,7 +128,8 @@ struct diff_score {short name_score; }; -static int estimate_similarity (struct diff_filespec *src, +static int estimate_similarity (struct repository *r, +struct diff_filespec *src,struct diff_filespec *dst,int minimum_score) {
@@ -165,10 +166,10 @@ static int estimate_similarity(struct diff_filespec *src,* say whether the size is valid or not!) */ if (!src->cnt_data && -diff_populate_filespec (src,CHECK_SIZE_ONLY )) +diff_populate_filespec (r, src,CHECK_SIZE_ONLY ))return 0 ;if (!dst->cnt_data && -diff_populate_filespec (dst,CHECK_SIZE_ONLY )) +diff_populate_filespec (r, dst,CHECK_SIZE_ONLY ))return 0 ; max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -186,12 +187,12 @@ static int estimate_similarity(struct diff_filespec *src,if (max_size * (MAX_SCORE -minimum_score) < delta_size *MAX_SCORE )return 0 ; -if (!src->cnt_data &&diff_populate_filespec (src,0 )) +if (!src->cnt_data &&diff_populate_filespec (r, src,0 ))return 0 ; -if (!dst->cnt_data &&diff_populate_filespec (dst,0 )) +if (!dst->cnt_data &&diff_populate_filespec (r, dst,0 ))return 0 ; -if (diffcore_count_changes (src, dst, +if (diffcore_count_changes (r, src, dst, &src->cnt_data, &dst->cnt_data, &src_copied, &literal_added))return 0 ;
@@ -256,10 +257,11 @@ struct file_similarity {struct diff_filespec *filespec; }; -static unsigned int hash_filespec (struct diff_filespec *filespec) +static unsigned int hash_filespec (struct repository *r, +struct diff_filespec *filespec) {if (!filespec->oid_valid) { -if (diff_populate_filespec (filespec,0 )) +if (diff_populate_filespec (r, filespec,0 ))return 0 ;hash_object_file (filespec->data, filespec->size,"blob" , &filespec->oid);
@@ -280,7 +282,9 @@ static int find_identical_files(struct hashmap *srcs,/* * Find the best source match for specified destination. */ - p =hashmap_get_from_hash (srcs,hash_filespec (target),NULL ); + p =hashmap_get_from_hash (srcs, +hash_filespec (options->repo, target), +NULL );for (; p; p =hashmap_get_next (srcs, p)) {int score;struct diff_filespec *source = p->filespec;
@@ -316,14 +320,16 @@ static int find_identical_files(struct hashmap *srcs,return renames; } -static void insert_file_table (struct hashmap *table,int index,struct diff_filespec *filespec) +static void insert_file_table (struct repository *r, +struct hashmap *table,int index, +struct diff_filespec *filespec) {struct file_similarity *entry =xmalloc (sizeof (*entry)); entry->index = index; entry->filespec = filespec; -hashmap_entry_init (entry,hash_filespec (filespec)); +hashmap_entry_init (entry,hash_filespec (r, filespec));hashmap_add (table, entry); }
@@ -344,7 +350,9 @@ static int find_exact_renames(struct diff_options *options)*/ hashmap_init (&file_table,NULL ,NULL , rename_src_nr);for (i = rename_src_nr-1 ; i >=0 ; i--) -insert_file_table (&file_table, i, rename_src[i].p->one); +insert_file_table (options->repo, + &file_table, i, + rename_src[i].p->one);/* Walk the destinations and find best source match */ for (i =0 ; i < rename_dst_nr; i++)
@@ -557,7 +565,8 @@ void diffcore_rename(struct diff_options *options) diff_unmodified_pair(rename_src[j].p))continue ; - this_src.score =estimate_similarity (one, two, + this_src.score =estimate_similarity (options->repo, + one, two, minimum_score); this_src.name_score =basename_same (one, two); this_src.dst = i;
diffcore.h +7 -6
@@ -7,6 +7,8 @@#include "cache.h" struct diff_options ; +struct repository ; +struct userdiff_driver ;/* This header file is internal between diff.c and its diff transformers * (e.g. diffcore-rename, diffcore-pickaxe). Never include this header
@@ -26,8 +28,6 @@ struct diff_options;#define MINIMUM_BREAK_SIZE 400/* do not break a file smaller than this */ -struct userdiff_driver ; -struct diff_filespec {struct object_id oid;char *path;
@@ -61,10 +61,10 @@ void fill_filespec(struct diff_filespec *, const struct object_id *,#define CHECK_SIZE_ONLY 1#define CHECK_BINARY 2 -int diff_populate_filespec (struct diff_filespec *,unsigned int ); +int diff_populate_filespec (struct repository *,struct diff_filespec *,unsigned int );void diff_free_filespec_data (struct diff_filespec *);void diff_free_filespec_blob (struct diff_filespec *); -int diff_filespec_is_binary (struct diff_filespec *); +int diff_filespec_is_binary (struct repository *,struct diff_filespec *);struct diff_filepair {struct diff_filespec *one;
@@ -111,7 +111,7 @@ struct diff_filepair *diff_queue(struct diff_queue_struct *, struct diff_filespec *);void diff_q (struct diff_queue_struct *,struct diff_filepair *); -void diffcore_break (int ); +void diffcore_break (struct repository *,int );void diffcore_rename (struct diff_options *);void diffcore_merge_broken (void );void diffcore_pickaxe (struct diff_options *);
@@ -142,7 +142,8 @@ void diff_debug_queue(const char *, struct diff_queue_struct *); #define diff_debug_queue(a,b) do { /* nothing */ } while (0)#endif -int diffcore_count_changes(struct diff_filespec *src, +int diffcore_count_changes(struct repository *r, + struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p,
line-log.c +12 -9
@@ -508,7 +508,9 @@ static void fill_blob_sha1(struct commit *commit, struct diff_filespec *spec)return ; } -static void fill_line_ends (struct diff_filespec *spec,long *lines, +static void fill_line_ends (struct repository *r, +struct diff_filespec *spec, +long *lines,unsigned long **line_ends) {int num =0 , size =50 ;
@@ -516,7 +518,7 @@ static void fill_line_ends(struct diff_filespec *spec, long *lines,unsigned long *ends =NULL ;char *data =NULL ; -if (diff_populate_filespec (spec,0 )) +if (diff_populate_filespec (r, spec,0 ))die ("Cannot read blob %s" ,oid_to_hex (&spec->oid));ALLOC_ARRAY (ends, size);
@@ -555,7 +557,8 @@ static const char *nth_line(void *data, long line) }static struct line_log_data * -parse_lines (struct commit *commit,const char *prefix,struct string_list *args) +parse_lines (struct repository *r,struct commit *commit, +const char *prefix,struct string_list *args) {long lines =0 ;unsigned long *ends =NULL ;
@@ -583,7 +586,7 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) spec =alloc_filespec (full_name);fill_blob_sha1 (commit, spec); -fill_line_ends (spec, &lines, &ends); +fill_line_ends (r, spec, &lines, &ends); cb_data.spec = spec; cb_data.lines = lines; cb_data.line_ends = ends;
@@ -739,7 +742,7 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_liststruct line_log_data *range; commit =check_single_commit (rev); - range =parse_lines (commit, prefix, args); + range =parse_lines (rev->diffopt.repo, commit, prefix, args);add_line_range (rev, commit, range);if (!rev->diffopt.detect_rename) {
@@ -891,8 +894,8 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rangreturn ;if (pair->one->oid_valid) -fill_line_ends (pair->one, &p_lines, &p_ends); -fill_line_ends (pair->two, &t_lines, &t_ends); +fill_line_ends (rev->diffopt.repo, pair->one, &p_lines, &p_ends); +fill_line_ends (rev->diffopt.repo, pair->two, &t_lines, &t_ends);fprintf (opt->file,"%s%sdiff --git a/%s b/%s%s\n" , prefix, c_meta, pair->one->path, pair->two->path, c_reset); fprintf(opt->file, "%s%s--- %s%s%s\n", prefix, c_meta,
@@ -1008,12 +1011,12 @@ static int process_diff_filepair(struct rev_info *rev,return 0 ;assert (pair->two->oid_valid); -diff_populate_filespec (pair->two,0 ); +diff_populate_filespec (rev->diffopt.repo, pair->two,0 ); file_target.ptr = pair->two->data; file_target.size = pair->two->size;if (pair->one->oid_valid) { -diff_populate_filespec (pair->one,0 ); +diff_populate_filespec (rev->diffopt.repo, pair->one,0 ); file_parent.ptr = pair->one->data; file_parent.size = pair->one->size; }else {
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v3 4/23 combine-diff.c: remove implicit dependency on the_index
In reply to Nguyễn Thái Ngọc Duy--- combine-diff.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
combine-diff.c +2 -1
@@ -1054,7 +1054,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,if (is_file) {struct strbuf buf =STRBUF_INIT ; -if (convert_to_git (&the_index, elem->path, result, len, &buf, global_conv_flags_eol)) { +if (convert_to_git (rev->diffopt.repo->index, + elem->path, result, len, &buf, global_conv_flags_eol)) {free (result); result =strbuf_detach (&buf, &len); result_size = len;
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
v3 cover Kill the_index part 4
In reply to Nguyễn Thái Ngọc DuyThe last patch 24/24 has been merged into individual patches to add repo_ prefix and avoid breaking in-flight topics. "repo" argument is also moved up in rerere(), diff_setup() and init_revisions().
All three macros that take the_repository is wrapped in NO_THE_REPO... similar to NO_THE_INDEX_... After part 5, these macros will be only available to builtin/ (or even removed if no in-flight topics use them)
Interdiff
Documentation/technical/api-diff.txt +2 -2
@@ -18,8 +18,8 @@ Calling sequence ---------------- * Prepare `struct diff_options` to record the set of diff options, and - then call `diff_setup()` to initialize this structure. This sets up - the vanilla default. + then call `repo_diff_setup()` to initialize this structure. This + sets up the vanilla default. * Fill in the options structure to specify desired output format, rename detection, etc. `diff_opt_parse()` can be used to parse options given
Documentation/technical/api-revision-walking.txt +1 -1
@@ -15,7 +15,7 @@ revision list. Functions --------- -`init_revisions`:: +`repo_init_revisions`:: Initialize a rev_info structure with default values. The second parameter may be NULL or can be prefix path, and then the `.prefix`
bisect.c +2 -2
@@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,struct argv_array rev_argv =ARGV_ARRAY_INIT ;int i; -repo_init_revisions (revs, the_repository, prefix); +repo_init_revisions (the_repository, revs, prefix); revs->abbrev =0 ; revs->commit_format =CMIT_FMT_UNSPECIFIED ;
@@ -889,7 +889,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)struct rev_info opt;/* diff-tree init */ -repo_init_revisions (&opt, the_repository, prefix); +repo_init_revisions (the_repository, &opt, prefix);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ opt.abbrev =0 ; opt.diff =1 ;
blame.c +3 -3
@@ -563,7 +563,7 @@ static struct blame_origin *find_origin(struct repository *r,* and origin first. Most of the time they are the * same and diff-tree is fairly efficient about this. */ -repo_diff_setup (&diff_opts, r); +repo_diff_setup (r, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =0 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -638,7 +638,7 @@ static struct blame_origin *find_rename(struct repository *r,struct diff_options diff_opts;int i; -repo_diff_setup (&diff_opts, r); +repo_diff_setup (r, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =DIFF_DETECT_RENAME ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1262,7 +1262,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,if (!unblamed)return ;/* nothing remains for this target */ -repo_diff_setup (&diff_opts, sb->repo); +repo_diff_setup (sb->repo, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
builtin/add.c +2 -2
@@ -110,7 +110,7 @@ int add_files_to_cache(const char *prefix,memset (&data,0 ,sizeof (data)); data.flags = flags; -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);setup_revisions (0 ,NULL , &rev,NULL );if (pathspec)copy_pathspec (&rev.prune_data, pathspec);
@@ -232,7 +232,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)if (read_cache () <0 )die (_ ("Could not read the index" )); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.diffopt.context =7 ; argc =setup_revisions (argc, argv, &rev,NULL );
builtin/am.c +3 -3
@@ -1372,7 +1372,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *commFILE *fp; fp =xfopen (am_path (state,"patch" ),"w" ); -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL ); rev_info.diff =1 ; rev_info.abbrev =0 ; rev_info.disable_stdin =1 ;
@@ -1407,7 +1407,7 @@ static void write_index_patch(const struct am_state *state) the_repository->hash_algo->empty_tree); fp =xfopen (am_path (state,"patch" ),"w" ); -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL ); rev_info.diff =1 ; rev_info.disable_stdin =1 ; rev_info.no_commit_id =1 ;
@@ -1565,7 +1565,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pastruct rev_info rev_info;const char *diff_filter_str ="--diff-filter=AM" ; -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL ); rev_info.diffopt.output_format =DIFF_FORMAT_NAME_STATUS ;diff_opt_parse (&rev_info.diffopt, &diff_filter_str,1 , rev_info.prefix);add_pending_oid (&rev_info,"HEAD" , &our_tree,0 );
builtin/blame.c +1 -1
@@ -830,7 +830,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)setup_default_color_by_age ();git_config (git_blame_config, &output_option); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.date_mode = blame_date_mode; revs.diffopt.flags.allow_textconv =1 ; revs.diffopt.flags.follow_renames =1 ;
builtin/checkout.c +2 -2
@@ -392,7 +392,7 @@ static void show_local_changes(struct object *head, {struct rev_info rev;/* I think we want full paths, even if we're in a subdirectory. */ -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.diffopt.flags = opts->flags; rev.diffopt.output_format |=DIFF_FORMAT_NAME_STATUS ;diff_setup_done (&rev.diffopt);
@@ -801,7 +801,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *nestruct rev_info revs;struct object *object = &old_commit->object; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );setup_revisions (0 ,NULL , &revs,NULL ); object->flags &= ~UNINTERESTING ;
builtin/commit.c +1 -1
@@ -980,7 +980,7 @@ static const char *find_author_by_nickname(const char *name)const char *av[20 ];int ac =0 ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );strbuf_addf (&buf,"--author=%s" , name); av[++ac] ="--all" ; av[++ac] ="-i" ;
builtin/describe.c +2 -2
@@ -488,7 +488,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst)"--objects" ,"--in-commit-order" ,"--reverse" ,"HEAD" , NULL); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );if (setup_revisions (args.argc, args.argv, &revs,NULL ) >1 )BUG ("setup_revisions could not handle all args?" );
@@ -636,7 +636,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)if (0 <= fd)update_index_if_able (&the_index, &index_lock); -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix);argv_array_pushv (&args, diff_index_args);if (setup_revisions (args.argc, args.argv, &revs,NULL ) !=1 )BUG ("malformed internal diff-index command line" );
builtin/diff-files.c +1 -1
@@ -25,7 +25,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)usage (diff_files_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-index.c +1 -1
@@ -22,7 +22,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)usage (diff_cache_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-tree.c +1 -1
@@ -110,7 +110,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)usage (diff_tree_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -repo_init_revisions (opt, the_repository, prefix); +repo_init_revisions (the_repository, opt, prefix);if (read_cache () <0 )die (_ ("index file corrupt" )); opt->abbrev =0 ;
builtin/diff.c +1 -1
@@ -318,7 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL );precompose_argv (argc, argv); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);if (no_index && argc != i +2 ) {if (no_index ==DIFF_NO_INDEX_IMPLICIT ) {
builtin/fast-export.c +1 -1
@@ -1033,7 +1033,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)/* we handle encodings */ git_config (git_default_config,NULL ); -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix);init_revision_sources (&revision_sources); revs.topo_order =1 ; revs.sources = &revision_sources;
builtin/fmt-merge-msg.c +1 -1
@@ -642,7 +642,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,struct rev_info rev; head =lookup_commit_or_die (&head_oid,"HEAD" ); -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.commit_format =CMIT_FMT_ONELINE ; rev.ignore_merges =1 ; rev.limited =1 ;
builtin/log.c +10 -10
@@ -467,7 +467,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.diff =1 ; rev.simplify_history =0 ;memset (&opt,0 ,sizeof (opt));
@@ -585,7 +585,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)git_config (git_log_config,NULL );memset (&match_all,0 ,sizeof (match_all)); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.diff =1 ; rev.always_show_header =1 ; rev.no_walk =REVISION_WALK_NO_WALK_SORTED ;
@@ -665,7 +665,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);init_reflog_walk (&rev.reflog_info); rev.verbose_header =1 ;memset (&opt,0 ,sizeof (opt));
@@ -704,7 +704,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.always_show_header =1 ;memset (&opt,0 ,sizeof (opt)); opt.def ="HEAD" ;
@@ -914,10 +914,10 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)if ((flags1 &UNINTERESTING ) == (flags2 &UNINTERESTING ))die (_ ("Not a range." )); -init_patch_ids (ids, the_repository); +init_patch_ids (the_repository, ids);/* given a range a..b get all patch ids for b..a */ -repo_init_revisions (&check_rev, the_repository, rev->prefix); +repo_init_revisions (the_repository, &check_rev, rev->prefix); check_rev.max_parents =1 ; o1->flags ^=UNINTERESTING ; o2->flags ^=UNINTERESTING ;
@@ -1361,13 +1361,13 @@ static void prepare_bases(struct base_tree_info *bases,return ;init_commit_base (&commit_base); -repo_diff_setup (&diffopt, the_repository); +repo_diff_setup (the_repository, &diffopt); diffopt.flags.recursive =1 ;diff_setup_done (&diffopt);oidcpy (&bases->base_commit, &base->object.oid); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.max_parents =1 ; revs.topo_order =1 ;for (i =0 ; i < total; i++) {
@@ -1528,7 +1528,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) extra_cc.strdup_strings =1 ;init_log_defaults ();git_config (git_format_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.commit_format =CMIT_FMT_EMAIL ; rev.expand_tabs_in_log_default =0 ; rev.verbose_header =1 ;
@@ -1939,7 +1939,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix) } } -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix); revs.max_parents =1 ;if (add_pending_commit (head, &revs,0 ))
builtin/merge.c +3 -3
@@ -389,7 +389,7 @@ static void squash_message(struct commit *commit, struct commit_list *remoteheadprintf (_ ("Squash commit -- not updating HEAD\n" )); -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.ignore_merges =1 ; rev.commit_format =CMIT_FMT_MEDIUM ;
@@ -452,7 +452,7 @@ static void finish(struct commit *head_commit, }if (new_head && show_diffstat) {struct diff_options opts; -repo_diff_setup (&opts, the_repository); +repo_diff_setup (the_repository, &opts); opts.stat_width =-1 ;/* use full terminal width */ opts.stat_graph_width =-1 ;/* respect statGraphWidth config */ opts.output_format |=
@@ -911,7 +911,7 @@ static int evaluate_result(void)struct rev_info rev;/* Check how many files differ. */ -repo_init_revisions (&rev, the_repository,"" ); +repo_init_revisions (the_repository, &rev,"" );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ;
builtin/pack-objects.c +1 -1
@@ -2989,7 +2989,7 @@ static void get_object_list(int ac, const char **av)char line[1000 ];int flags =0 ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
builtin/prune.c +1 -1
@@ -120,7 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix) save_commit_buffer =0 ; read_replace_refs =0 ; ref_paranoia =1 ; -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix); argc =parse_options (argc, argv, prefix, options, prune_usage,0 );
builtin/range-diff.c +1 -1
@@ -34,7 +34,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL ); -repo_diff_setup (&diffopt, the_repository); +repo_diff_setup (the_repository, &diffopt); diffopt.output_format =DIFF_FORMAT_PATCH ; diffopt.flags.suppress_diff_headers =1 ; diffopt.output_prefix = output_prefix_cb;
builtin/reflog.c +1 -1
@@ -567,7 +567,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)* from reflog if the repository was pruned with older git. */ if (cb.cmd.stalefix) { -repo_init_revisions (&cb.cmd.revs, the_repository, prefix); +repo_init_revisions (the_repository, &cb.cmd.revs, prefix);if (flags &EXPIRE_REFLOGS_VERBOSE )printf ("Marking reachable objects..." );mark_reachable_objects (&cb.cmd.revs,0 ,0 ,NULL );
builtin/rev-list.c +1 -1
@@ -370,7 +370,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)usage (rev_list_usage);git_config (git_default_config,NULL ); -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix); revs.abbrev =DEFAULT_ABBREV ; revs.commit_format =CMIT_FMT_UNSPECIFIED ;
builtin/revert.c +1 -1
@@ -174,7 +174,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) }else {struct setup_revision_opt s_r_opt; opts->revs =xmalloc (sizeof (*opts->revs)); -repo_init_revisions (opts->revs, the_repository,NULL ); +repo_init_revisions (the_repository, opts->revs,NULL ); opts->revs->no_walk =REVISION_WALK_NO_WALK_UNSORTED ;if (argc <2 )usage_with_options (usage_str, options);
builtin/shortlog.c +1 -1
@@ -278,7 +278,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)git_config (git_default_config,NULL );shortlog_init (&log); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);parse_options_start (&ctx, argc, argv, prefix, options,PARSE_OPT_KEEP_DASHDASH |PARSE_OPT_KEEP_ARGV0 );
builtin/submodule--helper.c +1 -1
@@ -792,7 +792,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, path, NULL);git_config (git_diff_basic_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.abbrev =0 ; diff_files_args.argc = setup_revisions(diff_files_args.argc, diff_files_args.argv,
bundle.c +2 -2
@@ -140,7 +140,7 @@ int verify_bundle(struct bundle_header *header, int verbose)int i, ret =0 , req_nr;const char *message =_ ("Repository lacks these prerequisite commits:" ); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );for (i =0 ; i < p->nr; i++) {struct ref_list_entry *e = p->list + i;struct object *o =parse_object (the_repository, &e->oid);
@@ -441,7 +441,7 @@ int create_bundle(struct bundle_header *header, const char *path,/* init revs to list objects for pack-objects later */ save_commit_buffer =0 ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );/* write prerequisites */ if (compute_and_write_prerequisites (bundle_fd, &revs, argc, argv))
diff-lib.c +2 -2
@@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) {struct rev_info revs; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );copy_pathspec (&revs.prune_data, &opt->pathspec); revs.diffopt = *opt;
@@ -557,7 +557,7 @@ int index_differs_from(const char *def, const struct diff_flags *flags,struct rev_info rev;struct setup_revision_opt opt; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = def;setup_revisions (0 ,NULL , &rev, &opt);
diff-no-index.c +1 -1
@@ -246,7 +246,7 @@ void diff_no_index(struct repository *r,* FIXME: --no-index should not look at index and we should be * able to pass NULL repo. Maybe later. */ -repo_diff_setup (&revs->diffopt, r); +repo_diff_setup (r, &revs->diffopt);for (i =1 ; i < argc -2 ; ) {int j;if (!strcmp (argv[i],"--no-index" ))
diff.c +2 -2
@@ -4396,12 +4396,12 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)builtin_checkdiff (name, other, attr_path, p->one, p->two, o); } -void repo_diff_setup (struct diff_options *options,struct repository *repo) +void repo_diff_setup (struct repository *r,struct diff_options *options) {memcpy (options, &default_diff_options,sizeof (*options)); options->file = stdout; - options->repo = repo; + options->repo = r; options->abbrev =DEFAULT_ABBREV ; options->line_termination ='\n' ;
diff.h +4 -2
@@ -336,8 +336,10 @@ int git_diff_basic_config(const char *var, const char *value, void *cb);int git_diff_heuristic_config (const char *var,const char *value,void *cb);void init_diff_ui_defaults (void );int git_diff_ui_config (const char *var,const char *value,void *cb); -void repo_diff_setup (struct diff_options *,struct repository *); -#define diff_setup (opts) repo_diff_setup(opts, the_repository) +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS +#define diff_setup (diffopts) repo_diff_setup(the_repository, diffopts) +#endif +void repo_diff_setup (struct repository *,struct diff_options *);int diff_opt_parse (struct diff_options *,const char **,int ,const char *);void diff_setup_done (struct diff_options *);int git_config_rename (const char *var,const char *value);
http-push.c +1 -1
@@ -1925,7 +1925,7 @@ int cmd_main(int argc, const char **argv)if (!push_all && !is_null_oid (&ref->old_oid))argv_array_pushf (&commit_argv,"^%s" ,oid_to_hex (&ref->old_oid)); -repo_init_revisions (&revs, the_repository,setup_git_directory ()); +repo_init_revisions (the_repository, &revs,setup_git_directory ());setup_revisions (commit_argv.argc, commit_argv.argv, &revs,NULL ); revs.edge_hint =0 ;/* just in case */
merge-recursive.c +2 -2
@@ -1115,7 +1115,7 @@ static int find_first_merges(struct object_array *result, const char *path,/* get all revisions that merge commit a */ xsnprintf (merged_revision,sizeof (merged_revision),"^%s" ,oid_to_hex (&a->object.oid)); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); rev_opts.submodule = path;/* FIXME: can't handle linked worktrees in submodules yet */ revs.single_worktree = path !=NULL ;
@@ -1813,7 +1813,7 @@ static struct diff_queue_struct *get_diffpairs(struct merge_options *o,struct diff_queue_struct *ret;struct diff_options opts; -repo_diff_setup (&opts, the_repository); +repo_diff_setup (the_repository, &opts); opts.flags.recursive =1 ; opts.flags.rename_empty =0 ; opts.detect_rename =merge_detect_rename (o);
notes-merge.c +2 -2
@@ -126,7 +126,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,trace_printf ("\tdiff_tree_remote(base = %.7s, remote = %.7s)\n" ,oid_to_hex (base),oid_to_hex (remote)); -repo_diff_setup (&opt, the_repository); +repo_diff_setup (the_repository, &opt); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
@@ -189,7 +189,7 @@ static void diff_tree_local(struct notes_merge_options *o,trace_printf ("\tdiff_tree_local(len = %i, base = %.7s, local = %.7s)\n" , len,oid_to_hex (base),oid_to_hex (local)); -repo_diff_setup (&opt, the_repository); +repo_diff_setup (the_repository, &opt); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
pack-bitmap-write.c +1 -1
@@ -261,7 +261,7 @@ void bitmap_writer_build(struct packing_data *to_pack)if (writer.show_progress) writer.progress =start_progress ("Building bitmaps" , writer.selected_nr); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.tag_objects =1 ; revs.tree_objects =1 ; revs.blob_objects =1 ;
patch-ids.c +2 -2
@@ -56,10 +56,10 @@ static int patch_id_cmp(const void *cmpfn_data,return oidcmp (&a->patch_id, &b->patch_id); } -int init_patch_ids (struct patch_ids *ids,struct repository *repo) +int init_patch_ids (struct repository *r,struct patch_ids *ids) {memset (ids,0 ,sizeof (*ids)); -repo_diff_setup (&ids->diffopts, repo); +repo_diff_setup (r, &ids->diffopts); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
patch-ids.h +1 -1
@@ -21,7 +21,7 @@ struct patch_ids {int commit_patch_id (struct commit *commit,struct diff_options *options,struct object_id *oid,int ); -int init_patch_ids (struct patch_ids *,struct repository *); +int init_patch_ids (struct repository *,struct patch_ids *);int free_patch_ids (struct patch_ids *);struct patch_id *add_commit_patch_id (struct commit *,struct patch_ids *);struct patch_id *has_commit_patch_id (struct commit *,struct patch_ids *);
read-cache.c +1 -1
@@ -2141,7 +2141,7 @@ int index_has_changes(struct index_state *istate,if (tree || !get_oid_tree ("HEAD" , &cmp)) {struct diff_options opt; -repo_diff_setup (&opt, the_repository); +repo_diff_setup (the_repository, &opt); opt.flags.exit_with_status =1 ;if (!sb) opt.flags.quick =1 ;
ref-filter.c +1 -1
@@ -2138,7 +2138,7 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata)struct ref_array *array = ref_cbdata->array;struct commit **to_clear =xcalloc (sizeof (struct commit *), array->nr); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );for (i =0 ; i < array->nr; i++) {struct ref_array_item *item = array->items[i];
remote.c +1 -1
@@ -1903,7 +1903,7 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, oid_to_hex(&theirs->object.oid));argv_array_push (&argv,"--" ); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );setup_revisions (argv.argc, argv.argv, &revs,NULL );if (prepare_revision_walk (&revs))die ("revision walk setup failed" );
rerere.h +4 -2
@@ -23,9 +23,11 @@ struct rerere_id {int variant; }; -extern int setup_rerere (struct string_list *,int ); -extern int repo_rerere (struct repository *repo,int ); +int setup_rerere (struct string_list *,int ); +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS #define rerere (flags) repo_rerere(the_repository, flags) +#endif +int repo_rerere (struct repository *,int );/* * Given the conflict ID and the name of a "file" used for replaying * the recorded resolution (e.g. "preimage", "postimage"), return the
revision.c +6 -6
@@ -878,7 +878,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)return ; left_first = left_count < right_count; -init_patch_ids (&ids, revs->repo); +init_patch_ids (revs->repo, &ids); ids.diffopts.pathspec = revs->diffopt.pathspec;/* Compute patch-ids for one side */
@@ -1440,13 +1440,13 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,return 1 ; } -void repo_init_revisions (struct rev_info *revs, -struct repository *repo, -const char *prefix) +void repo_init_revisions (struct repository *r, +struct rev_info *revs, +const char *prefix) {memset (revs,0 ,sizeof (*revs)); - revs->repo = repo; + revs->repo = r; revs->abbrev =DEFAULT_ABBREV ; revs->ignore_merges =1 ; revs->simplify_history =1 ;
@@ -1472,7 +1472,7 @@ void repo_init_revisions(struct rev_info *revs,grep_init (&revs->grep_filter, revs->repo, prefix); revs->grep_filter.status_only =1 ; -repo_diff_setup (&revs->diffopt, revs->repo); +repo_diff_setup (revs->repo, &revs->diffopt);if (prefix && !revs->diffopt.prefix) { revs->diffopt.prefix = prefix; revs->diffopt.prefix_length =strlen (prefix);
revision.h +6 -4
@@ -255,10 +255,12 @@ struct setup_revision_opt {unsigned revarg_opt; }; -void repo_init_revisions (struct rev_info *revs, -struct repository *repo, -const char *prefix); -#define init_revisions (revs, prefix) repo_init_revisions(revs, the_repository, prefix) +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS +#define init_revisions (revs, prefix) repo_init_revisions(the_repository, revs, prefix) +#endif +void repo_init_revisions (struct repository *r, +struct rev_info *revs, +const char *prefix);int setup_revisions (int argc,const char **argv,struct rev_info *revs,struct setup_revision_opt *); void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
sequencer.c +4 -4
@@ -1143,7 +1143,7 @@ void print_commit_summary(const char *prefix, const struct object_id *oid,strbuf_release (&author_ident);strbuf_release (&committer_ident); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);setup_revisions (0 ,NULL , &rev,NULL ); rev.diff =1 ;
@@ -2566,7 +2566,7 @@ static int make_patch(struct commit *commit, struct replay_opts *opts)strbuf_addf (&buf,"%s/patch" ,get_dir (opts));memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -repo_init_revisions (&log_tree_opt, the_repository,NULL ); +repo_init_revisions (the_repository, &log_tree_opt,NULL ); log_tree_opt.abbrev =0 ; log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_PATCH ;
@@ -3477,7 +3477,7 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)struct object_id orig, head;memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -repo_init_revisions (&log_tree_opt, the_repository,NULL ); +repo_init_revisions (the_repository, &log_tree_opt,NULL ); log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_DIFFSTAT ;
@@ -4212,7 +4212,7 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,const char *insn = flags &TODO_LIST_ABBREVIATE_CMDS ?"p" :"pick" ;int rebase_merges = flags &TODO_LIST_REBASE_MERGES ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.verbose_header =1 ;if (!rebase_merges) revs.max_parents =1 ;
shallow.c +1 -1
@@ -184,7 +184,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,is_repository_shallow (the_repository);/* make sure shallows are read */ -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
submodule.c +3 -3
@@ -428,7 +428,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path, {struct commit_list *list; -repo_init_revisions (rev, the_repository,NULL ); +repo_init_revisions (the_repository, rev,NULL );setup_revisions (0 ,NULL , rev,NULL ); rev->left_right =1 ; rev->first_parent_only =1 ;
@@ -773,7 +773,7 @@ static void collect_changed_submodules(struct index_state *istate,struct rev_info rev;const struct commit *commit; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );setup_revisions (argv->argc, argv->argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
@@ -784,7 +784,7 @@ static void collect_changed_submodules(struct index_state *istate, data.changed = changed; data.commit_oid = &commit->object.oid; -repo_init_revisions (&diff_rev, the_repository,NULL ); +repo_init_revisions (the_repository, &diff_rev,NULL ); diff_rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; diff_rev.diffopt.format_callback = collect_changed_submodules_cb; diff_rev.diffopt.format_callback_data = &data;
t/helper/test-revision-walking.c +1 -1
@@ -32,7 +32,7 @@ static int run_revision_walk(void)int argc =ARRAY_SIZE (argv) -1 ;int got_revision =0 ; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );setup_revisions (argc, argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
tree-diff.c +1 -1
@@ -605,7 +605,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -repo_diff_setup (&diff_opts, opt->repo); +repo_diff_setup (opt->repo, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
wt-status.c +5 -5
@@ -582,7 +582,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) {struct rev_info rev; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; rev.diffopt.flags.dirty_submodules =1 ;
@@ -607,7 +607,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)struct rev_info rev;struct setup_revision_opt opt; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = s->is_initial ?empty_tree_oid_hex () : s->reference;setup_revisions (0 ,NULL , &rev, &opt);
@@ -982,7 +982,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)int dirty_submodules;const char *c =color (WT_STATUS_HEADER , s); -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.diffopt.flags.allow_textconv =1 ; rev.diffopt.ita_invisible_in_index =1 ;
@@ -2314,7 +2314,7 @@ int has_unstaged_changes(int ignore_submodules)struct rev_info rev_info;int result; -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL );if (ignore_submodules) { rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.override_submodule_config =1 ;
@@ -2336,7 +2336,7 @@ int has_uncommitted_changes(int ignore_submodules)if (is_cache_unborn ())return 0 ; -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL );if (ignore_submodules) rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.quick =1 ;
Documentation/technical/api-diff.txt +2 -2
@@ -18,8 +18,8 @@ Calling sequence ---------------- * Prepare `struct diff_options` to record the set of diff options, and - then call `diff_setup()` to initialize this structure. This sets up - the vanilla default. + then call `repo_diff_setup()` to initialize this structure. This + sets up the vanilla default. * Fill in the options structure to specify desired output format, rename detection, etc. `diff_opt_parse()` can be used to parse options given
Documentation/technical/api-revision-walking.txt +1 -1
@@ -15,7 +15,7 @@ revision list. Functions --------- -`init_revisions`:: +`repo_init_revisions`:: Initialize a rev_info structure with default values. The second parameter may be NULL or can be prefix path, and then the `.prefix`
bisect.c +2 -2
@@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,struct argv_array rev_argv =ARGV_ARRAY_INIT ;int i; -repo_init_revisions (revs, the_repository, prefix); +repo_init_revisions (the_repository, revs, prefix); revs->abbrev =0 ; revs->commit_format =CMIT_FMT_UNSPECIFIED ;
@@ -889,7 +889,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)struct rev_info opt;/* diff-tree init */ -repo_init_revisions (&opt, the_repository, prefix); +repo_init_revisions (the_repository, &opt, prefix);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ opt.abbrev =0 ; opt.diff =1 ;
blame.c +3 -3
@@ -563,7 +563,7 @@ static struct blame_origin *find_origin(struct repository *r,* and origin first. Most of the time they are the * same and diff-tree is fairly efficient about this. */ -repo_diff_setup (&diff_opts, r); +repo_diff_setup (r, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =0 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -638,7 +638,7 @@ static struct blame_origin *find_rename(struct repository *r,struct diff_options diff_opts;int i; -repo_diff_setup (&diff_opts, r); +repo_diff_setup (r, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.detect_rename =DIFF_DETECT_RENAME ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
@@ -1262,7 +1262,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,if (!unblamed)return ;/* nothing remains for this target */ -repo_diff_setup (&diff_opts, sb->repo); +repo_diff_setup (sb->repo, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
builtin/add.c +2 -2
@@ -110,7 +110,7 @@ int add_files_to_cache(const char *prefix,memset (&data,0 ,sizeof (data)); data.flags = flags; -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);setup_revisions (0 ,NULL , &rev,NULL );if (pathspec)copy_pathspec (&rev.prune_data, pathspec);
@@ -232,7 +232,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)if (read_cache () <0 )die (_ ("Could not read the index" )); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.diffopt.context =7 ; argc =setup_revisions (argc, argv, &rev,NULL );
builtin/am.c +3 -3
@@ -1372,7 +1372,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *commFILE *fp; fp =xfopen (am_path (state,"patch" ),"w" ); -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL ); rev_info.diff =1 ; rev_info.abbrev =0 ; rev_info.disable_stdin =1 ;
@@ -1407,7 +1407,7 @@ static void write_index_patch(const struct am_state *state) the_repository->hash_algo->empty_tree); fp =xfopen (am_path (state,"patch" ),"w" ); -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL ); rev_info.diff =1 ; rev_info.disable_stdin =1 ; rev_info.no_commit_id =1 ;
@@ -1565,7 +1565,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pastruct rev_info rev_info;const char *diff_filter_str ="--diff-filter=AM" ; -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL ); rev_info.diffopt.output_format =DIFF_FORMAT_NAME_STATUS ;diff_opt_parse (&rev_info.diffopt, &diff_filter_str,1 , rev_info.prefix);add_pending_oid (&rev_info,"HEAD" , &our_tree,0 );
builtin/blame.c +1 -1
@@ -830,7 +830,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)setup_default_color_by_age ();git_config (git_blame_config, &output_option); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.date_mode = blame_date_mode; revs.diffopt.flags.allow_textconv =1 ; revs.diffopt.flags.follow_renames =1 ;
builtin/checkout.c +2 -2
@@ -392,7 +392,7 @@ static void show_local_changes(struct object *head, {struct rev_info rev;/* I think we want full paths, even if we're in a subdirectory. */ -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.diffopt.flags = opts->flags; rev.diffopt.output_format |=DIFF_FORMAT_NAME_STATUS ;diff_setup_done (&rev.diffopt);
@@ -801,7 +801,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *nestruct rev_info revs;struct object *object = &old_commit->object; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );setup_revisions (0 ,NULL , &revs,NULL ); object->flags &= ~UNINTERESTING ;
builtin/commit.c +1 -1
@@ -980,7 +980,7 @@ static const char *find_author_by_nickname(const char *name)const char *av[20 ];int ac =0 ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );strbuf_addf (&buf,"--author=%s" , name); av[++ac] ="--all" ; av[++ac] ="-i" ;
builtin/describe.c +2 -2
@@ -488,7 +488,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst)"--objects" ,"--in-commit-order" ,"--reverse" ,"HEAD" , NULL); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );if (setup_revisions (args.argc, args.argv, &revs,NULL ) >1 )BUG ("setup_revisions could not handle all args?" );
@@ -636,7 +636,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)if (0 <= fd)update_index_if_able (&the_index, &index_lock); -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix);argv_array_pushv (&args, diff_index_args);if (setup_revisions (args.argc, args.argv, &revs,NULL ) !=1 )BUG ("malformed internal diff-index command line" );
builtin/diff-files.c +1 -1
@@ -25,7 +25,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)usage (diff_files_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-index.c +1 -1
@@ -22,7 +22,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)usage (diff_cache_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.abbrev =0 ;precompose_argv (argc, argv);
builtin/diff-tree.c +1 -1
@@ -110,7 +110,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)usage (diff_tree_usage);git_config (git_diff_basic_config,NULL );/* no "diff" UI options */ -repo_init_revisions (opt, the_repository, prefix); +repo_init_revisions (the_repository, opt, prefix);if (read_cache () <0 )die (_ ("index file corrupt" )); opt->abbrev =0 ;
builtin/diff.c +1 -1
@@ -318,7 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL );precompose_argv (argc, argv); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);if (no_index && argc != i +2 ) {if (no_index ==DIFF_NO_INDEX_IMPLICIT ) {
builtin/fast-export.c +1 -1
@@ -1033,7 +1033,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)/* we handle encodings */ git_config (git_default_config,NULL ); -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix);init_revision_sources (&revision_sources); revs.topo_order =1 ; revs.sources = &revision_sources;
builtin/fmt-merge-msg.c +1 -1
@@ -642,7 +642,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,struct rev_info rev; head =lookup_commit_or_die (&head_oid,"HEAD" ); -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.commit_format =CMIT_FMT_ONELINE ; rev.ignore_merges =1 ; rev.limited =1 ;
builtin/log.c +10 -10
@@ -467,7 +467,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.diff =1 ; rev.simplify_history =0 ;memset (&opt,0 ,sizeof (opt));
@@ -585,7 +585,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)git_config (git_log_config,NULL );memset (&match_all,0 ,sizeof (match_all)); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.diff =1 ; rev.always_show_header =1 ; rev.no_walk =REVISION_WALK_NO_WALK_SORTED ;
@@ -665,7 +665,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);init_reflog_walk (&rev.reflog_info); rev.verbose_header =1 ;memset (&opt,0 ,sizeof (opt));
@@ -704,7 +704,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)init_log_defaults ();git_config (git_log_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.always_show_header =1 ;memset (&opt,0 ,sizeof (opt)); opt.def ="HEAD" ;
@@ -914,10 +914,10 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)if ((flags1 &UNINTERESTING ) == (flags2 &UNINTERESTING ))die (_ ("Not a range." )); -init_patch_ids (ids, the_repository); +init_patch_ids (the_repository, ids);/* given a range a..b get all patch ids for b..a */ -repo_init_revisions (&check_rev, the_repository, rev->prefix); +repo_init_revisions (the_repository, &check_rev, rev->prefix); check_rev.max_parents =1 ; o1->flags ^=UNINTERESTING ; o2->flags ^=UNINTERESTING ;
@@ -1361,13 +1361,13 @@ static void prepare_bases(struct base_tree_info *bases,return ;init_commit_base (&commit_base); -repo_diff_setup (&diffopt, the_repository); +repo_diff_setup (the_repository, &diffopt); diffopt.flags.recursive =1 ;diff_setup_done (&diffopt);oidcpy (&bases->base_commit, &base->object.oid); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.max_parents =1 ; revs.topo_order =1 ;for (i =0 ; i < total; i++) {
@@ -1528,7 +1528,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) extra_cc.strdup_strings =1 ;init_log_defaults ();git_config (git_format_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.commit_format =CMIT_FMT_EMAIL ; rev.expand_tabs_in_log_default =0 ; rev.verbose_header =1 ;
@@ -1939,7 +1939,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix) } } -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix); revs.max_parents =1 ;if (add_pending_commit (head, &revs,0 ))
builtin/merge.c +3 -3
@@ -389,7 +389,7 @@ static void squash_message(struct commit *commit, struct commit_list *remoteheadprintf (_ ("Squash commit -- not updating HEAD\n" )); -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.ignore_merges =1 ; rev.commit_format =CMIT_FMT_MEDIUM ;
@@ -452,7 +452,7 @@ static void finish(struct commit *head_commit, }if (new_head && show_diffstat) {struct diff_options opts; -repo_diff_setup (&opts, the_repository); +repo_diff_setup (the_repository, &opts); opts.stat_width =-1 ;/* use full terminal width */ opts.stat_graph_width =-1 ;/* respect statGraphWidth config */ opts.output_format |=
@@ -911,7 +911,7 @@ static int evaluate_result(void)struct rev_info rev;/* Check how many files differ. */ -repo_init_revisions (&rev, the_repository,"" ); +repo_init_revisions (the_repository, &rev,"" );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ;
builtin/pack-objects.c +1 -1
@@ -2989,7 +2989,7 @@ static void get_object_list(int ac, const char **av)char line[1000 ];int flags =0 ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
builtin/prune.c +1 -1
@@ -120,7 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix) save_commit_buffer =0 ; read_replace_refs =0 ; ref_paranoia =1 ; -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix); argc =parse_options (argc, argv, prefix, options, prune_usage,0 );
builtin/range-diff.c +1 -1
@@ -34,7 +34,7 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)git_config (git_diff_ui_config,NULL ); -repo_diff_setup (&diffopt, the_repository); +repo_diff_setup (the_repository, &diffopt); diffopt.output_format =DIFF_FORMAT_PATCH ; diffopt.flags.suppress_diff_headers =1 ; diffopt.output_prefix = output_prefix_cb;
builtin/reflog.c +1 -1
@@ -567,7 +567,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)* from reflog if the repository was pruned with older git. */ if (cb.cmd.stalefix) { -repo_init_revisions (&cb.cmd.revs, the_repository, prefix); +repo_init_revisions (the_repository, &cb.cmd.revs, prefix);if (flags &EXPIRE_REFLOGS_VERBOSE )printf ("Marking reachable objects..." );mark_reachable_objects (&cb.cmd.revs,0 ,0 ,NULL );
builtin/rev-list.c +1 -1
@@ -370,7 +370,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)usage (rev_list_usage);git_config (git_default_config,NULL ); -repo_init_revisions (&revs, the_repository, prefix); +repo_init_revisions (the_repository, &revs, prefix); revs.abbrev =DEFAULT_ABBREV ; revs.commit_format =CMIT_FMT_UNSPECIFIED ;
builtin/revert.c +1 -1
@@ -174,7 +174,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) }else {struct setup_revision_opt s_r_opt; opts->revs =xmalloc (sizeof (*opts->revs)); -repo_init_revisions (opts->revs, the_repository,NULL ); +repo_init_revisions (the_repository, opts->revs,NULL ); opts->revs->no_walk =REVISION_WALK_NO_WALK_UNSORTED ;if (argc <2 )usage_with_options (usage_str, options);
builtin/shortlog.c +1 -1
@@ -278,7 +278,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)git_config (git_default_config,NULL );shortlog_init (&log); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);parse_options_start (&ctx, argc, argv, prefix, options,PARSE_OPT_KEEP_DASHDASH |PARSE_OPT_KEEP_ARGV0 );
builtin/submodule--helper.c +1 -1
@@ -792,7 +792,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid, path, NULL);git_config (git_diff_basic_config,NULL ); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix); rev.abbrev =0 ; diff_files_args.argc = setup_revisions(diff_files_args.argc, diff_files_args.argv,
bundle.c +2 -2
@@ -140,7 +140,7 @@ int verify_bundle(struct bundle_header *header, int verbose)int i, ret =0 , req_nr;const char *message =_ ("Repository lacks these prerequisite commits:" ); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );for (i =0 ; i < p->nr; i++) {struct ref_list_entry *e = p->list + i;struct object *o =parse_object (the_repository, &e->oid);
@@ -441,7 +441,7 @@ int create_bundle(struct bundle_header *header, const char *path,/* init revs to list objects for pack-objects later */ save_commit_buffer =0 ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );/* write prerequisites */ if (compute_and_write_prerequisites (bundle_fd, &revs, argc, argv))
diff-lib.c +2 -2
@@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt) {struct rev_info revs; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );copy_pathspec (&revs.prune_data, &opt->pathspec); revs.diffopt = *opt;
@@ -557,7 +557,7 @@ int index_differs_from(const char *def, const struct diff_flags *flags,struct rev_info rev;struct setup_revision_opt opt; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = def;setup_revisions (0 ,NULL , &rev, &opt);
diff-no-index.c +1 -1
@@ -246,7 +246,7 @@ void diff_no_index(struct repository *r,* FIXME: --no-index should not look at index and we should be * able to pass NULL repo. Maybe later. */ -repo_diff_setup (&revs->diffopt, r); +repo_diff_setup (r, &revs->diffopt);for (i =1 ; i < argc -2 ; ) {int j;if (!strcmp (argv[i],"--no-index" ))
diff.c +2 -2
@@ -4396,12 +4396,12 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)builtin_checkdiff (name, other, attr_path, p->one, p->two, o); } -void repo_diff_setup (struct diff_options *options,struct repository *repo) +void repo_diff_setup (struct repository *r,struct diff_options *options) {memcpy (options, &default_diff_options,sizeof (*options)); options->file = stdout; - options->repo = repo; + options->repo = r; options->abbrev =DEFAULT_ABBREV ; options->line_termination ='\n' ;
diff.h +4 -2
@@ -336,8 +336,10 @@ int git_diff_basic_config(const char *var, const char *value, void *cb);int git_diff_heuristic_config (const char *var,const char *value,void *cb);void init_diff_ui_defaults (void );int git_diff_ui_config (const char *var,const char *value,void *cb); -void repo_diff_setup (struct diff_options *,struct repository *); -#define diff_setup (opts) repo_diff_setup(opts, the_repository) +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS +#define diff_setup (diffopts) repo_diff_setup(the_repository, diffopts) +#endif +void repo_diff_setup (struct repository *,struct diff_options *);int diff_opt_parse (struct diff_options *,const char **,int ,const char *);void diff_setup_done (struct diff_options *);int git_config_rename (const char *var,const char *value);
http-push.c +1 -1
@@ -1925,7 +1925,7 @@ int cmd_main(int argc, const char **argv)if (!push_all && !is_null_oid (&ref->old_oid))argv_array_pushf (&commit_argv,"^%s" ,oid_to_hex (&ref->old_oid)); -repo_init_revisions (&revs, the_repository,setup_git_directory ()); +repo_init_revisions (the_repository, &revs,setup_git_directory ());setup_revisions (commit_argv.argc, commit_argv.argv, &revs,NULL ); revs.edge_hint =0 ;/* just in case */
merge-recursive.c +2 -2
@@ -1115,7 +1115,7 @@ static int find_first_merges(struct object_array *result, const char *path,/* get all revisions that merge commit a */ xsnprintf (merged_revision,sizeof (merged_revision),"^%s" ,oid_to_hex (&a->object.oid)); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); rev_opts.submodule = path;/* FIXME: can't handle linked worktrees in submodules yet */ revs.single_worktree = path !=NULL ;
@@ -1813,7 +1813,7 @@ static struct diff_queue_struct *get_diffpairs(struct merge_options *o,struct diff_queue_struct *ret;struct diff_options opts; -repo_diff_setup (&opts, the_repository); +repo_diff_setup (the_repository, &opts); opts.flags.recursive =1 ; opts.flags.rename_empty =0 ; opts.detect_rename =merge_detect_rename (o);
notes-merge.c +2 -2
@@ -126,7 +126,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,trace_printf ("\tdiff_tree_remote(base = %.7s, remote = %.7s)\n" ,oid_to_hex (base),oid_to_hex (remote)); -repo_diff_setup (&opt, the_repository); +repo_diff_setup (the_repository, &opt); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
@@ -189,7 +189,7 @@ static void diff_tree_local(struct notes_merge_options *o,trace_printf ("\tdiff_tree_local(len = %i, base = %.7s, local = %.7s)\n" , len,oid_to_hex (base),oid_to_hex (local)); -repo_diff_setup (&opt, the_repository); +repo_diff_setup (the_repository, &opt); opt.flags.recursive =1 ; opt.output_format =DIFF_FORMAT_NO_OUTPUT ;diff_setup_done (&opt);
pack-bitmap-write.c +1 -1
@@ -261,7 +261,7 @@ void bitmap_writer_build(struct packing_data *to_pack)if (writer.show_progress) writer.progress =start_progress ("Building bitmaps" , writer.selected_nr); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.tag_objects =1 ; revs.tree_objects =1 ; revs.blob_objects =1 ;
patch-ids.c +2 -2
@@ -56,10 +56,10 @@ static int patch_id_cmp(const void *cmpfn_data,return oidcmp (&a->patch_id, &b->patch_id); } -int init_patch_ids (struct patch_ids *ids,struct repository *repo) +int init_patch_ids (struct repository *r,struct patch_ids *ids) {memset (ids,0 ,sizeof (*ids)); -repo_diff_setup (&ids->diffopts, repo); +repo_diff_setup (r, &ids->diffopts); ids->diffopts.detect_rename =0 ; ids->diffopts.flags.recursive =1 ;diff_setup_done (&ids->diffopts);
patch-ids.h +1 -1
@@ -21,7 +21,7 @@ struct patch_ids {int commit_patch_id (struct commit *commit,struct diff_options *options,struct object_id *oid,int ); -int init_patch_ids (struct patch_ids *,struct repository *); +int init_patch_ids (struct repository *,struct patch_ids *);int free_patch_ids (struct patch_ids *);struct patch_id *add_commit_patch_id (struct commit *,struct patch_ids *);struct patch_id *has_commit_patch_id (struct commit *,struct patch_ids *);
read-cache.c +1 -1
@@ -2141,7 +2141,7 @@ int index_has_changes(struct index_state *istate,if (tree || !get_oid_tree ("HEAD" , &cmp)) {struct diff_options opt; -repo_diff_setup (&opt, the_repository); +repo_diff_setup (the_repository, &opt); opt.flags.exit_with_status =1 ;if (!sb) opt.flags.quick =1 ;
ref-filter.c +1 -1
@@ -2138,7 +2138,7 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata)struct ref_array *array = ref_cbdata->array;struct commit **to_clear =xcalloc (sizeof (struct commit *), array->nr); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );for (i =0 ; i < array->nr; i++) {struct ref_array_item *item = array->items[i];
remote.c +1 -1
@@ -1903,7 +1903,7 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs, oid_to_hex(&theirs->object.oid));argv_array_push (&argv,"--" ); -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL );setup_revisions (argv.argc, argv.argv, &revs,NULL );if (prepare_revision_walk (&revs))die ("revision walk setup failed" );
rerere.h +4 -2
@@ -23,9 +23,11 @@ struct rerere_id {int variant; }; -extern int setup_rerere (struct string_list *,int ); -extern int repo_rerere (struct repository *repo,int ); +int setup_rerere (struct string_list *,int ); +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS #define rerere (flags) repo_rerere(the_repository, flags) +#endif +int repo_rerere (struct repository *,int );/* * Given the conflict ID and the name of a "file" used for replaying * the recorded resolution (e.g. "preimage", "postimage"), return the
revision.c +6 -6
@@ -878,7 +878,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)return ; left_first = left_count < right_count; -init_patch_ids (&ids, revs->repo); +init_patch_ids (revs->repo, &ids); ids.diffopts.pathspec = revs->diffopt.pathspec;/* Compute patch-ids for one side */
@@ -1440,13 +1440,13 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,return 1 ; } -void repo_init_revisions (struct rev_info *revs, -struct repository *repo, -const char *prefix) +void repo_init_revisions (struct repository *r, +struct rev_info *revs, +const char *prefix) {memset (revs,0 ,sizeof (*revs)); - revs->repo = repo; + revs->repo = r; revs->abbrev =DEFAULT_ABBREV ; revs->ignore_merges =1 ; revs->simplify_history =1 ;
@@ -1472,7 +1472,7 @@ void repo_init_revisions(struct rev_info *revs,grep_init (&revs->grep_filter, revs->repo, prefix); revs->grep_filter.status_only =1 ; -repo_diff_setup (&revs->diffopt, revs->repo); +repo_diff_setup (revs->repo, &revs->diffopt);if (prefix && !revs->diffopt.prefix) { revs->diffopt.prefix = prefix; revs->diffopt.prefix_length =strlen (prefix);
revision.h +6 -4
@@ -255,10 +255,12 @@ struct setup_revision_opt {unsigned revarg_opt; }; -void repo_init_revisions (struct rev_info *revs, -struct repository *repo, -const char *prefix); -#define init_revisions (revs, prefix) repo_init_revisions(revs, the_repository, prefix) +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS +#define init_revisions (revs, prefix) repo_init_revisions(the_repository, revs, prefix) +#endif +void repo_init_revisions (struct repository *r, +struct rev_info *revs, +const char *prefix);int setup_revisions (int argc,const char **argv,struct rev_info *revs,struct setup_revision_opt *); void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
sequencer.c +4 -4
@@ -1143,7 +1143,7 @@ void print_commit_summary(const char *prefix, const struct object_id *oid,strbuf_release (&author_ident);strbuf_release (&committer_ident); -repo_init_revisions (&rev, the_repository, prefix); +repo_init_revisions (the_repository, &rev, prefix);setup_revisions (0 ,NULL , &rev,NULL ); rev.diff =1 ;
@@ -2566,7 +2566,7 @@ static int make_patch(struct commit *commit, struct replay_opts *opts)strbuf_addf (&buf,"%s/patch" ,get_dir (opts));memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -repo_init_revisions (&log_tree_opt, the_repository,NULL ); +repo_init_revisions (the_repository, &log_tree_opt,NULL ); log_tree_opt.abbrev =0 ; log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_PATCH ;
@@ -3477,7 +3477,7 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)struct object_id orig, head;memset (&log_tree_opt,0 ,sizeof (log_tree_opt)); -repo_init_revisions (&log_tree_opt, the_repository,NULL ); +repo_init_revisions (the_repository, &log_tree_opt,NULL ); log_tree_opt.diff =1 ; log_tree_opt.diffopt.output_format =DIFF_FORMAT_DIFFSTAT ;
@@ -4212,7 +4212,7 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,const char *insn = flags &TODO_LIST_ABBREVIATE_CMDS ?"p" :"pick" ;int rebase_merges = flags &TODO_LIST_REBASE_MERGES ; -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); revs.verbose_header =1 ;if (!rebase_merges) revs.max_parents =1 ;
shallow.c +1 -1
@@ -184,7 +184,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,is_repository_shallow (the_repository);/* make sure shallows are read */ -repo_init_revisions (&revs, the_repository,NULL ); +repo_init_revisions (the_repository, &revs,NULL ); save_commit_buffer =0 ;setup_revisions (ac, av, &revs,NULL );
submodule.c +3 -3
@@ -428,7 +428,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path, {struct commit_list *list; -repo_init_revisions (rev, the_repository,NULL ); +repo_init_revisions (the_repository, rev,NULL );setup_revisions (0 ,NULL , rev,NULL ); rev->left_right =1 ; rev->first_parent_only =1 ;
@@ -773,7 +773,7 @@ static void collect_changed_submodules(struct index_state *istate,struct rev_info rev;const struct commit *commit; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );setup_revisions (argv->argc, argv->argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
@@ -784,7 +784,7 @@ static void collect_changed_submodules(struct index_state *istate, data.changed = changed; data.commit_oid = &commit->object.oid; -repo_init_revisions (&diff_rev, the_repository,NULL ); +repo_init_revisions (the_repository, &diff_rev,NULL ); diff_rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; diff_rev.diffopt.format_callback = collect_changed_submodules_cb; diff_rev.diffopt.format_callback_data = &data;
t/helper/test-revision-walking.c +1 -1
@@ -32,7 +32,7 @@ static int run_revision_walk(void)int argc =ARRAY_SIZE (argv) -1 ;int got_revision =0 ; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );setup_revisions (argc, argv, &rev,NULL );if (prepare_revision_walk (&rev))die ("revision walk setup failed" );
tree-diff.c +1 -1
@@ -605,7 +605,7 @@ static void try_to_follow_renames(const struct object_id *old_oid, choice = q->queue[0 ]; q->nr =0 ; -repo_diff_setup (&diff_opts, opt->repo); +repo_diff_setup (opt->repo, &diff_opts); diff_opts.flags.recursive =1 ; diff_opts.flags.find_copies_harder =1 ; diff_opts.output_format =DIFF_FORMAT_NO_OUTPUT ;
wt-status.c +5 -5
@@ -582,7 +582,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) {struct rev_info rev; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );setup_revisions (0 ,NULL , &rev,NULL ); rev.diffopt.output_format |=DIFF_FORMAT_CALLBACK ; rev.diffopt.flags.dirty_submodules =1 ;
@@ -607,7 +607,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)struct rev_info rev;struct setup_revision_opt opt; -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL );memset (&opt,0 ,sizeof (opt)); opt.def = s->is_initial ?empty_tree_oid_hex () : s->reference;setup_revisions (0 ,NULL , &rev, &opt);
@@ -982,7 +982,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)int dirty_submodules;const char *c =color (WT_STATUS_HEADER , s); -repo_init_revisions (&rev, the_repository,NULL ); +repo_init_revisions (the_repository, &rev,NULL ); rev.diffopt.flags.allow_textconv =1 ; rev.diffopt.ita_invisible_in_index =1 ;
@@ -2314,7 +2314,7 @@ int has_unstaged_changes(int ignore_submodules)struct rev_info rev_info;int result; -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL );if (ignore_submodules) { rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.override_submodule_config =1 ;
@@ -2336,7 +2336,7 @@ int has_uncommitted_changes(int ignore_submodules)if (is_cache_unborn ())return 0 ; -repo_init_revisions (&rev_info, the_repository,NULL ); +repo_init_revisions (the_repository, &rev_info,NULL );if (ignore_submodules) rev_info.diffopt.flags.ignore_submodules =1 ; rev_info.diffopt.flags.quick =1 ;
Nguyễn Thái Ngọc Duy (23):
archive.c: remove implicit dependency the_repository read-cache.c: remove 'const' from index_has_changes() diff.c: reduce implicit dependency on the_index combine-diff.c: remove implicit dependency on the_index blame.c: rename "repo" argument to "r"
diff.c: remove the_index dependency in textconv() functions grep.c: remove implicit dependency on the_index diff.c: remove implicit dependency on the_index read-cache.c: remove implicit dependency on the_index diff-lib.c: remove implicit dependency on the_index ll-merge.c: remove implicit dependency on the_index merge-blobs.c: remove implicit dependency on the_index merge.c: remove implicit dependency on the_index patch-ids.c: remove implicit dependency on the_index sha1-file.c: remove implicit dependency on the_index rerere.c: remove implicit dependency on the_index userdiff.c: remove implicit dependency on the_index line-range.c: remove implicit dependency on the_index submodule.c: remove implicit dependency on the_index tree-diff.c: remove implicit dependency on the_index ws.c: remove implicit dependency on the_index revision.c: remove implicit dependency on the_index revision.c: reduce implicit dependency the_repository
Documentation/technical/api-diff.txt | 4 +- .../technical/api-revision-walking.txt | 2 +- apply.c | 19 +- archive-zip.c | 14 +- archive.c | 2 +- bisect.c | 4 +- blame.c | 63 +++-- builtin/add.c | 4 +- builtin/am.c | 10 +- builtin/blame.c | 4 +- builtin/cat-file.c | 6 +- builtin/checkout.c | 7 +- builtin/commit.c | 4 +- builtin/describe.c | 4 +- builtin/diff-files.c | 2 +- builtin/diff-index.c | 2 +- builtin/diff-tree.c | 2 +- builtin/diff.c | 4 +- builtin/difftool.c | 2 +- builtin/fast-export.c | 2 +- builtin/fmt-merge-msg.c | 2 +- builtin/grep.c | 7 +- builtin/hash-object.c | 2 +- builtin/log.c | 25 +- builtin/merge-tree.c | 2 +- builtin/merge.c | 16 +- builtin/pack-objects.c | 2 +- builtin/prune.c | 2 +- builtin/pull.c | 9 +- builtin/range-diff.c | 2 +- builtin/reflog.c | 2 +- builtin/replace.c | 2 +- builtin/rerere.c | 6 +- builtin/reset.c | 1 + builtin/rev-list.c | 2 +- builtin/revert.c | 2 +- builtin/shortlog.c | 2 +- builtin/submodule--helper.c | 2 +- builtin/update-index.c | 2 +- bundle.c | 4 +- cache.h | 14 +- combine-diff.c | 32 ++- diff-lib.c | 21 +- diff-no-index.c | 9 +- diff.c | 261 ++++++++++-------- diff.h | 22 +- diffcore-break.c | 12 +- diffcore-delta.c | 12 +- diffcore-pickaxe.c | 8 +- diffcore-rename.c | 35 ++- diffcore.h | 13 +- grep.c | 34 ++- grep.h | 10 +- http-push.c | 2 +- line-log.c | 25 +- line-range.c | 22 +- line-range.h | 6 +- list-objects.c | 8 +- ll-merge.c | 17 +- ll-merge.h | 5 +- merge-blobs.c | 16 +- merge-blobs.h | 7 +- merge-recursive.c | 7 +- merge.c | 20 +- notes-merge.c | 9 +- pack-bitmap-write.c | 2 +- patch-ids.c | 4 +- patch-ids.h | 3 +- read-cache.c | 33 ++- ref-filter.c | 2 +- remote.c | 2 +- rerere.c | 121 ++++---- rerere.h | 10 +- revision.c | 76 ++--- revision.h | 15 +- sequencer.c | 18 +- sha1-file.c | 50 ++-- shallow.c | 2 +- submodule.c | 34 ++- submodule.h | 9 +- t/helper/test-revision-walking.c | 2 +- transport.c | 9 +- tree-diff.c | 2 +- userdiff.c | 5 +- userdiff.h | 3 +- ws.c | 5 +- wt-status.c | 10 +- 87 files changed, 748 insertions(+), 551 deletions(-)
Signature · 1 line
2.19.0.rc0.337.ge906d732e7
PATCH v3 5/23 blame.c: rename "repo" argument to "r"
The current naming convention for 'struct repository *' is 'r' for temporary variables or arguments. I did not notice this. Since we're updating blame.c again in the next patch, let's fix this.
--- blame.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-)
blame.c +18 -18
@@ -90,7 +90,7 @@ static struct blame_origin *get_origin(struct commit *commit, const char *path) -static void verify_working_tree_path (struct repository *repo, +static void verify_working_tree_path (struct repository *r,struct commit *work_tree,const char *path) {struct commit_list *parents;
@@ -102,15 +102,15 @@ static void verify_working_tree_path(struct repository *repo,unsigned mode;if (!get_tree_entry (commit_oid, path, &blob_oid, &mode) && -oid_object_info (repo, &blob_oid,NULL ) ==OBJ_BLOB ) +oid_object_info (r, &blob_oid,NULL ) ==OBJ_BLOB )return ; } - pos =index_name_pos (repo->index, path,strlen (path)); + pos =index_name_pos (r->index, path,strlen (path));if (pos >=0 ) ;/* path is in the index */ -else if (-1 - pos < repo->index->cache_nr && - !strcmp (repo->index->cache[-1 - pos]->name, path)) +else if (-1 - pos < r->index->cache_nr && + !strcmp (r->index->cache[-1 - pos]->name, path)) ;/* path is in the index, unmerged */ else die ("no such path '%s' in HEAD" , path);
@@ -166,7 +166,7 @@ static void set_commit_buffer_from_strbuf(struct commit *c, struct strbuf *sb)* Prepare a dummy commit that represents the work tree (or staged) item. * Note that annotating work tree item never works in the reverse. */ -static struct commit *fake_working_tree_commit (struct repository *repo, +static struct commit *fake_working_tree_commit (struct repository *r,struct diff_options *opt,const char *path,const char *contents_from)
@@ -183,7 +183,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo,unsigned mode;struct strbuf msg =STRBUF_INIT ; -read_index (repo->index); +read_index (r->index);time (&now); commit =alloc_commit_node (the_repository); commit->object.parsed =1 ;
@@ -195,7 +195,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo, parent_tail =append_parent (parent_tail, &head_oid);append_merge_parents (parent_tail); -verify_working_tree_path (repo, commit, path); +verify_working_tree_path (r, commit, path); origin =make_origin (commit, path);
@@ -253,7 +253,7 @@ static struct commit *fake_working_tree_commit(struct repository *repo,if (strbuf_read (&buf,0 ,0 ) <0 )die_errno ("failed to read from stdin" ); } -convert_to_git (repo->index, path, buf.buf, buf.len, &buf,0 ); +convert_to_git (r->index, path, buf.buf, buf.len, &buf,0 ); origin->file.ptr = buf.buf; origin->file.size = buf.len;pretend_object_file (buf.buf, buf.len,OBJ_BLOB , &origin->blob_oid);
@@ -264,28 +264,28 @@ static struct commit *fake_working_tree_commit(struct repository *repo,* bits; we are not going to write this index out -- we just * want to run "diff-index --cached". */ -discard_index (repo->index); -read_index (repo->index); +discard_index (r->index); +read_index (r->index); len =strlen (path);if (!mode) { -int pos =index_name_pos (repo->index, path, len); +int pos =index_name_pos (r->index, path, len);if (0 <= pos) - mode = repo->index->cache[pos]->ce_mode; + mode = r->index->cache[pos]->ce_mode;else /* Let's not bother reading from HEAD tree */ mode =S_IFREG |0644 ; } - ce =make_empty_cache_entry (repo->index, len); + ce =make_empty_cache_entry (r->index, len);oidcpy (&ce->oid, &origin->blob_oid);memcpy (ce->name, path, len); ce->ce_flags =create_ce_flags (0 ); ce->ce_namelen = len; ce->ce_mode =create_ce_mode (mode); -add_index_entry (repo->index, ce, +add_index_entry (r->index, ce,ADD_CACHE_OK_TO_ADD |ADD_CACHE_OK_TO_REPLACE ); -cache_tree_invalidate_path (repo->index, path); +cache_tree_invalidate_path (r->index, path);return commit; }
@@ -520,14 +520,14 @@ static void queue_blames(struct blame_scoreboard *sb, struct blame_origin *porig* * This also fills origin->mode for corresponding tree path. */ -static int fill_blob_sha1_and_mode (struct repository *repo, +static int fill_blob_sha1_and_mode (struct repository *r,struct blame_origin *origin) {if (!is_null_oid (&origin->blob_oid))return 0 ;if (get_tree_entry (&origin->commit->object.oid, origin->path, &origin->blob_oid, &origin->mode)) goto error_out; -if (oid_object_info (repo, &origin->blob_oid,NULL ) !=OBJ_BLOB ) +if (oid_object_info (r, &origin->blob_oid,NULL ) !=OBJ_BLOB ) goto error_out;return 0 ; error_out:
Signature · 1 line
2.19.0.rc0.337.ge906d732e7