changeset 1304:61ad556cfc8d

working toward 0.5.2 release
author Richard Jones <richard@users.sourceforge.net>
date Wed, 06 Nov 2002 11:38:43 +0000
parents 71be6588904f
children d8de80de9fc4
files CHANGES.txt cgi-bin/roundup.cgi doc/FAQ.txt doc/Makefile doc/announcement.txt doc/customizing.txt roundup/__init__.py roundup/backends/back_anydbm.py roundup/backends/rdbms_common.py roundup/templates/classic/html/issue.item roundup/templates/classic/html/user.item
diffstat 11 files changed, 87 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES.txt	Wed Nov 06 05:39:50 2002 +0000
+++ b/CHANGES.txt	Wed Nov 06 11:38:43 2002 +0000
@@ -22,6 +22,9 @@
 - added ID to the search page (sf bug 631601)
 - fixed filtering by id in anydbm
 - show issue ID in the headings (sf bug 631598)
+- show entire messages by default in issues (sf bug 625995)
+- fixed journalling to save old values instead of new (sorry it took so long GM)
+- handle missing REQUEST_URI for cgi-bin users (sf bug 620163)
 
 
 2002-10-16 0.5.1
--- a/cgi-bin/roundup.cgi	Wed Nov 06 05:39:50 2002 +0000
+++ b/cgi-bin/roundup.cgi	Wed Nov 06 11:38:43 2002 +0000
@@ -16,7 +16,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-# $Id: roundup.cgi,v 1.34 2002-10-08 03:31:09 richard Exp $
+# $Id: roundup.cgi,v 1.35 2002-11-06 11:38:42 richard Exp $
 
 # python version check
 from roundup import version_check
@@ -149,7 +149,7 @@
             else:
                 protocol = 'http'
             absolute_url = '%s://%s%s/'%(protocol, os.environ['HTTP_HOST'],
-                os.environ['REQUEST_URI'])
+                os.environ.get('REQUEST_URI', ''))
             request.send_header('Location', absolute_url)
             request.end_headers()
             out.write('Moved Permanently')
--- a/doc/FAQ.txt	Wed Nov 06 05:39:50 2002 +0000
+++ b/doc/FAQ.txt	Wed Nov 06 11:38:43 2002 +0000
@@ -2,16 +2,13 @@
 Roundup FAQ
 ===========
 
-:Version: $Revision: 1.10 $
+:Version: $Revision: 1.11 $
 
 NOTE: This is just a grabbag, most of this should go into documentation.
 
 .. contents::
 
 
-Changing HTML layout
---------------------
-
 Installation
 ------------
 
@@ -34,11 +31,6 @@
 * roundup-mailgw called via .forward from MTA, or running a cron job
   fetching via pop.
 
-see Troubleshooting_.
-
-
-Troubleshooting
----------------
 
 -----------------
 
--- a/doc/Makefile	Wed Nov 06 05:39:50 2002 +0000
+++ b/doc/Makefile	Wed Nov 06 11:38:43 2002 +0000
@@ -1,5 +1,5 @@
 PYTHON = /usr/bin/python2
-STXTOHTML = -c "from docutils.core import publish;publish(writer_name='html')"
+STXTOHTML = stx2html
 
 SOURCE = announcement.txt customizing.txt developers.txt FAQ.txt features.txt \
     glossary.txt implementation.txt index.txt design.txt \
@@ -10,7 +10,7 @@
 all: ${COMPILED}
 
 %.html: %.txt
-	${PYTHON} ${STXTOHTML} --report=warning -d $< $@
+	${STXTOHTML} --report=warning -d $< $@
 
 clean:
 	rm -f ${COMPILED}
--- a/doc/announcement.txt	Wed Nov 06 05:39:50 2002 +0000
+++ b/doc/announcement.txt	Wed Nov 06 11:38:43 2002 +0000
@@ -13,6 +13,32 @@
 
 We've had a good crack at bugs (thanks to all who contributed!):
 
+- added quotes around python interpreter in windows bat (sf bug 623963)
+- fixed link at end of installation doc (sf bug 623957)
+- handle "classname" URL path errors cleaner (generate a 404)
+- added CGI :remove:<propname> and :add:<propname> which specify item
+  ids to remove / add in <propname> multilink.
+- bugfix in boolean templating
+- remember the change note on bad submissions (sf bug 625989)
+- highlight required form fields (sf bug 625989)
+- force non-word boundary to match re: in subject (sf bug 626303)
+- handle sqlite bug (<2.7.2) (sf bug 630828)
+- handle missing props in anydbm stringFind
+- updated email package address formatting (deprecation)
+- copied email address quoting from email v2.4.3 so we're consistent
+  with 2.2
+- email summary extraction now takes the first whole sentence or line -
+  whichever is longer
+- documented dependency on Active State (sf bug 623959)
+- ensured there's no zero-length files in source (sf bug 633622)
+- added ID to the search page (sf bug 631601)
+- fixed filtering by id in anydbm
+- show issue ID in the headings (sf bug 631598)
+- show entire messages by default in issues (sf bug 625995)
+- fixed journalling to save old values instead of new (sorry I took so
+  long, GM)
+- handle missing REQUEST_URI for cgi-bin users (sf bug 620163)
+
 
 Source and documentation is available at the website:
      http://roundup.sourceforge.net/
