merge-ort: provide a merge_get_conflicted_files() helper function
After a merge, this function allows the user to extract the same information that would be printed by `ls-files -u`, which means files with their mode, oid, and stage. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
a1a7811975
commit
fae26ce79c
31
merge-ort.c
31
merge-ort.c
|
@ -4296,6 +4296,37 @@ void merge_display_update_messages(struct merge_options *opt,
|
|||
trace2_region_leave("merge", "display messages", opt->repo);
|
||||
}
|
||||
|
||||
void merge_get_conflicted_files(struct merge_result *result,
|
||||
struct string_list *conflicted_files)
|
||||
{
|
||||
struct hashmap_iter iter;
|
||||
struct strmap_entry *e;
|
||||
struct merge_options_internal *opti = result->priv;
|
||||
|
||||
strmap_for_each_entry(&opti->conflicted, &iter, e) {
|
||||
const char *path = e->key;
|
||||
struct conflict_info *ci = e->value;
|
||||
int i;
|
||||
|
||||
VERIFY_CI(ci);
|
||||
|
||||
for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
|
||||
struct stage_info *si;
|
||||
|
||||
if (!(ci->filemask & (1ul << i)))
|
||||
continue;
|
||||
|
||||
si = xmalloc(sizeof(*si));
|
||||
si->stage = i+1;
|
||||
si->mode = ci->stages[i].mode;
|
||||
oidcpy(&si->oid, &ci->stages[i].oid);
|
||||
string_list_append(conflicted_files, path)->util = si;
|
||||
}
|
||||
}
|
||||
/* string_list_sort() uses a stable sort, so we're good */
|
||||
string_list_sort(conflicted_files);
|
||||
}
|
||||
|
||||
void merge_switch_to_result(struct merge_options *opt,
|
||||
struct tree *head,
|
||||
struct merge_result *result,
|
||||
|
|
21
merge-ort.h
21
merge-ort.h
|
@ -2,6 +2,7 @@
|
|||
#define MERGE_ORT_H
|
||||
|
||||
#include "merge-recursive.h"
|
||||
#include "hash.h"
|
||||
|
||||
struct commit;
|
||||
struct tree;
|
||||
|
@ -88,6 +89,26 @@ void merge_switch_to_result(struct merge_options *opt,
|
|||
void merge_display_update_messages(struct merge_options *opt,
|
||||
struct merge_result *result);
|
||||
|
||||
struct stage_info {
|
||||
struct object_id oid;
|
||||
int mode;
|
||||
int stage;
|
||||
};
|
||||
|
||||
/*
|
||||
* Provide a list of path -> {struct stage_info*} mappings for
|
||||
* all conflicted files. Note that each path could appear up to three
|
||||
* times in the list, corresponding to 3 different stage entries. In short,
|
||||
* this basically provides the info that would be printed by `ls-files -u`.
|
||||
*
|
||||
* result should have been populated by a call to
|
||||
* one of the merge_incore_[non]recursive() functions.
|
||||
*
|
||||
* conflicted_files should be empty before calling this function.
|
||||
*/
|
||||
void merge_get_conflicted_files(struct merge_result *result,
|
||||
struct string_list *conflicted_files);
|
||||
|
||||
/* Do needed cleanup when not calling merge_switch_to_result() */
|
||||
void merge_finalize(struct merge_options *opt,
|
||||
struct merge_result *result);
|
||||
|
|
Loading…
Reference in New Issue