Closed Bug 126792 Opened 21 years ago Closed 21 years ago

Templatise showdependencytree.cgi

Categories

(Bugzilla :: Bugzilla-General, defect)

2.15
defect
Not set
blocker

Tracking

()

RESOLVED FIXED
Bugzilla 2.16

People

(Reporter: gerv, Assigned: myk)

References

Details

Attachments

(2 files, 9 obsolete files)

891 bytes, patch
Details | Diff | Splinter Review
26.72 KB, patch
afranke
: review+
gerv
: review+
Details | Diff | Splinter Review
What it says on the tin.

Gerv
Target Milestone: --- → Bugzilla 2.16
Depends on: 120537
I'm trying to templatise it, but how should one templatise the "DumpKids" function?

It presently adds everything to $html. Since it is a tree and not a list, I
cannot use a simple [% FOREACH i = bugs %].

I could of cause say that one doesn't want to templatise this output and use
simply the $html. Opinions?
So if anyone wants to modify the <ul> part of the html output (such as the
background colour of the resolved bugs) then you need to come up with a nice
way to do so. ;-)
Comment on attachment 73245 [details] [diff] [review]
Templatized everything except <ul> output routine

Tobias - thanks for doing this patch. It's a bit hard to review because it 
doesn't follow the established conventions for template formatting. There's no 
reason you should know what these are, as we haven't published the document 
detailing them yet :-) But check out any checked-in template to get the idea.

>+[%# Define strings that will serve as the title and header of this page %]
>+[% buglink = BLOCK %]<a href="show_bug.cgi?id=[% bugid %]">[% bugid %]</a>[% END %]
>+[% title   = BLOCK %]Dependency tree for Bug [% bugid %][% END %]
>+[%    h1   = BLOCK %]Dependency tree for Bug [% buglink %][% END %]
>+
>+[% INCLUDE global/header 
>+   title = title
>+   h1    = h1
>+%]

This is better done as:

>+[% INCLUDE global/header 
>+   title = "Dependency tree for bug $bugid"
>+   h1    = "Dependency tree for bug <a href='show_bug.cgi?id=$bugid'>$bugid</a>"
>+%]

>+
>+[% PROCESS depthControllToolbar %]

One "l" in Control :-)

