mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-05 17:12:51 +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__
|
#ifndef _INCLUDE_git_indexer_h__
|
||||||
#define _INCLUDE_git_indexer_h__
|
#define _INCLUDE_git_indexer_h__
|
||||||
|
|
||||||
typedef struct git_pack_indexer {
|
#include "git2/common.h"
|
||||||
struct pack_file *pack;
|
|
||||||
git_vector objects;
|
typedef struct git_indexer_stats {
|
||||||
git_vector deltas;
|
unsigned int total;
|
||||||
struct stat st;
|
unsigned int parsed;
|
||||||
} git_pack_indexer;
|
} 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(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
|
#endif
|
||||||
|
@ -23,10 +23,21 @@
|
|||||||
* Boston, MA 02110-1301, USA.
|
* Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "git2/indexer.h"
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "pack.h"
|
#include "pack.h"
|
||||||
|
#include "mwindow.h"
|
||||||
#include "posix.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)
|
static int parse_header(git_pack_indexer *idx)
|
||||||
{
|
{
|
||||||
struct pack_header hdr;
|
struct pack_header hdr;
|
||||||
@ -59,6 +70,8 @@ static int parse_header(git_pack_indexer *idx)
|
|||||||
if (error < GIT_SUCCESS)
|
if (error < GIT_SUCCESS)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
idx->stats.total = hdr.hdr_entries;
|
||||||
|
|
||||||
return GIT_SUCCESS;
|
return GIT_SUCCESS;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -123,6 +136,27 @@ cleanup:
|
|||||||
return error;
|
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)
|
void git_pack_indexer_free(git_pack_indexer *idx)
|
||||||
{
|
{
|
||||||
p_close(idx->pack->pack_fd);
|
p_close(idx->pack->pack_fd);
|
||||||
|
Loading…
Reference in New Issue
Block a user