shithub: werc

Download patch

ref: 159c3988021efb2bcbf22bc1a6aa856259eb0728
parent: a7babb2c6f55db94015c4c84ae71336b56d05dd0
author: uriel <uriel@engel.se.cat-v.org>
date: Thu Jan 22 04:22:15 EST 2009

Change app loading to be done in two passes, first source app files, then call init for enabled apps.
This makes it possible to call app functions at config time.
Provide $conf_wd variable at config time, which can in turn be used by apps to determine where in the tree we are at config/setup time.

--- a/bin/werc.rc
+++ b/bin/werc.rc
@@ -99,13 +99,10 @@
     if not if(test -f $local_path.txt)
         handler_body_main=(txt_handler $local_path.txt)
 
-    # Apps
-    if(! ~ $#enabled_apps 0) {
-        for(a in $enabled_apps) {
-            . ./apps/$a/app.rc
+    # Apps, XXX: Maybe we should check that $enabled_apps exist in $werc_apps.
+    if(! ~ $#enabled_apps 0)
+        for(a in $enabled_apps)
             $a^'_init'
-        }
-    }
 
     if(! ~ $#handler_body_main 0)
         { } # We are done
@@ -138,6 +135,7 @@
 master_template=default_master.tpl
 res_tail='</body></html>'
 ll_add handlers_bar_left nav_tree
+werc_apps=( apps/* )
 werc_root=`{pwd}
 for(i in siteTitle siteSubTitle pageTitle extraHeaders)
     $i = ''
@@ -154,6 +152,9 @@
 if(test -f etc/initrc.local)
     . ./etc/initrc.local
 
+for(a in $werc_apps)
+    . ./$a/app.rc
+
 # Parse request URL
 # NOTE: $REQUEST_URI is not officially in CGI 1.1, but seems to be de-facto
 req_path=`{echo -n $REQUEST_URI | sed 's/\?.*//; s/'^$forbidden_uri_chars^'//g; s/\.\.*/./g; 1q'}
@@ -181,13 +182,13 @@
 if not if(test -d $local_path)
     perm_redirect $req_path^'/'
 
-p=()
 cd $sitedir
 if(test -f _werc/config)
     . _werc/config
+conf_wd='' # This can be used inside config files to know where we are in the document tree.
 for(i in ('' $args)) {
-    p=($"p^/^$i)
-    req_paths_list=($req_paths_list $p)
+    config_wd=($"config_wd^/^$i)
+    req_paths_list=($req_paths_list $config_wd)
     if(test -d $i) {
         cd $i
         if(test -f _werc/config)