diff --git a/Jenkinsfile b/Jenkinsfile index f159aeba82d..7b1158020b2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -190,6 +190,7 @@ def bootstrapImage(){ isoTesters['Zinc-Character-Encoding'] = { defineIsoTestStage("Zinc-Character-Encoding", "ZincCharacterEncoding", "\'Zinc-Character-Encoding-Tests\'") } isoTesters['System-SessionManager'] = { defineIsoTestStage("System-SessionManager", "SystemSessionManager", "\'System-SessionManager-Tests\'") } isoTesters['System-Platforms'] = { defineIsoTestStage("System-Platforms", "SystemPlatforms", "\'System-Platforms-Tests\'") } + isoTesters['FileSystem'] = { defineIsoTestStage("FileSystem", "FileSystem", "\'FileSystem-Core-Tests\' \'FileSystem-Disk-Tests\' \'FileSystem-Tests-Attributes\'") } isoTesters['Shift-ClassBuilder'] = { defineIsoTestStage("Shift-ClassBuilder", "Shift", "\'Shift-ClassBuilder-Tests\'") } parallel isoTesters diff --git a/src/BaselineOfFileSystem/BaselineOfFileSystem.class.st b/src/BaselineOfFileSystem/BaselineOfFileSystem.class.st index 1b01fa0ded5..fb07b62e240 100644 --- a/src/BaselineOfFileSystem/BaselineOfFileSystem.class.st +++ b/src/BaselineOfFileSystem/BaselineOfFileSystem.class.st @@ -23,17 +23,22 @@ BaselineOfFileSystem >> baseline: spec [ spec for: #common do: [ spec + baseline: 'UnifiedFFI' with: [ spec className: 'BaselineOfUnifiedFFI'; + repository: (self packageRepositoryURLForSpec: spec); + loads: #('minimal')]; + package: 'FFI-Kernel'; package: 'FileSystem-Path'; package: 'FileSystem-Core'; - package: 'FileSystem-Disk'; + package: 'FileSystem-Disk' ; + package: 'FileSystem-Memory'; package: 'System-Sources-Files'; - package: 'FileSystem-Core-Tests'; - package: 'FileSystem-Disk-Tests'; + package: 'FileSystem-Core-Tests' with: [ spec requires: #('FileSystem-Core' 'FileSystem-Memory' 'UnifiedFFI') ]; + package: 'FileSystem-Disk-Tests' ; package: 'FileSystem-Tests-Attributes'. spec - group: 'Core' with: {'FFI-Kernel'. 'FileSystem-Path'. 'FileSystem-Core'. 'FileSystem-Disk'. 'System-Sources-Files'}; + group: 'Core' with: { 'FFI-Kernel'. 'FileSystem-Path'. 'FileSystem-Core'. 'FileSystem-Disk'. 'FileSystem-Memory'. 'System-Sources-Files'}; group: 'Tests' with: { 'FileSystem-Core-Tests'. 'FileSystem-Disk-Tests'. 'FileSystem-Tests-Attributes' } ] ] diff --git a/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st b/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st index 45f24b6c656..9ca3d18090c 100644 --- a/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st +++ b/src/BaselineOfUnifiedFFI/BaselineOfUnifiedFFI.class.st @@ -12,13 +12,14 @@ BaselineOfUnifiedFFI >> baseline: spec [ spec for: #common do: [ spec "unified ffi" - package: 'UnifiedFFI'; + package: 'System-Platforms'; + package: 'System-OSEnvironments'; + package: 'UnifiedFFI' with: [ spec requires: #('System-Platforms' 'System-OSEnvironments') ]; package: 'UnifiedFFI-Tests' with: [ spec requires: #('UnifiedFFI') ]; - package: 'System-OSEnvironments' with: [ spec requires: #('UnifiedFFI') ]; package: 'System-OSEnvironments-Tests' with: [ spec requires: #('System-OSEnvironments') ]. spec group: 'default' with: #('core'); - group: 'minimal' with: #('UnifiedFFI' 'System-OSEnvironments'); + group: 'minimal' with: #('UnifiedFFI' 'System-OSEnvironments' 'System-Platforms'); group: 'core' with: #('minimal' 'UnifiedFFI-Tests' 'System-OSEnvironments-Tests') ] ] diff --git a/src/FileSystem-Core-Tests/StringTest.extension.st b/src/FileSystem-Core-Tests/FileStringTest.class.st similarity index 50% rename from src/FileSystem-Core-Tests/StringTest.extension.st rename to src/FileSystem-Core-Tests/FileStringTest.class.st index caec82b431f..bf626ae7826 100644 --- a/src/FileSystem-Core-Tests/StringTest.extension.st +++ b/src/FileSystem-Core-Tests/FileStringTest.class.st @@ -1,7 +1,12 @@ -Extension { #name : 'StringTest' } +Class { + #name : 'FileStringTest', + #superclass : 'TestCase', + #category : 'FileSystem-Core-Tests', + #package : 'FileSystem-Core-Tests' +} -{ #category : '*FileSystem-Core-Tests' } -StringTest >> testAsFileLocatorOrReferenceReturnsALocatorWhenStringRefersToAKnownOrigin [ +{ #category : 'tests' } +FileStringTest >> testAsFileLocatorOrReferenceReturnsALocatorWhenStringRefersToAKnownOrigin [ | pathString locator | pathString := (FileLocator home / 'foo') fullName. @@ -15,8 +20,8 @@ StringTest >> testAsFileLocatorOrReferenceReturnsALocatorWhenStringRefersToAKnow equals: pathString ] -{ #category : '*FileSystem-Core-Tests' } -StringTest >> testAsFileLocatorOrReferenceReturnsAReferenceWhenStringDoesNotReferToAKnownOrigin [ +{ #category : 'tests' } +FileStringTest >> testAsFileLocatorOrReferenceReturnsAReferenceWhenStringDoesNotReferToAKnownOrigin [ | fileRef result | fileRef := '/foo' asFileReference. diff --git a/src/FileSystem-Core/FileReference.class.st b/src/FileSystem-Core/FileReference.class.st index deed9650012..a146ef30952 100644 --- a/src/FileSystem-Core/FileReference.class.st +++ b/src/FileSystem-Core/FileReference.class.st @@ -39,6 +39,18 @@ FileReference class >> fileSystem: aFilesystem path: aPath [ ^ self new setFileSystem: aFilesystem path: aPath ] +{ #category : 'instance creation' } +FileReference class >> newTempFilePrefix: prefix suffix: suffix [ + | tmpDir random fileName | + + tmpDir := FileLocator temp asFileReference. + [ + random := UUID new asInteger asString. + fileName := prefix , random , suffix. + (tmpDir / fileName) exists ] whileTrue. + ^ tmpDir / fileName +] + { #category : 'navigating' } FileReference >> , extension [ ^ self withPath: self path, extension diff --git a/src/FileSystem-Core/FileSystem.class.st b/src/FileSystem-Core/FileSystem.class.st index 5ce7df57db9..ab066b407dc 100644 --- a/src/FileSystem-Core/FileSystem.class.st +++ b/src/FileSystem-Core/FileSystem.class.st @@ -24,6 +24,7 @@ Class { #package : 'FileSystem-Core', #tag : 'Public' } + { #category : 'system startup' } FileSystem class >> startUp: aBoolean [ "This is only here to deal with migration from older versions of diff --git a/src/MonticelloRemoteRepositories/FileReference.extension.st b/src/MonticelloRemoteRepositories/FileReference.extension.st deleted file mode 100644 index 93aa805b926..00000000000 --- a/src/MonticelloRemoteRepositories/FileReference.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : 'FileReference' } - -{ #category : '*MonticelloRemoteRepositories' } -FileReference class >> newTempFilePrefix: prefix suffix: suffix [ - | tmpDir random fileName | - - tmpDir := FileLocator temp asFileReference. - [ - random := UUID new asInteger asString. - fileName := prefix , random , suffix. - (tmpDir / fileName) exists ] whileTrue. - ^ tmpDir / fileName -] diff --git a/src/System-OSEnvironments/AbstractUnixPlatform.extension.st b/src/System-OSEnvironments/AbstractUnixPlatform.extension.st index ea6b06924f1..7fc8e9b09fc 100644 --- a/src/System-OSEnvironments/AbstractUnixPlatform.extension.st +++ b/src/System-OSEnvironments/AbstractUnixPlatform.extension.st @@ -38,25 +38,6 @@ AbstractUnixPlatform >> basicGetEnvRaw: encodedVariableName [ self primitiveFail ] -{ #category : '*System-OSEnvironments' } -AbstractUnixPlatform >> basicGetEnvRawViaFFI: arg1 [ - - "PRIVATE: This FFI call works on Strings, while the correct way to manage encodings is with raw data. - Use me through #basicGetEnvRaw: to correctly marshall data." - - "This method calls the Standard C Library getenv() function. - The name of the argument (arg1) should fit decompiled version." - - ^ self ffiCall: #( String getenv (String arg1) ) module: LibC -] - -{ #category : '*System-OSEnvironments' } -AbstractUnixPlatform >> environ [ - "Return the address of the array holding the environment variables" - - ^ FFIExternalArray fromPointer: (ExternalAddress loadSymbol: 'environ' from: LibC) type: String -] - { #category : '*System-OSEnvironments' } AbstractUnixPlatform >> environAt: index [ @@ -145,17 +126,3 @@ AbstractUnixPlatform >> removeKey: key encoded: anEncoding [ ^ self rawRemoveKey: (key encodeWith: anEncoding) ] - -{ #category : '*System-OSEnvironments' } -AbstractUnixPlatform >> setEnv: nameString value: valueString [ - "int setenv(const char *name, const char *value, int overwrite);" - - ^ self ffiCall: #( int setenv #( String nameString #, String valueString #, int 1 ) ) module: LibC -] - -{ #category : '*System-OSEnvironments' } -AbstractUnixPlatform >> unsetEnv: string [ - "This method calls the the platform specific unset environment routine" - - ^ self ffiCall: #(int unsetenv #(String string)) module: LibC -] diff --git a/src/UnifiedFFI/AbstractUnixPlatform.extension.st b/src/UnifiedFFI/AbstractUnixPlatform.extension.st new file mode 100644 index 00000000000..987285c1630 --- /dev/null +++ b/src/UnifiedFFI/AbstractUnixPlatform.extension.st @@ -0,0 +1,34 @@ +Extension { #name : 'AbstractUnixPlatform' } + +{ #category : '*UnifiedFFI' } +AbstractUnixPlatform >> basicGetEnvRawViaFFI: arg1 [ + + "PRIVATE: This FFI call works on Strings, while the correct way to manage encodings is with raw data. + Use me through #basicGetEnvRaw: to correctly marshall data." + + "This method calls the Standard C Library getenv() function. + The name of the argument (arg1) should fit decompiled version." + + ^ self ffiCall: #( String getenv (String arg1) ) module: LibC +] + +{ #category : '*UnifiedFFI' } +AbstractUnixPlatform >> environ [ + "Return the address of the array holding the environment variables" + + ^ FFIExternalArray fromPointer: (ExternalAddress loadSymbol: 'environ' from: LibC) type: String +] + +{ #category : '*UnifiedFFI' } +AbstractUnixPlatform >> setEnv: nameString value: valueString [ + "int setenv(const char *name, const char *value, int overwrite);" + + ^ self ffiCall: #( int setenv #( String nameString #, String valueString #, int 1 ) ) module: LibC +] + +{ #category : '*UnifiedFFI' } +AbstractUnixPlatform >> unsetEnv: string [ + "This method calls the the platform specific unset environment routine" + + ^ self ffiCall: #(int unsetenv #(String string)) module: LibC +] diff --git a/src/System-OSEnvironments/Win32WideString.extension.st b/src/UnifiedFFI/Win32WideString.extension.st similarity index 77% rename from src/System-OSEnvironments/Win32WideString.extension.st rename to src/UnifiedFFI/Win32WideString.extension.st index 7e94930d4f1..01bf08e291f 100644 --- a/src/System-OSEnvironments/Win32WideString.extension.st +++ b/src/UnifiedFFI/Win32WideString.extension.st @@ -1,6 +1,6 @@ Extension { #name : 'Win32WideString' } -{ #category : '*System-OSEnvironments' } +{ #category : '*UnifiedFFI' } Win32WideString class >> asExternalTypeOn: generator [ ^ FFIExternalObjectType objectClass: self ]