threads / patch / 23116

patchSpeed up commands that use rev-list when max-count is specified.

Subject: [PATCH] Speed up commands that use rev-list when max-count is specified.

## tl;dr

4 messages between Mar 21, 2010 and Mar 21, 2010. Diffs are folded; open one to read it.

replies: 3people: 4as markdown or json

Benjamin C Meyer· Mar 21, 2010, 03:31 UTC · lore
Many command have code similar to the following:
while ((commit = get_revision(rev)) != NULL) { ... }

This results in and extra call to get_revision that first finds the next revision and then notices max-count is 0 and returns NULL. Adding a max-count check before any expensive work reduces the runtime of all of the commands the have this pattern.

Depending on the use case this can have a big impact on the running time.
Signed-off-by: Benjamin C Meyer <bmeyer@rim.com>
---
 revision.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
Show changes to revision.c +3 −0
diff --git a/revision.c b/revision.c
index 490b484..4673d70 100644
--- a/revision.c
+++ b/revision.c
@@ -2058,6 +2058,9 @@ static struct commit *get_revision_internal(struct rev_info *revs)
 
 struct commit *get_revision(struct rev_info *revs)
 {
+	if (revs->max_count == 0)
+		return NULL;
+
 	struct commit *c;
 	struct commit_list *reversed;
 
-- 
1.7.0.2
Sverre Rabbelier· Mar 21, 2010, 11:12 UTC · re: Benjamin C Meyer · lore

Re: [PATCH] Speed up commands that use rev-list when max-count is specified.

Heya,
On Sun, Mar 21, 2010 at 04:31, Benjamin C Meyer <bmeyer@rim.com> wrote:
> Depending on the use case this can have a big impact on the running time.
Sounds promising, do you have any numbers?
-- 
Cheers,

Sverre Rabbelier
Benjamin Meyer· Mar 21, 2010, 16:57 UTC · re: Sverre Rabbelier · lore

Re: [PATCH] Speed up commands that use rev-list when max-count is specified.

In the git repo a more extreme case doing something like git log -1 copy.c the patch will reduce the runtime by 70%.  Running it on every top level file in git ('for f in *; log -1 $f; done') goes from 9 minutes to 8:30.
-Benjamin Meyer
On Mar 21, 2010, at 7:12 AM, Sverre Rabbelier wrote:
Show 15 quoted lines
> Heya,
> 
> On Sun, Mar 21, 2010 at 04:31, Benjamin C Meyer <bmeyer@rim.com> wrote:
>> Depending on the use case this can have a big impact on the running time.
> 
> Sounds promising, do you have any numbers?
> 
> -- 
> Cheers,
> 
> Sverre Rabbelier
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mark Lodato· Mar 21, 2010, 14:09 UTC · re: Benjamin C Meyer · lore

Re: [PATCH] Speed up commands that use rev-list when max-count is specified.

On Sat, Mar 20, 2010 at 11:31 PM, Benjamin C Meyer <bmeyer@rim.com> wrote:
Show 7 quoted lines
>  struct commit *get_revision(struct rev_info *revs)
>  {
> +       if (revs->max_count == 0)
> +               return NULL;
> +
>        struct commit *c;
>        struct commit_list *reversed;

Declaring variables in the middle of a function is a C99 feature (and a GNU extension in C89 mode). I don't know if this is allowed in git code, but it would be easy enough to make this ANSI C89 compatible by putting your new statement after the variable declarations.

← back to recent threads