[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage packages
From: |
Holger Hans Peter Freyther |
Subject: |
[Help-smalltalk] [PATCH 05/15] kernel: Introduce the DirPackage packages to help with development |
Date: |
Mon, 8 Apr 2013 11:30:21 +0200 |
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.'>
+
+ 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].
+ ].
+
+ 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/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/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/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/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/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/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/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/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>
--
1.7.10.4
- Re: [Help-smalltalk] [PATCH 08/15] 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 <=
- [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