diff options
| author | 2026-03-26 09:20:51 +0000 | |
|---|---|---|
| committer | 2026-03-26 09:20:51 +0000 | |
| commit | 32c34501f5e7cfb6573824a82c8a5fa1be317ec8 (patch) | |
| tree | 45963d48bf53d10dd148aa076415d95ee32f7219 /commitquery | |
| parent | *: Reorder imports (diff) | |
| signature | No signature | |
commitquery: Some file reorganizations v0.1.116
Diffstat (limited to 'commitquery')
| -rw-r--r-- | commitquery/marks.go | 18 | ||||
| -rw-r--r-- | commitquery/merge_bases.go | 82 | ||||
| -rw-r--r-- | commitquery/paint.go | 55 | ||||
| -rw-r--r-- | commitquery/priority_queue.go | 11 |
4 files changed, 84 insertions, 82 deletions
diff --git a/commitquery/marks.go b/commitquery/marks.go index de008789..401acb15 100644 --- a/commitquery/marks.go +++ b/commitquery/marks.go @@ -69,3 +69,21 @@ func (query *Query) trackTouched(idx nodeIndex) { query.nodes[idx].touchedPhase = query.markPhase query.touched = append(query.touched, idx) } + +func (query *Query) collectMarkedResults() []nodeIndex { + out := make([]nodeIndex, 0, 4) + + for _, idx := range query.touched { + if !query.hasAnyMarks(idx, markResult) { + continue + } + + if query.hasAnyMarks(idx, markStale) { + continue + } + + out = append(out, idx) + } + + return out +} diff --git a/commitquery/merge_bases.go b/commitquery/merge_bases.go index b7021814..0e410709 100644 --- a/commitquery/merge_bases.go +++ b/commitquery/merge_bases.go @@ -87,85 +87,3 @@ func (query *Query) mergeBases(left, right nodeIndex) ([]nodeIndex, error) { return reduced, nil } - -func (query *Query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGeneration uint64) error { - query.beginMarkPhase() - - query.setMarks(left, markLeft) - - if len(rights) == 0 { - query.setMarks(left, markResult) - - return nil - } - - queue := newPriorityQueue(query) - queue.PushNode(left) - - for _, right := range rights { - query.setMarks(right, markRight) - queue.PushNode(right) - } - - lastGeneration := generationInfinity - - for query.queueHasNonStale(queue) { - idx := queue.PopNode() - - generation := query.effectiveGeneration(idx) - if generation > lastGeneration { - return errBadGenerationOrder - } - - lastGeneration = generation - if generation < minGeneration { - break - } - - flags := query.marks(idx) & (markLeft | markRight | markStale) - if flags == (markLeft | markRight) { - query.setMarks(idx, markResult) - - flags |= markStale - } - - for _, parent := range query.parents(idx) { - if query.hasAllMarks(parent, flags) { - continue - } - - query.setMarks(parent, flags) - queue.PushNode(parent) - } - } - - return nil -} - -func (query *Query) queueHasNonStale(queue *priorityQueue) bool { - for _, idx := range queue.items { - if !query.hasAnyMarks(idx, markStale) { - return true - } - } - - return false -} - -func (query *Query) collectMarkedResults() []nodeIndex { - out := make([]nodeIndex, 0, 4) - - for _, idx := range query.touched { - if !query.hasAnyMarks(idx, markResult) { - continue - } - - if query.hasAnyMarks(idx, markStale) { - continue - } - - out = append(out, idx) - } - - return out -} diff --git a/commitquery/paint.go b/commitquery/paint.go new file mode 100644 index 00000000..90b38b10 --- /dev/null +++ b/commitquery/paint.go @@ -0,0 +1,55 @@ +package commitquery + +func (query *Query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGeneration uint64) error { + query.beginMarkPhase() + + query.setMarks(left, markLeft) + + if len(rights) == 0 { + query.setMarks(left, markResult) + + return nil + } + + queue := newPriorityQueue(query) + queue.PushNode(left) + + for _, right := range rights { + query.setMarks(right, markRight) + queue.PushNode(right) + } + + lastGeneration := generationInfinity + + for query.queueHasNonStale(queue) { + idx := queue.PopNode() + + generation := query.effectiveGeneration(idx) + if generation > lastGeneration { + return errBadGenerationOrder + } + + lastGeneration = generation + if generation < minGeneration { + break + } + + flags := query.marks(idx) & (markLeft | markRight | markStale) + if flags == (markLeft | markRight) { + query.setMarks(idx, markResult) + + flags |= markStale + } + + for _, parent := range query.parents(idx) { + if query.hasAllMarks(parent, flags) { + continue + } + + query.setMarks(parent, flags) + queue.PushNode(parent) + } + } + + return nil +} diff --git a/commitquery/priority_queue.go b/commitquery/priority_queue.go index 0ca57f7d..0d948c64 100644 --- a/commitquery/priority_queue.go +++ b/commitquery/priority_queue.go @@ -66,3 +66,14 @@ func (queue *priorityQueue) PopNode() nodeIndex { return idx } + +func (query *Query) queueHasNonStale(queue *priorityQueue) bool { + // TODO + for _, idx := range queue.items { + if !query.hasAnyMarks(idx, markStale) { + return true + } + } + + return false +} |
