|
| 1 | +import { Str } from "@merrymake/utils"; |
1 | 2 | import { existsSync } from "fs"; |
| 3 | +import { mkdir, writeFile } from "fs/promises"; |
2 | 4 | import { GIT_HOST } from "../config.js"; |
| 5 | +import { addToExecuteQueue, finish } from "../exitMessages.js"; |
| 6 | +import { outputGit } from "../printUtils.js"; |
3 | 7 | import { choice } from "../prompt.js"; |
4 | 8 | import { OrganizationId, PathToOrganization } from "../types.js"; |
5 | 9 | import { execPromise, sshReq, toSubdomain } from "../utils.js"; |
6 | | -import { outputGit } from "../printUtils.js"; |
7 | 10 | import { ensureGroupStructure } from "./fetch.js"; |
8 | 11 | import { listOrgs } from "./org.js"; |
9 | | -import { addToExecuteQueue, finish } from "../exitMessages.js"; |
10 | | -import { mkdir, writeFile } from "fs/promises"; |
11 | | -import { Str } from "@merrymake/utils"; |
12 | 12 | export async function do_clone(struct, folderName, displayName, organizationId) { |
13 | 13 | try { |
14 | 14 | outputGit(`Cloning ${displayName}...`); |
15 | 15 | await mkdir(`${folderName}/.merrymake`, { recursive: true }); |
16 | 16 | const orgFile = { organizationId: organizationId.toString() }; |
17 | 17 | await writeFile(`${folderName}/.merrymake/conf.json`, JSON.stringify(orgFile)); |
18 | | - const eventsDir = `${folderName}/event-catalogue`; |
| 18 | + const eventsDir = `${folderName}/event-configuration`; |
19 | 19 | await mkdir(eventsDir, { recursive: true }); |
20 | 20 | await execPromise(`git init --initial-branch=main`, eventsDir); |
21 | 21 | await execPromise(`git remote add origin "${GIT_HOST}/o${organizationId}/event-catalogue"`, eventsDir); |
22 | | - await writeFile(eventsDir + "/api.json", "{}"); |
23 | | - await writeFile(eventsDir + "/cron.json", "{}"); |
24 | | - const publicDir = `${folderName}/public`; |
| 22 | + try { |
| 23 | + await execPromise(`git pull origin main`, eventsDir); |
| 24 | + await execPromise(`git branch --set-upstream-to=origin/main`, eventsDir); |
| 25 | + } |
| 26 | + catch (e) { |
| 27 | + if (!existsSync(eventsDir + "/api.json")) |
| 28 | + await writeFile(eventsDir + "/api.json", "{}"); |
| 29 | + if (!existsSync(eventsDir + "/cron.json")) |
| 30 | + await writeFile(eventsDir + "/cron.json", "{}"); |
| 31 | + } |
| 32 | + const publicDir = `${folderName}/front-end`; |
25 | 33 | await mkdir(publicDir, { recursive: true }); |
26 | 34 | await execPromise(`git init --initial-branch=main`, publicDir); |
27 | 35 | await execPromise(`git remote add origin "${GIT_HOST}/o${organizationId}/public"`, publicDir); |
28 | | - await writeFile(publicDir + "/index.html", "<html><body>Hello, World!</body></html>"); |
| 36 | + try { |
| 37 | + await execPromise(`git pull origin main`, publicDir); |
| 38 | + await execPromise(`git branch --set-upstream-to=origin/main`, publicDir); |
| 39 | + } |
| 40 | + catch (e) { |
| 41 | + if (!existsSync(publicDir + "/index.html")) |
| 42 | + await writeFile(publicDir + "/index.html", "<html><body>Hello, World!</body></html>"); |
| 43 | + } |
29 | 44 | await ensureGroupStructure({ pathTo: new PathToOrganization(folderName), id: organizationId }, struct); |
30 | 45 | } |
31 | 46 | catch (e) { |
@@ -54,12 +69,17 @@ export async function checkout_org(displayName, organizationId) { |
54 | 69 | } |
55 | 70 | export async function checkout() { |
56 | 71 | try { |
57 | | - const orgs = await listOrgs(); |
58 | | - return choice("Which organization would you like to clone?", orgs.map((org) => ({ |
59 | | - long: org.id, |
60 | | - text: `${org.name}`, |
61 | | - action: () => checkout_org(org.name, new OrganizationId(org.id)), |
62 | | - }))); |
| 72 | + return choice([], async () => { |
| 73 | + const orgs = await listOrgs(); |
| 74 | + return { |
| 75 | + options: orgs.map((org) => ({ |
| 76 | + long: org.id, |
| 77 | + text: `${org.name}`, |
| 78 | + action: () => checkout_org(org.name, new OrganizationId(org.id)), |
| 79 | + })), |
| 80 | + header: "Which organization would you like to clone?", |
| 81 | + }; |
| 82 | + }); |
63 | 83 | } |
64 | 84 | catch (e) { |
65 | 85 | throw e; |
|
0 commit comments