Skip to content

Commit 0eeaaf8

Browse files
author
Al Manning
committed
progress on 2-pass link updates
1 parent 5b23e50 commit 0eeaaf8

File tree

3 files changed

+88
-16
lines changed

3 files changed

+88
-16
lines changed

src/publish/confluence/confluence-helper.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,17 @@ export const updateLinks = (
540540
spaceChanges: ConfluenceSpaceChange[],
541541
server: string,
542542
parent: ConfluenceParent
543-
): ConfluenceSpaceChange[] => {
543+
): {
544+
pass1Changes: ConfluenceSpaceChange[];
545+
pass2Changes: ConfluenceSpaceChange[];
546+
} => {
544547
const root = `${server}`;
545548
const url = `${ensureTrailingSlash(server)}wiki/spaces/${
546549
parent.space
547550
}/pages/`;
548551

552+
let collectedPass2Changes: ConfluenceSpaceChange[] = [];
553+
549554
const changeMapper = (
550555
changeToProcess: ConfluenceSpaceChange
551556
): ConfluenceSpaceChange => {
@@ -598,6 +603,9 @@ export const updateLinks = (
598603
updated = updated.replace(linkFullFileName, pagePath);
599604
} else {
600605
console.warn(`Link not found for ${siteFilePath}`);
606+
if (!collectedPass2Changes.includes(changeToProcess)) {
607+
collectedPass2Changes = [...collectedPass2Changes, changeToProcess];
608+
}
601609
}
602610

603611
return updated;
@@ -621,7 +629,7 @@ export const updateLinks = (
621629
const updatedChanges: ConfluenceSpaceChange[] =
622630
spaceChanges.map(changeMapper);
623631

624-
return updatedChanges;
632+
return { pass1Changes: updatedChanges, pass2Changes: collectedPass2Changes };
625633
};
626634

627635
export const updateImagePaths = (body: ContentBody): ContentBody => {

src/publish/confluence/confluence.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ async function publish(
571571
parent: parentId,
572572
};
573573

574-
const existingSite: SitePage[] = await fetchExistingSite(parentId);
574+
let existingSite: SitePage[] = await fetchExistingSite(parentId);
575575

576576
const publishFiles: PublishFiles = await renderSite(render);
577577
const metadataByInput: Record<string, InputMetadata> =
@@ -620,7 +620,8 @@ async function publish(
620620

621621
trace("fileMetadata", fileMetadata);
622622

623-
const metadataByFilename = buildFileToMetaTable(existingSite);
623+
let metadataByFilename = buildFileToMetaTable(existingSite);
624+
console.log("metadataByFilename", metadataByFilename);
624625

625626
trace("metadataByFilename", metadataByFilename);
626627

@@ -631,13 +632,15 @@ async function publish(
631632
existingSite
632633
);
633634

634-
changeList = updateLinks(
635+
const { pass1Changes, pass2Changes } = updateLinks(
635636
metadataByFilename,
636637
changeList,
637638
server,
638639
siteParent
639640
);
640641

642+
changeList = pass1Changes;
643+
641644
trace("changelist", changeList);
642645

643646
let pathsToId: Record<string, string> = {}; // build from existing site
@@ -704,8 +707,27 @@ async function publish(
704707
await doChange(currentChange);
705708
}
706709

707-
const parentPage: Content = await client.getContent(parentId);
710+
if (pass2Changes.length) {
711+
//PASS #2 to update links to newly created pages
712+
console.log("do pass 2 link updates");
713+
714+
// reload the existing site
715+
existingSite = await fetchExistingSite(parentId);
716+
metadataByFilename = buildFileToMetaTable(existingSite);
717+
718+
console.log("metadataByFilename", metadataByFilename);
719+
console.log("pass2Changes", pass2Changes);
708720

721+
const pass2Result = updateLinks(
722+
metadataByFilename,
723+
pass2Changes,
724+
server,
725+
parent
726+
);
727+
console.log("pass2Changes after", pass2Result);
728+
}
729+
730+
const parentPage: Content = await client.getContent(parentId);
709731
return buildPublishRecordForContent(server, parentPage);
710732
};
711733

tests/unit/confluence.test.ts

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
* Copyright (C) 2020 by RStudio, PBC
44
*
55
*/
6-
import { posix, win32 } from "path/mod.ts";
76
import { unitTest } from "../test.ts";
87
import { assertEquals, assertThrows } from "testing/asserts.ts";
98

@@ -3357,14 +3356,22 @@ const runUpdateLinks = () => {
33573356
};
33583357

33593358
const check = (
3360-
expected: ConfluenceSpaceChange[],
3359+
expectedPass1Changes: ConfluenceSpaceChange[],
33613360
changes: ConfluenceSpaceChange[],
33623361
fileMetadataTable: Record<string, SitePage>,
33633362
server = "fake-server",
3364-
parent = FAKE_PARENT
3363+
parent = FAKE_PARENT,
3364+
expectedPass2Changes: ConfluenceSpaceChange[] = []
33653365
) => {
3366-
const result = updateLinks(fileMetadataTable, changes, server, parent);
3367-
assertEquals(expected, result);
3366+
const { pass1Changes, pass2Changes } = updateLinks(
3367+
fileMetadataTable,
3368+
changes,
3369+
server,
3370+
parent
3371+
);
3372+
3373+
assertEquals(expectedPass1Changes, pass1Changes);
3374+
assertEquals(expectedPass2Changes, pass2Changes);
33683375
};
33693376

33703377
test(suiteLabel("no_files"), async () => {
@@ -3392,7 +3399,15 @@ const runUpdateLinks = () => {
33923399
},
33933400
};
33943401
const expected: ConfluenceSpaceChange[] = [expectedUpdate];
3395-
check(expected, changes, fileMetadataTable);
3402+
const expectedPass2Changes: ConfluenceSpaceChange[] = [expectedUpdate];
3403+
check(
3404+
expected,
3405+
changes,
3406+
fileMetadataTable,
3407+
"fake-server",
3408+
FAKE_PARENT,
3409+
expectedPass2Changes
3410+
);
33963411
});
33973412

33983413
test(suiteLabel("one_update_link_nested_dot_slash"), async () => {
@@ -3459,7 +3474,15 @@ const runUpdateLinks = () => {
34593474
},
34603475
};
34613476
const expected: ConfluenceSpaceChange[] = [expectedUpdate];
3462-
check(expected, changes, fileMetadataTable);
3477+
const expectedSecondPassChanges: ConfluenceSpaceChange[] = [expectedUpdate];
3478+
check(
3479+
expected,
3480+
changes,
3481+
fileMetadataTable,
3482+
"fake-server",
3483+
FAKE_PARENT,
3484+
expectedSecondPassChanges
3485+
);
34633486
});
34643487

34653488
test(suiteLabel("one_change_several_update_links"), async () => {
@@ -3475,7 +3498,15 @@ const runUpdateLinks = () => {
34753498
},
34763499
};
34773500
const expected: ConfluenceSpaceChange[] = [expectedUpdate];
3478-
check(expected, changes, fileMetadataTable);
3501+
const expectedSecondPassChanges: ConfluenceSpaceChange[] = [expectedUpdate];
3502+
check(
3503+
expected,
3504+
changes,
3505+
fileMetadataTable,
3506+
"fake-server",
3507+
FAKE_PARENT,
3508+
expectedSecondPassChanges
3509+
);
34793510
});
34803511

34813512
test(suiteLabel("two_changes_several_update_links"), async () => {
@@ -3507,7 +3538,18 @@ const runUpdateLinks = () => {
35073538
expectedUpdateSeveralLinks,
35083539
expectedUpdateOneLink,
35093540
];
3510-
check(expected, changes, fileMetadataTable);
3541+
const expectedSecondPassChanges: ConfluenceSpaceChange[] = [
3542+
expectedUpdateSeveralLinks,
3543+
expectedUpdateOneLink,
3544+
];
3545+
check(
3546+
expected,
3547+
changes,
3548+
fileMetadataTable,
3549+
"fake-server",
3550+
FAKE_PARENT,
3551+
expectedSecondPassChanges
3552+
);
35113553
});
35123554
};
35133555

@@ -3801,5 +3843,5 @@ if (RUN_ALL_TESTS) {
38013843
runUpdateImagePathsForContentBody();
38023844
runCapFirstLetter();
38033845
} else {
3804-
runSpaceCreatesWithNesting();
3846+
runUpdateLinks();
38053847
}

0 commit comments

Comments
 (0)