monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] [PATCH 1/2] git_export: avoid multiple sql queries


From: Felipe Contreras
Subject: [Monotone-devel] [PATCH 1/2] git_export: avoid multiple sql queries
Date: Sun, 8 Mar 2009 07:31:41 +0200

This improves performance while exporting. In my system I see an
improvement from 52 minutes to 6 seconds.

Signed-off-by: Felipe Contreras <address@hidden>
---

Obviously this applies on to of the fast-export branch.

 git_export.cc |   24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/git_export.cc b/git_export.cc
index fc92b3b..803caa4 100644
--- a/git_export.cc
+++ b/git_export.cc
@@ -215,6 +215,7 @@ export_changes(database & db,
       typedef cert_vector::const_iterator cert_iterator;
       typedef map<string, string>::const_iterator lookup_iterator;
 
+      cert_vector certs;
       cert_vector authors;
       cert_vector branches;
       cert_vector changelogs;
@@ -222,12 +223,23 @@ export_changes(database & db,
       cert_vector dates;
       cert_vector tags;
 
-      db.get_revision_certs(*r, author_cert_name, authors);
-      db.get_revision_certs(*r, branch_cert_name, branches);
-      db.get_revision_certs(*r, changelog_cert_name, changelogs);
-      db.get_revision_certs(*r, comment_cert_name, comments);
-      db.get_revision_certs(*r, date_cert_name, dates);
-      db.get_revision_certs(*r, tag_cert_name, tags);
+      db.get_revision_certs(*r, certs);
+
+      for (cert_iterator i = certs.begin(); i != certs.end(); i++)
+        {
+          if (i->inner().name == author_cert_name)
+            authors.push_back(*i);
+          else if (i->inner().name == date_cert_name)
+            dates.push_back(*i);
+          else if (i->inner().name == changelog_cert_name)
+            changelogs.push_back(*i);
+          else if (i->inner().name == branch_cert_name)
+            branches.push_back(*i);
+          else if (i->inner().name == tag_cert_name)
+            tags.push_back(*i);
+          else if (i->inner().name == comment_cert_name)
+            comments.push_back(*i);
+        }
 
       // default to <unknown> committer and author if no author certs exist
       // this may be mapped to a different value with the authors-file option
-- 
1.6.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]