@@ -8,55 +8,6 @@ import { execSync } from "child_process"
88
99export 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-
6011export type RewrittenListBlockBase = {
6112 mapping : StringFromToMap
6213}
@@ -87,6 +38,7 @@ export type CombineRewrittenListsRet = {
8738 */
8839 combinedRewrittenList : string ,
8940}
41+
9042export 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+
333334if ( ! 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