--- a/doc/customizing.txt	Wed Nov 06 05:39:50 2002 +0000
+++ b/doc/customizing.txt	Wed Nov 06 11:38:43 2002 +0000
@@ -2,7 +2,7 @@
 Customising Roundup
 ===================
 
-:Version: $Revision: 1.61 $
+:Version: $Revision: 1.62 $
 
 .. This document borrows from the ZopeBook section on ZPT. The original is at:
    http://www.zope.org/Documentation/Books/ZopeBook/current/ZPT.stx
@@ -2144,26 +2144,23 @@
    which displays only the allowed status to transition to.
 
 
-Displaying entire message contents in the issue display
--------------------------------------------------------
+Displaying only message summaries in the issue display
+------------------------------------------------------
 
 Alter the issue.item template section for messages to::
 
  <table class="messages" tal:condition="context/messages">
-  <tr><th colspan=3 class="header">Messages</th></tr>
-  <tal:block tal:repeat="msg context/messages/reverse">
-   <tr>
-    <th><a tal:attributes="href string:msg${msg/id}"
-           tal:content="string:msg${msg/id}"></a></th>
-    <th tal:content="string:Author: ${msg/author}">author</th>
-    <th tal:content="string:Date: ${msg/date}">date</th>
-   </tr>
-   <tr>
-    <td colspan="3" class="content">
-     <pre tal:content="msg/content">content</pre>
-    </td>
-   </tr>
-  </tal:block>
+  <tr><th colspan=5 class="header">Messages</th></tr>
+  <tr tal:repeat="msg context/messages">
+   <td><a tal:attributes="href string:msg${msg/id}"
+          tal:content="string:msg${msg/id}"></a></td>
+   <td tal:content="msg/author">author</td>
+   <td nowrap tal:content="msg/date/pretty">date</td>
+   <td tal:content="msg/summary">summary</td>
+   <td>
+    <a tal:attributes="href string:?:remove:messages=${msg/id}&:action=edit">remove</a>
+   </td>
+  </tr>
  </table>
 
 Restricting the list of users that are assignable to a task
@@ -2718,7 +2715,7 @@
 -------------------------------------------------------------------
 
 This is pretty simple - all we need to do is copy the code from the example
-`displaying entire message contents in the issue display`_ into our template
+`displaying only message summaries in the issue display`_ into our template
 alongside the summary display, and then introduce a switch that shows either
 one or the other. We'll use a new form variable, ``:whole_messages`` to
 achieve this::
--- a/roundup/__init__.py	Wed Nov 06 05:39:50 2002 +0000
+++ b/roundup/__init__.py	Wed Nov 06 11:38:43 2002 +0000
@@ -15,7 +15,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-# $Id: __init__.py,v 1.15 2002-10-16 06:55:17 richard Exp $
+# $Id: __init__.py,v 1.16 2002-11-06 11:38:42 richard Exp $
 
 ''' Roundup - issue tracking for knowledge workers.
 
@@ -67,6 +67,6 @@
 much prettier cake :)
 '''
 
-__version__ = '0.5.1'
+__version__ = '0.5.2'
 
 # vim: set filetype=python ts=4 sw=4 et si
--- a/roundup/backends/back_anydbm.py	Wed Nov 06 05:39:50 2002 +0000
+++ b/roundup/backends/back_anydbm.py	Wed Nov 06 11:38:43 2002 +0000
@@ -15,7 +15,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-#$Id: back_anydbm.py,v 1.91 2002-11-06 05:39:49 richard Exp $
+#$Id: back_anydbm.py,v 1.92 2002-11-06 11:38:42 richard Exp $
 '''
 This module defines a backend that saves the hyperdatabase in a database
 chosen by anydbm. It is guaranteed to always be available in python
@@ -888,7 +888,7 @@
         # done
         self.db.addnode(self.classname, newid, propvalues)
         if self.do_journal:
-            self.db.addjournal(self.classname, newid, 'create', propvalues)
+            self.db.addjournal(self.classname, newid, 'create', {})
 
         self.fireReactors('create', newid, None)
 
@@ -970,7 +970,7 @@
             creation = None
         if d.has_key('activity'):
             del d['activity']
-        self.db.addjournal(self.classname, newid, 'create', d, creator,
+        self.db.addjournal(self.classname, newid, 'create', {}, creator,
             creation)
         return newid
 
@@ -1145,9 +1145,11 @@
 
             # if the value's the same as the existing value, no sense in
             # doing anything
-            if node.has_key(propname) and value == node[propname]:
+            current = node.get(propname, None)
+            if value == current:
                 del propvalues[propname]
                 continue
+            journalvalues[propname] = current
 
             # do stuff based on the prop type
             if isinstance(prop, Link):
@@ -1283,8 +1285,7 @@
         self.db.setnode(self.classname, nodeid, node)
 
         if self.do_journal:
-            propvalues.update(journalvalues)
-            self.db.addjournal(self.classname, nodeid, 'set', propvalues)
+            self.db.addjournal(self.classname, nodeid, 'set', journalvalues)
 
         self.fireReactors('set', nodeid, oldvalues)
 
@@ -1612,7 +1613,6 @@
         # now, find all the nodes that are active and pass filtering
         l = []
         cldb = self.db.getclassdb(cn)
-        print filterspec
         try:
             # TODO: only full-scan once (use items())
             for nodeid in self.db.getnodeids(cn, cldb):
--- a/roundup/backends/rdbms_common.py	Wed Nov 06 05:39:50 2002 +0000
+++ b/roundup/backends/rdbms_common.py	Wed Nov 06 11:38:43 2002 +0000
@@ -1,4 +1,4 @@
-# $Id: rdbms_common.py,v 1.23 2002-10-31 04:02:23 richard Exp $
+# $Id: rdbms_common.py,v 1.24 2002-11-06 11:38:42 richard Exp $
 ''' Relational database (SQL) backend common code.
 
 Basics:
