bd2c39f58f
It turns out that parse_object() is loading and decompressing given object to free it just before calling the specific object parsing function which does mmap and decompress the same object again. This patch introduces the ability to parse specific objects directly from a memory buffer. Without this patch, running git-fsck-cache on the kernel repositorytake: real 0m13.006s user 0m11.421s sys 0m1.218s With this patch applied: real 0m8.060s user 0m7.071s sys 0m0.710s The performance increase is significant, and this is kind of a prerequisite for sane delta object support with fsck. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
40 lines
854 B
C
40 lines
854 B
C
#ifndef COMMIT_H
|
|
#define COMMIT_H
|
|
|
|
#include "object.h"
|
|
#include "tree.h"
|
|
|
|
struct commit_list {
|
|
struct commit *item;
|
|
struct commit_list *next;
|
|
};
|
|
|
|
struct commit {
|
|
struct object object;
|
|
unsigned long date;
|
|
struct commit_list *parents;
|
|
struct tree *tree;
|
|
};
|
|
|
|
extern const char *commit_type;
|
|
|
|
struct commit *lookup_commit(unsigned char *sha1);
|
|
|
|
int parse_commit_buffer(struct commit *item, void *buffer, unsigned long size);
|
|
|
|
int parse_commit(struct commit *item);
|
|
|
|
void commit_list_insert(struct commit *item, struct commit_list **list_p);
|
|
|
|
void free_commit_list(struct commit_list *list);
|
|
|
|
void sort_by_date(struct commit_list **list);
|
|
|
|
/** Removes the first commit from a list sorted by date, and adds all
|
|
* of its parents.
|
|
**/
|
|
struct commit *pop_most_recent_commit(struct commit_list **list,
|
|
unsigned int mark);
|
|
|
|
#endif /* COMMIT_H */
|