mercurial/HGPackageModelRegistry.st
changeset 296 f7824c40a07e
parent 270 fefcd7551c36
child 297 0f36d2c091e9
--- a/mercurial/HGPackageModelRegistry.st	Mon Jun 10 02:06:48 2013 +0100
+++ b/mercurial/HGPackageModelRegistry.st	Tue Jun 11 00:55:03 2013 +0100
@@ -40,13 +40,10 @@
     "Returns a HGPackageModel for given package or nil
      if given package is not backed by Mercurial repository."
 
-    | dir components names directories root rootI rootD pkg|
+    | dir components names namei directories root rootI rootD pkg|
 
     packages at: package ifPresent: [ :p | ^ p ].
 
-    dir := Smalltalk getPackageDirectoryForPackage: package.
-    dir isNil ifTrue:[ ^ nil ].
-
     components := OrderedCollection new.
     names := OrderedCollection new.
 
@@ -73,6 +70,21 @@
         names add: package
 
     ].
+
+    "Package might be sub-package which may not exists. Search for some
+     existing packagedir along package hierarchy"
+    namei := names size.
+    [ dir isNil and: [ namei > 0  ] ] whileTrue:[
+        dir := Smalltalk getPackageDirectoryForPackage: (names at: namei).
+        dir notNil ifTrue:[
+            namei + 1 to: names size do:[:i|
+                dir := dir / (components at: i).
+            ].
+        ].
+        namei := namei - 1.
+    ].
+    dir isNil ifTrue:[ ^ nil ].
+
     directories := Array new: components size.
     directories at: components size put: dir.
     directories size - 1 downTo: 1 do:[:i|
@@ -105,6 +117,7 @@
     ^pkg
 
     "Created: / 18-03-2013 / 22:26:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-06-2013 / 00:43:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 packageNamed:package