[SCM] build.samba.org - branch master updated

Jelmer Vernooij jelmer at samba.org
Sat Nov 13 08:21:23 MST 2010


The branch, master has been updated
       via  35a841a Improve performance of history browsing.
      from  32b2b08 Mention correct port in message.

http://gitweb.samba.org/?p=build-farm.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 35a841a11f0c9dda8d56bb74cb16efdfe42f39dc
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Sat Nov 13 16:21:06 2010 +0100

    Improve performance of history browsing.

-----------------------------------------------------------------------

Summary of changes:
 buildfarm/history.py            |   44 +++++++++++++-----------------
 buildfarm/tests/test_history.py |    7 -----
 web/build.py                    |   56 +++++++++++++++++++++++---------------
 web/trees.conf                  |    2 +-
 4 files changed, 54 insertions(+), 55 deletions(-)


Changeset truncated at 500 lines:

diff --git a/buildfarm/history.py b/buildfarm/history.py
index d8532e2..4a402ae 100644
--- a/buildfarm/history.py
+++ b/buildfarm/history.py
@@ -29,33 +29,24 @@ from dulwich.repo import Repo
 class Branch(object):
     """A version control branch."""
 
-    def authors(self, limit=None):
-        """Determine all authors that have contributed to this project.
-        """
-        ret = set()
-        for rev in self.log(limit=limit):
-            ret.add(rev.author)
-        return ret
-
     def log(self, limit=None):
         raise NotImplementedError(self.log)
 
     def diff(self, revision):
         raise NotImplementedError(self.diff)
 
+    def changes_summary(self, revision):
+        raise NotImplementedError(self.changes_summary)
+
 
 class Revision(object):
 
-    def __init__(self, revision, date, committer, author, message, modified=[], added=[],
-            removed=[]):
+    def __init__(self, revision, date, committer, author, message):
         self.revision = revision
         self.date = date
         self.author = author
         self.committer = committer
         self.message = message
-        self.modified = modified
-        self.added = added
-        self.removed = removed
 
 
 class GitBranch(Branch):
@@ -73,20 +64,9 @@ class GitBranch(Branch):
         return self.store.tree_changes(parent_tree, commit.tree)
 
     def _revision_from_commit(self, commit):
-        added = set()
-        modified = set()
-        removed = set()
-        for ((oldpath, newpath), (oldmode, newmode), (oldsha, newsha)) in self._changes_for(commit):
-            if oldpath is None:
-                added.add(newpath)
-            elif newpath is None:
-                removed.add(oldpath)
-            else:
-                modified.add(newpath)
         return Revision(commit.id, commit.commit_time,
             committer=commit.committer, author=commit.author,
-            message=commit.message, modified=modified, removed=removed,
-            added=added)
+            message=commit.message)
 
     def log(self, from_rev=None, exclude_revs=None, limit=None):
         if from_rev is None:
@@ -110,6 +90,20 @@ class GitBranch(Branch):
                      continue
                  pending_commits.append(p)
 
+    def changes_summary(self, revision):
+        commit = self.repo[revision]
+        added = set()
+        modified = set()
+        removed = set()
+        for ((oldpath, newpath), (oldmode, newmode), (oldsha, newsha)) in self._changes_for(commit):
+            if oldpath is None:
+                added.add(newpath)
+            elif newpath is None:
+                removed.add(oldpath)
+            else:
+                modified.add(newpath)
+        return (added, modified, removed)
+
     def diff(self, revision):
         commit = self.repo[revision]
         f = StringIO()
diff --git a/buildfarm/tests/test_history.py b/buildfarm/tests/test_history.py
index 137c0b5..29d7c1a 100644
--- a/buildfarm/tests/test_history.py
+++ b/buildfarm/tests/test_history.py
@@ -46,10 +46,3 @@ class GitBranchTests(TestCase):
         entry, diff = list(branch.diff(revid))
         self.assertEquals("message", entry.message)
         self.assertEquals("", diff)
-
-    def test_authors_empty(self):
-        branch = GitBranch(self.repo.path, "master")
-        self.assertEquals(set(), branch.authors())
-        revid = self.repo.do_commit("message", committer="Jelmer Vernooij <jelmer at samba.org>")
-        self.assertEquals(set(["Jelmer Vernooij <jelmer at samba.org>"]),
-            branch.authors())
diff --git a/web/build.py b/web/build.py
index 227512a..f4f7aea 100755
--- a/web/build.py
+++ b/web/build.py
@@ -361,7 +361,7 @@ def web_paths(t, paths):
         raise Exception("Unknown scm %s" % t.scm)
 
 
-def history_row_html(myself, entry, tree):
+def history_row_html(myself, entry, tree, changes):
     """show one row of history table"""
     msg = cgi.escape(entry.message)
     t = time.asctime(time.gmtime(entry.date))
@@ -395,25 +395,27 @@ def history_row_html(myself, entry, tree):
                  myself, tree.name, entry.date, revision_url,
                  msg, entry.author)
 
