Add const to all shared pointers in diff API

There are a lot of places where the diff API gives the user access
to internal data structures and many of these were being exposed
through non-const pointers.  This replaces them all with const
pointers for any object that the user can access but is still
owned internally to the git_diff_list or git_diff_patch objects.

This will probably break some bindings...  Sorry!
This commit is contained in:
Russell Belfer 2012-09-25 16:31:46 -07:00
parent 6428630865
commit bae957b95d
13 changed files with 59 additions and 57 deletions

View File

@ -122,7 +122,7 @@ typedef enum {
*/ */
typedef struct { typedef struct {
git_oid oid; git_oid oid;
char *path; const char *path;
git_off_t size; git_off_t size;
unsigned int flags; unsigned int flags;
uint16_t mode; uint16_t mode;
@ -154,7 +154,7 @@ typedef struct {
*/ */
typedef int (*git_diff_file_fn)( typedef int (*git_diff_file_fn)(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
float progress); float progress);
/** /**
@ -172,8 +172,8 @@ typedef struct {
*/ */
typedef int (*git_diff_hunk_fn)( typedef int (*git_diff_hunk_fn)(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
const char *header, const char *header,
size_t header_len); size_t header_len);
@ -213,8 +213,8 @@ enum {
*/ */
typedef int (*git_diff_data_fn)( typedef int (*git_diff_data_fn)(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
char line_origin, /**< GIT_DIFF_LINE_... value from above */ char line_origin, /**< GIT_DIFF_LINE_... value from above */
const char *content, const char *content,
size_t content_len); size_t content_len);
@ -486,7 +486,7 @@ GIT_EXTERN(size_t) git_diff_num_deltas_of_type(
*/ */
GIT_EXTERN(int) git_diff_get_patch( GIT_EXTERN(int) git_diff_get_patch(
git_diff_patch **patch, git_diff_patch **patch,
git_diff_delta **delta, const git_diff_delta **delta,
git_diff_list *diff, git_diff_list *diff,
size_t idx); size_t idx);
@ -525,7 +525,7 @@ GIT_EXTERN(size_t) git_diff_patch_num_hunks(
* @return 0 on success, GIT_ENOTFOUND if hunk_idx out of range, <0 on error * @return 0 on success, GIT_ENOTFOUND if hunk_idx out of range, <0 on error
*/ */
GIT_EXTERN(int) git_diff_patch_get_hunk( GIT_EXTERN(int) git_diff_patch_get_hunk(
git_diff_range **range, const git_diff_range **range,
const char **header, const char **header,
size_t *header_len, size_t *header_len,
size_t *lines_in_hunk, size_t *lines_in_hunk,
@ -595,7 +595,7 @@ GIT_EXTERN(int) git_diff_patch_get_line_in_hunk(
GIT_EXTERN(int) git_diff_blobs( GIT_EXTERN(int) git_diff_blobs(
git_blob *old_blob, git_blob *old_blob,
git_blob *new_blob, git_blob *new_blob,
git_diff_options *options, const git_diff_options *options,
void *cb_data, void *cb_data,
git_diff_file_fn file_cb, git_diff_file_fn file_cb,
git_diff_hunk_fn hunk_cb, git_diff_hunk_fn hunk_cb,

View File

@ -126,7 +126,7 @@ static int blob_content_to_link(git_blob *blob, const char *path, bool can_symli
static int checkout_blob( static int checkout_blob(
git_repository *repo, git_repository *repo,
git_oid *blob_oid, const git_oid *blob_oid,
const char *path, const char *path,
mode_t filemode, mode_t filemode,
bool can_symlink, bool can_symlink,
@ -150,7 +150,7 @@ static int checkout_blob(
static int checkout_diff_fn( static int checkout_diff_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
float progress) float progress)
{ {
struct checkout_diff_data *data; struct checkout_diff_data *data;

View File

@ -809,7 +809,7 @@ on_error:
bool git_diff_delta__should_skip( bool git_diff_delta__should_skip(
git_diff_options *opts, git_diff_delta *delta) const git_diff_options *opts, const git_diff_delta *delta)
{ {
uint32_t flags = opts ? opts->flags : 0; uint32_t flags = opts ? opts->flags : 0;

View File

@ -51,7 +51,7 @@ extern void git_diff__cleanup_modes(
extern void git_diff_list_addref(git_diff_list *diff); extern void git_diff_list_addref(git_diff_list *diff);
extern bool git_diff_delta__should_skip( extern bool git_diff_delta__should_skip(
git_diff_options *opts, git_diff_delta *delta); const git_diff_options *opts, const git_diff_delta *delta);
#endif #endif

View File

@ -177,7 +177,7 @@ static int diff_delta_is_binary_by_size(
} }
static void setup_xdiff_options( static void setup_xdiff_options(
git_diff_options *opts, xdemitconf_t *cfg, xpparam_t *param) const git_diff_options *opts, xdemitconf_t *cfg, xpparam_t *param)
{ {
memset(cfg, 0, sizeof(xdemitconf_t)); memset(cfg, 0, sizeof(xdemitconf_t));
memset(param, 0, sizeof(xpparam_t)); memset(param, 0, sizeof(xpparam_t));
@ -371,7 +371,7 @@ static void diff_context_init(
diff_context *ctxt, diff_context *ctxt,
git_diff_list *diff, git_diff_list *diff,
git_repository *repo, git_repository *repo,
git_diff_options *opts, const git_diff_options *opts,
void *data, void *data,
git_diff_file_fn file_cb, git_diff_file_fn file_cb,
git_diff_hunk_fn hunk_cb, git_diff_hunk_fn hunk_cb,
@ -696,8 +696,8 @@ static void diff_patch_free(git_diff_patch *patch)
static int diff_patch_hunk_cb( static int diff_patch_hunk_cb(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
const char *header, const char *header,
size_t header_len) size_t header_len)
{ {
@ -743,8 +743,8 @@ static int diff_patch_hunk_cb(
static int diff_patch_line_cb( static int diff_patch_line_cb(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
char line_origin, char line_origin,
const char *content, const char *content,
size_t content_len) size_t content_len)
@ -905,7 +905,8 @@ char git_diff_status_char(git_delta_t status)
return code; return code;
} }
static int print_compact(void *data, git_diff_delta *delta, float progress) static int print_compact(
void *data, const git_diff_delta *delta, float progress)
{ {
diff_print_info *pi = data; diff_print_info *pi = data;
char old_suffix, new_suffix, code = git_diff_status_char(delta->status); char old_suffix, new_suffix, code = git_diff_status_char(delta->status);
@ -967,7 +968,7 @@ int git_diff_print_compact(
return error; return error;
} }
static int print_oid_range(diff_print_info *pi, git_diff_delta *delta) static int print_oid_range(diff_print_info *pi, const git_diff_delta *delta)
{ {
char start_oid[8], end_oid[8]; char start_oid[8], end_oid[8];
@ -997,7 +998,8 @@ static int print_oid_range(diff_print_info *pi, git_diff_delta *delta)
return 0; return 0;
} }
static int print_patch_file(void *data, git_diff_delta *delta, float progress) static int print_patch_file(
void *data, const git_diff_delta *delta, float progress)
{ {
diff_print_info *pi = data; diff_print_info *pi = data;
const char *oldpfx = pi->diff->opts.old_prefix; const char *oldpfx = pi->diff->opts.old_prefix;
@ -1064,8 +1066,8 @@ static int print_patch_file(void *data, git_diff_delta *delta, float progress)
static int print_patch_hunk( static int print_patch_hunk(
void *data, void *data,
git_diff_delta *d, const git_diff_delta *d,
git_diff_range *r, const git_diff_range *r,
const char *header, const char *header,
size_t header_len) size_t header_len)
{ {
@ -1087,8 +1089,8 @@ static int print_patch_hunk(
static int print_patch_line( static int print_patch_line(
void *data, void *data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
char line_origin, /* GIT_DIFF_LINE value from above */ char line_origin, /* GIT_DIFF_LINE value from above */
const char *content, const char *content,
size_t content_len) size_t content_len)
@ -1158,7 +1160,7 @@ static void set_data_from_blob(
int git_diff_blobs( int git_diff_blobs(
git_blob *old_blob, git_blob *old_blob,
git_blob *new_blob, git_blob *new_blob,
git_diff_options *options, const git_diff_options *options,
void *cb_data, void *cb_data,
git_diff_file_fn file_cb, git_diff_file_fn file_cb,
git_diff_hunk_fn hunk_cb, git_diff_hunk_fn hunk_cb,
@ -1253,7 +1255,7 @@ size_t git_diff_num_deltas_of_type(git_diff_list *diff, git_delta_t type)
int git_diff_get_patch( int git_diff_get_patch(
git_diff_patch **patch_ptr, git_diff_patch **patch_ptr,
git_diff_delta **delta_ptr, const git_diff_delta **delta_ptr,
git_diff_list *diff, git_diff_list *diff,
size_t idx) size_t idx)
{ {
@ -1326,7 +1328,7 @@ size_t git_diff_patch_num_hunks(git_diff_patch *patch)
} }
int git_diff_patch_get_hunk( int git_diff_patch_get_hunk(
git_diff_range **range, const git_diff_range **range,
const char **header, const char **header,
size_t *header_len, size_t *header_len,
size_t *lines_in_hunk, size_t *lines_in_hunk,

View File

@ -26,7 +26,7 @@ enum {
typedef struct { typedef struct {
git_repository *repo; git_repository *repo;
git_diff_list *diff; git_diff_list *diff;
git_diff_options *opts; const git_diff_options *opts;
git_diff_file_fn file_cb; git_diff_file_fn file_cb;
git_diff_hunk_fn hunk_cb; git_diff_hunk_fn hunk_cb;
git_diff_data_fn data_cb; git_diff_data_fn data_cb;

View File

@ -23,7 +23,7 @@ git_tree *resolve_commit_oid_to_tree(
int diff_file_fn( int diff_file_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
float progress) float progress)
{ {
diff_expects *e = cb_data; diff_expects *e = cb_data;
@ -48,8 +48,8 @@ int diff_file_fn(
int diff_hunk_fn( int diff_hunk_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
const char *header, const char *header,
size_t header_len) size_t header_len)
{ {
@ -67,8 +67,8 @@ int diff_hunk_fn(
int diff_line_fn( int diff_line_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
char line_origin, char line_origin,
const char *content, const char *content,
size_t content_len) size_t content_len)
@ -116,7 +116,7 @@ int diff_foreach_via_iterator(
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_patch *patch; git_diff_patch *patch;
git_diff_delta *delta; const git_diff_delta *delta;
size_t h, num_h; size_t h, num_h;
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d)); cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
@ -142,7 +142,7 @@ int diff_foreach_via_iterator(
num_h = git_diff_patch_num_hunks(patch); num_h = git_diff_patch_num_hunks(patch);
for (h = 0; h < num_h; h++) { for (h = 0; h < num_h; h++) {
git_diff_range *range; const git_diff_range *range;
const char *hdr; const char *hdr;
size_t hdr_len, l, num_l; size_t hdr_len, l, num_l;

View File

@ -27,20 +27,20 @@ typedef struct {
extern int diff_file_fn( extern int diff_file_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
float progress); float progress);
extern int diff_hunk_fn( extern int diff_hunk_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
const char *header, const char *header,
size_t header_len); size_t header_len);
extern int diff_line_fn( extern int diff_line_fn(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
char line_origin, char line_origin,
const char *content, const char *content,
size_t content_len); size_t content_len);

View File

@ -20,7 +20,7 @@ void test_diff_diffiter__create(void)
num_d = git_diff_num_deltas(diff); num_d = git_diff_num_deltas(diff);
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_delta *delta; const git_diff_delta *delta;
cl_git_pass(git_diff_get_patch(NULL, &delta, diff, d)); cl_git_pass(git_diff_get_patch(NULL, &delta, diff, d));
} }
@ -40,7 +40,7 @@ void test_diff_diffiter__iterate_files(void)
cl_assert_equal_i(6, num_d); cl_assert_equal_i(6, num_d);
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_delta *delta; const git_diff_delta *delta;
cl_git_pass(git_diff_get_patch(NULL, &delta, diff, d)); cl_git_pass(git_diff_get_patch(NULL, &delta, diff, d));
cl_assert(delta != NULL); cl_assert(delta != NULL);
count++; count++;
@ -63,7 +63,7 @@ void test_diff_diffiter__iterate_files_2(void)
cl_assert_equal_i(8, num_d); cl_assert_equal_i(8, num_d);
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_delta *delta; const git_diff_delta *delta;
cl_git_pass(git_diff_get_patch(NULL, &delta, diff, d)); cl_git_pass(git_diff_get_patch(NULL, &delta, diff, d));
cl_assert(delta != NULL); cl_assert(delta != NULL);
count++; count++;
@ -91,7 +91,7 @@ void test_diff_diffiter__iterate_files_and_hunks(void)
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_patch *patch; git_diff_patch *patch;
git_diff_delta *delta; const git_diff_delta *delta;
size_t h, num_h; size_t h, num_h;
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d)); cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
@ -104,7 +104,7 @@ void test_diff_diffiter__iterate_files_and_hunks(void)
num_h = git_diff_patch_num_hunks(patch); num_h = git_diff_patch_num_hunks(patch);
for (h = 0; h < num_h; h++) { for (h = 0; h < num_h; h++) {
git_diff_range *range; const git_diff_range *range;
const char *header; const char *header;
size_t header_len, num_l; size_t header_len, num_l;
@ -143,7 +143,7 @@ void test_diff_diffiter__max_size_threshold(void)
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_patch *patch; git_diff_patch *patch;
git_diff_delta *delta; const git_diff_delta *delta;
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d)); cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
cl_assert(delta); cl_assert(delta);
@ -178,7 +178,7 @@ void test_diff_diffiter__max_size_threshold(void)
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_patch *patch; git_diff_patch *patch;
git_diff_delta *delta; const git_diff_delta *delta;
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d)); cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
@ -221,7 +221,7 @@ void test_diff_diffiter__iterate_all(void)
num_d = git_diff_num_deltas(diff); num_d = git_diff_num_deltas(diff);
for (d = 0; d < num_d; ++d) { for (d = 0; d < num_d; ++d) {
git_diff_patch *patch; git_diff_patch *patch;
git_diff_delta *delta; const git_diff_delta *delta;
size_t h, num_h; size_t h, num_h;
cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d)); cl_git_pass(git_diff_get_patch(&patch, &delta, diff, d));
@ -230,7 +230,7 @@ void test_diff_diffiter__iterate_all(void)
num_h = git_diff_patch_num_hunks(patch); num_h = git_diff_patch_num_hunks(patch);
for (h = 0; h < num_h; h++) { for (h = 0; h < num_h; h++) {
git_diff_range *range; const git_diff_range *range;
const char *header; const char *header;
size_t header_len, l, num_l; size_t header_len, l, num_l;

View File

@ -93,7 +93,7 @@ void test_diff_index__0(void)
static int diff_stop_after_2_files( static int diff_stop_after_2_files(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
float progress) float progress)
{ {
diff_expects *e = cb_data; diff_expects *e = cb_data;

View File

@ -23,8 +23,8 @@ void test_diff_patch__cleanup(void)
static int check_removal_cb( static int check_removal_cb(
void *cb_data, void *cb_data,
git_diff_delta *delta, const git_diff_delta *delta,
git_diff_range *range, const git_diff_range *range,
char line_origin, char line_origin,
const char *formatted_output, const char *formatted_output,
size_t output_len) size_t output_len)

View File

@ -265,9 +265,9 @@ void test_diff_tree__larger_hunks(void)
git_diff_options opts = {0}; git_diff_options opts = {0};
git_diff_list *diff = NULL; git_diff_list *diff = NULL;
size_t d, num_d, h, num_h, l, num_l, header_len, line_len; size_t d, num_d, h, num_h, l, num_l, header_len, line_len;
git_diff_delta *delta; const git_diff_delta *delta;
git_diff_patch *patch; git_diff_patch *patch;
git_diff_range *range; const git_diff_range *range;
const char *header, *line; const char *header, *line;
char origin; char origin;

View File

@ -691,7 +691,7 @@ void test_diff_workdir__larger_hunks(void)
for (i = 0; i <= 2; ++i) { for (i = 0; i <= 2; ++i) {
git_diff_list *diff = NULL; git_diff_list *diff = NULL;
git_diff_patch *patch; git_diff_patch *patch;
git_diff_range *range; const git_diff_range *range;
const char *header, *line; const char *header, *line;
char origin; char origin;