mirror of
https://github.com/git/git
synced 2024-07-05 00:58:49 +00:00
merge-ort: add a special minimal index just for renormalization
renormalize_buffer() requires an index_state, which is something that merge-ort does not operate with. However, all the renormalization code needs is an index with a .gitattributes file...plus a little bit of setup. Create such an index, along with the deallocation and attr_direction handling. A subsequent commit will add a function to finish the initialization of this index. Signed-off-by: Elijah Newren <newren@gmail.com> Reviewed-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
72b3091040
commit
ea305a68fd
20
merge-ort.c
20
merge-ort.c
|
@ -18,6 +18,7 @@
|
||||||
#include "merge-ort.h"
|
#include "merge-ort.h"
|
||||||
|
|
||||||
#include "alloc.h"
|
#include "alloc.h"
|
||||||
|
#include "attr.h"
|
||||||
#include "blob.h"
|
#include "blob.h"
|
||||||
#include "cache-tree.h"
|
#include "cache-tree.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
|
@ -220,6 +221,16 @@ struct merge_options_internal {
|
||||||
*/
|
*/
|
||||||
struct rename_info renames;
|
struct rename_info renames;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* attr_index: hacky minimal index used for renormalization
|
||||||
|
*
|
||||||
|
* renormalization code _requires_ an index, though it only needs to
|
||||||
|
* find a .gitattributes file within the index. So, when
|
||||||
|
* renormalization is important, we create a special index with just
|
||||||
|
* that one file.
|
||||||
|
*/
|
||||||
|
struct index_state attr_index;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* current_dir_name, toplevel_dir: temporary vars
|
* current_dir_name, toplevel_dir: temporary vars
|
||||||
*
|
*
|
||||||
|
@ -399,6 +410,9 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
|
||||||
string_list_clear(&opti->paths_to_free, 0);
|
string_list_clear(&opti->paths_to_free, 0);
|
||||||
opti->paths_to_free.strdup_strings = 0;
|
opti->paths_to_free.strdup_strings = 0;
|
||||||
|
|
||||||
|
if (opti->attr_index.cache_nr)
|
||||||
|
discard_index(&opti->attr_index);
|
||||||
|
|
||||||
/* Free memory used by various renames maps */
|
/* Free memory used by various renames maps */
|
||||||
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
|
for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
|
||||||
strintmap_func(&renames->dirs_removed[i]);
|
strintmap_func(&renames->dirs_removed[i]);
|
||||||
|
@ -3407,6 +3421,8 @@ void merge_finalize(struct merge_options *opt,
|
||||||
{
|
{
|
||||||
struct merge_options_internal *opti = result->priv;
|
struct merge_options_internal *opti = result->priv;
|
||||||
|
|
||||||
|
if (opt->renormalize)
|
||||||
|
git_attr_set_direction(GIT_ATTR_CHECKIN);
|
||||||
assert(opt->priv == NULL);
|
assert(opt->priv == NULL);
|
||||||
|
|
||||||
clear_or_reinit_internal_opts(opti, 0);
|
clear_or_reinit_internal_opts(opti, 0);
|
||||||
|
@ -3482,6 +3498,10 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
|
||||||
/* Default to histogram diff. Actually, just hardcode it...for now. */
|
/* Default to histogram diff. Actually, just hardcode it...for now. */
|
||||||
opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
|
opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
|
||||||
|
|
||||||
|
/* Handle attr direction stuff for renormalization */
|
||||||
|
if (opt->renormalize)
|
||||||
|
git_attr_set_direction(GIT_ATTR_CHECKOUT);
|
||||||
|
|
||||||
/* Initialization of opt->priv, our internal merge data */
|
/* Initialization of opt->priv, our internal merge data */
|
||||||
trace2_region_enter("merge", "allocate/init", opt->repo);
|
trace2_region_enter("merge", "allocate/init", opt->repo);
|
||||||
if (opt->priv) {
|
if (opt->priv) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user