mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-05 03:38:09 +00:00
Start the runner
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
This commit is contained in:
parent
3412391d4c
commit
f23c4a66bd
@ -1,15 +1,19 @@
|
||||
#ifndef _INCLUDE_git_indexer_h__
|
||||
#define _INCLUDE_git_indexer_h__
|
||||
|
||||
typedef struct git_pack_indexer {
|
||||
struct pack_file *pack;
|
||||
git_vector objects;
|
||||
git_vector deltas;
|
||||
struct stat st;
|
||||
} git_pack_indexer;
|
||||
#include "git2/common.h"
|
||||
|
||||
typedef struct git_indexer_stats {
|
||||
unsigned int total;
|
||||
unsigned int parsed;
|
||||
} git_indexer_stats;
|
||||
|
||||
|
||||
typedef struct git_pack_indexer git_pack_indexer;
|
||||
|
||||
GIT_EXTERN(int) git_pack_indexer_new(git_pack_indexer **out, const char *packname);
|
||||
GIT_EXTERN(void) git_pack_indexer_free(git_pack_indexer *idx)
|
||||
GIT_EXTERN(int) git_pack_indexer_run(git_pack_indexer *idx, int (*cb)(const git_indexer_stats *, void *), void *data);
|
||||
GIT_EXTERN(void) git_pack_indexer_free(git_pack_indexer *idx);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user