From 0d5bcdb1777dbfb14ef4aefeb48e189ed2963d5c Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Fri, 17 Feb 2023 14:32:06 +0000 Subject: [PATCH 1/8] fix(site): Fix template version editor rename --- .../Dialogs/ConfirmDialog/ConfirmDialog.tsx | 4 ++ .../TemplateVersionEditor/FileDialog.tsx | 31 ++++++++------ .../TemplateVersionEditor/FileTreeView.tsx | 7 ++-- .../TemplateVersionEditor.tsx | 13 ++---- .../WorkspaceSchedule/WorkspaceSchedule.tsx | 2 +- .../WorkspaceChangeVersionForm.tsx | 7 +--- site/src/util/filetree.test.ts | 41 +++++++++++++++++-- site/src/util/filetree.ts | 19 +++++++-- 8 files changed, 87 insertions(+), 37 deletions(-) diff --git a/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx b/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx index 7a151c2809f57..1b6818320b70d 100644 --- a/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx +++ b/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx @@ -88,6 +88,10 @@ const useStyles = makeStyles((theme) => ({ }, "& p": { + margin: 0, + }, + + "& > p": { margin: theme.spacing(1, 0), }, }, diff --git a/site/src/components/TemplateVersionEditor/FileDialog.tsx b/site/src/components/TemplateVersionEditor/FileDialog.tsx index 3d7fe0f18cb44..ebea9a7228970 100644 --- a/site/src/components/TemplateVersionEditor/FileDialog.tsx +++ b/site/src/components/TemplateVersionEditor/FileDialog.tsx @@ -42,10 +42,10 @@ export const CreateFileDialog: FC<{ confirmText="Create" title="Create File" description={ - + Specify the path to a file to be created. This path can contain - slashes too! + slashes too. } @@ -82,7 +85,12 @@ export const DeleteFileDialog: FC<{ open={open} onConfirm={onConfirm} title="Delete File" - description={`Are you sure you want to delete "${filename}"?`} + description={ + <> + Are you sure you want to delete {filename}? It will + be deleted permanently. + + } /> ) } @@ -123,14 +131,14 @@ export const RenameFileDialog: FC<{ hideCancel={false} type="success" cancelText="Cancel" - confirmText="Create" + confirmText="Rename" title="Rename File" description={ - - - Rename {`"${filename}"`} to something else. This path can contain - slashes too! - + +

+ Rename {filename} to something else. This path can + contain slashes too! +

{ @@ -142,8 +150,7 @@ export const RenameFileDialog: FC<{ name="file-path" autoComplete="off" id="file-path" - placeholder="main.tf" - defaultValue={filename} + placeholder={filename} value={pathValue} onChange={handleChange} label="File Path" diff --git a/site/src/components/TemplateVersionEditor/FileTreeView.tsx b/site/src/components/TemplateVersionEditor/FileTreeView.tsx index ba5b2236795c8..4cf5b935350ca 100644 --- a/site/src/components/TemplateVersionEditor/FileTreeView.tsx +++ b/site/src/components/TemplateVersionEditor/FileTreeView.tsx @@ -66,7 +66,8 @@ export const FileTreeView: FC<{ onSelect(currentPath) }} onContextMenu={(event) => { - event.preventDefault() + event.preventDefault() // Avoid default browser behavior + event.stopPropagation() // Avoid trigger parent context menu setContextMenu( contextMenu ? undefined @@ -137,7 +138,7 @@ export const FileTreeView: FC<{ setContextMenu(undefined) }} > - Rename... + Rename { @@ -148,7 +149,7 @@ export const FileTreeView: FC<{ setContextMenu(undefined) }} > - Delete Permanently + Delete diff --git a/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx b/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx index 1f7990099ed32..45e498c2de86e 100644 --- a/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx +++ b/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx @@ -22,6 +22,7 @@ import { FileTree, getFileContent, isFolder, + moveFile, removeFile, setFile, traverse, @@ -266,15 +267,9 @@ export const TemplateVersionEditor: FC = ({ if (!renameFileOpen) { return } - setFileTree((fileTree) => { - fileTree = setFile( - newPath, - getFileContent(renameFileOpen, fileTree) as string, - fileTree, - ) - fileTree = removeFile(renameFileOpen, fileTree) - return fileTree - }) + setFileTree((fileTree) => + moveFile(renameFileOpen, newPath, fileTree), + ) setActivePath(newPath) setRenameFileOpen(undefined) setDirty(true) diff --git a/site/src/components/WorkspaceSchedule/WorkspaceSchedule.tsx b/site/src/components/WorkspaceSchedule/WorkspaceSchedule.tsx index 36f5dc155ddf2..601d8560d97e8 100644 --- a/site/src/components/WorkspaceSchedule/WorkspaceSchedule.tsx +++ b/site/src/components/WorkspaceSchedule/WorkspaceSchedule.tsx @@ -46,7 +46,7 @@ export const WorkspaceSchedule: FC< return (
- +
{Language.timezoneLabel} {timezone} diff --git a/site/src/pages/WorkspaceChangeVersionPage/WorkspaceChangeVersionForm.tsx b/site/src/pages/WorkspaceChangeVersionPage/WorkspaceChangeVersionForm.tsx index bcca66b5a9364..e294abe20539f 100644 --- a/site/src/pages/WorkspaceChangeVersionPage/WorkspaceChangeVersionForm.tsx +++ b/site/src/pages/WorkspaceChangeVersionPage/WorkspaceChangeVersionForm.tsx @@ -39,12 +39,7 @@ export const WorkspaceChangeVersionForm: FC<{ return (
- +
diff --git a/site/src/util/filetree.test.ts b/site/src/util/filetree.test.ts index 2f85af20e34b9..122f64e5a91af 100644 --- a/site/src/util/filetree.test.ts +++ b/site/src/util/filetree.test.ts @@ -3,6 +3,7 @@ import { FileTree, getFileContent, isFolder, + moveFile, removeFile, setFile, traverse, @@ -32,10 +33,44 @@ test("getFileContent() return the file content from the file tree", () => { test("removeFile() removes a file from the file tree", () => { let fileTree: FileTree = { "main.tf": "terraform content", - images: { "java.Dockerfile": "java dockerfile" }, + images: { + "java.Dockerfile": "java dockerfile", + "python.Dockerfile": "python Dockerfile", + }, + } + fileTree = removeFile("images/python.Dockerfile", fileTree) + const expectedFileTree = { + "main.tf": "terraform content", + images: { + "java.Dockerfile": "java dockerfile", + }, + } + expect(expectedFileTree).toEqual(fileTree) +}) + +test("moveFile() moves a file from in file tree", () => { + let fileTree: FileTree = { + "main.tf": "terraform content", + images: { + "java.Dockerfile": "java dockerfile", + "python.Dockerfile": "python Dockerfile", + }, + } + fileTree = moveFile( + "images/java.Dockerfile", + "other/java.Dockerfile", + fileTree, + ) + const expectedFileTree = { + "main.tf": "terraform content", + images: { + "python.Dockerfile": "python Dockerfile", + }, + other: { + "java.Dockerfile": "java dockerfile", + }, } - fileTree = removeFile("images", fileTree) - expect(fileTree.images).toBeUndefined() + expect(fileTree).toEqual(expectedFileTree) }) test("existsFile() returns if there is or not a file", () => { diff --git a/site/src/util/filetree.ts b/site/src/util/filetree.ts index f14018ef17271..098ff6394d740 100644 --- a/site/src/util/filetree.ts +++ b/site/src/util/filetree.ts @@ -1,6 +1,6 @@ import set from "lodash/set" import has from "lodash/has" -import omit from "lodash/omit" +import unset from "lodash/unset" import get from "lodash/get" export type FileTree = { @@ -9,7 +9,7 @@ export type FileTree = { export const setFile = ( path: string, - content: string, + content: FileTree | string, fileTree: FileTree, ): FileTree => { return set(fileTree, path.split("/"), content) @@ -20,7 +20,20 @@ export const existsFile = (path: string, fileTree: FileTree) => { } export const removeFile = (path: string, fileTree: FileTree) => { - return omit(fileTree, path.split("/")) + const updatedFileTree = { ...fileTree } + unset(fileTree, path.split("/")) + return updatedFileTree +} + +export const moveFile = ( + currentPath: string, + newPath: string, + fileTree: FileTree, +) => { + const content = getFileContent(currentPath, fileTree) + fileTree = removeFile(currentPath, fileTree) + fileTree = setFile(newPath, content, fileTree) + return fileTree } export const getFileContent = (path: string, fileTree: FileTree) => { From 4ce0baf99dbc856bcc73963fc715f33aa63e8b7e Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Tue, 21 Feb 2023 14:36:09 +0000 Subject: [PATCH 2/8] Fix --- .../templateVersionEditorXService.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/site/src/xServices/templateVersionEditor/templateVersionEditorXService.ts b/site/src/xServices/templateVersionEditor/templateVersionEditorXService.ts index 88ded1c42c01b..75b28b2888bd2 100644 --- a/site/src/xServices/templateVersionEditor/templateVersionEditorXService.ts +++ b/site/src/xServices/templateVersionEditor/templateVersionEditorXService.ts @@ -252,11 +252,17 @@ export const templateVersionEditorMachine = createMachine( } // Add the editable files traverse(fileTree, (content, _filename, fullPath) => { + // When a file is deleted. Don't add it to the tar. + if (content === undefined) { + return + } + if (typeof content === "string") { tar.addFile(fullPath, content) - } else { - tar.addFolder(fullPath) + return } + + tar.addFolder(fullPath) }) const blob = await tar.write() return API.uploadTemplateFile(new File([blob], "template.tar")) From 2bbc919bcc44c77cf53174ddfe2a3c810f3f76d6 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 23 Feb 2023 00:44:58 +0000 Subject: [PATCH 3/8] Fix file tree remove --- site/src/util/filetree.test.ts | 20 +++++++++++++++++++- site/src/util/filetree.ts | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/site/src/util/filetree.test.ts b/site/src/util/filetree.test.ts index 122f64e5a91af..d138a25b9832f 100644 --- a/site/src/util/filetree.test.ts +++ b/site/src/util/filetree.test.ts @@ -30,7 +30,7 @@ test("getFileContent() return the file content from the file tree", () => { ) }) -test("removeFile() removes a file from the file tree", () => { +test("removeFile() removes a file from a folder", () => { let fileTree: FileTree = { "main.tf": "terraform content", images: { @@ -48,6 +48,24 @@ test("removeFile() removes a file from the file tree", () => { expect(expectedFileTree).toEqual(fileTree) }) +test("removeFile() removes a file from root", () => { + let fileTree: FileTree = { + "main.tf": "terraform content", + images: { + "java.Dockerfile": "java dockerfile", + "python.Dockerfile": "python Dockerfile", + }, + } + fileTree = removeFile("main.tf", fileTree) + const expectedFileTree = { + images: { + "java.Dockerfile": "java dockerfile", + "python.Dockerfile": "python Dockerfile", + }, + } + expect(expectedFileTree).toEqual(fileTree) +}) + test("moveFile() moves a file from in file tree", () => { let fileTree: FileTree = { "main.tf": "terraform content", diff --git a/site/src/util/filetree.ts b/site/src/util/filetree.ts index 098ff6394d740..9eb2f13d72e28 100644 --- a/site/src/util/filetree.ts +++ b/site/src/util/filetree.ts @@ -21,7 +21,7 @@ export const existsFile = (path: string, fileTree: FileTree) => { export const removeFile = (path: string, fileTree: FileTree) => { const updatedFileTree = { ...fileTree } - unset(fileTree, path.split("/")) + unset(updatedFileTree, path.split("/")) return updatedFileTree } From 19d84a245896ac9c026c3b288d0159eb0260c00e Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 2 Mar 2023 13:26:56 +0000 Subject: [PATCH 4/8] Do not allow creation of not allowed extensions --- site/src/components/TemplateVersionEditor/FileDialog.tsx | 9 +++++++++ site/src/util/templateVersion.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/site/src/components/TemplateVersionEditor/FileDialog.tsx b/site/src/components/TemplateVersionEditor/FileDialog.tsx index ebea9a7228970..e40603eca0637 100644 --- a/site/src/components/TemplateVersionEditor/FileDialog.tsx +++ b/site/src/components/TemplateVersionEditor/FileDialog.tsx @@ -3,6 +3,7 @@ import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog" import { Stack } from "components/Stack/Stack" import { ChangeEvent, FC, useState } from "react" import Typography from "@material-ui/core/Typography" +import { allowedExtensions, isAllowedFile } from "util/templateVersion" export const CreateFileDialog: FC<{ onClose: () => void @@ -24,6 +25,14 @@ export const CreateFileDialog: FC<{ setError("File already exists") return } + if (!isAllowedFile(pathValue)) { + setError( + `This is not an allowed extension. Valid extensions are: ${allowedExtensions.join( + ", ", + )}.`, + ) + return + } onConfirm(pathValue) setPathValue("") } diff --git a/site/src/util/templateVersion.ts b/site/src/util/templateVersion.ts index 9122036149440..5ae8bd2d7f41f 100644 --- a/site/src/util/templateVersion.ts +++ b/site/src/util/templateVersion.ts @@ -23,7 +23,7 @@ export const getTemplateVersionFiles = async ( return files } -const allowedExtensions = ["tf", "md", "Dockerfile"] +export const allowedExtensions = ["tf", "md", "Dockerfile"] export const isAllowedFile = (name: string) => { return allowedExtensions.some((ext) => name.endsWith(ext)) From c88237a7444610d1968a7de89f2ec5b96845f6cb Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 2 Mar 2023 13:28:50 +0000 Subject: [PATCH 5/8] Improve error message --- site/src/components/TemplateVersionEditor/FileDialog.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/site/src/components/TemplateVersionEditor/FileDialog.tsx b/site/src/components/TemplateVersionEditor/FileDialog.tsx index e40603eca0637..6e0ad94a8346f 100644 --- a/site/src/components/TemplateVersionEditor/FileDialog.tsx +++ b/site/src/components/TemplateVersionEditor/FileDialog.tsx @@ -26,10 +26,9 @@ export const CreateFileDialog: FC<{ return } if (!isAllowedFile(pathValue)) { + const extensions = allowedExtensions.join(", ") setError( - `This is not an allowed extension. Valid extensions are: ${allowedExtensions.join( - ", ", - )}.`, + `This extension is not allowed. You only can create files with the following extensions: ${extensions}.`, ) return } From 8527242fdef373fc1107539d93806d9790c5863a Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 2 Mar 2023 13:31:02 +0000 Subject: [PATCH 6/8] Apply extension error to rename --- site/src/components/TemplateVersionEditor/FileDialog.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/site/src/components/TemplateVersionEditor/FileDialog.tsx b/site/src/components/TemplateVersionEditor/FileDialog.tsx index 6e0ad94a8346f..0459cc23919f7 100644 --- a/site/src/components/TemplateVersionEditor/FileDialog.tsx +++ b/site/src/components/TemplateVersionEditor/FileDialog.tsx @@ -124,6 +124,13 @@ export const RenameFileDialog: FC<{ setError("File already exists") return } + if (!isAllowedFile(pathValue)) { + const extensions = allowedExtensions.join(", ") + setError( + `This extension is not allowed. You only can create files with the following extensions: ${extensions}.`, + ) + return + } onConfirm(pathValue) setPathValue("") } From ab9b8da0594efbb57c06523ebd71dd24f0517f99 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 2 Mar 2023 14:46:46 +0000 Subject: [PATCH 7/8] Fix minor UI issues --- .../Dialogs/ConfirmDialog/ConfirmDialog.tsx | 2 +- .../TemplateVersionEditor/FileDialog.tsx | 29 +++++++++++--- .../TemplateVersionEditor.tsx | 9 +++-- site/src/util/filetree.ts | 38 ++++++++++++++++++- site/src/util/templateVersion.ts | 6 +-- 5 files changed, 70 insertions(+), 14 deletions(-) diff --git a/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx b/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx index 1b6818320b70d..3c6bdf26a1d19 100644 --- a/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx +++ b/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.tsx @@ -87,7 +87,7 @@ const useStyles = makeStyles((theme) => ({ color: theme.palette.text.primary, }, - "& p": { + "& p:not(.MuiFormHelperText-root)": { margin: 0, }, diff --git a/site/src/components/TemplateVersionEditor/FileDialog.tsx b/site/src/components/TemplateVersionEditor/FileDialog.tsx index 0459cc23919f7..12e4664424057 100644 --- a/site/src/components/TemplateVersionEditor/FileDialog.tsx +++ b/site/src/components/TemplateVersionEditor/FileDialog.tsx @@ -4,15 +4,17 @@ import { Stack } from "components/Stack/Stack" import { ChangeEvent, FC, useState } from "react" import Typography from "@material-ui/core/Typography" import { allowedExtensions, isAllowedFile } from "util/templateVersion" +import { FileTree, validatePath } from "util/filetree" export const CreateFileDialog: FC<{ onClose: () => void checkExists: (path: string) => boolean onConfirm: (path: string) => void open: boolean -}> = ({ checkExists, onClose, onConfirm, open }) => { + fileTree: FileTree +}> = ({ checkExists, onClose, onConfirm, open, fileTree }) => { const [pathValue, setPathValue] = useState("") - const [error, setError] = useState("") + const [error, setError] = useState() const handleChange = (event: ChangeEvent) => { setPathValue(event.target.value) } @@ -32,7 +34,13 @@ export const CreateFileDialog: FC<{ ) return } + const pathError = validatePath(pathValue, fileTree) + if (pathError) { + setError(pathError) + return + } onConfirm(pathValue) + setError(undefined) setPathValue("") } @@ -41,6 +49,7 @@ export const CreateFileDialog: FC<{ open={open} onClose={() => { onClose() + setError(undefined) setPathValue("") }} onConfirm={handleConfirm} @@ -62,6 +71,7 @@ export const CreateFileDialog: FC<{ handleConfirm() } }} + error={Boolean(error)} helperText={error} name="file-path" autoComplete="off" @@ -109,9 +119,10 @@ export const RenameFileDialog: FC<{ checkExists: (path: string) => boolean open: boolean filename: string -}> = ({ checkExists, onClose, onConfirm, open, filename }) => { + fileTree: FileTree +}> = ({ checkExists, onClose, onConfirm, open, filename, fileTree }) => { const [pathValue, setPathValue] = useState(filename) - const [error, setError] = useState("") + const [error, setError] = useState() const handleChange = (event: ChangeEvent) => { setPathValue(event.target.value) } @@ -127,11 +138,17 @@ export const RenameFileDialog: FC<{ if (!isAllowedFile(pathValue)) { const extensions = allowedExtensions.join(", ") setError( - `This extension is not allowed. You only can create files with the following extensions: ${extensions}.`, + `This extension is not allowed. You only can rename files with the following extensions: ${extensions}.`, ) return } + const pathError = validatePath(pathValue, fileTree) + if (pathError) { + setError(pathError) + return + } onConfirm(pathValue) + setError(undefined) setPathValue("") } @@ -140,6 +157,7 @@ export const RenameFileDialog: FC<{ open={open} onClose={() => { onClose() + setError(undefined) setPathValue("") }} onConfirm={handleConfirm} @@ -161,6 +179,7 @@ export const RenameFileDialog: FC<{ handleConfirm() } }} + error={Boolean(error)} helperText={error} name="file-path" autoComplete="off" diff --git a/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx b/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx index b69ffaac24d81..6cb8482a46606 100644 --- a/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx +++ b/site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx @@ -18,14 +18,15 @@ import { WorkspaceBuildLogs } from "components/WorkspaceBuildLogs/WorkspaceBuild import { FC, useCallback, useEffect, useRef, useState } from "react" import { navHeight, dashboardContentBottomPadding } from "theme/constants" import { + createFile, existsFile, FileTree, getFileContent, isFolder, moveFile, removeFile, - setFile, traverse, + updateFile, } from "util/filetree" import { CreateFileDialog, @@ -217,13 +218,14 @@ export const TemplateVersionEditor: FC = ({
{ setCreateFileOpen(false) }} checkExists={(path) => existsFile(path, fileTree)} onConfirm={(path) => { - setFileTree((fileTree) => setFile(path, "", fileTree)) + setFileTree((fileTree) => createFile(path, fileTree, "")) setActivePath(path) setCreateFileOpen(false) setDirty(true) @@ -246,6 +248,7 @@ export const TemplateVersionEditor: FC = ({ filename={deleteFileOpen || ""} /> { setRenameFileOpen(undefined) @@ -289,7 +292,7 @@ export const TemplateVersionEditor: FC = ({ return } setFileTree((fileTree) => - setFile(activePath, value, fileTree), + updateFile(activePath, value, fileTree), ) setDirty(true) }} diff --git a/site/src/util/filetree.ts b/site/src/util/filetree.ts index 9eb2f13d72e28..9b5ea60b0aa7c 100644 --- a/site/src/util/filetree.ts +++ b/site/src/util/filetree.ts @@ -7,7 +7,38 @@ export type FileTree = { [key: string]: FileTree | string } -export const setFile = ( +export const createFile = ( + path: string, + fileTree: FileTree, + value: string, +): FileTree => { + if (existsFile(path, fileTree)) { + throw new Error(`File ${path} already exists`) + } + const pathError = validatePath(path, fileTree) + if (pathError) { + throw new Error(pathError) + } + + return set(fileTree, path.split("/"), value) +} + +export const validatePath = ( + path: string, + fileTree: FileTree, +): string | undefined => { + const paths = path.split("/") + paths.pop() // The last item is the filename + for (let i = 0; i <= paths.length; i++) { + const path = paths.slice(0, i + 1) + const pathStr = path.join("/") + if (existsFile(pathStr, fileTree) && !isFolder(pathStr, fileTree)) { + return `Invalid path. The path ${path} is not a folder` + } + } +} + +export const updateFile = ( path: string, content: FileTree | string, fileTree: FileTree, @@ -31,8 +62,11 @@ export const moveFile = ( fileTree: FileTree, ) => { const content = getFileContent(currentPath, fileTree) + if (typeof content !== "string") { + throw new Error("Move folders is not allowed") + } fileTree = removeFile(currentPath, fileTree) - fileTree = setFile(newPath, content, fileTree) + fileTree = createFile(newPath, fileTree, content) return fileTree } diff --git a/site/src/util/templateVersion.ts b/site/src/util/templateVersion.ts index 5ae8bd2d7f41f..67eb18805a7c0 100644 --- a/site/src/util/templateVersion.ts +++ b/site/src/util/templateVersion.ts @@ -1,6 +1,6 @@ import * as API from "api/api" import { TemplateVersion } from "api/typesGenerated" -import { FileTree, setFile } from "./filetree" +import { FileTree, createFile } from "./filetree" import { TarReader } from "./tar" /** @@ -35,10 +35,10 @@ export const createTemplateVersionFileTree = async ( let fileTree: FileTree = {} for (const file of tarReader.fileInfo) { if (isAllowedFile(file.name)) { - fileTree = setFile( + fileTree = createFile( file.name, - tarReader.getTextFile(file.name) as string, fileTree, + tarReader.getTextFile(file.name) as string, ) } } From 29b984d02713ee2599fa8a5d12b0d19851a53247 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 2 Mar 2023 14:57:37 +0000 Subject: [PATCH 8/8] Fix filetree test --- site/src/util/filetree.test.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/site/src/util/filetree.test.ts b/site/src/util/filetree.test.ts index d138a25b9832f..18b63788de1a6 100644 --- a/site/src/util/filetree.test.ts +++ b/site/src/util/filetree.test.ts @@ -5,16 +5,20 @@ import { isFolder, moveFile, removeFile, - setFile, + createFile, traverse, } from "./filetree" -test("setFile() set file into the file tree", () => { +test("createFile() set file into the file tree", () => { let fileTree: FileTree = { "main.tf": "terraform", images: { "java.Dockerfile": "java dockerfile" }, } - fileTree = setFile("images/python.Dockerfile", "python dockerfile", fileTree) + fileTree = createFile( + "images/python.Dockerfile", + fileTree, + "python dockerfile", + ) expect((fileTree.images as FileTree)["python.Dockerfile"]).toEqual( "python dockerfile", )