Il 05/05/2013 11:23, Holger Hans Peter Freyther ha scritto: > From: Holger Hans Peter Freyther <[email protected]> > > Add a way to load a Package from the package.xml and not go through > the creation of a star file. This can make developing with packages > more effective.
Almost ok, please fix the nits below and commit. > 2013-03-24 Holger Hans Peter Freyther <[email protected]> > > * libgst/files.c: Add DirPackage.st to the bootstrap. > * kernel/DirPackage.st: Add new file with the DirPackage and > DirPackagesContainer. > * kernel/PkgLoader.st: Refactor and create ExternalPackage baseclass. > --- > ChangeLog | 7 ++++ > NEWS | 7 ++++ > kernel/DirPackage.st | 92 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > kernel/Makefile.frag | 2 +- > kernel/PkgLoader.st | 28 ++++++++++----- > libgst/files.c | 1 + > packages.xml | 1 + > 7 files changed, 128 insertions(+), 10 deletions(-) > create mode 100644 kernel/DirPackage.st > > diff --git a/ChangeLog b/ChangeLog > index c45d2a0..6c2abb5 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,8 +1,15 @@ > +2013-03-24 Holger Hans Peter Freyther <[email protected]> > + > + * libgst/files.c: Add DirPackage.st to the bootstrap. > + * kernel/DirPackage.st: Add new file with the DirPackage and > DirPackagesContainer. > + * kernel/PkgLoader.st: Refactor and create ExternalPackage baseclass. Obsolete ChangeLog :) > 2013-04-28 Holger Hans Peter Freyther <[email protected]> > > * kernel/File.st: Add File>>#primLink:as:, File>>#primFsync: and > File>>#primSync to use the new primitives. > > + > 2013-03-04 Holger Hans Peter Freyther <[email protected]> > > * kernel/PkgLoader.st: Remove unused variable. > diff --git a/NEWS b/NEWS > index b5e9127..d768a8f 100644 > --- a/NEWS > +++ b/NEWS > @@ -1,5 +1,12 @@ > List of user-visible changes in GNU Smalltalk > > +NEWS FROM 3.2.5 to 3.2.90 > + > +o Add PackageLoader>>#loadPackageFromFile: to load a package by using > + a package.xml. This can make the development more effective. > + > +----------------------------------------------------------------------------- > + > NEWS FROM 3.2.4 to 3.2.5 > > o Add Delay>>#value:onTimeoutDo: as an easy way to timeout an operation. > diff --git a/kernel/DirPackage.st b/kernel/DirPackage.st > new file mode 100644 > index 0000000..784d5cd > --- /dev/null > +++ b/kernel/DirPackage.st > @@ -0,0 +1,92 @@ > +"====================================================================== > +| > +| Load packages from a directory without loading a Star file. > +| > +| > + ======================================================================" > + > +"====================================================================== > +| > +| Copyright 2013 > +| Free Software Foundation, Inc. > +| Written by Holger Hans Peter Freyther. > +| > +| This file is part of the GNU Smalltalk class library. > +| > +| The GNU Smalltalk class library is free software; you can redistribute it > +| and/or modify it under the terms of the GNU Lesser General Public License > +| as published by the Free Software Foundation; either version 2.1, or (at > +| your option) any later version. > +| > +| The GNU Smalltalk class library is distributed in the hope that it will be > +| useful, but WITHOUT ANY WARRANTY; without even the implied warranty of > +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser > +| General Public License for more details. > +| > +| You should have received a copy of the GNU Lesser General Public License > +| along with the GNU Smalltalk class library; see the file COPYING.LIB. > +| If not, write to the Free Software Foundation, 59 Temple Place - Suite > +| 330, Boston, MA 02110-1301, USA. > +| > + ======================================================================" > + > +Namespace current: Kernel [ > + > +ExternalPackage subclass: DirPackage [ > + <category: 'Language-Packaging'> > + <comment: 'I can parse a package.xml from a directort and treat it typo (directory) > + like a package. This allows loading packages from a directory without > + the need of zipping them first.'> > + > + DirPackage class >> file: aFile [ > + ^ self new > + file: aFile; > + yourself > + ] > + > + directory [ > + ^ self file asFile directory. > + ] > + > + name [ > + "Pick the name of the loaded package" > + ^ self loadedPackage name. > + ] > + > + loadedPackage [ > + <category: 'accessing'> > + | file package | > + loadedPackage isNil ifFalse: [^loadedPackage]. > + file := self file asFile. > + package := Package parse: file readStream. > + package isNil > + ifTrue: [^self error: 'invalid disabled-package tag inside a > star file']. > + package relativeDirectory: file directory. > + package baseDirectories: {file directory}. > + package name isNil > + ifTrue: [^self error: 'package name must not be nil']. > + loadedPackage := package. > + ^loadedPackage Anything we can move to ExternalPackage? Can be done as a followup, though. > + ] > +] > + > +] > + > +PackageLoader class extend [ > + > + loadPackageFromFile: aFileName [ > + | package | > + <category: '*Language-Kernel'> > + > + "Make sure that root is initialized." > + self refresh. > + > + "Add the 'directory' to the packages" > + package := Kernel.DirPackage file: aFileName. > + > + "And now file it in. Do not use >>fileIn as it will > + attempt to load the package by name." > + self fileInPackages: package prerequisites. > + package primFileIn. > + ] > +] > diff --git a/kernel/Makefile.frag b/kernel/Makefile.frag > index e61f2be..fb4b3d2 100644 > --- a/kernel/Makefile.frag > +++ b/kernel/Makefile.frag > @@ -1,3 +1,3 @@ > $(srcdir)/kernel/stamp-classes: \ > -kernel/Array.st kernel/CompildMeth.st kernel/LookupTable.st > kernel/RunArray.st kernel/Iterable.st kernel/ArrayColl.st > kernel/CompiledBlk.st kernel/Magnitude.st kernel/Semaphore.st > kernel/DeferBinding.st kernel/Association.st kernel/HomedAssoc.st > kernel/ContextPart.st kernel/MappedColl.st kernel/SeqCollect.st > kernel/Autoload.st kernel/DLD.st kernel/Memory.st kernel/Set.st kernel/Bag.st > kernel/Date.st kernel/Message.st kernel/MessageLookup.st > kernel/SharedQueue.st kernel/Behavior.st kernel/Delay.st kernel/Metaclass.st > kernel/SmallInt.st kernel/BlkClosure.st kernel/Continuation.st > kernel/Generator.st kernel/Dictionary.st kernel/MethodDict.st > kernel/SortCollect.st kernel/BlkContext.st kernel/DirMessage.st > kernel/MethodInfo.st kernel/Stream.st kernel/Boolean.st kernel/Directory.st > kernel/MthContext.st kernel/String.st kernel/UniString.st > kernel/ExcHandling.st kernel/Namespace.st kernel/SymLink.st kernel/VFS.st > kernel/VFSZip.st kernel/Builtins.st kernel/False.st kernel/Number.st kernel/S y > mbol.st kernel/ByteArray.st kernel/FilePath.st kernel/File.st > kernel/SysDict.st kernel/ScaledDec.st kernel/FileSegment.st kernel/Object.st > kernel/Time.st kernel/FileStream.st kernel/OrderColl.st kernel/CCallable.st > kernel/CCallback.st kernel/CFuncs.st kernel/Float.st kernel/PkgLoader.st > kernel/Transcript.st kernel/CObject.st kernel/Fraction.st kernel/Point.st > kernel/True.st kernel/CStruct.st kernel/IdentDict.st kernel/PosStream.st > kernel/UndefObject.st kernel/CType.st kernel/IdentitySet.st > kernel/ProcSched.st kernel/ProcEnv.st kernel/ValueAdapt.st > kernel/CharArray.st kernel/Integer.st kernel/Process.st > kernel/CallinProcess.st kernel/WeakObjects.st kernel/Character.st > kernel/UniChar.st kernel/Interval.st kernel/RWStream.st kernel/OtherArrays.st > kernel/Class.st kernel/LargeInt.st kernel/Random.st kernel/WriteStream.st > kernel/ClassDesc.st kernel/Link.st kernel/ReadStream.st kernel/ObjMemory.st > kernel/Collection.st kernel/LinkedList.st kernel/Rectangle.st > kernel/AnsiDates.st kernel/Com p > ildCode.st kernel/LookupKey.st kernel/BindingDict.st kernel/AbstNamespc.st > kernel/RootNamespc.st kernel/SysExcept.st kernel/DynVariable.st > kernel/HashedColl.st kernel/FileDescr.st kernel/FloatD.st kernel/FloatE.st > kernel/FloatQ.st kernel/URL.st kernel/VarBinding.st kernel/RecursionLock.st > kernel/Getopt.st kernel/Regex.st kernel/StreamOps.st > +kernel/Array.st kernel/CompildMeth.st kernel/LookupTable.st > kernel/RunArray.st kernel/Iterable.st kernel/ArrayColl.st > kernel/CompiledBlk.st kernel/Magnitude.st kernel/Semaphore.st > kernel/DeferBinding.st kernel/Association.st kernel/HomedAssoc.st > kernel/ContextPart.st kernel/MappedColl.st kernel/SeqCollect.st > kernel/Autoload.st kernel/DLD.st kernel/Memory.st kernel/Set.st kernel/Bag.st > kernel/Date.st kernel/Message.st kernel/MessageLookup.st > kernel/SharedQueue.st kernel/Behavior.st kernel/Delay.st kernel/Metaclass.st > kernel/SmallInt.st kernel/BlkClosure.st kernel/Continuation.st > kernel/Generator.st kernel/Dictionary.st kernel/MethodDict.st > kernel/SortCollect.st kernel/BlkContext.st kernel/DirMessage.st > kernel/MethodInfo.st kernel/Stream.st kernel/Boolean.st kernel/Directory.st > kernel/MthContext.st kernel/String.st kernel/UniString.st > kernel/ExcHandling.st kernel/Namespace.st kernel/SymLink.st kernel/VFS.st > kernel/VFSZip.st kernel/Builtins.st kernel/False.st kernel/Number.st kernel/S y > mbol.st kernel/ByteArray.st kernel/FilePath.st kernel/File.st > kernel/SysDict.st kernel/ScaledDec.st kernel/FileSegment.st kernel/Object.st > kernel/Time.st kernel/FileStream.st kernel/OrderColl.st kernel/CCallable.st > kernel/CCallback.st kernel/CFuncs.st kernel/Float.st kernel/PkgLoader.st > kernel/DirPackage.st kernel/Transcript.st kernel/CObject.st > kernel/Fraction.st kernel/Point.st kernel/True.st kernel/CStruct.st > kernel/IdentDict.st kernel/PosStream.st kernel/UndefObject.st kernel/CType.st > kernel/IdentitySet.st kernel/ProcSched.st kernel/ProcEnv.st > kernel/ValueAdapt.st kernel/CharArray.st kernel/Integer.st kernel/Process.st > kernel/CallinProcess.st kernel/WeakObjects.st kernel/Character.st > kernel/UniChar.st kernel/Interval.st kernel/RWStream.st kernel/OtherArrays.st > kernel/Class.st kernel/LargeInt.st kernel/Random.st kernel/WriteStream.st > kernel/ClassDesc.st kernel/Link.st kernel/ReadStream.st kernel/ObjMemory.st > kernel/Collection.st kernel/LinkedList.st kernel/Rectangle.st kernel/An s > iDates.st kernel/CompildCode.st kernel/LookupKey.st kernel/BindingDict.st > kernel/AbstNamespc.st kernel/RootNamespc.st kernel/SysExcept.st > kernel/DynVariable.st kernel/HashedColl.st kernel/FileDescr.st > kernel/FloatD.st kernel/FloatE.st kernel/FloatQ.st kernel/URL.st > kernel/VarBinding.st kernel/RecursionLock.st kernel/Getopt.st kernel/Regex.st > kernel/StreamOps.st > touch $(srcdir)/kernel/stamp-classes > diff --git a/kernel/PkgLoader.st b/kernel/PkgLoader.st > index b9748f2..53d9367 100644 > --- a/kernel/PkgLoader.st > +++ b/kernel/PkgLoader.st > @@ -917,20 +917,12 @@ XML.'> > > Namespace current: Kernel [ > > -PackageInfo subclass: StarPackage [ > +PackageInfo subclass: ExternalPackage [ > | file loadedPackage | > > <category: 'Language-Packaging'> > <comment: nil> > > - StarPackage class >> file: file [ > - <category: 'accessing'> > - ^(self new) > - file: file; > - name: (File stripPathFrom: (File stripExtensionFrom: file name)); > - yourself > - ] > - > fullPathOf: fileName [ > "Try appending 'self directory' and fileName to each of the directory > in baseDirectories, and return the path to the first tried filename > that > @@ -1079,6 +1071,24 @@ PackageInfo subclass: StarPackage [ > ] > > loadedPackage [ > + ^ self subclassResponsibility > + ] > +] > + > +ExternalPackage subclass: StarPackage [ > + > + <category: 'Language-Packaging'> > + <comment: 'I represent an external package in the form of a .star > package'> > + > + StarPackage class >> file: file [ > + <category: 'accessing'> > + ^(self new) > + file: file; > + name: (File stripPathFrom: (File stripExtensionFrom: file name)); > + yourself > + ] > + > + loadedPackage [ > <category: 'accessing'> > | package | > loadedPackage isNil ifFalse: [^loadedPackage]. > diff --git a/libgst/files.c b/libgst/files.c > index ec33933..a7156f9 100644 > --- a/libgst/files.c > +++ b/libgst/files.c > @@ -288,6 +288,7 @@ static const char standard_files[] = { > "StreamOps.st\0" > "Regex.st\0" > "PkgLoader.st\0" > + "DirPackage.st\0" > "Autoload.st\0" > }; > > diff --git a/packages.xml b/packages.xml > index c6d0e8c..fc6a049 100644 > --- a/packages.xml > +++ b/packages.xml > @@ -152,6 +152,7 @@ > <file>CFuncs.st</file> > <file>Float.st</file> > <file>PkgLoader.st</file> > + <file>DirPackage.st</file> > <file>Transcript.st</file> > <file>CObject.st</file> > <file>Fraction.st</file> > _______________________________________________ help-smalltalk mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-smalltalk
