git/diffcore-rotate.c
Patrick Steinhardt 41f43b8243 global: mark code units that generate warnings with -Wsign-compare
Mark code units that generate warnings with `-Wsign-compare`. This
allows for a structured approach to get rid of all such warnings over
time in a way that can be easily measured.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-06 20:20:02 +09:00

50 lines
1.1 KiB
C

/*
* Copyright (C) 2021, Google LLC.
* Based on diffcore-order.c, which is Copyright (C) 2005, Junio C Hamano
*/
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "gettext.h"
#include "diff.h"
#include "diffcore.h"
void diffcore_rotate(struct diff_options *opt)
{
struct diff_queue_struct *q = &diff_queued_diff;
struct diff_queue_struct outq = DIFF_QUEUE_INIT;
int rotate_to, i;
if (!q->nr)
return;
for (i = 0; i < q->nr; i++) {
int cmp = strcmp(opt->rotate_to, q->queue[i]->two->path);
if (!cmp)
break; /* exact match */
if (!opt->rotate_to_strict && cmp < 0)
break; /* q->queue[i] is now past the target pathname */
}
if (q->nr <= i) {
/* we did not find the specified path */
if (opt->rotate_to_strict)
die(_("No such path '%s' in the diff"), opt->rotate_to);
return;
}
rotate_to = i;
for (i = rotate_to; i < q->nr; i++)
diff_q(&outq, q->queue[i]);
for (i = 0; i < rotate_to; i++) {
if (opt->skip_instead_of_rotate)
diff_free_filepair(q->queue[i]);
else
diff_q(&outq, q->queue[i]);
}
free(q->queue);
*q = outq;
}