diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/indexer.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/indexer.c b/src/indexer.c index b63efc088..97f08dae1 100644 --- a/src/indexer.c +++ b/src/indexer.c @@ -23,10 +23,21 @@ * Boston, MA 02110-1301, USA. */ +#include "git2/indexer.h" + #include "common.h" #include "pack.h" +#include "mwindow.h" #include "posix.h" +typedef struct git_pack_indexer { + struct pack_file *pack; + git_vector objects; + git_vector deltas; + struct stat st; + git_indexer_stats stats; +} git_pack_indexer; + static int parse_header(git_pack_indexer *idx) { struct pack_header hdr; @@ -59,6 +70,8 @@ static int parse_header(git_pack_indexer *idx) if (error < GIT_SUCCESS) goto cleanup; + idx->stats.total = hdr.hdr_entries; + return GIT_SUCCESS; cleanup: @@ -123,6 +136,27 @@ cleanup: return error; } +/* + * Create the index. Every time something interesting happens + * (something has been parse or resolved), the callback gets called + * with some stats so it can tell the user how hard we're working + */ +int git_pack_indexer_run(git_pack_indexer *idx, int (*cb)(const git_indexer_stats *, void *), void *data) +{ + git_mwindow_file *mwf = &idx->pack->mwf; + int error; + + error = git_mwindow_file_register(mwf); + if (error < GIT_SUCCESS) + return git__rethrow(error, "Failed to register mwindow file"); + + /* notify early */ + if (cb) + cb(&idx->stats, data); + + return error; +} + void git_pack_indexer_free(git_pack_indexer *idx) { p_close(idx->pack->pack_fd); |