[Pkg] Sake : Sake-Bob-kph.14.mcz
squeak-dev-noreply at lists.squeakfoundation.org
squeak-dev-noreply at lists.squeakfoundation.org
Sat Feb 28 06:43:26 UTC 2009
A new version of Sake-Bob was added to project Sake :
http://www.squeaksource.com/Sake/Sake-Bob-kph.14.mcz
==================== Summary ====================
Name: Sake-Bob-kph.14
Author: kph
Time: 28 February 2009, 6:43:21 am
UUID: 16faf722-0563-11de-9b6f-000a95edb42a
Ancestors: Sake-Bob-kph.13
working on saving one click images
=============== Diff against Sake-Bob-kph.13 ===============
Item was changed:
----- Method: BobBuildImage>>package (in category 'as yet unclassified') -----
package
+ self packageDirectory: self stampedName intoZip: self publishDir from: self publishDir parent
+
+ !
-
- self exec: 'cd ', self publishDir parent, '; zip -R ', self packageFile, ' "', self stampedName ,'/*" -x "__*" ".DS*"'.
- !
Item was changed:
----- Method: BobBuildImage class>>taskBuild: (in category 'as yet unclassified') -----
taskBuild: metaSelector
| isNeeded |
^ self define: [ :task |
"obtain latest meta-data from instance side"
(task infoFor: metaSelector) ifNil: [ ^ self noop ].
task if: [
task timeStart.
isNeeded := task isBuildNeeded.
self log info build: task info name isNeeded: isNeeded first because: isNeeded second. .
isNeeded first ].
task action: [
+ task stepAction.
+ task perform: task info action.
- task stepAction.
- task expandZipFileTo: (task newWorkingDir).
-
- task startImage: (task workingDir all fileMatching: '*.image').
-
- task theScript scriptFileWrite.
-
- task launchVm: self configVm image: task startImage with: task scriptFile.
-
- task isSuccessfulBuild ifTrue: [
- task info timeComplete: DateAndTime now.
- task info timeDuration: ((task info timeComplete - task info timeStart) roundTo: 1 second).
-
- task publish.
- task package.
- task tidy.
- task publishLinks.
-
- task uploadImmediate.
]
- ]
]
+
+
-
!
Item was changed:
----- Method: BobBuild>>nextScriptPut: (in category 'as yet unclassified') -----
nextScriptPut: aScript
| bScript |
bScript := (self class configStepScript = true) ifFalse: [ aScript ]
ifTrue: [
aScript asString copyReplaceAll: self scriptCommentedHalt with: 'self halt.'
].
-
script nextChunkPut: bScript, String cr.
!
Item was added:
+ ----- Method: BobBuildImage>>configOneClickIni: (in category 'as yet unclassified') -----
+ configOneClickIni: imageName
+
+ ^ '[Global]
+ DeferUpdate=1
+ ShowConsole=0
+ DynamicConsole=0
+ ReduceCPUUsage=1
+ ReduceCPUInBackground=0
+ 3ButtonMouse=0
+ 1ButtonMouse=0
+ UseDirectSound=1
+ PriorityBoost=1
+ B3DXUsesOpenGL=0
+ CaseSensitiveFileMode=0
+ ImageFile="Contents\Resources\' , imageName, '.image"'!
Item was added:
+ ----- Method: BobBuildImage>>publishManifestTo: (in category 'as yet unclassified') -----
+ publishManifestTo: aPublishDir
+
+ aPublishDir mkpath
+ addAll: (self imageDir filesMatching: (self stampedName, '.*')).
+
+ aPublishDir
+ addAll: (self imageDir all filesMatching: #('*.txt' '*.text' '*.pr' '*.pass' '*.fail' ))
+
+
+
+ !
Item was added:
+ ----- Method: BobBuildImage>>workingDirOneClickIn (in category 'as yet unclassified') -----
+ workingDirOneClickIn
+
+ ^ (self workingDir + '-OneClick.in') asDirectory!
Item was added:
+ ----- Method: BobBuildImage>>configOneClickSh: (in category 'as yet unclassified') -----
+ configOneClickSh: imageName
+
+ ^ '#!!/bin/sh
+ APP=`dirname $0`
+ EXE="$APP/Contents/Linux686"
+ RES="$APP/Contents/Resources"
+
+ exec "$EXE/squeak" -plugins "$EXE" \
+ -encoding latin1 \
+ -vm-display-X11 -swapbtn \
+ "$RES/' , imageName , '.image"'!
Item was changed:
----- Method: BobBuildImage>>startImage: (in category 'accessing') -----
startImage: anObject
"Set the value of startImage"
+ startImage := anObject.
+
+ !
- startImage := anObject!
Item was added:
+ ----- Method: BobBuildImage>>oneClickUpdatePlist:fromDictionary: (in category 'as yet unclassified') -----
+ oneClickUpdatePlist: originalPlistFile fromDictionary: dict
+
+ | plist file |
+
+ file := originalPlistFile asFile xml.
+ plist := file contents.
+
+ ((plist elementAt: 'plist') elementAt: 'dict') elements pairsDo: [ :keyElement :valueElement |
+
+ dict at: (keyElement contentString) ifPresent:[ :newValue | (valueElement contents at: 1) string: newValue ]
+ ].
+
+ file delete contents: plist.!
Item was added:
+ ----- Method: BobBuildImage>>workingDirOneClickOut (in category 'as yet unclassified') -----
+ workingDirOneClickOut
+
+ ^ (self workingDir + '-OneClick.out') asDirectory!
Item was added:
+ ----- Method: BobBuildImage>>packageDirectory:intoZip:from: (in category 'as yet unclassified') -----
+ packageDirectory: directory intoZip: packageFile from: rootDir
+
+ self exec: 'cd ', rootDir, '; zip -r ', packageFile, '.zip "', directory ,'" -x "__*" ".DS*"'.
+ !
Item was added:
+ ----- Method: BobBuildImage>>configOneClickPlist (in category 'as yet unclassified') -----
+ configOneClickPlist
+ "we take the plist from the template and substitute these values
+ note: only string values are supported at this time"
+
+ ^ self oneClickPlistBase
+ at: 'CFBundleName' put: (info oneClickName ifNil: [ info name ]);
+ at: 'CFBundleShortVersionString' put: (info oneClickName ifNil: [ info name ]);
+ at: 'CFBundlePackageType' put: 'APPL';
+ at: 'CFBundleSignature' put: 'FAST';
+ at: 'CFBundleExecutable' put: 'squeak';
+ at: 'CFBundleGetInfoString' put: 'http://www.squeak.org';
+ at: 'CFBundleIdentifier' put: 'org.squeak';
+ at: 'CFBundleVersion' put: '3.8.18b1U';
+ at: 'SqueakEncodingType' put: 'UTF-8';
+ yourself
+ !
Item was changed:
----- Method: BobBuildImage>>scriptSetVersion (in category 'as yet unclassified') -----
scriptSetVersion
| s |
s := String new writeStream.
s << '"self halt."' ; cr.
s << 'SystemVersion newVersion: ' << self name printString << '.' ; cr.
s << 'SystemVersion current date: ''' << self timeStart asTimeStamp printString << ''' asTimeStamp.'; cr.
+ s << 'Smalltalk at: #Scripter ifPresent: [ :scr | scr transcript windowLabel: ''' <<
+ self stampedName <<''' ].' ; cr.
self nextScriptPut: s contents!
Item was added:
+ ----- Method: BobBuildImage>>actionPublishOneClick (in category 'as yet unclassified') -----
+ actionPublishOneClick
+
+ "if our source zip has an info file accompanying read it"
+ | sourceInfo |
+ sourceInfo := Compiler evaluate: (zipFile copy ext: 'info') contents.
+
+ info timeStart: sourceInfo timeStart.
+ info timeDuration: sourceInfo timeDuration.
+ info timeComplete: sourceInfo timeComplete.
+ info timeOneClickGenerated: DateAndTime now.
+
+ self expandZipFileTo: (self workingDirOneClickIn mkpath clean).
+
+ self startImage: (self workingDirOneClickIn all fileMatching: '*.image').
+
+ self packageOneClick.
+
+
+ !
Item was changed:
----- Method: BobBuildImage>>scriptAddInfoScript (in category 'as yet unclassified') -----
scriptAddInfoScript
| rs |
rs := (self class docAt: self info build) readStream.
[ rs atEnd ] whileFalse: [
self nextScriptPut: (rs upToAll: '""""""') asString
].!
Item was changed:
----- Method: BobBuildImage>>newWorkingDir (in category 'as yet unclassified') -----
newWorkingDir
self workingDir mkpath.
+ self exec: 'cd ', self workingDir,'; rm -rf *'.
- self exec: 'cd ', self workingDir,'; rm -rf *; ln -s ', self class configPackageCacheDir mkpath, ' package-cache'.
^ self workingDir. !
Item was added:
+ ----- Method: BobBuild>>description (in category 'as yet unclassified') -----
+ description
+
+ ^ ''!
Item was added:
+ ----- Method: BobBuildImage>>configOneClickCopyrightStatement (in category 'as yet unclassified') -----
+ configOneClickCopyrightStatement
+
+ ^
+
+ 'Distribution based on Sophie
+
+ http://www.sophieproject.org/'!
Item was changed:
----- Method: BobBuildImage>>scriptOpenInWorkspace: (in category 'as yet unclassified') -----
scriptOpenInWorkspace: afilename
+ self nextScriptPut: 'Workspace openFile: ', afilename printString, '.'.
- self nextScriptPut: '"self halt."
- Workspace openFile: ', afilename printString, '.'.
!
Item was added:
+ ----- Method: BobBuildImage>>workingOneClickDir (in category 'as yet unclassified') -----
+ workingOneClickDir
+
+ ^ (self workingDir + '-OneClick') asDirectory!
Item was added:
+ ----- Method: BobBuildImage>>configOneClickIcns (in category 'as yet unclassified') -----
+ configOneClickIcns
+
+ ^ (info oneClickIcns ifNil: [ '/bob/misc/SqueakImage.icns' ]) !
Item was changed:
----- Method: BobBuildImage>>scriptAddLPF (in category 'as yet unclassified') -----
scriptAddLPF
self nextScriptPut: '"self halt." (HTTPSocket httpGet: ''ftp.squeak.org/3.11/bob/LPF.st'') readStream fileIn.'.
!
Item was added:
+ ----- Method: BobBuildImage>>scriptAddScripter (in category 'as yet unclassified') -----
+ scriptAddScripter
+
+ self nextScriptPut: '"self halt." Installer ss project: ''Scripter''; install: ''Scripter-Core''.'.
+ !
Item was changed:
----- Method: BobBuildImage>>scriptCleanUp (in category 'as yet unclassified') -----
scriptCleanUp
+ self nextScriptPut: '"self halt." SmalltalkImage current cleanUpAllExcept: #(ChangeSet).'!
- self nextScriptPut: 'SmalltalkImage current cleanUpAllExcept: #(ChangeSet).'!
Item was changed:
----- Method: BobBuildImage>>publish (in category 'as yet unclassified') -----
publish
"we publish to a temp directory and publish as an atomic operation
otherwise the uploader might start uploading before it is ready"
self info overwrite = true ifTrue: [ self outputDir all delete ].
+ self publishManifestTo: self publishDir.
- self publishManifest.
self infoFilePublishAlongside: self publishDir.
!
Item was added:
+ ----- Method: BobBuildImage>>actionBuild (in category 'as yet unclassified') -----
+ actionBuild
+
+ self stepAction.
+ self expandZipFileTo: (self workingDir mkpath clean).
+
+ self startImage: (self workingDir all fileMatching: '*.image').
+ self linkPackageCache.
+
+ self theScript scriptFileWrite.
+
+ self launchVm: self configVm image: self startImage with: self scriptFile.
+
+ self isSuccessfulBuild ifFalse: [ ^ self ].
+
+ info timeComplete: DateAndTime now.
+ info timeDuration: ((info timeComplete - info timeStart) roundTo: 1 second).
+
+ self publish.
+
+ self package.
+
+ self tidy.
+ self publishLinks.
+
+ self uploadImmediate.
+ !
Item was changed:
----- Method: BobBuildImage>>scriptSaveImageAndQuit: (in category 'as yet unclassified') -----
scriptSaveImageAndQuit: requestQuit
| s |
s := String new writeStream.
s << ' | image resuming |' ; cr.
s << '"self halt."' ; cr.
+ s << 'WorldState addDeferredUIMessage: [ (Delay forSeconds: 1) wait. '; cr.
s << 'image := SmalltalkImage current.'; cr.
s << 'resuming := image saveAs: '''<< self stampedName << '.image''.'; cr.
requestQuit ifTrue: [
s << 'resuming ifFalse: [ image snapshot: false andQuit: true ].' ; cr
].
+ s << '].'
+
self nextScriptPut: s contents!
Item was added:
+ ----- Method: BobBuildImage>>packageOneClick (in category 'as yet unclassified') -----
+ packageOneClick
+
+ | appZip appDir resources plist bundleName imageName template filename |
+
+ info oneClick = true ifFalse: [ ^ self ].
+
+ template := info oneClickTemplate ifNil: [ self configOneClickTemplate ].
+
+ "use the match string given to find the template"
+ appZip := self resolveFile: template ifNone: [ :msg | self error: msg ].
+
+ "download to images cache, and decompress to the output area"
+ self expand: appZip to: self workingDirOneClickOut mkpath clean.
+
+ "the result should have a .app dir, find it"
+ appDir := self workingDirOneClickOut directories detect: [ :ea | ea asString endsWith: '.app' ] ifNone: [ self error: '*.app not found' ].
+
+ "get our plist contribution"
+ plist := self configOneClickPlist.
+
+ bundleName := plist at: 'CFBundleName'.
+ imageName := bundleName asLowercase.
+ plist at: 'SqueakImageName' put: (imageName, '.image').
+
+ "rename the .app dir to the desired name"
+ appDir beRenaming fileName: (bundleName , '.app').
+
+ "top level directory"
+ (appDir filesMatching: #('*.exe' '*.ini' '*.sh')) do: [ :ea | ea rename base: bundleName ].
+ (appDir / bundleName + '.ini' ) delete contents: ((self configOneClickIni: imageName) copyReplaceAll: String cr with: String crlf).
+ (appDir / bundleName + '.sh' ) delete contents: (self configOneClickSh: imageName).
+ (appDir / 'COPYRIGHT') delete contents: (info oneClickCopyrightStatement ifNil: [ self configOneClickCopyrightStatement ] ).
+
+ "Contents Directory"
+ appDir / 'Contents' / 'PkgInfo' contents: ((plist at: 'CFBundlePackageType') , (plist at: 'CFBundleSignature')).
+ self oneClickUpdatePlist: (appDir / 'Contents' / 'Info.plist') fromDictionary: plist.
+
+ "Resources Directory"
+ resources := (appDir / 'Contents' / 'Resources') all delete mkpath.
+
+ resources addTree: self imageDir entries.
+ (resources filesMatching: #('*.image' '*.changes')) do: [ :ea | ea rename base: imageName ].
+ resources add: self configOneClickIcns asFile.
+ resources add: (info oneClickSources ifNil: [ self configOneClickSources ]) asFile.
+
+ self halt.
+ filename := appDir fileName.
+ self packageDirectory: filename intoZip: (self stamp,'_', filename) from: appDir parent.
+
+ !
Item was added:
+ ----- Method: BobBuildImage>>configOneClickTemplate (in category 'as yet unclassified') -----
+ configOneClickTemplate
+
+ ^ 'file:///bob/images/Seaside-2.8.3.app.zip' !
Item was added:
+ ----- Method: BobBuildImage>>oneClickPlistBase (in category 'as yet unclassified') -----
+ oneClickPlistBase
+
+ ^ Dictionary new
+ at: 'CFBundleIconFile' put: self configOneClickIcns asFile fileName;
+ yourself!
Item was changed:
----- Method: BobBuild class>>taskUpload: (in category 'as yet unclassified') -----
taskUpload: metaSelector
"the task of uploading is defined as a top level task, because it is more generic than image building, and may be applied to any result."
| newInfo lock ul dl yes |
^ self define: [ :task |
(task infoFor: metaSelector) ifNil: [ ^ self noop ].
task dependsOn: #().
newInfo := task info.
"obtain and use the latest meta-data from the most recent build activity"
task info: task infoFileReadLatest.
"some fields in the metadata we prefer new values over the older"
task info upload: newInfo upload.
task info download: newInfo download.
task info linkRelease: newInfo linkRelease.
task info comment: newInfo comment.
task if: [
lock := ul := dl := nil.
yes := task name notNil
and: [ (ul := task isUploadRequested)
and: [ dl := task isUploadedFileAvailableForDownload.
dl ifTrue: [ task uploadDirLock delete ].
dl not and: [ (lock := task uploadDirLock exists) not ] ] ].
task name ifNotNil:[
self log info name: task name uploadRequested: ul done: dl inProgress: lock.
].
"if we decide that we shall upload, we lock the upload dir to inform others"
yes ifTrue: [ task uploadDirLock touch ].
yes.
].
task action: [
self log info UPLOADING: task publishDir.
task infoFilePublishAlongside: task publishDir.
task linkRelease.
+ task oneClick = true ifTrue: [ task packageOneClick ].
+
task perform: ('uploadUsing', (task info upload upTo: $:) capitalized) asSymbol.
task isUploadedFileAvailableForDownload ifTrue: [ task uploadDirLock delete ].
]
]
!
Item was changed:
----- Method: BobBuild>>infoFor: (in category 'as yet unclassified') -----
infoFor: selector
selector ifNil: [ ^ nil ].
self info name: self class label.
self info build: selector.
self info label: self class label.
self when: self class configWhen.
self info linkRelease: self class configLinkRelease.
+ self description ifNotEmpty: [ self info description: self description ].
+ info action: #actionBuild.
self perform: selector.
+ !
- self info when: self preprocessWhen.
-
-
- !
Item was added:
+ ----- Method: BobBuildImage>>configOneClickSources (in category 'as yet unclassified') -----
+ configOneClickSources
+
+ ^ '/bob/vm/SqueakV39.sources'
+
+ " '/bob/vm/SqueakV3.sources' "
+ !
Item was changed:
----- Method: BobBuild>>expandZipFileTo: (in category 'zip file') -----
expandZipFileTo: destDir
-
- "
- (self obtainImage: 'ftp://ftp.squeak.org/3.10/Squeak3.10.2-*-basic.zip') run
- "
- | localZipFile |
+ ^ self expand: zipFile to: destDir!
- zipFile executive isRemote
- ifTrue: [
-
- localZipFile := self class configImagesDir / zipFile fileName.
-
- "if it is not in the local downloaded images cache, look in our output tree"
- localZipFile exists ifFalse: [
- (self outputDir parent all filesMatching: zipFile fileName) firstOrNil
- ifNotNilDo: [ :found |
- self log info found: found.
- localZipFile := found
- ].
- ].
-
- localZipFile exists ifFalse: [
- self log info downloading: zipFile.
- localZipFile parent mkpath add: zipFile ].
- ]
- ifFalse: [ localZipFile := zipFile ].
-
- self log info bob expanding: localZipFile to: destDir.
-
- self exec: 'unzip ', localZipFile, ' -d ', destDir full mkpath.
-
- ^ localZipFile
-
- "
- localZipFile zip readArchive extractAllTo: destDir mkpath asFileDirectory.
- "
- !
Item was added:
+ ----- Method: BobBuildImage>>linkPackageCache (in category 'accessing') -----
+ linkPackageCache
+
+ self exec: 'cd ', self imageDir,'; ln -s ', self class configPackageCacheDir mkpath, ' package-cache'.
+ !
Item was added:
+ ----- Method: BobBuild>>expand:to: (in category 'zip file') -----
+ expand: aZipFile to: destDir
+
+ "
+ (self obtainImage: 'ftp://ftp.squeak.org/3.10/Squeak3.10.2-*-basic.zip') run
+ "
+ | localZipFile |
+
+ aZipFile executive isRemote
+ ifTrue: [
+
+ localZipFile := self class configImagesDir / aZipFile fileName.
+
+ "if it is not in the local downloaded images cache, look in our output tree"
+ localZipFile exists ifFalse: [
+ (self outputDir parent all filesMatching: aZipFile fileName) firstOrNil
+ ifNotNilDo: [ :found |
+ self log info found: found.
+ localZipFile := found
+ ].
+ ].
+
+ localZipFile exists ifFalse: [
+ self log info downloading: zipFile.
+ localZipFile parent mkpath add: zipFile ].
+ ]
+ ifFalse: [ localZipFile := aZipFile ].
+
+ self log info bob expanding: localZipFile to: destDir.
+
+ self exec: 'unzip ', localZipFile, ' -d ', destDir full mkpath.
+
+ ^ localZipFile
+
+ "
+ localZipFile zip readArchive extractAllTo: destDir mkpath asFileDirectory.
+ "
+ !
Item was removed:
- ----- Method: BobBuildImage>>scriptGoAtomic (in category 'as yet unclassified') -----
- scriptGoAtomic
-
- self nextScriptPut: 'Preferences setPreference; #useMonticelloAtomicLoader toValue: true.'!
Item was removed:
- ----- Method: BobBuildImage>>packageFile (in category 'as yet unclassified') -----
- packageFile
-
- ^ self publishDir + '.zip'!
More information about the Packages
mailing list