Fast implementation of Git in pure Go codeberg.org/lindenii/furgit
git go
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

commitquery: Some file reorganizations

Runxi Yu 32c34501 51f9d490

+84 -82
+18
commitquery/marks.go
··· 69 69 query.nodes[idx].touchedPhase = query.markPhase 70 70 query.touched = append(query.touched, idx) 71 71 } 72 + 73 + func (query *Query) collectMarkedResults() []nodeIndex { 74 + out := make([]nodeIndex, 0, 4) 75 + 76 + for _, idx := range query.touched { 77 + if !query.hasAnyMarks(idx, markResult) { 78 + continue 79 + } 80 + 81 + if query.hasAnyMarks(idx, markStale) { 82 + continue 83 + } 84 + 85 + out = append(out, idx) 86 + } 87 + 88 + return out 89 + }
-82
commitquery/merge_bases.go
··· 87 87 88 88 return reduced, nil 89 89 } 90 - 91 - func (query *Query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGeneration uint64) error { 92 - query.beginMarkPhase() 93 - 94 - query.setMarks(left, markLeft) 95 - 96 - if len(rights) == 0 { 97 - query.setMarks(left, markResult) 98 - 99 - return nil 100 - } 101 - 102 - queue := newPriorityQueue(query) 103 - queue.PushNode(left) 104 - 105 - for _, right := range rights { 106 - query.setMarks(right, markRight) 107 - queue.PushNode(right) 108 - } 109 - 110 - lastGeneration := generationInfinity 111 - 112 - for query.queueHasNonStale(queue) { 113 - idx := queue.PopNode() 114 - 115 - generation := query.effectiveGeneration(idx) 116 - if generation > lastGeneration { 117 - return errBadGenerationOrder 118 - } 119 - 120 - lastGeneration = generation 121 - if generation < minGeneration { 122 - break 123 - } 124 - 125 - flags := query.marks(idx) & (markLeft | markRight | markStale) 126 - if flags == (markLeft | markRight) { 127 - query.setMarks(idx, markResult) 128 - 129 - flags |= markStale 130 - } 131 - 132 - for _, parent := range query.parents(idx) { 133 - if query.hasAllMarks(parent, flags) { 134 - continue 135 - } 136 - 137 - query.setMarks(parent, flags) 138 - queue.PushNode(parent) 139 - } 140 - } 141 - 142 - return nil 143 - } 144 - 145 - func (query *Query) queueHasNonStale(queue *priorityQueue) bool { 146 - for _, idx := range queue.items { 147 - if !query.hasAnyMarks(idx, markStale) { 148 - return true 149 - } 150 - } 151 - 152 - return false 153 - } 154 - 155 - func (query *Query) collectMarkedResults() []nodeIndex { 156 - out := make([]nodeIndex, 0, 4) 157 - 158 - for _, idx := range query.touched { 159 - if !query.hasAnyMarks(idx, markResult) { 160 - continue 161 - } 162 - 163 - if query.hasAnyMarks(idx, markStale) { 164 - continue 165 - } 166 - 167 - out = append(out, idx) 168 - } 169 - 170 - return out 171 - }
+55
commitquery/paint.go
··· 1 + package commitquery 2 + 3 + func (query *Query) paintDownToCommon(left nodeIndex, rights []nodeIndex, minGeneration uint64) error { 4 + query.beginMarkPhase() 5 + 6 + query.setMarks(left, markLeft) 7 + 8 + if len(rights) == 0 { 9 + query.setMarks(left, markResult) 10 + 11 + return nil 12 + } 13 + 14 + queue := newPriorityQueue(query) 15 + queue.PushNode(left) 16 + 17 + for _, right := range rights { 18 + query.setMarks(right, markRight) 19 + queue.PushNode(right) 20 + } 21 + 22 + lastGeneration := generationInfinity 23 + 24 + for query.queueHasNonStale(queue) { 25 + idx := queue.PopNode() 26 + 27 + generation := query.effectiveGeneration(idx) 28 + if generation > lastGeneration { 29 + return errBadGenerationOrder 30 + } 31 + 32 + lastGeneration = generation 33 + if generation < minGeneration { 34 + break 35 + } 36 + 37 + flags := query.marks(idx) & (markLeft | markRight | markStale) 38 + if flags == (markLeft | markRight) { 39 + query.setMarks(idx, markResult) 40 + 41 + flags |= markStale 42 + } 43 + 44 + for _, parent := range query.parents(idx) { 45 + if query.hasAllMarks(parent, flags) { 46 + continue 47 + } 48 + 49 + query.setMarks(parent, flags) 50 + queue.PushNode(parent) 51 + } 52 + } 53 + 54 + return nil 55 + }
+11
commitquery/priority_queue.go
··· 66 66 67 67 return idx 68 68 } 69 + 70 + func (query *Query) queueHasNonStale(queue *priorityQueue) bool { 71 + // TODO 72 + for _, idx := range queue.items { 73 + if !query.hasAnyMarks(idx, markStale) { 74 + return true 75 + } 76 + } 77 + 78 + return false 79 + }