diff options
| author | Junio C Hamano <gitster@pobox.com> | 2023-04-06 13:38:21 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2023-04-06 13:38:21 -0700 |
| commit | 7727da99dfab82148c5b77eaf334b305fb835956 (patch) | |
| tree | 99ea4038ce40c89d09592a94a715b642160216a8 /commit-reach.h | |
| parent | ae73b2c8f1da39c39335ee76a0f95857712c22a7 (diff) | |
| parent | cbfe360b140fe92d9c4a763bf630c3b8ba431522 (diff) | |
| download | git-7727da99dfab82148c5b77eaf334b305fb835956.tar.gz | |
Merge branch 'ds/ahead-behind'
"git for-each-ref" learns '%(ahead-behind:<base>)' that computes the
distances from a single reference point in the history with bunch
of commits in bulk.
* ds/ahead-behind:
commit-reach: add tips_reachable_from_bases()
for-each-ref: add ahead-behind format atom
commit-reach: implement ahead_behind() logic
commit-graph: introduce `ensure_generations_valid()`
commit-graph: return generation from memory
commit-graph: simplify compute_generation_numbers()
commit-graph: refactor compute_topological_levels()
for-each-ref: explicitly test no matches
for-each-ref: add --stdin option
Diffstat (limited to 'commit-reach.h')
| -rw-r--r-- | commit-reach.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/commit-reach.h b/commit-reach.h index 148b56fea5..d6321ae700 100644 --- a/commit-reach.h +++ b/commit-reach.h @@ -104,4 +104,44 @@ struct commit_list *get_reachable_subset(struct commit **from, int nr_from, struct commit **to, int nr_to, unsigned int reachable_flag); +struct ahead_behind_count { + /** + * As input, the *_index members indicate which positions in + * the 'tips' array correspond to the tip and base of this + * comparison. + */ + size_t tip_index; + size_t base_index; + + /** + * These values store the computed counts for each side of the + * symmetric difference: + * + * 'ahead' stores the number of commits reachable from the tip + * and not reachable from the base. + * + * 'behind' stores the number of commits reachable from the base + * and not reachable from the tip. + */ + unsigned int ahead; + unsigned int behind; +}; + +/* + * Given an array of commits and an array of ahead_behind_count pairs, + * compute the ahead/behind counts for each pair. + */ +void ahead_behind(struct repository *r, + struct commit **commits, size_t commits_nr, + struct ahead_behind_count *counts, size_t counts_nr); + +/* + * For all tip commits, add 'mark' to their flags if and only if they + * are reachable from one of the commits in 'bases'. + */ +void tips_reachable_from_bases(struct repository *r, + struct commit_list *bases, + struct commit **tips, size_t tips_nr, + int mark); + #endif |
