mirror of
https://github.com/git/git.git
synced 2025-12-05 18:47:16 -06:00
The previous commit converted callers of setup_revisions() with a strvec to use the safer and easier _from_strvec() variant. Let's now convert spots that don't directly have a strvec, but receive an argc/argv pair that eventually comes from one. We'll instead pass the strvec down to the point where we call setup_revisions(). That makes these functions slightly less flexible if they were to grow other callers that don't use strvecs, but this rigidity is buying us some safety. It is only safe to pass the free_removed_argv_elements option to setup_revisions() if we know the elements of argv/argc are allocated on the heap. That isn't communicated in the type system when we are passed the bare elements. But if we get a strvec, we know that the elements are allocated strings. And at any rate, each of these modified functions has only a single caller (that has a strvec), so the loss of flexibility is unlikely to ever matter. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
87 lines
2.6 KiB
C
87 lines
2.6 KiB
C
#ifndef SHALLOW_H
|
|
#define SHALLOW_H
|
|
|
|
#include "lockfile.h"
|
|
#include "object.h"
|
|
#include "repository.h"
|
|
#include "strbuf.h"
|
|
|
|
struct oid_array;
|
|
struct strvec;
|
|
|
|
void set_alternate_shallow_file(struct repository *r, const char *path, int override);
|
|
int register_shallow(struct repository *r, const struct object_id *oid);
|
|
int unregister_shallow(const struct object_id *oid);
|
|
int is_repository_shallow(struct repository *r);
|
|
|
|
/*
|
|
* Lock for updating the $GIT_DIR/shallow file.
|
|
*
|
|
* Use `commit_shallow_file()` to commit an update, or
|
|
* `rollback_shallow_file()` to roll it back. In either case, any
|
|
* in-memory cached information about which commits are shallow will be
|
|
* appropriately invalidated so that future operations reflect the new
|
|
* state.
|
|
*/
|
|
struct shallow_lock {
|
|
struct lock_file lock;
|
|
};
|
|
#define SHALLOW_LOCK_INIT { \
|
|
.lock = LOCK_INIT, \
|
|
}
|
|
|
|
/* commit $GIT_DIR/shallow and reset stat-validity checks */
|
|
int commit_shallow_file(struct repository *r, struct shallow_lock *lk);
|
|
/* rollback $GIT_DIR/shallow and reset stat-validity checks */
|
|
void rollback_shallow_file(struct repository *r, struct shallow_lock *lk);
|
|
|
|
struct commit_list *get_shallow_commits(struct object_array *heads,
|
|
int depth, int shallow_flag, int not_shallow_flag);
|
|
struct commit_list *get_shallow_commits_by_rev_list(struct strvec *argv,
|
|
int shallow_flag, int not_shallow_flag);
|
|
int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
|
|
const struct oid_array *extra);
|
|
|
|
void setup_alternate_shallow(struct shallow_lock *shallow_lock,
|
|
const char **alternate_shallow_file,
|
|
const struct oid_array *extra);
|
|
|
|
const char *setup_temporary_shallow(const struct oid_array *extra);
|
|
|
|
void advertise_shallow_grafts(int);
|
|
|
|
#define PRUNE_SHOW_ONLY 1
|
|
#define PRUNE_QUICK 2
|
|
void prune_shallow(unsigned options);
|
|
|
|
/*
|
|
* Initialize with prepare_shallow_info() or zero-initialize (equivalent to
|
|
* prepare_shallow_info with a NULL oid_array).
|
|
*/
|
|
struct shallow_info {
|
|
struct oid_array *shallow;
|
|
size_t *ours, nr_ours;
|
|
size_t *theirs, nr_theirs;
|
|
struct oid_array *ref;
|
|
|
|
/* for receive-pack */
|
|
uint32_t **used_shallow;
|
|
int *need_reachability_test;
|
|
int *reachable;
|
|
int *shallow_ref;
|
|
struct commit **commits;
|
|
size_t nr_commits;
|
|
};
|
|
|
|
void prepare_shallow_info(struct shallow_info *, struct oid_array *);
|
|
void clear_shallow_info(struct shallow_info *);
|
|
void remove_nonexistent_theirs_shallow(struct shallow_info *);
|
|
void assign_shallow_commits_to_refs(struct shallow_info *info,
|
|
uint32_t **used,
|
|
int *ref_status);
|
|
int delayed_reachability_test(struct shallow_info *si, int c);
|
|
|
|
extern struct trace_key trace_shallow;
|
|
|
|
#endif /* SHALLOW_H */
|