>+[% h3   =  BLOCK   %]Bugs that bug [% buglink %] depends on[% END %]
>+[% PROCESS makeTreeHTML type = "depend" %
>+
>+
>+[% h3 = BLOCK %]Bugs that bug [% buglink %] blocks[% END %]
>+[% PROCESS makeTreeHTML type = "block" %]

You should pass the "depends on" or "blocks" string as another parameter and 
construct H3 inside the makeTreeHTML block.

>+[%# Provide feedback for omitted bugs %]
>+[% note_text = BLOCK %][% IF maxdepth || hide_resolved %]
>+<p><small><b>(Only [% hide_resolved ? "open" : "" %] bugs
>+[% maxdepth ? "whose depth is less than $maxdepth " : "" %]
>+will be shown)</b></small></p>
>+[% END %][% END %]

I can't read this :-) standard template formatting style would make it
something like:

<p>
  <small>
    <b>
      (Only [% hide_resolved ? "open" : "" %] bugs
      [% maxdepth ? "whose depth is less than $maxdepth " : "" %] 
      will be shown)
   </b>
  </small>
</p>


>+   <!-- Hide/show resolved button 
>+         Swaps text depending on the state of hide_resolved -->

Please use template comments ( [%# %] ) rather than HTML, to avoid bloating the
output.

As a general point, the idea of templates is to separate presentation and
style. 
You appear to have basically rewritten the Perl in template toolkit language,
which 
doesn't really achieve that.

The template needs to be easily hackable on - having lots of conditionals in it
doesn't aid that. Try putting all the logic in the Perl script, setting
booleans in
$vars, and just checking them with [% IF canedit %] or similar.

The best way of conditionally including text is:

[% "whose depth is less than " IF maxdepth %]

Gerv
Attachment #73245 - Flags: review-
Also, you've attached this patch to the wrong bug :-) Your patch is to
showdependency_tree_, and this bug is for showdependency_graph_ :-)

I think the best way to fix this is swap the bugs over.

Gerv
Keywords: patch
Summary: Templatise showdependencygraph.cgi → Templatise showdependencytree.cgi
Attached patch v2: New version (obsolete) — Splinter Review
Remove $linked_id from .cgi (no longer needed), s/caneditbug/editbug/.

>+[%# Define strings that will serve as the title and header of this page %]
I took this from attachment/{edit,enter}.atml, but I changed it now.

In order to reduce the if's used in makeTreeHTML I split it into two blocks.
For the depthControlToolbar I do not yet completely know the best way get rid
of the if's, but I did minor improvements.
Comment on attachment 74301 [details] [diff] [review]
v2: New version

You need to indent your html/template stuff, for clearer reading, ie:

>+
>+[%###########################################################################%]
>+[%# Block for html tree building: Depends on                                #%]
>+[%###########################################################################%]
>+
>+[% BLOCK makeDependTree %]
>+<h3>Bugs that bug <a href='show_bug.cgi?id=$bugid'>$bugid</a> depends on
>+[% IF depend_html != "" %]
>+(<a href="buglist.cgi?bug_id=[% depend_keys %]">view as bug list</a>
>+[% IF canedit %] | <a href="buglist.cgi?bug_id=[% depend_keys %]&tweak=1">change several</a>[% END %])
>+[% END %]</h3>

should be:

[% BLOCK makeDependTree %]
  <h3>
    Bugs that bug <a href='show_bug.cgi?id=$bugid'>$bugid</a> depends on
    [% IF depend_html != "" %]
      (<a href="buglist.cgi?bug_id=[% depend_keys %]">view as bug list</a>
      [% IF canedit %]
	| <a href="buglist.cgi?bug_id=[% depend_keys %]&tweak=1">change
several</a>
      [% END %]
      )
    [% END %]
   </h3>

and so on. the canedit one could be on one line, except that it is then > 80
columns.
Attachment #74301 - Flags: review-
> You need to indent your html/template stuff, for clearer reading
Done. (I think all lines are still/now <= 80 characters)
Comment on attachment 74518 [details] [diff] [review]
v3: Change Layout in .tmpl file and rename to .html.tmpl

This really isn't ready - it doesn't work (the template name is wrong and the
template doesn't compile), and when you fix that, there are loads of graphical
glitches (such as it printing rows of $ signs.)

More testing required, I'm afraid :-|

Gerv
Attachment #74518 - Flags: review-
> This really isn't ready - it doesn't work
Here it works:
New version
http://bugzilla.physik.fu-berlin.de:8080/bugzilla/showdependencytree-new.cgi?id=98
vs. old version
http://bugzilla.physik.fu-berlin.de:8080/bugzilla/showdependencytree.cgi?id=98

> (the template name is wrong and the
In what sense? "dependencytree.html.tmpl" seems to be in the line with
template/default/buglist/

> template doesn't compile), and when you fix that,
> there are loads of graphical glitches (such as it printing rows of $ signs.)
With NS 4.79 and Opera 5 they look identically -- except for the cell after 'Max
Depth' (due to &nbsp;). -- And validator.w3.org says the HTML is ok.
(Mozilla is building I can test with it)

I believe that I created a working patch. The version I use on the server can be
fetch from: http://bugzilla.physik.fu-berlin.de:8080/bugzilla-patch/ (symlinks
to the running bugzilla).
> > (the template name is wrong and the
> In what sense? "dependencytree.html.tmpl" seems to be in the line with
> template/default/buglist/

In the sense that the CGI still says dependencytree.tmpl and so it can't find
the template! :-)

Are you sure you attached the right patch?

Gerv

> Are you sure you attached the right patch?

I seemingly haven't. (I have definitly too many bugszilla directories lying
around!)
Comment on attachment 74564 [details] [diff] [review]
v4: A really working patch (hopefully)

>+       (Only [% "open" IF hide_resolved %] bugs
>+             [% "whose depth is less than $maxdepth" IF maxdepth %] 

You need a space before "whose", otherwise you get "bugswhose depth".

Fix that, and r=gerv.

Gerv
Attachment #74564 - Flags: review+
Attached patch v5: fix ampersands in URLs (obsolete) — Splinter Review
This one adds Gerv's review fix in as well as a couple of
& -> &amp; in URL fixes.
Comment on attachment 74611 [details] [diff] [review]
v5: fix ampersands in URLs

> my $depend_html = makeTreeHTML($id, "dependson");
> $vars->{'depend_keys'} = join(',', keys %printed);

I don't really like this implicit parameter foo especially given neither return
value is more important than the other, wouldn't using a sub be better here, or
a multi-valued return?

> # Select maximum depth found for use in the toolbar
> $realdepth = $realdepth < $tmpdepth ? $tmpdepth : $realdepth;

Use max($realdepth, $tmpdepth)

> $vars->{'depend_keys'} = join(',', keys %printed);

Should be passed as a list, and comma separation should occur in the template.

I don't like the idea of continuing to generate HTML in the CGI.  This
prohibits XML output and so on.  I think the appropriate way to do this is to
get a tree and pass it to the template, and then let the template do a tree
walk using recursively called blocks, which I think TT can do.

Even if that's not possible, it would be better to pass a list of nodes and
indentation levels.

There will probably be more issues I have with this after these are fixed too.
Attachment #74611 - Flags: review-
   h1    = "Dependency tree for bug <a href='show_bug.cgi?id=$bugid'>$bugid</a>"

should probably be:

   h1    = "Dependency tree for bug <a
href=\"show_bug.cgi?id=$bugid\">$bugid</a>"

Even if we choose not to have full XHTML compatibility, we should be as close as
possible without failing to HTML-Validate.
>  href='show_bug.cgi?id=$bugid'>$bugid</a>"

I don't think there is anything syntactically wrong in using single
quotes to with attribute values in XML, XHTML or older HTML versions
down to 2.0, it's has more to do with coding style preferences.
Of course, consistent style is Good. Personally, I prefer double quotes
over single ones.

See
http://www.w3.org/TR/REC-xml#NT-AttValue
http://www.w3.org/MarkUp/html-spec/html-spec_3.html#SEC3.2.4

> without failing to HTML-Validate.

I'd extend this a bit; without failing to HTML-validate and without
causing unnecessary compatibility problems.
Meaning that things like />'s and checked="checked" should be avoided
even though they may validate.
Folks, what's the status on this?  Tobias, can you post an updated patch taking
Matty's review comments into account?
Taking.  I'm working on an updated patch.
Assignee: justdave → myk
>I don't really like this implicit parameter foo especially given neither
return
>value is more important than the other, wouldn't using a sub be better here,
or
>a multi-valued return?

Fixed.

>Use max($realdepth, $tmpdepth)

Fixed.

>Should be passed as a list, and comma separation should occur in the template.


Fixed.

>I don't like the idea of continuing to generate HTML in the CGI.  This
>prohibits XML output and so on.  I think the appropriate way to do this is to
>get a tree and pass it to the template, and then let the template do a tree
>walk using recursively called blocks, which I think TT can do.

Done.  

>   h1	  = "Dependency tree for bug <a
href='show_bug.cgi?id=$bugid'>$bugid</a>"
>
>should probably be:
>
>   h1	  = "Dependency tree for bug <a
>href=\"show_bug.cgi?id=$bugid\">$bugid</a>"

Quotations changed.  I'm a fan of double-quoting HTML attributes too, although
single quotes are in fact legal in both HTML and XHTML.

>I'd extend this a bit; without failing to HTML-validate and without
>causing unnecessary compatibility problems.

This is another bug, and not a 2.16 blocker, so it shouldn't block this fix.

Note that I had to re-write the tree-generating code to generate a data 
structure rather than HTML, which meant changing most of the code 
in the script, so you will probably find it easier to review the patched
script than the patch.
Attachment #73245 - Attachment is obsolete: true
Attachment #74301 - Attachment is obsolete: true
Attachment #74518 - Attachment is obsolete: true
Attachment #74564 - Attachment is obsolete: true
Attachment #74611 - Attachment is obsolete: true
Comment on attachment 78811 [details] [diff] [review]
patch v6: review fixes; all HTML has been templatized

A masterpiece of readability and clarity :-)

> if ($hide_resolved !~ /^\d+$/ || $hide_resolved != 1) { $hide_resolved = 0 };

if $hide_resolved !~ /^[0|1]$/ { $hide_resolved = 0 } ?

>+print "Content-Type: text/html\n\n";
>+$template->process("show/dependency-tree.html.tmpl", $vars)
>+  || DisplayError("Template process failed: " . $template->error())
>+  && exit;

ThrowTemplateError() :-)

>+    # If this bug has already been added to the tree someplace, don't add it again.
>+    return if $seen{$root_id};
>+    $seen{$root_id} = 1;

The "this bug appears elsewhere in the tree" thing no longer works? It seems
that bugs just don't appear the second time. Is this deliberate? Do you have
a better plan for this situation?

>+[% BLOCK depthControlToolbar %]
>+ <table cellpadding="3" border="0" cellspacing="0" bgcolor="#d0d0d0">
>+ <tr>
>+   [%# Hide/show resolved button
>+       Swaps text depending on the state of hide_resolved %]

This comment is about six lines too high in the file.

Currently, if the depth is "infinite", the "Infinite" button is clickable. 
It should probably be disabled.

Gerv
Attachment #78811 - Flags: review-
Attached patch patch v7: review fixes (obsolete) — Splinter Review
>if $hide_resolved !~ /^[0|1]$/ { $hide_resolved = 0 } ?

Fixed.

>ThrowTemplateError() :-)

There's a bug (or should be) on converting these throughout the code, and this
one should be fixed along with the rest.

>The "this bug appears elsewhere in the tree" thing no longer works? It seems
>that bugs just don't appear the second time. Is this deliberate? Do you have
>a better plan for this situation?

Fixed.	Fixing this bug made me rewrite most of the code, but fortunately for
the better. :-)

>This comment is about six lines too high in the file.

Not really, as it refers to the whole table cell/form block used to display the
button.

>Currently, if the depth is "infinite", the "Infinite" button is clickable. 
>It should probably be disabled.

Yeah, and the depth text field should be blanked out, but this is another bug.
Attachment #78811 - Attachment is obsolete: true
Keywords: review
Comment on attachment 78970 [details] [diff] [review]
patch v7: review fixes

>+my $hide_resolved = $::FORM{'hide_resolved'};
>+$hide_resolved = $hide_resolved ? 1 : 0;

Nit:

+my $hide_resolved = $::FORM{'hide_resolved'} ? 1 : 0;

Same idea; simpler.

>+my $maxdepth = $::FORM{'maxdepth'} || 0;
>+if ($maxdepth !~ /^\d+$/) { $maxdepth = 0 };

You could also do:
$::FORM{'maxdepth'} =~ /^(\d+)$/ ? $1 : 0;
but now I think I'm getting silly :-)

>+[% BLOCK display_tree %]
>+<ul>
>+  [% FOREACH dep_id = tree.$bug_id.dependencies %]
>+    [% dep = tree.$dep_id %]
>+    <li>
>+      [% "<strike>" IF !dep.open %]
>+      <a href="show_bug.cgi?id=[% dep_id %]">[% dep_id %] 
>+        [[% dep.milestone FILTER html %], 

A single space and the above comma appear even if there are no milestones.
So you get: 
   9 [, cyeh@bluemartini.com] - [bleep] censors won't let me [bleep] install
new government

>+        [% dep.assignee_email FILTER html %]] - 
>+        [% IF dep.seen %]
>+          <i>&lt;This bug appears elsewhere in this tree.&gt;</i></a>

No full stop after tree - it looks odd.

I think it would be very cool to be able to enhance showdependencytree
to link "this bug appears elsewhere in this tree" to where it appears.
This wouldn't be hard; but it would cause confusion if, before, the entire
line was a link to a bug and then part of it became a page internal link.

My suggestion is to make it so that none of the titles are linked any more
- i.e. the links stop after the assignee. Then, later, we can link the
words "elsewhere in the tree" as an internal anchor, and there will be
no confusion.

Does that make sense?

Gerv
Attachment #78970 - Flags: review-
I had the same idea as Gerv. This lets you jump to the first occurrence of the
bug by clicking on "elsewhere in the tree". Apply this patch to the version of
dependency-tree.html.tmpl that is generated by patch v7.
Attachment #78970 - Flags: review+
Comment on attachment 78970 [details] [diff] [review]
patch v7: review fixes

You need to add 'scriptname' to $vars, otherwise it won't work (at least on
4.x).

I have it installed together with the attachment above, and I think it's ready
to go, it's just nits.

I fear that with this patch we will recurse into multiple occurrences of
identical subtrees multiple times, once for each occurrence. (Not sure if it's
been that way before, but I don't think so, since there was the check for
"seen" during recursion.) The following may avoid it, but I'm not really sure
how it affects the correctness of $realdepth.
 showdependencytree.cgi.origpatch    Mon Apr 15 02:56:20 2002
+++ showdependencytree.cgi	Mon Apr 15 03:30:45 2002
@@ -88,6 +88,8 @@
 $vars->{'hide_resolved'}  = $hide_resolved;
 $vars->{'canedit'}	   = UserInGroup("editbugs");

+$vars->{'scriptname'}	   = "showdependencytree.cgi";
+
 print "Content-Type: text/html\n\n";
 $template->process("show/dependency-tree.html.tmpl", $vars)
   || DisplayError("Template process failed: " . $template->error())
@@ -101,6 +103,9 @@
     # Generates a dependency tree for a given bug.

     my ($bug_id, $relationship, $depth, $bugs) = @_;
+
+    # Short-circuit the tree generation if we've been here before
+    next if $bugs->{$bug_id};

     # Get the bug record from the database.
     my $bug = GetBug($bug_id);

Anyway, please carry forward my r=afranke to future versions of this patch. I
think this is very good work.
Comment on attachment 78970 [details] [diff] [review]
patch v7: review fixes

Sorry, ignore my previous comment about multiple recursions over identical
subtrees. I missed the "unless" clause in the recursion of GenerateTree.

Just an observation: If you click on "Show resolved", you generate a URL with
an "empty" parameter: "hide_resolved=" . In other cases, you get
"hide_resolved=0".
If I had the choice, I'd prefer either omitting the parameter completely, or
being consistent.
Maybe you could add a comment why the "next" in GenerateTree will always find a
containing loop (in particular, why the condition cannot be true if $bug_id=$id,
even if $bug{'exists'} is false). I think this is because in the case where
$bug_id=$id and $bug{'exists'} is false, then you can't get to this code because
it is catched in ValidateBugID($::FORM{'id'}). [It's just because I got a
runtime error when I tried what happens if I remove the $bug_id != $id part of
the condition.]

There is one strange thing with this patch, though. See
http://bugzilla.mathweb.org:8000/showdependencytree.cgi?id=61&hide_resolved=1
I think bug 75 shouldn't be shown there, since it is resolved.
Attachment #78970 - Flags: review+
Comment on attachment 78970 [details] [diff] [review]
patch v7: review fixes

Also note that all bug information is missing for the bugs that shouldn't be
displayed at all. Same problem here:
http://bugzilla.mathweb.org:8000/showdependencytree.cgi?id=75&hide_resolved=1

I think I should unmark the first-review until this is fixed. It doesn't seem
to be caused by my additional attachment since backing it out does not fix it.
The current CVS version of showdependencytree.cgi does not have this problem.
afranke: I like your patch (maybe Myk could roll it in) but I think that if we
are going to do that, we should unlinkify the bug summaries. This will make
what's going on much clearer, I think.

Gerv
Attached patch patch v8: review fixes (obsolete) — Splinter Review
>+my $hide_resolved = $::FORM{'hide_resolved'} ? 1 : 0;

Fixed.

>A single space and the above comma appear even if there are no milestones.

Fixed.

>No full stop after tree - it looks odd.

The period is correct, since the sentence is complete; it's the angle
brackets that make it look odd (and they're also redundant with the italic).
Reverting nevertheless so this patch works like the old version.  I'll
fix this in a subsequent "grammar/formatting" clean-up patch.

>I think it would be very cool to be able to enhance showdependencytree
>to link "this bug appears elsewhere in this tree" to where it appears.

Good idea, but new bug.

>You need to add 'scriptname' to $vars, otherwise it won't work

Fixed by hard-coding the script name in the template, since no other script
uses this template.

>Just an observation: If you click on "Show resolved", you generate a URL with
>an "empty" parameter: "hide_resolved=" . In other cases, you get
>"hide_resolved=0".

Fixed.

>Maybe you could add a comment why the "next" in GenerateTree will always find
a
>containing loop.

Not sure what you mean, but I think this issue no longer exists.

>I think bug 75 shouldn't be shown there, since it is resolved.

Fixed.
Attachment #78970 - Attachment is obsolete: true
Blocks: 137623
Comment on attachment 79329 [details] [diff] [review]
patch v8: review fixes

> >A single space and the above comma appear even if there are no milestones.
> 
> Fixed.

It's not, you know :-).

>+[% BLOCK display_tree %]
>+<ul>
>+  [% FOREACH dep_id = tree.$bug_id.dependencies %]
>+    [% dep = tree.$dep_id %]
>+    <li>
>+      [% "<strike>" IF !dep.open %]
>+      <a href="show_bug.cgi?id=[% dep_id %]">[% dep_id %] 
>+        [[% dep.milestone FILTER html %], 

[% IF dep.milestone %]
  [% dep.milestone FILTER html %], 
[% END %]

Fix this for definite, and r=gerv.

Gerv
Attachment #79329 - Flags: review+
Attached patch patch v9: fixes dep.milestone (obsolete) — Splinter Review
Oops, here's a patch with dep.milestone actually fixed.
Attachment #79329 - Attachment is obsolete: true
Comment on attachment 79363 [details] [diff] [review]
patch v9: fixes dep.milestone

r=gerv on this attachment per comment 30
Attachment #79363 - Flags: review+
Comment on attachment 79363 [details] [diff] [review]
patch v9: fixes dep.milestone

> >I think bug 75 shouldn't be shown there, since it is resolved.
>
> Fixed.

If I go to the URL now with patch v9 installed:
http://bugzilla.mathweb.org:8000/showdependencytree.cgi?id=61&hide_resolved=1
then indeed bug 75 is not displayed any more. But if I click on the "view as
bug list" link, then it's there again. 

Even worse on the second test url:
http://bugzilla.mathweb.org:8000/showdependencytree.cgi?id=75&hide_resolved=1
If I click on the "view as bug list" link there, I get all bugs, because it
refers to branch_id instead of bug_id. (Occurs twice in each of the patches.)
Attachment #79363 - Flags: review-
Attachment #79363 - Attachment is obsolete: true
Comment on attachment 79503 [details] [diff] [review]
patch v10: fixes Andreas' problem

Nice :-) I couldn't break it, and it's even more readable.

r=afranke
Attachment #79503 - Flags: review+
I'll give this second review after I've tried out interdiff on it and v.9 :-)

Gerv
Comment on attachment 79503 [details] [diff] [review]
patch v10: fixes Andreas' problem

r=gerv.

Gerv
Attachment #79503 - Flags: review+
Checking in showdependencytree.cgi;
/cvsroot/mozilla/webtools/bugzilla/showdependencytree.cgi,v  <-- 
showdependencytree.cgi
new revision: 1.16; previous revision: 1.15
done
RCS file:
/cvsroot/mozilla/webtools/bugzilla/template/default/show/dependency-tree.html.tmpl,v
done
Checking in template/default/show/dependency-tree.html.tmpl;
/cvsroot/mozilla/webtools/bugzilla/template/default/show/dependency-tree.html.tmpl,v
 <--  dependency-tree.html.tmpl
initial revision: 1.1
done
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Who forgot to run tests and add a version string....

Added under the 'fixes tree bustage if we had a tinderbox' rule, r=./runtests.sh
--verbose x2

--- dependency-tree.html.tmpl	17 Apr 2002 21:58:30 -0000	1.1
+++ dependency-tree.html.tmpl	17 Apr 2002 23:59:19 -0000
@@ -1,3 +1,4 @@
+<!-- 1.0@bugzilla.org -->
 [%# The contents of this file are subject to the Mozilla Public
   # License Version 1.1 (the "License"); you may not use this file
   # except in compliance with the License. You may obtain a copy of
QA Contact: matty_is_a_geek → default-qa
You need to log in before you can comment on or make changes to this bug.