[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