mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 15:00:04 +00:00
Move odb_backend implementors stuff into git2/sys
This moves some of the odb_backend stuff that is related to the internals of an odb_backend implementation into include/git2/sys. Some of the stuff related to streaming I left in include/git2 because it seemed like it would be reasonably needed by a normal user who wanted to stream objects into and out of the ODB. Also, I added APIs for traversing the list of backends so that some of the tests would not need to access ODB internals.
This commit is contained in:
parent
83041c711c
commit
83cc70d9fe
@ -8,31 +8,11 @@
|
|||||||
#define _INCLUDE_git_indexer_h__
|
#define _INCLUDE_git_indexer_h__
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "types.h"
|
||||||
#include "oid.h"
|
#include "oid.h"
|
||||||
|
|
||||||
GIT_BEGIN_DECL
|
GIT_BEGIN_DECL
|
||||||
|
|
||||||
/**
|
|
||||||
* This is passed as the first argument to the callback to allow the
|
|
||||||
* user to see the progress.
|
|
||||||
*/
|
|
||||||
typedef struct git_transfer_progress {
|
|
||||||
unsigned int total_objects;
|
|
||||||
unsigned int indexed_objects;
|
|
||||||
unsigned int received_objects;
|
|
||||||
size_t received_bytes;
|
|
||||||
} git_transfer_progress;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Type for progress callbacks during indexing. Return a value less than zero
|
|
||||||
* to cancel the transfer.
|
|
||||||
*
|
|
||||||
* @param stats Structure containing information about the state of the transfer
|
|
||||||
* @param payload Payload provided by caller
|
|
||||||
*/
|
|
||||||
typedef int (*git_transfer_progress_callback)(const git_transfer_progress *stats, void *payload);
|
|
||||||
|
|
||||||
typedef struct git_indexer_stream git_indexer_stream;
|
typedef struct git_indexer_stream git_indexer_stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "oid.h"
|
#include "oid.h"
|
||||||
#include "odb_backend.h"
|
|
||||||
#include "indexer.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file git2/odb.h
|
* @file git2/odb.h
|
||||||
@ -22,6 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
GIT_BEGIN_DECL
|
GIT_BEGIN_DECL
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function type for callbacks from git_odb_foreach.
|
||||||
|
*/
|
||||||
|
typedef int (*git_odb_foreach_cb)(const git_oid *id, void *payload);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new object database with no backends.
|
* Create a new object database with no backends.
|
||||||
*
|
*
|
||||||
@ -52,42 +55,6 @@ GIT_EXTERN(int) git_odb_new(git_odb **out);
|
|||||||
*/
|
*/
|
||||||
GIT_EXTERN(int) git_odb_open(git_odb **out, const char *objects_dir);
|
GIT_EXTERN(int) git_odb_open(git_odb **out, const char *objects_dir);
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a custom backend to an existing Object DB
|
|
||||||
*
|
|
||||||
* The backends are checked in relative ordering, based on the
|
|
||||||
* value of the `priority` parameter.
|
|
||||||
*
|
|
||||||
* Read <odb_backends.h> for more information.
|
|
||||||
*
|
|
||||||
* @param odb database to add the backend to
|
|
||||||
* @param backend pointer to a git_odb_backend instance
|
|
||||||
* @param priority Value for ordering the backends queue
|
|
||||||
* @return 0 on success; error code otherwise
|
|
||||||
*/
|
|
||||||
GIT_EXTERN(int) git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int priority);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a custom backend to an existing Object DB; this
|
|
||||||
* backend will work as an alternate.
|
|
||||||
*
|
|
||||||
* Alternate backends are always checked for objects *after*
|
|
||||||
* all the main backends have been exhausted.
|
|
||||||
*
|
|
||||||
* The backends are checked in relative ordering, based on the
|
|
||||||
* value of the `priority` parameter.
|
|
||||||
*
|
|
||||||
* Writing is disabled on alternate backends.
|
|
||||||
*
|
|
||||||
* Read <odb_backends.h> for more information.
|
|
||||||
*
|
|
||||||
* @param odb database to add the backend to
|
|
||||||
* @param backend pointer to a git_odb_backend instance
|
|
||||||
* @param priority Value for ordering the backends queue
|
|
||||||
* @return 0 on success; error code otherwise
|
|
||||||
*/
|
|
||||||
GIT_EXTERN(int) git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add an on-disk alternate to an existing Object DB.
|
* Add an on-disk alternate to an existing Object DB.
|
||||||
*
|
*
|
||||||
@ -406,6 +373,60 @@ GIT_EXTERN(size_t) git_odb_object_size(git_odb_object *object);
|
|||||||
*/
|
*/
|
||||||
GIT_EXTERN(git_otype) git_odb_object_type(git_odb_object *object);
|
GIT_EXTERN(git_otype) git_odb_object_type(git_odb_object *object);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a custom backend to an existing Object DB
|
||||||
|
*
|
||||||
|
* The backends are checked in relative ordering, based on the
|
||||||
|
* value of the `priority` parameter.
|
||||||
|
*
|
||||||
|
* Read <odb_backends.h> for more information.
|
||||||
|
*
|
||||||
|
* @param odb database to add the backend to
|
||||||
|
* @param backend pointer to a git_odb_backend instance
|
||||||
|
* @param priority Value for ordering the backends queue
|
||||||
|
* @return 0 on success; error code otherwise
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(int) git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int priority);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a custom backend to an existing Object DB; this
|
||||||
|
* backend will work as an alternate.
|
||||||
|
*
|
||||||
|
* Alternate backends are always checked for objects *after*
|
||||||
|
* all the main backends have been exhausted.
|
||||||
|
*
|
||||||
|
* The backends are checked in relative ordering, based on the
|
||||||
|
* value of the `priority` parameter.
|
||||||
|
*
|
||||||
|
* Writing is disabled on alternate backends.
|
||||||
|
*
|
||||||
|
* Read <odb_backends.h> for more information.
|
||||||
|
*
|
||||||
|
* @param odb database to add the backend to
|
||||||
|
* @param backend pointer to a git_odb_backend instance
|
||||||
|
* @param priority Value for ordering the backends queue
|
||||||
|
* @return 0 on success; error code otherwise
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(int) git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of ODB backend objects
|
||||||
|
*
|
||||||
|
* @param odb object database
|
||||||
|
* @return number of backends in the ODB
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(size_t) git_odb_num_backends(git_odb *odb);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lookup an ODB backend object by index
|
||||||
|
*
|
||||||
|
* @param out output pointer to ODB backend at pos
|
||||||
|
* @param odb object database
|
||||||
|
* @param pos index into object database backend list
|
||||||
|
* @return 0 on success; GIT_ENOTFOUND if pos is invalid; other errors < 0
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t pos);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
GIT_END_DECL
|
GIT_END_DECL
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,106 +7,24 @@
|
|||||||
#ifndef INCLUDE_git_odb_backend_h__
|
#ifndef INCLUDE_git_odb_backend_h__
|
||||||
#define INCLUDE_git_odb_backend_h__
|
#define INCLUDE_git_odb_backend_h__
|
||||||
|
|
||||||
#include "common.h"
|
#include "git2/common.h"
|
||||||
#include "types.h"
|
#include "git2/types.h"
|
||||||
#include "oid.h"
|
|
||||||
#include "indexer.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file git2/backend.h
|
* @file git2/backend.h
|
||||||
* @brief Git custom backend functions
|
* @brief Git custom backend functions
|
||||||
* @defgroup git_backend Git custom backend API
|
* @defgroup git_odb Git object database routines
|
||||||
* @ingroup Git
|
* @ingroup Git
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
GIT_BEGIN_DECL
|
GIT_BEGIN_DECL
|
||||||
|
|
||||||
struct git_odb_stream;
|
|
||||||
struct git_odb_writepack;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function type for callbacks from git_odb_foreach.
|
* Constructors for in-box ODB backends.
|
||||||
*/
|
*/
|
||||||
typedef int (*git_odb_foreach_cb)(const git_oid *id, void *payload);
|
GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir);
|
||||||
|
GIT_EXTERN(int) git_odb_backend_loose(git_odb_backend **out, const char *objects_dir, int compression_level, int do_fsync);
|
||||||
/**
|
GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file);
|
||||||
* An instance for a custom backend
|
|
||||||
*/
|
|
||||||
struct git_odb_backend {
|
|
||||||
unsigned int version;
|
|
||||||
git_odb *odb;
|
|
||||||
|
|
||||||
/* read and read_prefix each return to libgit2 a buffer which
|
|
||||||
* will be freed later. The buffer should be allocated using
|
|
||||||
* the function git_odb_backend_malloc to ensure that it can
|
|
||||||
* be safely freed later. */
|
|
||||||
int (* read)(
|
|
||||||
void **, size_t *, git_otype *,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
const git_oid *);
|
|
||||||
|
|
||||||
/* To find a unique object given a prefix
|
|
||||||
* of its oid.
|
|
||||||
* The oid given must be so that the
|
|
||||||
* remaining (GIT_OID_HEXSZ - len)*4 bits
|
|
||||||
* are 0s.
|
|
||||||
*/
|
|
||||||
int (* read_prefix)(
|
|
||||||
git_oid *,
|
|
||||||
void **, size_t *, git_otype *,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
const git_oid *,
|
|
||||||
size_t);
|
|
||||||
|
|
||||||
int (* read_header)(
|
|
||||||
size_t *, git_otype *,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
const git_oid *);
|
|
||||||
|
|
||||||
/* The writer may assume that the object
|
|
||||||
* has already been hashed and is passed
|
|
||||||
* in the first parameter.
|
|
||||||
*/
|
|
||||||
int (* write)(
|
|
||||||
git_oid *,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
const void *,
|
|
||||||
size_t,
|
|
||||||
git_otype);
|
|
||||||
|
|
||||||
int (* writestream)(
|
|
||||||
struct git_odb_stream **,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
size_t,
|
|
||||||
git_otype);
|
|
||||||
|
|
||||||
int (* readstream)(
|
|
||||||
struct git_odb_stream **,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
const git_oid *);
|
|
||||||
|
|
||||||
int (* exists)(
|
|
||||||
struct git_odb_backend *,
|
|
||||||
const git_oid *);
|
|
||||||
|
|
||||||
int (* refresh)(struct git_odb_backend *);
|
|
||||||
|
|
||||||
int (* foreach)(
|
|
||||||
struct git_odb_backend *,
|
|
||||||
git_odb_foreach_cb cb,
|
|
||||||
void *payload);
|
|
||||||
|
|
||||||
int (* writepack)(
|
|
||||||
struct git_odb_writepack **,
|
|
||||||
struct git_odb_backend *,
|
|
||||||
git_transfer_progress_callback progress_cb,
|
|
||||||
void *progress_payload);
|
|
||||||
|
|
||||||
void (* free)(struct git_odb_backend *);
|
|
||||||
};
|
|
||||||
|
|
||||||
#define GIT_ODB_BACKEND_VERSION 1
|
|
||||||
#define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION}
|
|
||||||
|
|
||||||
/** Streaming mode */
|
/** Streaming mode */
|
||||||
enum {
|
enum {
|
||||||
@ -117,33 +35,24 @@ enum {
|
|||||||
|
|
||||||
/** A stream to read/write from a backend */
|
/** A stream to read/write from a backend */
|
||||||
struct git_odb_stream {
|
struct git_odb_stream {
|
||||||
struct git_odb_backend *backend;
|
git_odb_backend *backend;
|
||||||
unsigned int mode;
|
unsigned int mode;
|
||||||
|
|
||||||
int (*read)(struct git_odb_stream *stream, char *buffer, size_t len);
|
int (*read)(git_odb_stream *stream, char *buffer, size_t len);
|
||||||
int (*write)(struct git_odb_stream *stream, const char *buffer, size_t len);
|
int (*write)(git_odb_stream *stream, const char *buffer, size_t len);
|
||||||
int (*finalize_write)(git_oid *oid_p, struct git_odb_stream *stream);
|
int (*finalize_write)(git_oid *oid_p, git_odb_stream *stream);
|
||||||
void (*free)(struct git_odb_stream *stream);
|
void (*free)(git_odb_stream *stream);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A stream to write a pack file to the ODB */
|
/** A stream to write a pack file to the ODB */
|
||||||
struct git_odb_writepack {
|
struct git_odb_writepack {
|
||||||
struct git_odb_backend *backend;
|
git_odb_backend *backend;
|
||||||
|
|
||||||
int (*add)(struct git_odb_writepack *writepack, const void *data, size_t size, git_transfer_progress *stats);
|
int (*add)(git_odb_writepack *writepack, const void *data, size_t size, git_transfer_progress *stats);
|
||||||
int (*commit)(struct git_odb_writepack *writepack, git_transfer_progress *stats);
|
int (*commit)(git_odb_writepack *writepack, git_transfer_progress *stats);
|
||||||
void (*free)(struct git_odb_writepack *writepack);
|
void (*free)(git_odb_writepack *writepack);
|
||||||
};
|
};
|
||||||
|
|
||||||
GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructors for in-box ODB backends.
|
|
||||||
*/
|
|
||||||
GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir);
|
|
||||||
GIT_EXTERN(int) git_odb_backend_loose(git_odb_backend **out, const char *objects_dir, int compression_level, int do_fsync);
|
|
||||||
GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file);
|
|
||||||
|
|
||||||
GIT_END_DECL
|
GIT_END_DECL
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
||||||
* a Linking Exception. For full terms see the included COPYING file.
|
* a Linking Exception. For full terms see the included COPYING file.
|
||||||
*/
|
*/
|
||||||
#ifndef INCLUDE_git_sys_config_h__
|
#ifndef INCLUDE_sys_git_config_backend_h__
|
||||||
#define INCLUDE_git_sys_config_h__
|
#define INCLUDE_sys_git_config_backend_h__
|
||||||
|
|
||||||
#include "git2/common.h"
|
#include "git2/common.h"
|
||||||
#include "git2/types.h"
|
#include "git2/types.h"
|
||||||
@ -14,6 +14,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file git2/sys/config.h
|
* @file git2/sys/config.h
|
||||||
* @brief Git config backend routines
|
* @brief Git config backend routines
|
||||||
|
* @defgroup git_backend Git custom backend APIs
|
||||||
* @ingroup Git
|
* @ingroup Git
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
86
include/git2/sys/odb_backend.h
Normal file
86
include/git2/sys/odb_backend.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) the libgit2 contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
||||||
|
* a Linking Exception. For full terms see the included COPYING file.
|
||||||
|
*/
|
||||||
|
#ifndef INCLUDE_sys_git_odb_backend_h__
|
||||||
|
#define INCLUDE_sys_git_odb_backend_h__
|
||||||
|
|
||||||
|
#include "git2/common.h"
|
||||||
|
#include "git2/types.h"
|
||||||
|
#include "git2/oid.h"
|
||||||
|
#include "git2/odb.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file git2/sys/backend.h
|
||||||
|
* @brief Git custom backend implementors functions
|
||||||
|
* @defgroup git_backend Git custom backend APIs
|
||||||
|
* @ingroup Git
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
GIT_BEGIN_DECL
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance for a custom backend
|
||||||
|
*/
|
||||||
|
struct git_odb_backend {
|
||||||
|
unsigned int version;
|
||||||
|
git_odb *odb;
|
||||||
|
|
||||||
|
/* read and read_prefix each return to libgit2 a buffer which
|
||||||
|
* will be freed later. The buffer should be allocated using
|
||||||
|
* the function git_odb_backend_malloc to ensure that it can
|
||||||
|
* be safely freed later. */
|
||||||
|
int (* read)(
|
||||||
|
void **, size_t *, git_otype *, git_odb_backend *, const git_oid *);
|
||||||
|
|
||||||
|
/* To find a unique object given a prefix
|
||||||
|
* of its oid.
|
||||||
|
* The oid given must be so that the
|
||||||
|
* remaining (GIT_OID_HEXSZ - len)*4 bits
|
||||||
|
* are 0s.
|
||||||
|
*/
|
||||||
|
int (* read_prefix)(
|
||||||
|
git_oid *, void **, size_t *, git_otype *,
|
||||||
|
git_odb_backend *, const git_oid *, size_t);
|
||||||
|
|
||||||
|
int (* read_header)(
|
||||||
|
size_t *, git_otype *, git_odb_backend *, const git_oid *);
|
||||||
|
|
||||||
|
/* The writer may assume that the object
|
||||||
|
* has already been hashed and is passed
|
||||||
|
* in the first parameter.
|
||||||
|
*/
|
||||||
|
int (* write)(
|
||||||
|
git_oid *, git_odb_backend *, const void *, size_t, git_otype);
|
||||||
|
|
||||||
|
int (* writestream)(
|
||||||
|
git_odb_stream **, git_odb_backend *, size_t, git_otype);
|
||||||
|
|
||||||
|
int (* readstream)(
|
||||||
|
git_odb_stream **, git_odb_backend *, const git_oid *);
|
||||||
|
|
||||||
|
int (* exists)(
|
||||||
|
git_odb_backend *, const git_oid *);
|
||||||
|
|
||||||
|
int (* refresh)(git_odb_backend *);
|
||||||
|
|
||||||
|
int (* foreach)(
|
||||||
|
git_odb_backend *, git_odb_foreach_cb cb, void *payload);
|
||||||
|
|
||||||
|
int (* writepack)(
|
||||||
|
git_odb_writepack **, git_odb_backend *,
|
||||||
|
git_transfer_progress_callback progress_cb, void *progress_payload);
|
||||||
|
|
||||||
|
void (* free)(git_odb_backend *);
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GIT_ODB_BACKEND_VERSION 1
|
||||||
|
#define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION}
|
||||||
|
|
||||||
|
GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len);
|
||||||
|
|
||||||
|
GIT_END_DECL
|
||||||
|
|
||||||
|
#endif
|
@ -196,6 +196,26 @@ typedef struct git_push git_push;
|
|||||||
typedef struct git_remote_head git_remote_head;
|
typedef struct git_remote_head git_remote_head;
|
||||||
typedef struct git_remote_callbacks git_remote_callbacks;
|
typedef struct git_remote_callbacks git_remote_callbacks;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is passed as the first argument to the callback to allow the
|
||||||
|
* user to see the progress.
|
||||||
|
*/
|
||||||
|
typedef struct git_transfer_progress {
|
||||||
|
unsigned int total_objects;
|
||||||
|
unsigned int indexed_objects;
|
||||||
|
unsigned int received_objects;
|
||||||
|
size_t received_bytes;
|
||||||
|
} git_transfer_progress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type for progress callbacks during indexing. Return a value less than zero
|
||||||
|
* to cancel the transfer.
|
||||||
|
*
|
||||||
|
* @param stats Structure containing information about the state of the transfer
|
||||||
|
* @param payload Payload provided by caller
|
||||||
|
*/
|
||||||
|
typedef int (*git_transfer_progress_callback)(const git_transfer_progress *stats, void *payload);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
GIT_END_DECL
|
GIT_END_DECL
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "git2/common.h"
|
#include "git2/common.h"
|
||||||
#include "git2/object.h"
|
#include "git2/object.h"
|
||||||
#include "git2/repository.h"
|
#include "git2/repository.h"
|
||||||
|
#include "git2/odb_backend.h"
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "blob.h"
|
#include "blob.h"
|
||||||
|
22
src/odb.c
22
src/odb.c
@ -8,6 +8,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#include "git2/object.h"
|
#include "git2/object.h"
|
||||||
|
#include "git2/sys/odb_backend.h"
|
||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "odb.h"
|
#include "odb.h"
|
||||||
@ -403,6 +404,27 @@ int git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority)
|
|||||||
return add_backend_internal(odb, backend, priority, 1);
|
return add_backend_internal(odb, backend, priority, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t git_odb_num_backends(git_odb *odb)
|
||||||
|
{
|
||||||
|
assert(odb);
|
||||||
|
return odb->backends.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
int git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t pos)
|
||||||
|
{
|
||||||
|
backend_internal *internal;
|
||||||
|
|
||||||
|
assert(odb && odb);
|
||||||
|
internal = git_vector_get(&odb->backends, pos);
|
||||||
|
|
||||||
|
if (internal && internal->backend) {
|
||||||
|
*out = internal->backend;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GIT_ENOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
static int add_default_backends(git_odb *db, const char *objects_dir, int as_alternates, int alternate_depth)
|
static int add_default_backends(git_odb *db, const char *objects_dir, int as_alternates, int alternate_depth)
|
||||||
{
|
{
|
||||||
git_odb_backend *loose, *packed;
|
git_odb_backend *loose, *packed;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#include "git2/object.h"
|
#include "git2/object.h"
|
||||||
#include "git2/oid.h"
|
#include "git2/sys/odb_backend.h"
|
||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "odb.h"
|
#include "odb.h"
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#include "git2/repository.h"
|
#include "git2/repository.h"
|
||||||
#include "git2/oid.h"
|
#include "git2/indexer.h"
|
||||||
|
#include "git2/sys/odb_backend.h"
|
||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "odb.h"
|
#include "odb.h"
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "git2/object.h"
|
#include "git2/object.h"
|
||||||
#include "git2/repository.h"
|
#include "git2/repository.h"
|
||||||
#include "git2/signature.h"
|
#include "git2/signature.h"
|
||||||
|
#include "git2/odb_backend.h"
|
||||||
|
|
||||||
void git_tag__free(git_tag *tag)
|
void git_tag__free(git_tag *tag)
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
* a Linking Exception. For full terms see the included COPYING file.
|
* a Linking Exception. For full terms see the included COPYING file.
|
||||||
*/
|
*/
|
||||||
#include "git2.h"
|
#include "git2.h"
|
||||||
|
#include "git2/odb_backend.h"
|
||||||
|
|
||||||
#include "smart.h"
|
#include "smart.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
#include "clar_libgit2.h"
|
#include "clar_libgit2.h"
|
||||||
|
#include "git2/odb_backend.h"
|
||||||
|
|
||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
#include "odb.h"
|
#include "odb.h"
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "clar_libgit2.h"
|
#include "clar_libgit2.h"
|
||||||
#include "odb.h"
|
#include "git2/odb_backend.h"
|
||||||
|
|
||||||
#include "pack_data_one.h"
|
#include "pack_data_one.h"
|
||||||
#include "pack.h"
|
#include "pack.h"
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
#include "clar_libgit2.h"
|
#include "clar_libgit2.h"
|
||||||
#include "git2/odb_backend.h"
|
#include "git2/sys/odb_backend.h"
|
||||||
#include "odb.h"
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
git_odb_backend base;
|
git_odb_backend base;
|
||||||
int position;
|
size_t position;
|
||||||
} fake_backend;
|
} fake_backend;
|
||||||
|
|
||||||
static git_odb_backend *new_backend(int position)
|
static git_odb_backend *new_backend(size_t position)
|
||||||
{
|
{
|
||||||
fake_backend *b;
|
fake_backend *b;
|
||||||
|
|
||||||
@ -22,14 +21,13 @@ static git_odb_backend *new_backend(int position)
|
|||||||
|
|
||||||
static void check_backend_sorting(git_odb *odb)
|
static void check_backend_sorting(git_odb *odb)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
size_t i, max_i = git_odb_num_backends(odb);
|
||||||
|
fake_backend *internal;
|
||||||
for (i = 0; i < odb->backends.length; ++i) {
|
|
||||||
fake_backend *internal =
|
|
||||||
*((fake_backend **)git_vector_get(&odb->backends, i));
|
|
||||||
|
|
||||||
|
for (i = 0; i < max_i; ++i) {
|
||||||
|
cl_git_pass(git_odb_get_backend((git_odb_backend **)&internal, odb, i));
|
||||||
cl_assert(internal != NULL);
|
cl_assert(internal != NULL);
|
||||||
cl_assert(internal->position == (int)i);
|
cl_assert_equal_sz(i, internal->position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user