Skip to content

Commit 09fdaef

Browse files
committed
dry run
1 parent 08bef50 commit 09fdaef

File tree

2 files changed

+47
-35
lines changed

2 files changed

+47
-35
lines changed

apps/roam/src/components/settings/AdminPanel.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,12 @@ const MigrationTab = (): React.ReactElement => {
253253
const enabled = getSetting("use-reified-relations");
254254
const [useMigrationResults, setMigrationResults] = useState<string>("");
255255
const [useOngoing, setOngoing] = useState<boolean>(false);
256+
const [useDryRun, setDryRun] = useState<boolean>(false);
256257
const doMigrateRelations = async () => {
257258
setOngoing(true);
258259
try {
259260
const before = await countReifiedRelations();
260-
const numProcessed = await migrateRelations();
261+
const numProcessed = await migrateRelations(useDryRun);
261262
const after = await countReifiedRelations();
262263
if (after - before < numProcessed)
263264
setMigrationResults(
@@ -301,6 +302,15 @@ const MigrationTab = (): React.ReactElement => {
301302
disabled={!enabled || useOngoing}
302303
text="Migrate all relations"
303304
></Button>
305+
<Checkbox
306+
className="left-6 inline-block"
307+
defaultChecked={useDryRun}
308+
onChange={(e) => {
309+
const target = e.target as HTMLInputElement;
310+
setDryRun(target.checked);
311+
}}
312+
labelElement={<>Dry run</>}
313+
/>
304314
</p>
305315
{useOngoing ? (
306316
<Spinner />

apps/roam/src/utils/migrateRelations.ts

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010

1111
const MIGRATION_PROP_NAME = "relation-migration";
1212

13-
const migrateRelations = async (): Promise<number> => {
13+
const migrateRelations = async (dryRun = false): Promise<number> => {
1414
const authorized = getSetting("use-reified-relations");
1515
if (!authorized) return 0;
1616
const processed = new Set<string>();
@@ -20,40 +20,42 @@ const migrateRelations = async (): Promise<number> => {
2020
const key = `${rel.source}:${rel.relUid}:${rel.target}`;
2121
if (processed.has(key)) continue;
2222
processed.add(key);
23-
const uid = (await createReifiedRelation({
24-
sourceUid: rel.source,
25-
destinationUid: rel.target,
26-
relationBlockUid: rel.relUid,
27-
}))!;
28-
const sourceProps = getBlockProps(rel.source);
29-
const dgDataOrig = sourceProps[DISCOURSE_GRAPH_PROP_NAME];
30-
const dgData: Record<string, json> =
31-
dgDataOrig !== null &&
32-
typeof dgDataOrig === "object" &&
33-
!Array.isArray(dgDataOrig)
34-
? dgDataOrig
35-
: {};
36-
const migrationDataOrig = dgData[MIGRATION_PROP_NAME];
37-
let migrationData: Record<string, json> =
38-
migrationDataOrig !== null &&
39-
typeof migrationDataOrig === "object" &&
40-
!Array.isArray(migrationDataOrig)
41-
? migrationDataOrig
42-
: {};
43-
if (migrationData[uid] !== undefined) {
44-
console.debug(`reprocessed ${key}`);
23+
if (!dryRun) {
24+
const uid = (await createReifiedRelation({
25+
sourceUid: rel.source,
26+
destinationUid: rel.target,
27+
relationBlockUid: rel.relUid,
28+
}))!;
29+
const sourceProps = getBlockProps(rel.source);
30+
const dgDataOrig = sourceProps[DISCOURSE_GRAPH_PROP_NAME];
31+
const dgData: Record<string, json> =
32+
dgDataOrig !== null &&
33+
typeof dgDataOrig === "object" &&
34+
!Array.isArray(dgDataOrig)
35+
? dgDataOrig
36+
: {};
37+
const migrationDataOrig = dgData[MIGRATION_PROP_NAME];
38+
let migrationData: Record<string, json> =
39+
migrationDataOrig !== null &&
40+
typeof migrationDataOrig === "object" &&
41+
!Array.isArray(migrationDataOrig)
42+
? migrationDataOrig
43+
: {};
44+
if (migrationData[uid] !== undefined) {
45+
console.debug(`reprocessed ${key}`);
46+
}
47+
// clean up old migration entries
48+
migrationData = Object.fromEntries(
49+
Object.entries(migrationData).filter(
50+
([uid]) =>
51+
window.roamAlphaAPI.q(`[:find ?p :where [?p :block/uid "${uid}"]]`)
52+
.length > 0,
53+
),
54+
);
55+
migrationData[uid] = new Date().valueOf();
56+
dgData[MIGRATION_PROP_NAME] = migrationData;
57+
setBlockProps(rel.source, { [DISCOURSE_GRAPH_PROP_NAME]: dgData });
4558
}
46-
// clean up old migration entries
47-
migrationData = Object.fromEntries(
48-
Object.entries(migrationData).filter(
49-
([uid]) =>
50-
window.roamAlphaAPI.q(`[:find ?p :where [?p :block/uid "${uid}"]]`)
51-
.length > 0,
52-
),
53-
);
54-
migrationData[uid] = new Date().valueOf();
55-
dgData[MIGRATION_PROP_NAME] = migrationData;
56-
setBlockProps(rel.source, { [DISCOURSE_GRAPH_PROP_NAME]: dgData });
5759
numProcessed++;
5860
}
5961
return numProcessed;

0 commit comments

Comments
 (0)