@@ -1102,7 +1102,7 @@
         # done
         self.db.addnode(self.classname, newid, propvalues)
         if self.do_journal:
-            self.db.addjournal(self.classname, newid, 'create', propvalues)
+            self.db.addjournal(self.classname, newid, 'create', {})
 
         self.fireReactors('create', newid, None)
 
@@ -1184,7 +1184,7 @@
             creation = None
         if d.has_key('activity'):
             del d['activity']
-        self.db.addjournal(self.classname, newid, 'create', d, creator,
+        self.db.addjournal(self.classname, newid, 'create', {}, creator,
             creation)
         return newid
 
@@ -1323,9 +1323,11 @@
 
             # if the value's the same as the existing value, no sense in
             # doing anything
-            if node.has_key(propname) and value == node[propname]:
+            current = node.get(propname, None)
+            if value == current:
                 del propvalues[propname]
                 continue
+            journalvalues[propname] = current
 
             # do stuff based on the prop type
             if isinstance(prop, Link):
@@ -1460,8 +1462,7 @@
         self.db.setnode(self.classname, nodeid, propvalues, multilink_changes)
 
         if self.do_journal:
-            propvalues.update(journalvalues)
-            self.db.addjournal(self.classname, nodeid, 'set', propvalues)
+            self.db.addjournal(self.classname, nodeid, 'set', journalvalues)
 
         self.fireReactors('set', nodeid, oldvalues)
 
--- a/roundup/templates/classic/html/issue.item	Wed Nov 06 05:39:50 2002 +0000
+++ b/roundup/templates/classic/html/issue.item	Wed Nov 06 11:38:43 2002 +0000
@@ -127,17 +127,23 @@
  </p>
 
  <table class="messages" tal:condition="context/messages">
-  <tr><th colspan=5 class="header">Messages</th></tr>
-  <tr tal:repeat="msg context/messages">
-   <td><a tal:attributes="href string:msg${msg/id}"
-          tal:content="string:msg${msg/id}"></a></td>
-   <td tal:content="msg/author">author</td>
-   <td nowrap tal:content="msg/date/pretty">date</td>
-   <td tal:content="msg/summary">summary</td>
-   <td>
-    <a tal:attributes="href string:?:remove:messages=${msg/id}&:action=edit">remove</a>
-   </td>
-  </tr>
+  <tr><th colspan="4" class="header">Messages</th></tr>
+  <tal:block tal:repeat="msg context/messages">
+   <tr>
+    <th><a tal:attributes="href string:msg${msg/id}"
+           tal:content="string:msg${msg/id}"></a></th>
+    <th tal:content="string:Author: ${msg/author}">author</th>
+    <th tal:content="string:Date: ${msg/date}">date</th>
+    <th>
+     <a tal:attributes="href string:?:remove:messages=${msg/id}&:action=edit">remove</a>
+    </th>
+   </tr>
+   <tr>
+    <td colspan="4" class="content">
+     <pre tal:content="msg/content">content</pre>
+    </td>
+   </tr>
+  </tal:block>
  </table>
 
  <table class="files" tal:condition="context/files">
--- a/roundup/templates/classic/html/user.item	Wed Nov 06 05:39:50 2002 +0000
+++ b/roundup/templates/classic/html/user.item	Wed Nov 06 11:38:43 2002 +0000
@@ -64,14 +64,17 @@
 </form>
 
 <table class="otherinfo" tal:condition="context/queries">
- <tr><th colspan="2" class="header">Queries</th></tr>
- <tr><th>Name</th><th>Display</th></tr>
+ <tr><th colspan="3" class="header">Queries</th></tr>
+ <tr><th>Name</th><th colspan="2">Actions</th></tr>
  <tr tal:repeat="query context/queries">
   <td><a tal:attributes="href string:query${query/id}"
          tal:content="query/name"></a></td>
   <td>
    <a tal:attributes="href python:'%s%s'%(query['klass'], query['url'])">display</a>
   </td>
+  <td>
+   <a tal:attributes="href string:?:remove:queries=${query/id}&:action=edit">remove</a>
+  </td>
  </tr>
 </table>
 

Roundup Issue Tracker: http://roundup-tracker.org/