Skip to content

Commit 5c0bda1

Browse files
authored
Merge pull request #1189 from nfdi4plants/epic/feature/AddDefaultGitIgnore
Add basic gitignore
2 parents 15cb20a + 4047f59 commit 5c0bda1

2 files changed

Lines changed: 48 additions & 1 deletion

File tree

src/Electron/src/Main/ARCtrlExtensions/WriteAsync.fs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,20 @@ open ARCtrl
44
open ARCtrl.Contract
55
open ARCtrl.Helper
66
open ARCtrl.Spreadsheet
7+
open Main.Notes.NoteConstants
78

89
[<AutoOpen>]
910
module ArcWriteExtensions =
1011

12+
let private notesReadmeContract =
13+
let path = ArcPathHelper.combine NotesRootFolderName NotesReadmeFileName
14+
Contract.createCreate (path, DTOType.PlainText, DTO.Text NotesReadmeContent)
15+
16+
let private swateScaffoldContracts = [|
17+
ARCtrl.Contract.Git.gitignoreContract
18+
notesReadmeContract
19+
|]
20+
1121
let private collectionGitKeepContracts =
1222
[|
1323
ArcPathHelper.AssaysFolderName
@@ -137,6 +147,7 @@ module ArcWriteExtensions =
137147
| None -> ()
138148

139149
[|
150+
yield! swateScaffoldContracts
140151
yield! collectionGitKeepContracts
141152

142153
for entry in filemap do

tests/Electron.Core/ArcVaultHelper.test.fs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ open Main.ArcVault
66
open Main.ArcVaultHelper
77
open Main.Bindings.Filesystem
88
open Main.Bindings.Path
9+
open Main.Notes.NoteConstants
910
open Swate.Components.Shared
1011
open Vitest
1112

@@ -17,6 +18,11 @@ let private mkdirRecursiveAsync (directoryPath: string) = promise {
1718
let private writeTextFileAsync (filePath: string) (content: string) =
1819
writeFileAsync filePath content TextEncoding.Utf8
1920

21+
let private arctrlDefaultGitignoreContent () =
22+
match ARCtrl.Contract.Git.gitignoreContract.DTO with
23+
| Some(ARCtrl.Contract.DTO.Text content) -> content
24+
| _ -> failwith "ARCtrl default .gitignore contract does not contain text content."
25+
2026
let private addDataMapToAllEntityTypes (arc: ARC) =
2127
let study = ArcStudy("Study With DataMap")
2228
study.DataMap <- Some(DataMap.init ())
@@ -58,7 +64,7 @@ Vitest.describe (
5864
)
5965

6066
Vitest.test (
61-
"Swate write contracts contain only targeted ARC files",
67+
"Swate write contracts contain only targeted scaffold and ARC files",
6268
fun () ->
6369
let arc = ARC("TargetedWriteArc")
6470
addDataMapToAllEntityTypes arc
@@ -77,11 +83,13 @@ Vitest.describe (
7783

7884
let expectedPaths =
7985
[|
86+
".gitignore"
8087
"LICENSE"
8188
"assays/.gitkeep"
8289
"assays/Assay With DataMap/isa.assay.xlsx"
8390
"assays/Assay With DataMap/isa.datamap.xlsx"
8491
"isa.investigation.xlsx"
92+
"notes/README.md"
8593
"runs/.gitkeep"
8694
"runs/Run With DataMap/isa.datamap.xlsx"
8795
"runs/Run With DataMap/isa.run.xlsx"
@@ -97,6 +105,34 @@ Vitest.describe (
97105
Vitest.expect(actualPaths).toEqual (expectedPaths)
98106
)
99107

108+
Vitest.test (
109+
"TryWriteAsyncSwate writes the default gitignore and notes README into an ARC root",
110+
fun () -> promise {
111+
let! rootPath = TestHelpers.createTempDirectoryAsync "swate-default-gitignore-"
112+
let arcPath = join [| rootPath; "arc" |]
113+
let gitignorePath = join [| arcPath; ".gitignore" |]
114+
let notesReadmePath = join [| arcPath; NotesRootFolderName; NotesReadmeFileName |]
115+
116+
try
117+
do! mkdirRecursiveAsync arcPath
118+
119+
let arc = ARC("ScaffoldArc")
120+
121+
match! arc.TryWriteAsyncSwate(arcPath) with
122+
| Error errors -> failwith (String.concat "\n" errors)
123+
| Ok _ -> ()
124+
125+
let! gitignoreContent = readFileAsync gitignorePath TextEncoding.Utf8
126+
let! notesReadmeContent = readFileAsync notesReadmePath TextEncoding.Utf8
127+
Vitest.expect(gitignoreContent).toBe (arctrlDefaultGitignoreContent ())
128+
Vitest.expect(notesReadmeContent).toBe (NotesReadmeContent)
129+
do! TestHelpers.removeDirectoryAsync rootPath
130+
with error ->
131+
do! TestHelpers.removeDirectoryAsync rootPath
132+
return raise error
133+
}
134+
)
135+
100136
Vitest.test (
101137
"TryWriteAsyncSwate preserves payload and does not create unmanaged file-tree entries",
102138
fun () -> promise {

0 commit comments

Comments
 (0)