Skip to content

Commit 21a11e7

Browse files
committed
do what should've been done - put combineRewrittenLists above reducePath
Signed-off-by: Kipras Melnikovas <kipras@kipras.org>
1 parent 587a85a commit 21a11e7

File tree

1 file changed

+50
-49
lines changed

1 file changed

+50
-49
lines changed

git-reconcile-rewritten-list/combineRewrittenLists.ts

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,55 +8,6 @@ import { execSync } from "child_process"
88

99
export type StringFromToMap = { [key: string]: string }
1010

11-
/**
12-
* mutates `obj` and returns it too
13-
*/
14-
export function reducePath(obj: StringFromToMap): StringFromToMap {
15-
let prevSize : number = -Infinity
16-
let entries : [string, string][]
17-
let keysMarkedForDeletion: Set<string> = new Set<string>()
18-
19-
// as long as it continues to improve
20-
while (keysMarkedForDeletion.size > prevSize) {
21-
prevSize = keysMarkedForDeletion.size
22-
entries = Object.entries(obj)
23-
24-
for (const [key, value] of entries) {
25-
const keyIsValue = key === value
26-
if (keyIsValue) {
27-
// would delete itself, thus skip
28-
continue
29-
}
30-
31-
// const gotReducedAlready = !(key in obj)
32-
// if (gotReducedAlready) {
33-
// continue
34-
// }
35-
36-
const valueIsAnotherKey = value in obj
37-
if (valueIsAnotherKey) {
38-
console.log("reducing. old:", key, "->", value, ";", value, "->", obj[value], "new:", key, "->", obj[value])
39-
// reduce
40-
obj[key] = obj[value]
41-
keysMarkedForDeletion.add(value)
42-
}
43-
}
44-
}
45-
46-
for (const key of keysMarkedForDeletion.keys()) {
47-
delete obj[key]
48-
}
49-
50-
/**
51-
* we mutate the object, so NOT returning it makes it clear
52-
* that this function causes a side-effect (mutates the original object).
53-
*
54-
* but, in multiple cases when mapping, we forget to return the object,
55-
* so instead we'll do it here:
56-
*/
57-
return obj
58-
}
59-
6011
export type RewrittenListBlockBase = {
6112
mapping: StringFromToMap
6213
}
@@ -87,6 +38,7 @@ export type CombineRewrittenListsRet = {
8738
*/
8839
combinedRewrittenList: string,
8940
}
41+
9042
export function combineRewrittenLists(rewrittenListFileContent: string): CombineRewrittenListsRet {
9143
/**
9244
* $1 (amend/rebase)
@@ -330,6 +282,55 @@ export function combineRewrittenLists(rewrittenListFileContent: string): Combine
330282
}
331283
}
332284

285+
/**
286+
* mutates `obj` and returns it too
287+
*/
288+
export function reducePath(obj: StringFromToMap): StringFromToMap {
289+
let prevSize : number = -Infinity
290+
let entries : [string, string][]
291+
let keysMarkedForDeletion: Set<string> = new Set<string>()
292+
293+
// as long as it continues to improve
294+
while (keysMarkedForDeletion.size > prevSize) {
295+
prevSize = keysMarkedForDeletion.size
296+
entries = Object.entries(obj)
297+
298+
for (const [key, value] of entries) {
299+
const keyIsValue = key === value
300+
if (keyIsValue) {
301+
// would delete itself, thus skip
302+
continue
303+
}
304+
305+
// const gotReducedAlready = !(key in obj)
306+
// if (gotReducedAlready) {
307+
// continue
308+
// }
309+
310+
const valueIsAnotherKey = value in obj
311+
if (valueIsAnotherKey) {
312+
console.log("reducing. old:", key, "->", value, ";", value, "->", obj[value], "new:", key, "->", obj[value])
313+
// reduce
314+
obj[key] = obj[value]
315+
keysMarkedForDeletion.add(value)
316+
}
317+
}
318+
}
319+
320+
for (const key of keysMarkedForDeletion.keys()) {
321+
delete obj[key]
322+
}
323+
324+
/**
325+
* we mutate the object, so NOT returning it makes it clear
326+
* that this function causes a side-effect (mutates the original object).
327+
*
328+
* but, in multiple cases when mapping, we forget to return the object,
329+
* so instead we'll do it here:
330+
*/
331+
return obj
332+
}
333+
333334
if (!module.parent) {
334335
const prefix = "" // "test/.tmp-described.off/"
335336
const rewrittenListFile = fs.readFileSync(prefix + ".git/stacked-rebase/rewritten-list", { encoding: "utf-8" })

0 commit comments

Comments
 (0)