From: Junio C Hamano <junkio@cox.net>
To: Zack Brown <zbrown@tumblerings.org>
Cc: git@vger.kernel.org
Subject: Re: speeding up cg-log -u
Date: Sat, 14 May 2005 01:13:16 -0700 [thread overview]
Message-ID: <7vhdh6444j.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <20050514061914.GB14353@tumblerings.org> (Zack Brown's message of "Fri, 13 May 2005 23:19:14 -0700")
>>>>> "ZB" == Zack Brown <zbrown@tumblerings.org> writes:
ZB> Would it be faster to handle this on the git side, telling git to only
ZB> retrieve the logs that match the specified query? If feasible, this might
ZB> speed up various web interfaces into git repositories.
Here are two places you can add a simple hook. Implementation
of author_match() function is left as an exercise for you ;-).
Let us know if you get speed improvements, please.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
$ jit-diff
# - 9: (Anonymous snapshot)
# + (working tree)
--- a/cache.h
+++ b/cache.h
@@ -178,6 +178,7 @@ extern void *read_object_with_reference(
const char *show_date(unsigned long time, int timezone);
void parse_date(char *date, char *buf, int bufsize);
void datestamp(char *buf, int bufsize);
+int author_match(struct commit *, const char *);
static inline void *xmalloc(int size)
{
--- a/rev-list.c
+++ b/rev-list.c
@@ -11,6 +11,7 @@ int main(int argc, char **argv)
unsigned long max_age = -1;
unsigned long min_age = -1;
int max_count = -1;
+ const char *author = NULL;
for (i = 1 ; i < argc; i++) {
char *arg = argv[i];
@@ -21,6 +22,8 @@ int main(int argc, char **argv)
max_age = atoi(arg + 10);
} else if (!strncmp(arg, "--min-age=", 10)) {
min_age = atoi(arg + 10);
+ } else if (!strncmp(arg, "--author=", 9)) {
+ author = arg + 9;
} else {
commit_arg = arg;
}
@@ -28,6 +31,7 @@ int main(int argc, char **argv)
if (!commit_arg || get_sha1(commit_arg, sha1))
usage("usage: rev-list [OPTION] commit-id\n"
+ " --author=author\n"
" --max-count=nr\n"
" --max-age=epoch\n"
" --min-age=epoch\n");
@@ -44,6 +48,8 @@ int main(int argc, char **argv)
continue;
if (max_age != -1 && (commit->date < max_age))
break;
+ if (!author_match(commit, author))
+ continue;
if (max_count != -1 && !max_count--)
break;
printf("%s\n", sha1_to_hex(commit->object.sha1));
--- a/rev-tree.c
+++ b/rev-tree.c
@@ -64,7 +64,7 @@ void process_commit(unsigned char *sha1)
}
/*
- * Usage: rev-tree [--edges] [--cache <cache-file>] <commit-id> [<commit-id2>]
+ * Usage: rev-tree [--edges] [--author <author>] [--cache <cache-file>] <commit-id> [<commit-id2>]
*
* The cache-file can be quite important for big trees. This is an
* expensive operation if you have to walk the whole chain of
@@ -75,6 +75,7 @@ int main(int argc, char **argv)
int i;
int nr = 0;
unsigned char sha1[MAX_COMMITS][20];
+ const char *author = NULL;
/*
* First - pick up all the revisions we can (both from
@@ -83,6 +84,11 @@ int main(int argc, char **argv)
for (i = 1; i < argc ; i++) {
char *arg = argv[i];
+ if (!strcmp(arg, "--author")) {
+ author = argv[++i];
+ continue;
+ }
+
if (!strcmp(arg, "--cache")) {
read_cache_file(argv[++i]);
continue;
@@ -98,7 +104,7 @@ int main(int argc, char **argv)
basemask |= 1<<nr;
}
if (nr >= MAX_COMMITS || get_sha1(arg, sha1[nr]))
- usage("rev-tree [--edges] [--cache <cache-file>] <commit-id> [<commit-id>]");
+ usage("rev-tree [--edges] [--author <author>] [--cache <cache-file>] <commit-id> [<commit-id>]");
process_commit(sha1[nr]);
nr++;
}
@@ -125,6 +131,9 @@ int main(int argc, char **argv)
if (!interesting(commit))
continue;
+ if (!author_match(commit, author))
+ continue;
+
printf("%lu %s:%d", commit->date, sha1_to_hex(obj->sha1),
obj->flags);
p = commit->parents;
next prev parent reply other threads:[~2005-05-14 8:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-14 6:19 speeding up cg-log -u Zack Brown
2005-05-14 8:13 ` Junio C Hamano [this message]
2005-05-14 9:50 ` [PATCH] Add --author match to git-rev-list and git-rev-tree Junio C Hamano
2005-05-14 15:06 ` Zack Brown
2005-05-14 15:52 ` Petr Baudis
2005-05-14 16:02 ` Zack Brown
2005-05-14 10:39 ` speeding up cg-log -u Petr Baudis
2005-05-14 11:14 ` Petr Baudis
2005-05-14 11:17 ` Junio C Hamano
2005-05-14 14:23 ` Zack Brown
2005-05-14 14:40 ` Petr Baudis
2005-05-15 16:09 ` Daniel Barkalow
2005-05-16 8:13 ` Junio C Hamano
2005-05-16 15:38 ` Daniel Barkalow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vhdh6444j.fsf@assigned-by-dhcp.cox.net \
--to=junkio@cox.net \
--cc=git@vger.kernel.org \
--cc=zbrown@tumblerings.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).