[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage pack
From: |
Paolo Bonzini |
Subject: |
Re: [Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage packages to help with development |
Date: |
Sun, 14 Apr 2013 15:41:18 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130311 Thunderbird/17.0.4 |
Il 08/04/2013 11:30, Holger Hans Peter Freyther ha scritto:
> From: Holger Hans Peter Freyther <address@hidden>
>
> 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.
>
> 2013-03-24 Holger Hans Peter Freyther <address@hidden>
>
> * 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 | 6 +++
> NEWS | 7 +++
> kernel/DirPackage.st | 134
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> kernel/Makefile.frag | 2 +-
> kernel/PkgLoader.st | 28 +++++++----
> libgst/files.c | 1 +
> packages.xml | 1 +
> 7 files changed, 169 insertions(+), 10 deletions(-)
> create mode 100644 kernel/DirPackage.st
>
> diff --git a/ChangeLog b/ChangeLog
> index 6b6d9d2..8a3085d 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,9 @@
> +2013-03-24 Holger Hans Peter Freyther <address@hidden>
> +
> + * 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.
> +
> 2013-03-04 Holger Hans Peter Freyther <address@hidden>
>
> * 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..de353d9
> --- /dev/null
> +++ b/kernel/DirPackage.st
> @@ -0,0 +1,134 @@
> +"======================================================================
> +|
> +| 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
> + 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
> + ]
> +]
> +
> +PackageContainer subclass: DirPackageContainer [
> +
> + <category: 'Language-Packaging'>
> + <comment: 'I hold a list of parsed packages.'>
I'm not sure why this class is needed. Also, why adding ".dir"? It
seems to me that this is the real reason why you cannot use #fileIn.
> + DirPackageContainer class >> on: aPackage [
> + <category: 'creation'>
> + ^ self new
> + add: aPackage;
> + yourself
> + ]
> +
> + add: aPackage [
> + <category: 'addition'>
> +
> + self packages
> + at: aPackage name, '.dir' put: aPackage.
> + ]
> +
> + refresh: aDate [
> + "no op.. packages contain what we need"
> + ]
> +]
> +
> +]
> +
> +PackageLoader class extend [
> +
> + dirPackages [
> + | container |
> +
> + <category: '*Language-Kernel'>
> +
> + "Check if there is already a container"
> + root do: [:each |
> + each class = Kernel.DirPackageContainer
> + ifTrue: [^each].
> + ].
If this is really needed, please put the Kernel.DirPackageContainer
instance in DirPackageContainer, and call this
DirPackageContainer>>#uniqueInstance.
> + container := Kernel.DirPackageContainer new.
> + root add: container.
> + ^ container.
> + ]
> +
> + 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.
> +
> + self dirPackages add: package.
> +
> + "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/MthCo
> ntext.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/Sy
> 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/Ran
> dom.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/Comp
> 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/MthCo
> ntext.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/Sy
> 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/L
> argeInt.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/Ans
> 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] [PATCH] stinst: Avoid running into recursion in ProxyNamespace, (continued)
- [Help-smalltalk] [PATCH 06/15] stinst: Fix the sourcecode extraction in RBScanner>>#scanNumber, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 04/15] kernel: Remove unused variable from the StarPackage class, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 02/15] misc: Fix compiler warnings in libgst., Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 07/15] stinst: Fix parsing of negated numbers with the new RBNumberLiteralToken, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage packages to help with development, Holger Hans Peter Freyther, 2013/04/08
- Re: [Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage packages to help with development,
Paolo Bonzini <=
- [Help-smalltalk] [PATCH 10/15] gtktools: Move GtkListModel from VisualGST to GTKTools, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 09/15] gtktools: Introduce a GTKTools package with helper classes, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 15/15] tooling: Introduce a helper for a Monticello export, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 11/15] gtktools: Move the GtkSideBarWidget from VisualGST to GTKTools, Holger Hans Peter Freyther, 2013/04/08
- [Help-smalltalk] [PATCH 14/15] tooling: Introduce a new package for tooling helpers, Holger Hans Peter Freyther, 2013/04/08