Coverage Report

Created: 2025-12-31 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/git/diffcore-rotate.c
Line
Count
Source
1
/*
2
 * Copyright (C) 2021, Google LLC.
3
 * Based on diffcore-order.c, which is Copyright (C) 2005, Junio C Hamano
4
 */
5
6
#include "git-compat-util.h"
7
#include "gettext.h"
8
#include "diff.h"
9
#include "diffcore.h"
10
11
void diffcore_rotate(struct diff_options *opt)
12
0
{
13
0
  struct diff_queue_struct *q = &diff_queued_diff;
14
0
  struct diff_queue_struct outq = DIFF_QUEUE_INIT;
15
0
  int rotate_to, i;
16
17
0
  if (!q->nr)
18
0
    return;
19
20
0
  for (i = 0; i < q->nr; i++) {
21
0
    int cmp = strcmp(opt->rotate_to, q->queue[i]->two->path);
22
0
    if (!cmp)
23
0
      break; /* exact match */
24
0
    if (!opt->rotate_to_strict && cmp < 0)
25
0
      break; /* q->queue[i] is now past the target pathname */
26
0
  }
27
28
0
  if (q->nr <= i) {
29
    /* we did not find the specified path */
30
0
    if (opt->rotate_to_strict)
31
0
      die(_("No such path '%s' in the diff"), opt->rotate_to);
32
0
    return;
33
0
  }
34
35
0
  rotate_to = i;
36
37
0
  for (i = rotate_to; i < q->nr; i++)
38
0
    diff_q(&outq, q->queue[i]);
39
0
  for (i = 0; i < rotate_to; i++) {
40
0
    if (opt->skip_instead_of_rotate)
41
0
      diff_free_filepair(q->queue[i]);
42
0
    else
43
0
      diff_q(&outq, q->queue[i]);
44
0
  }
45
0
  free(q->queue);
46
0
  *q = outq;
47
0
}