site

(djk)
2011-05-07: doc

doc

diff --git a/readme.txt b/readme.txt
--- a/readme.txt
+++ b/readme.txt
@@ -88,7 +88,11 @@ BUG: Default FCP port wrong for CLI clie
 BUG: fix the discover UI to correctly handle posts from a different nym than the insert
 BUG: wikitext should use unix line terminators not DOS (+1 byte per line)
 BUG: MUST show in the UI when edited wikitext has been truncated because it's too big.
-BUG: Make Freetalk configuration work like fms configuration. i.e. no need for public key.
+*BUG: Make Freetalk configuration work like fms configuration. i.e. no need for public key.
+---
+CHORE: Write a script to cut releases and insert them into freeneet.
+CHORE: Fix references to "FMS" to reflect the fact that either Freetalk or FMS may be used.
+
 ---
 IDEA: shrink blocks by using a token map?  use short token in binary rep, fixup to full 20byte hash on read / write?
 *IDEA: Support links to other wikis. e.g.:b fniki://nntp/group/name[/SSK@some_version]
@@ -104,8 +108,6 @@ IDEA: Caching in FreenetIO
         FreenetTopKey getTopKey(ssk)
         SHA1 cacheBlock(CHK, InputStream)
         boolean isCached(CHK)
-*IDEA: Pillage glog graph drawing code from hg to improve discover versions UI
-      http://selenic.com/repo/hg-stable/file/4ec34de8bbb1/hgext/graphlog.py
 IDEA: Ditch human readable name <--> SSK fixup and generate arbitrary names from
       SSK public key hash (== big number). <n_first>*<m_middle>*<o_last> == big number
       let n = 1000, m = 1000,  o == 1000 => ???? [NOT QUITE. LOOK UP Combinatorics]
@@ -115,11 +117,27 @@ IDEA: Wikibot ng. Just uses its FMS trus
       send a "Stake" biss message for it.
 IDEA: Freetalk vs Freenet interop
       0) Group naming convention. anythingbutmul.foo.bar.baz -> mul.anythingbutmul.foo.bar.baz in freetalk
-      1) fniki://groupname/wikiname -- same for both. Freetalk nntp code prefixes mul. to group
+      1) fniki://groupname/wikiname/[optional SSK] -- same for both. Freetalk nntp code prefixes mul. to group
       2) In config UI. add freetalk config and enable checkboxes for freeetalk and fms
-      3) Conventiton or config to choose which private key is used for SSK insertion.
+      3) Convention or config to choose which private key is used for SSK insertion.
       Hmmm... not sure if people would use this feature because of the correlation of ids.
 ---
 Fixed bugs:
 2ce3a4499a2c: BUG: No way to create an empty wiki from the UI. [requested by a real user]
 cab9533f4cb8: BUG: Can the <<<TOC>>> macro be made to play nice with the ContentFilter? [suggestion from sethcg]
+
+Added features:
+08d1b85d8ddd: IDEA: Pillage glog graph drawing code from hg to improve discover versions UI
+      from  http://selenic.com/repo/hg-stable/file/4ec34de8bbb1/hgext/graphlog.py
+      ISSUES:
+      0) It doesn't draw arbitary DAGs, only DAGS that could have reasonably constructed
+         from an ORDERED sequence of commits.
+      1) I implemented construction of DAGS from an unsorted list of (child, parent) pairs
+         BUT it depends CRITICALLY on:
+         a) being able to find the root nodes. (i.e. the nodes for which no parents are available).
+         b) being able to find the child nodes. (i.e. nodes without children)
+      2) This theoretically leaves the drawing code vulnerable to attack.
+         ATTACK: Create a cycle so that there are no root or child nodes.
+         PUNT: Don't worry about it. Attacker has to break SHA1 to create a cycle
+               because of the way the version is string is generated.
+
diff --git a/src/fniki/wiki/GraphLog.java b/src/fniki/wiki/GraphLog.java
--- a/src/fniki/wiki/GraphLog.java
+++ b/src/fniki/wiki/GraphLog.java
@@ -1,3 +1,4 @@
+// KNOWN LIMITATION: Doesn't handle 'octopus merges'. Suppports at most 2 parents per rev.
 /* Class to draw the revision graph.
  *
  * Changes Copyright (C) 2010, 2011 Darrell Karbott (see below).
@@ -610,6 +611,7 @@ public class GraphLog {
         return reversed_graph;
     }
 
+    // DCI: fix name
     public static ParentInfo getParentInfo(Map<String, Set<String>> graph) {
         Set<String> allParents = new HashSet<String>();
         for (Set<String> parents : graph.values()) {