[PATCH V2] summary, changelog: make the comments counts more accurate

Angel Ezquerra angel.ezquerra at gmail.com
Thu Feb 25 10:44:49 UTC 2016


# HG changeset patch
# User Angel Ezquerra <angel.ezquerra at gmail.com>
# Date 1456382571 -3600
#      Thu Feb 25 07:42:51 2016 +0100
# Node ID c1fa76fe1c6fabb31d03826d946e92dd703e4243
# Parent  05a85a6cecba5c8caeb7996590365d5d9bc523c9
summary, changelog: make the comments counts more accurate

Up until now the comment counts shown on the summary and changelog counted both
actual (non-empty) comments and status changes. This was not particularly
useful, since the status information is already shown on the status icon. Also,
openeing a changeset page to find out that it just had its status changed (with
no textual comments) is quite annoying.

Instead, show the number of "actual" comments (i.e. those that have some comment
text).

diff --git a/kallithea/controllers/changelog.py b/kallithea/controllers/changelog.py
--- a/kallithea/controllers/changelog.py
+++ b/kallithea/controllers/changelog.py
@@ -62,6 +62,7 @@
     page_revisions = [x.raw_id for x in list(c.repo_changesets)]
     c.comments = c.db_repo.get_comments(page_revisions)
     c.statuses = c.db_repo.statuses(page_revisions)
+    c.comment_counts = c.db_repo.count_comments(c.comments)
 
 
 class ChangelogController(BaseRepoController):
@@ -152,6 +153,7 @@
             page_revisions = [x.raw_id for x in c.pagination]
             c.comments = c.db_repo.get_comments(page_revisions)
             c.statuses = c.db_repo.statuses(page_revisions)
+            c.comment_counts = c.db_repo.count_comments(c.comments)
         except EmptyRepositoryError as e:
             h.flash(safe_str(e), category='warning')
             raise HTTPFound(location=url('summary_home', repo_name=c.repo_name))
diff --git a/kallithea/model/db.py b/kallithea/model/db.py
--- a/kallithea/model/db.py
+++ b/kallithea/model/db.py
@@ -1395,6 +1395,16 @@
             grouped[cmt.revision].append(cmt)
         return grouped
 
+    def count_comments(self, comments):
+        """
+        Returns the count of (non-empty) comments for this repository grouped by revisions
+
+        :param comments: a {revision: comment} dict, as returned by get_comments()
+        """
+        def count_revision_comments(revision_comments):
+            return len([cm for cm in revision_comments if cm.text])
+        return {raw_id: count_revision_comments(revision_comments) for raw_id, revision_comments in comments.iteritems()}
+
     def statuses(self, revisions):
         """
         Returns statuses for this repository.
diff --git a/kallithea/templates/changelog/changelog.html b/kallithea/templates/changelog/changelog.html
--- a/kallithea/templates/changelog/changelog.html
+++ b/kallithea/templates/changelog/changelog.html
@@ -120,11 +120,11 @@
                             <div class="log-container">
                                 <div class="message" id="C-${cs.raw_id}">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
                                 <div class="extra-container">
-                                    %if c.comments.get(cs.raw_id):
+                                    %if c.comment_counts.get(cs.raw_id, 0):
                                         <div class="comments-container">
                                             <div class="comments-cnt" title="${_('Changeset has comments')}">
                                                 <a href="${c.comments[cs.raw_id][0].url()}">
-                                                    ${len(c.comments[cs.raw_id])}
+                                                    ${c.comment_counts.get(cs.raw_id, 0)}
                                                     <i class="icon-comment-discussion"></i>
                                                 </a>
                                             </div>
diff --git a/kallithea/templates/changelog/changelog_summary_data.html b/kallithea/templates/changelog/changelog_summary_data.html
--- a/kallithea/templates/changelog/changelog_summary_data.html
+++ b/kallithea/templates/changelog/changelog_summary_data.html
@@ -31,11 +31,11 @@
             </div>
         </td>
         <td class="compact">
-              %if c.comments.get(cs.raw_id,[]):
+              %if c.comment_counts.get(cs.raw_id, 0):
                <div class="comments-container">
                    <div title="${('comments')}">
-                       <a href="${c.comments[cs.raw_id][0].url()}">
-                          <i class="icon-comment"></i>${len(c.comments[cs.raw_id])}
+                        <a href="${c.comments[cs.raw_id][0].url()}">
+                           <i class="icon-comment"></i>${c.comment_counts.get(cs.raw_id, 0)}
                        </a>
                    </div>
                </div>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kallithea.patch
Type: text/x-patch
Size: 4751 bytes
Desc: not available
URL: <http://lists.sfconservancy.org/pipermail/kallithea-general/attachments/20160225/f3b7ac6f/attachment.bin>


More information about the kallithea-general mailing list