90 lines
2.5 KiB
Smalltalk
90 lines
2.5 KiB
Smalltalk
"
|
|
I'm a helper class modelling the common uses of the Nim's [Nimble package manager](https://github.com/nim-lang/nimble).
|
|
This was evolved in the context of the [Grafoscopio](mutabit.com/grafoscopio/en.html) community exploration and prototyping of interactive documentation.
|
|
"
|
|
Class {
|
|
#name : #Nimble,
|
|
#superclass : #Object,
|
|
#category : #'ExoRepo-External'
|
|
}
|
|
|
|
{ #category : #accessing }
|
|
Nimble class >> detect: packageName [
|
|
^ self installed
|
|
detect: [ :dependency | dependency beginsWith: packageName ]
|
|
ifFound: [ ^ true ]
|
|
ifNone: [ ^ false ]
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
Nimble class >> install: packageName [
|
|
(self detect: packageName) ifTrue: [ ^ self ].
|
|
self installPackagesList.
|
|
Smalltalk os isWindows
|
|
ifTrue: [ ^ LibC runCommand: 'nimble install ', packageName ].
|
|
OSSUnixSubprocess new
|
|
command: 'nimble';
|
|
arguments: {'install'.
|
|
packageName};
|
|
redirectStdout;
|
|
redirectStderr;
|
|
runAndWaitOnExitDo: [ :process :outString :errString |
|
|
process isSuccess
|
|
ifTrue: [ Transcript show: 'Command exited correctly with output: ', outString. ]
|
|
ifFalse: [
|
|
^ 'Command exit with error status: ', process exitStatusInterpreter printString, String cr,
|
|
'Stderr contents: ', errString.
|
|
]
|
|
]
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
Nimble class >> installPackagesList [
|
|
|
|
(FileLocator home / '.nimble' / 'packages_official.json') exists
|
|
ifTrue: [ ^ self ].
|
|
(Smalltalk os isUnix or: [ Smalltalk os isMacOS ])
|
|
ifTrue: [
|
|
OSSUnixSubprocess new
|
|
command: 'nimble';
|
|
arguments: #('refresh');
|
|
redirectStdout;
|
|
runAndWaitOnExitDo: [ :process :outString | ^ outString ].
|
|
].
|
|
Smalltalk os isWindows
|
|
ifTrue: [ ^ LibC resultOfCommand: 'nimble refresh' ]
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
Nimble class >> installed [
|
|
|
|
Smalltalk os isWindows
|
|
ifTrue: [ | process |
|
|
process := GtExternalProcessBuilder new
|
|
command: 'nimble.exe';
|
|
args: #('list' '--installed');
|
|
output.
|
|
^ process stdout lines ].
|
|
|
|
OSSUnixSubprocess new
|
|
command: 'nimble';
|
|
arguments: #('list' '--installed');
|
|
redirectStdout;
|
|
redirectStderr;
|
|
runAndWaitOnExitDo: [ :process :outString :errString |
|
|
process isSuccess
|
|
ifTrue: [ ^ outString lines ];
|
|
ifFalse: [ ^ nil ]
|
|
]
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
Nimble class >> version [
|
|
|
|
OSSUnixSubprocess new
|
|
command: 'nimble';
|
|
arguments: #('--version');
|
|
redirectStdout;
|
|
runAndWaitOnExitDo: [ :process :outString | ^ outString ]
|
|
]
|