-    if entry.modified:
+    (added, modified, removed) = changes
+
+    if modified:
         yield "<div class=\"files\"><span class=\"label\">Modified: </span>"
-        yield web_paths(tree, entry.modified)
+        yield web_paths(tree, modified)
         yield "</div>\n"
 
-    if entry.added:
+    if added:
         yield "<div class=\"files\"><span class=\"label\">Added: </span>"
-        yield web_paths(tree, entry.added)
+        yield web_paths(tree, added)
         yield "</div>\n"
 
-    if entry.removed:
+    if removed:
         yield "<div class=\"files\"><span class=\"label\">Removed: </span>"
-        yield web_paths(tree, entry.removed)
+        yield web_paths(tree, removed)
         yield "</div>\n"
 
     yield "</div>\n"
 
 
-def history_row_text(entry, tree):
+def history_row_text(entry, tree, changes):
     """show one row of history table"""
     msg = cgi.escape(entry.message)
     t = time.asctime(time.gmtime(entry.date))
@@ -422,9 +424,10 @@ def history_row_text(entry, tree):
     yield "Author: %s\n" % entry.author
     if entry.revision:
         yield "Revision: %s\n" % entry.revision
-    yield "Modified: %s\n" % entry.modified
-    yield "Added: %s\n" % entry.added
-    yield "Removed: %s\n" % entry.removed
+    (added, modified, removed) = changes
+    yield "Modified: %s\n" % modified
+    yield "Added: %s\n" % added
+    yield "Removed: %s\n" % removed
     yield "\n\n%s\n\n\n" % msg
 
 
@@ -863,21 +866,30 @@ class DiffPage(BuildFarmPage):
 
     def render(self, myself, tree, revision):
         t = self.buildfarm.trees[tree]
-        (entry, diff) = t.get_branch().diff(revision)
+        branch = t.get_branch()
+        (entry, diff) = branch.diff(revision)
         # get information about the current diff
         title = "GIT Diff in %s:%s for revision %s" % (
             tree, t.branch, revision)
         yield "<h2>%s</h2>" % title
-        yield "".join(history_row_html(myself, entry, t))
+        changes = branch.changes_summary(revision)
+        yield "".join(history_row_html(myself, entry, t, changes))
         yield show_diff(diff, "html")
 
 
 class RecentCheckinsPage(BuildFarmPage):
 
+    limit = 40
+
     def render(self, myself, tree, author=None):
         t = self.buildfarm.trees[tree]
+        interesting = list()
         authors = set(["ALL"])
-        authors.update(t.get_branch().authors(limit=HISTORY_HORIZON))
+        branch = t.get_branch()
+        for entry in branch.log(limit=HISTORY_HORIZON):
+            authors.add(entry.author)
+            if author in ("ALL", "", entry.author):
+                interesting.append(entry)
 
         yield "<h2>Recent checkins for %s (%s branch %s)</h2>\n" % (
             tree, t.scm, t.branch)
@@ -892,15 +904,12 @@ class RecentCheckinsPage(BuildFarmPage):
         yield "<input type='hidden' name='function', value='Recent Checkins'/>"
         yield "</form>"
 
-        branch = t.get_branch()
-
-        for entry in branch.log(limit=HISTORY_HORIZON):
-            if author in ("ALL", "", entry.author):
-                yield "".join(history_row_html(myself, entry, t))
+        for entry in interesting[:self.limit]:
+            changes = branch.changes_summary(entry.revision)
+            yield "".join(history_row_html(myself, entry, t, changes))
         yield "\n"
 
 
-
 class BuildFarmApp(object):
 
     def __init__(self, buildfarm):
@@ -947,8 +956,11 @@ class BuildFarmApp(object):
             start_response('200 OK', [('Content-type', 'application/x-diff')])
             tree = get_param(form, 'tree')
             t = self.buildfarm.trees[tree]
-            (entry, diff) = t.get_branch().diff(get_param(form, 'revision'))
-            yield "".join(history_row_text(entry, tree))
+            branch = t.get_branch()
+            revision = get_param(form, 'revision')
+            (entry, diff) = branch.diff(revision)
+            changes = branch.changes_summary(revision)
+            yield "".join(history_row_text(entry, tree, changes))
             yield show_diff(diff, "text")
         elif fn_name == 'Text_Summary':
             start_response('200 OK', [('Content-type', 'text/plain')])
diff --git a/web/trees.conf b/web/trees.conf
index 1a72568..122bf4b 100644
--- a/web/trees.conf
+++ b/web/trees.conf
@@ -56,7 +56,7 @@ subdir = lib/talloc/
 
 [tdb]
 scm = git
-repo = samba.git
+repo = /home/jelmer/tmp/release.git
 branch = master
 subdir = lib/tdb/
 


-- 
build.samba.org


More information about the samba-cvs mailing list