зеркало из https://github.com/microsoft/git.git
Convert "struct cache_entry *" to "const ..." wherever possible
I attempted to make index_state->cache[] a "const struct cache_entry **" to find out how existing entries in index are modified and where. The question I have is what do we do if we really need to keep track of on-disk changes in the index. The result is - diff-lib.c: setting CE_UPTODATE - name-hash.c: setting CE_HASHED - preload-index.c, read-cache.c, unpack-trees.c and builtin/update-index: obvious - entry.c: write_entry() may refresh the checked out entry via fill_stat_cache_info(). This causes "non-const struct cache_entry *" in builtin/apply.c, builtin/checkout-index.c and builtin/checkout.c - builtin/ls-files.c: --with-tree changes stagemask and may set CE_UPDATE Of these, write_entry() and its call sites are probably most interesting because it modifies on-disk info. But this is stat info and can be retrieved via refresh, at least for porcelain commands. Other just uses ce_flags for local purposes. So, keeping track of "dirty" entries is just a matter of setting a flag in index modification functions exposed by read-cache.c. Except unpack-trees, the rest of the code base does not do anything funny behind read-cache's back. The actual patch is less valueable than the summary above. But if anyone wants to re-identify the above sites. Applying this patch, then this: diff --git a/cache.h b/cache.h index 430d021..1692891 100644 --- a/cache.h +++ b/cache.h @@ -267,7 +267,7 @@ static inline unsigned int canon_mode(unsigned int mode) #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1) struct index_state { - struct cache_entry **cache; + const struct cache_entry **cache; unsigned int version; unsigned int cache_nr, cache_alloc, cache_changed; struct string_list *resolve_undo; will help quickly identify them without bogus warnings. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
f8abaebab3
Коммит
9c5e6c802c
|
@ -2999,7 +2999,7 @@ static int read_blob_object(struct strbuf *buf, const unsigned char *sha1, unsig
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int read_file_or_gitlink(struct cache_entry *ce, struct strbuf *buf)
|
||||
static int read_file_or_gitlink(const struct cache_entry *ce, struct strbuf *buf)
|
||||
{
|
||||
if (!ce)
|
||||
return 0;
|
||||
|
@ -3117,7 +3117,7 @@ static struct patch *previous_patch(struct patch *patch, int *gone)
|
|||
return previous;
|
||||
}
|
||||
|
||||
static int verify_index_match(struct cache_entry *ce, struct stat *st)
|
||||
static int verify_index_match(const struct cache_entry *ce, struct stat *st)
|
||||
{
|
||||
if (S_ISGITLINK(ce->ce_mode)) {
|
||||
if (!S_ISDIR(st->st_mode))
|
||||
|
@ -3130,7 +3130,7 @@ static int verify_index_match(struct cache_entry *ce, struct stat *st)
|
|||
#define SUBMODULE_PATCH_WITHOUT_INDEX 1
|
||||
|
||||
static int load_patch_target(struct strbuf *buf,
|
||||
struct cache_entry *ce,
|
||||
const struct cache_entry *ce,
|
||||
struct stat *st,
|
||||
const char *name,
|
||||
unsigned expected_mode)
|
||||
|
@ -3160,7 +3160,8 @@ static int load_patch_target(struct strbuf *buf,
|
|||
* we read from the result of a previous diff.
|
||||
*/
|
||||
static int load_preimage(struct image *image,
|
||||
struct patch *patch, struct stat *st, struct cache_entry *ce)
|
||||
struct patch *patch, struct stat *st,
|
||||
const struct cache_entry *ce)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
size_t len;
|
||||
|
@ -3273,7 +3274,7 @@ static int load_current(struct image *image, struct patch *patch)
|
|||
}
|
||||
|
||||
static int try_threeway(struct image *image, struct patch *patch,
|
||||
struct stat *st, struct cache_entry *ce)
|
||||
struct stat *st, const struct cache_entry *ce)
|
||||
{
|
||||
unsigned char pre_sha1[20], post_sha1[20], our_sha1[20];
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
@ -3343,7 +3344,7 @@ static int try_threeway(struct image *image, struct patch *patch,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int apply_data(struct patch *patch, struct stat *st, struct cache_entry *ce)
|
||||
static int apply_data(struct patch *patch, struct stat *st, const struct cache_entry *ce)
|
||||
{
|
||||
struct image image;
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ static int read_tree_some(struct tree *tree, const char **pathspec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int skip_same_name(struct cache_entry *ce, int pos)
|
||||
static int skip_same_name(const struct cache_entry *ce, int pos)
|
||||
{
|
||||
while (++pos < active_nr &&
|
||||
!strcmp(active_cache[pos]->name, ce->name))
|
||||
|
@ -105,7 +105,7 @@ static int skip_same_name(struct cache_entry *ce, int pos)
|
|||
return pos;
|
||||
}
|
||||
|
||||
static int check_stage(int stage, struct cache_entry *ce, int pos)
|
||||
static int check_stage(int stage, const struct cache_entry *ce, int pos)
|
||||
{
|
||||
while (pos < active_nr &&
|
||||
!strcmp(active_cache[pos]->name, ce->name)) {
|
||||
|
@ -119,7 +119,7 @@ static int check_stage(int stage, struct cache_entry *ce, int pos)
|
|||
return error(_("path '%s' does not have their version"), ce->name);
|
||||
}
|
||||
|
||||
static int check_stages(unsigned stages, struct cache_entry *ce, int pos)
|
||||
static int check_stages(unsigned stages, const struct cache_entry *ce, int pos)
|
||||
{
|
||||
unsigned seen = 0;
|
||||
const char *name = ce->name;
|
||||
|
@ -321,7 +321,7 @@ static int checkout_paths(const struct checkout_opts *opts,
|
|||
|
||||
/* Any unmerged paths? */
|
||||
for (pos = 0; pos < active_nr; pos++) {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
if (ce->ce_flags & CE_MATCHED) {
|
||||
if (!ce_stage(ce))
|
||||
continue;
|
||||
|
|
|
@ -221,7 +221,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
|||
struct dir_entry *ent = dir.entries[i];
|
||||
int len, pos;
|
||||
int matches = 0;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
struct stat st;
|
||||
|
||||
/*
|
||||
|
|
|
@ -205,7 +205,7 @@ static int list_paths(struct string_list *list, const char *with_tree,
|
|||
}
|
||||
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
struct string_list_item *item;
|
||||
|
||||
if (ce->ce_flags & CE_UPDATE)
|
||||
|
|
|
@ -376,7 +376,7 @@ static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int
|
|||
read_cache();
|
||||
|
||||
for (nr = 0; nr < active_nr; nr++) {
|
||||
struct cache_entry *ce = active_cache[nr];
|
||||
const struct cache_entry *ce = active_cache[nr];
|
||||
if (!S_ISREG(ce->ce_mode))
|
||||
continue;
|
||||
if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL))
|
||||
|
|
|
@ -127,7 +127,7 @@ static void show_killed_files(struct dir_struct *dir)
|
|||
}
|
||||
}
|
||||
|
||||
static void show_ce_entry(const char *tag, struct cache_entry *ce)
|
||||
static void show_ce_entry(const char *tag, const struct cache_entry *ce)
|
||||
{
|
||||
int len = max_prefix_len;
|
||||
|
||||
|
@ -165,7 +165,7 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce)
|
|||
}
|
||||
write_name(ce->name, ce_namelen(ce));
|
||||
if (debug_mode) {
|
||||
struct stat_data *sd = &ce->ce_stat_data;
|
||||
const struct stat_data *sd = &ce->ce_stat_data;
|
||||
|
||||
printf(" ctime: %d:%d\n", sd->sd_ctime.sec, sd->sd_ctime.nsec);
|
||||
printf(" mtime: %d:%d\n", sd->sd_mtime.sec, sd->sd_mtime.nsec);
|
||||
|
@ -203,7 +203,7 @@ static void show_ru_info(void)
|
|||
}
|
||||
}
|
||||
|
||||
static int ce_excluded(struct dir_struct *dir, struct cache_entry *ce)
|
||||
static int ce_excluded(struct dir_struct *dir, const struct cache_entry *ce)
|
||||
{
|
||||
int dtype = ce_to_dtype(ce);
|
||||
return is_excluded(dir, ce->name, &dtype);
|
||||
|
@ -223,7 +223,7 @@ static void show_files(struct dir_struct *dir)
|
|||
}
|
||||
if (show_cached || show_stage) {
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if ((dir->flags & DIR_SHOW_IGNORED) &&
|
||||
!ce_excluded(dir, ce))
|
||||
continue;
|
||||
|
@ -237,7 +237,7 @@ static void show_files(struct dir_struct *dir)
|
|||
}
|
||||
if (show_deleted || show_modified) {
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
struct stat st;
|
||||
int err;
|
||||
if ((dir->flags & DIR_SHOW_IGNORED) &&
|
||||
|
@ -273,7 +273,7 @@ static void prune_cache(const char *prefix)
|
|||
last = active_nr;
|
||||
while (last > first) {
|
||||
int next = (last + first) >> 1;
|
||||
struct cache_entry *ce = active_cache[next];
|
||||
const struct cache_entry *ce = active_cache[next];
|
||||
if (!strncmp(ce->name, prefix, max_prefix_len)) {
|
||||
first = next+1;
|
||||
continue;
|
||||
|
|
|
@ -16,7 +16,7 @@ static int merge_entry(int pos, const char *path)
|
|||
die("git merge-index: %s not in the cache", path);
|
||||
found = 0;
|
||||
do {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
int stage = ce_stage(ce);
|
||||
|
||||
if (strcmp(ce->name, path))
|
||||
|
@ -58,7 +58,7 @@ static void merge_all(void)
|
|||
{
|
||||
int i;
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (!ce_stage(ce))
|
||||
continue;
|
||||
i += merge_entry(i, ce->name)-1;
|
||||
|
|
|
@ -889,7 +889,7 @@ static int suggest_conflicts(int renormalizing)
|
|||
die_errno(_("Could not open '%s' for writing"), filename);
|
||||
fprintf(fp, "\nConflicts:\n");
|
||||
for (pos = 0; pos < active_nr; pos++) {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
|
||||
if (ce_stage(ce)) {
|
||||
fprintf(fp, "\t%s\n", ce->name);
|
||||
|
|
|
@ -67,7 +67,7 @@ static int check_submodules_use_gitfiles(void)
|
|||
for (i = 0; i < list.nr; i++) {
|
||||
const char *name = list.entry[i].name;
|
||||
int pos;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
struct stat st;
|
||||
|
||||
pos = cache_name_pos(name, strlen(name));
|
||||
|
@ -120,7 +120,7 @@ static int check_local_mod(unsigned char *head, int index_only)
|
|||
for (i = 0; i < list.nr; i++) {
|
||||
struct stat st;
|
||||
int pos;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
const char *name = list.entry[i].name;
|
||||
unsigned char sha1[20];
|
||||
unsigned mode;
|
||||
|
@ -321,7 +321,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
|
|||
seen = xcalloc(i, 1);
|
||||
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (!match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen))
|
||||
continue;
|
||||
ALLOC_GROW(list.entry, list.nr + 1, list.alloc);
|
||||
|
|
|
@ -83,7 +83,7 @@ static int process_lstat_error(const char *path, int err)
|
|||
return error("lstat(\"%s\"): %s", path, strerror(errno));
|
||||
}
|
||||
|
||||
static int add_one_path(struct cache_entry *old, const char *path, int len, struct stat *st)
|
||||
static int add_one_path(const struct cache_entry *old, const char *path, int len, struct stat *st)
|
||||
{
|
||||
int option, size;
|
||||
struct cache_entry *ce;
|
||||
|
@ -142,7 +142,7 @@ static int process_directory(const char *path, int len, struct stat *st)
|
|||
|
||||
/* Exact match: file or existing gitlink */
|
||||
if (pos >= 0) {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
if (S_ISGITLINK(ce->ce_mode)) {
|
||||
|
||||
/* Do nothing to the index if there is no HEAD! */
|
||||
|
@ -158,7 +158,7 @@ static int process_directory(const char *path, int len, struct stat *st)
|
|||
/* Inexact match: is there perhaps a subdirectory match? */
|
||||
pos = -pos-1;
|
||||
while (pos < active_nr) {
|
||||
struct cache_entry *ce = active_cache[pos++];
|
||||
const struct cache_entry *ce = active_cache[pos++];
|
||||
|
||||
if (strncmp(ce->name, path, len))
|
||||
break;
|
||||
|
@ -183,7 +183,7 @@ static int process_path(const char *path)
|
|||
{
|
||||
int pos, len;
|
||||
struct stat st;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
|
||||
len = strlen(path);
|
||||
if (has_symlink_leading_path(path, len))
|
||||
|
@ -448,7 +448,7 @@ static int unresolve_one(const char *path)
|
|||
/* already merged */
|
||||
pos = unmerge_cache_entry_at(pos);
|
||||
if (pos < active_nr) {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
if (ce_stage(ce) &&
|
||||
ce_namelen(ce) == namelen &&
|
||||
!memcmp(ce->name, path, namelen))
|
||||
|
@ -462,7 +462,7 @@ static int unresolve_one(const char *path)
|
|||
*/
|
||||
pos = -pos-1;
|
||||
if (pos < active_nr) {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
if (ce_namelen(ce) == namelen &&
|
||||
!memcmp(ce->name, path, namelen)) {
|
||||
fprintf(stderr,
|
||||
|
@ -558,7 +558,7 @@ static int do_reupdate(int ac, const char **av,
|
|||
has_head = 0;
|
||||
redo:
|
||||
for (pos = 0; pos < active_nr; pos++) {
|
||||
struct cache_entry *ce = active_cache[pos];
|
||||
const struct cache_entry *ce = active_cache[pos];
|
||||
struct cache_entry *old = NULL;
|
||||
int save_nr;
|
||||
|
||||
|
|
19
cache-tree.c
19
cache-tree.c
|
@ -149,7 +149,7 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
|
|||
cache_tree_invalidate_path(down->cache_tree, slash + 1);
|
||||
}
|
||||
|
||||
static int verify_cache(struct cache_entry **cache,
|
||||
static int verify_cache(const struct cache_entry * const *cache,
|
||||
int entries, int flags)
|
||||
{
|
||||
int i, funny;
|
||||
|
@ -158,7 +158,7 @@ static int verify_cache(struct cache_entry **cache,
|
|||
/* Verify that the tree is merged */
|
||||
funny = 0;
|
||||
for (i = 0; i < entries; i++) {
|
||||
struct cache_entry *ce = cache[i];
|
||||
const struct cache_entry *ce = cache[i];
|
||||
if (ce_stage(ce)) {
|
||||
if (silent)
|
||||
return -1;
|
||||
|
@ -234,7 +234,7 @@ int cache_tree_fully_valid(struct cache_tree *it)
|
|||
}
|
||||
|
||||
static int update_one(struct cache_tree *it,
|
||||
struct cache_entry **cache,
|
||||
const struct cache_entry * const *cache,
|
||||
int entries,
|
||||
const char *base,
|
||||
int baselen,
|
||||
|
@ -265,7 +265,7 @@ static int update_one(struct cache_tree *it,
|
|||
*/
|
||||
i = 0;
|
||||
while (i < entries) {
|
||||
struct cache_entry *ce = cache[i];
|
||||
const struct cache_entry *ce = cache[i];
|
||||
struct cache_tree_sub *sub;
|
||||
const char *path, *slash;
|
||||
int pathlen, sublen, subcnt, subskip;
|
||||
|
@ -312,7 +312,7 @@ static int update_one(struct cache_tree *it,
|
|||
|
||||
i = 0;
|
||||
while (i < entries) {
|
||||
struct cache_entry *ce = cache[i];
|
||||
const struct cache_entry *ce = cache[i];
|
||||
struct cache_tree_sub *sub;
|
||||
const char *path, *slash;
|
||||
int pathlen, entlen;
|
||||
|
@ -397,7 +397,7 @@ static int update_one(struct cache_tree *it,
|
|||
}
|
||||
|
||||
int cache_tree_update(struct cache_tree *it,
|
||||
struct cache_entry **cache,
|
||||
const struct cache_entry * const *cache,
|
||||
int entries,
|
||||
int flags)
|
||||
{
|
||||
|
@ -599,8 +599,8 @@ int write_cache_as_tree(unsigned char *sha1, int flags, const char *prefix)
|
|||
was_valid = cache_tree_fully_valid(active_cache_tree);
|
||||
if (!was_valid) {
|
||||
if (cache_tree_update(active_cache_tree,
|
||||
active_cache, active_nr,
|
||||
flags) < 0)
|
||||
(const struct cache_entry * const *)active_cache,
|
||||
active_nr, flags) < 0)
|
||||
return WRITE_TREE_UNMERGED_INDEX;
|
||||
if (0 <= newfd) {
|
||||
if (!write_cache(newfd, active_cache, active_nr) &&
|
||||
|
@ -701,5 +701,6 @@ int update_main_cache_tree(int flags)
|
|||
if (!the_index.cache_tree)
|
||||
the_index.cache_tree = cache_tree();
|
||||
return cache_tree_update(the_index.cache_tree,
|
||||
the_index.cache, the_index.cache_nr, flags);
|
||||
(const struct cache_entry * const *)the_index.cache,
|
||||
the_index.cache_nr, flags);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ void cache_tree_write(struct strbuf *, struct cache_tree *root);
|
|||
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
|
||||
|
||||
int cache_tree_fully_valid(struct cache_tree *);
|
||||
int cache_tree_update(struct cache_tree *, struct cache_entry **, int, int);
|
||||
int cache_tree_update(struct cache_tree *, const struct cache_entry * const *, int, int);
|
||||
|
||||
int update_main_cache_tree(int);
|
||||
|
||||
|
|
2
cache.h
2
cache.h
|
@ -476,7 +476,7 @@ extern int remove_file_from_index(struct index_state *, const char *path);
|
|||
extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags);
|
||||
extern int add_file_to_index(struct index_state *, const char *path, int flags);
|
||||
extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh);
|
||||
extern int ce_same_name(struct cache_entry *a, struct cache_entry *b);
|
||||
extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b);
|
||||
extern int index_name_is_other(const struct index_state *, const char *, int);
|
||||
extern void *read_blob_data_from_index(struct index_state *, const char *, unsigned long *);
|
||||
|
||||
|
|
2
diff.c
2
diff.c
|
@ -2586,7 +2586,7 @@ void fill_filespec(struct diff_filespec *spec, const unsigned char *sha1,
|
|||
*/
|
||||
static int reuse_worktree_file(const char *name, const unsigned char *sha1, int want_file)
|
||||
{
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
struct stat st;
|
||||
int pos, len;
|
||||
|
||||
|
|
6
dir.c
6
dir.c
|
@ -933,7 +933,7 @@ enum exist_status {
|
|||
*/
|
||||
static enum exist_status directory_exists_in_index_icase(const char *dirname, int len)
|
||||
{
|
||||
struct cache_entry *ce = index_name_exists(&the_index, dirname, len + 1, ignore_case);
|
||||
const struct cache_entry *ce = index_name_exists(&the_index, dirname, len + 1, ignore_case);
|
||||
unsigned char endchar;
|
||||
|
||||
if (!ce)
|
||||
|
@ -977,7 +977,7 @@ static enum exist_status directory_exists_in_index(const char *dirname, int len)
|
|||
if (pos < 0)
|
||||
pos = -pos-1;
|
||||
while (pos < active_nr) {
|
||||
struct cache_entry *ce = active_cache[pos++];
|
||||
const struct cache_entry *ce = active_cache[pos++];
|
||||
unsigned char endchar;
|
||||
|
||||
if (strncmp(ce->name, dirname, len))
|
||||
|
@ -1115,7 +1115,7 @@ static int exclude_matches_pathspec(const char *path, int len,
|
|||
static int get_index_dtype(const char *path, int len)
|
||||
{
|
||||
int pos;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
|
||||
ce = cache_name_exists(path, len, 0);
|
||||
if (ce) {
|
||||
|
|
12
entry.c
12
entry.c
|
@ -79,7 +79,7 @@ static int create_file(const char *path, unsigned int mode)
|
|||
return open(path, O_WRONLY | O_CREAT | O_EXCL, mode);
|
||||
}
|
||||
|
||||
static void *read_blob_entry(struct cache_entry *ce, unsigned long *size)
|
||||
static void *read_blob_entry(const struct cache_entry *ce, unsigned long *size)
|
||||
{
|
||||
enum object_type type;
|
||||
void *new = read_sha1_file(ce->sha1, &type, size);
|
||||
|
@ -92,7 +92,7 @@ static void *read_blob_entry(struct cache_entry *ce, unsigned long *size)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int open_output_fd(char *path, struct cache_entry *ce, int to_tempfile)
|
||||
static int open_output_fd(char *path, const struct cache_entry *ce, int to_tempfile)
|
||||
{
|
||||
int symlink = (ce->ce_mode & S_IFMT) != S_IFREG;
|
||||
if (to_tempfile) {
|
||||
|
@ -115,7 +115,7 @@ static int fstat_output(int fd, const struct checkout *state, struct stat *st)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int streaming_write_entry(struct cache_entry *ce, char *path,
|
||||
static int streaming_write_entry(const struct cache_entry *ce, char *path,
|
||||
struct stream_filter *filter,
|
||||
const struct checkout *state, int to_tempfile,
|
||||
int *fstat_done, struct stat *statbuf)
|
||||
|
@ -136,7 +136,8 @@ static int streaming_write_entry(struct cache_entry *ce, char *path,
|
|||
return result;
|
||||
}
|
||||
|
||||
static int write_entry(struct cache_entry *ce, char *path, const struct checkout *state, int to_tempfile)
|
||||
static int write_entry(struct cache_entry *ce,
|
||||
char *path, const struct checkout *state, int to_tempfile)
|
||||
{
|
||||
unsigned int ce_mode_s_ifmt = ce->ce_mode & S_IFMT;
|
||||
int fd, ret, fstat_done = 0;
|
||||
|
@ -233,7 +234,8 @@ static int check_path(const char *path, int len, struct stat *st, int skiplen)
|
|||
return lstat(path, st);
|
||||
}
|
||||
|
||||
int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath)
|
||||
int checkout_entry(struct cache_entry *ce,
|
||||
const struct checkout *state, char *topath)
|
||||
{
|
||||
static char path[PATH_MAX + 1];
|
||||
struct stat st;
|
||||
|
|
|
@ -251,7 +251,7 @@ struct tree *write_tree_from_memory(struct merge_options *o)
|
|||
int i;
|
||||
fprintf(stderr, "BUG: There are unmerged index entries:\n");
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (ce_stage(ce))
|
||||
fprintf(stderr, "BUG: %d %.*s\n", ce_stage(ce),
|
||||
(int)ce_namelen(ce), ce->name);
|
||||
|
@ -264,7 +264,8 @@ struct tree *write_tree_from_memory(struct merge_options *o)
|
|||
|
||||
if (!cache_tree_fully_valid(active_cache_tree) &&
|
||||
cache_tree_update(active_cache_tree,
|
||||
active_cache, active_nr, 0) < 0)
|
||||
(const struct cache_entry * const *)active_cache,
|
||||
active_nr, 0) < 0)
|
||||
die(_("error building trees"));
|
||||
|
||||
result = lookup_tree(active_cache_tree->sha1);
|
||||
|
@ -339,7 +340,7 @@ static struct string_list *get_unmerged(void)
|
|||
for (i = 0; i < active_nr; i++) {
|
||||
struct string_list_item *item;
|
||||
struct stage_data *e;
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (!ce_stage(ce))
|
||||
continue;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ void add_pathspec_matches_against_index(const char **pathspec,
|
|||
if (!num_unmatched)
|
||||
return;
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen);
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ const char *check_path_for_gitlink(const char *path)
|
|||
{
|
||||
int i, path_len = strlen(path);
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (S_ISGITLINK(ce->ce_mode)) {
|
||||
int ce_len = ce_namelen(ce);
|
||||
if (path_len <= ce_len || path[ce_len] != '/' ||
|
||||
|
|
|
@ -722,7 +722,7 @@ struct cache_entry *make_cache_entry(unsigned int mode,
|
|||
return ce;
|
||||
}
|
||||
|
||||
int ce_same_name(struct cache_entry *a, struct cache_entry *b)
|
||||
int ce_same_name(const struct cache_entry *a, const struct cache_entry *b)
|
||||
{
|
||||
int len = ce_namelen(a);
|
||||
return ce_namelen(b) == len && !memcmp(a->name, b->name, len);
|
||||
|
|
12
rerere.c
12
rerere.c
|
@ -299,7 +299,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu
|
|||
{
|
||||
mmfile_t mmfile[3] = {{NULL}};
|
||||
mmbuffer_t result = {NULL, 0};
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
int pos, len, i, hunk_no;
|
||||
struct rerere_io_mem io;
|
||||
int marker_size = ll_merge_marker_size(path);
|
||||
|
@ -359,7 +359,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu
|
|||
|
||||
static int check_one_conflict(int i, int *type)
|
||||
{
|
||||
struct cache_entry *e = active_cache[i];
|
||||
const struct cache_entry *e = active_cache[i];
|
||||
|
||||
if (!ce_stage(e)) {
|
||||
*type = RESOLVED;
|
||||
|
@ -374,8 +374,8 @@ static int check_one_conflict(int i, int *type)
|
|||
|
||||
/* Only handle regular files with both stages #2 and #3 */
|
||||
if (i + 1 < active_nr) {
|
||||
struct cache_entry *e2 = active_cache[i];
|
||||
struct cache_entry *e3 = active_cache[i + 1];
|
||||
const struct cache_entry *e2 = active_cache[i];
|
||||
const struct cache_entry *e3 = active_cache[i + 1];
|
||||
if (ce_stage(e2) == 2 &&
|
||||
ce_stage(e3) == 3 &&
|
||||
ce_same_name(e, e3) &&
|
||||
|
@ -398,7 +398,7 @@ static int find_conflict(struct string_list *conflict)
|
|||
|
||||
for (i = 0; i < active_nr;) {
|
||||
int conflict_type;
|
||||
struct cache_entry *e = active_cache[i];
|
||||
const struct cache_entry *e = active_cache[i];
|
||||
i = check_one_conflict(i, &conflict_type);
|
||||
if (conflict_type == THREE_STAGED)
|
||||
string_list_insert(conflict, (const char *)e->name);
|
||||
|
@ -414,7 +414,7 @@ int rerere_remaining(struct string_list *merge_rr)
|
|||
|
||||
for (i = 0; i < active_nr;) {
|
||||
int conflict_type;
|
||||
struct cache_entry *e = active_cache[i];
|
||||
const struct cache_entry *e = active_cache[i];
|
||||
i = check_one_conflict(i, &conflict_type);
|
||||
if (conflict_type == PUNTED)
|
||||
string_list_insert(merge_rr, (const char *)e->name);
|
||||
|
|
|
@ -115,7 +115,7 @@ void resolve_undo_clear_index(struct index_state *istate)
|
|||
|
||||
int unmerge_index_entry_at(struct index_state *istate, int pos)
|
||||
{
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
struct string_list_item *item;
|
||||
struct resolve_undo_info *ru;
|
||||
int i, err = 0, matched;
|
||||
|
@ -167,7 +167,7 @@ void unmerge_marked_index(struct index_state *istate)
|
|||
return;
|
||||
|
||||
for (i = 0; i < istate->cache_nr; i++) {
|
||||
struct cache_entry *ce = istate->cache[i];
|
||||
const struct cache_entry *ce = istate->cache[i];
|
||||
if (ce->ce_flags & CE_MATCHED)
|
||||
i = unmerge_index_entry_at(istate, i);
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ void unmerge_index(struct index_state *istate, const char **pathspec)
|
|||
return;
|
||||
|
||||
for (i = 0; i < istate->cache_nr; i++) {
|
||||
struct cache_entry *ce = istate->cache[i];
|
||||
const struct cache_entry *ce = istate->cache[i];
|
||||
if (!match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL))
|
||||
continue;
|
||||
i = unmerge_index_entry_at(istate, i);
|
||||
|
|
|
@ -1358,7 +1358,7 @@ static void prepare_show_merge(struct rev_info *revs)
|
|||
if (!active_nr)
|
||||
read_cache();
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (!ce_stage(ce))
|
||||
continue;
|
||||
if (ce_path_match(ce, &revs->prune_data)) {
|
||||
|
|
|
@ -331,7 +331,7 @@ static int do_recursive_merge(struct commit *base, struct commit *next,
|
|||
int i;
|
||||
strbuf_addstr(msgbuf, "\nConflicts:\n");
|
||||
for (i = 0; i < active_nr;) {
|
||||
struct cache_entry *ce = active_cache[i++];
|
||||
const struct cache_entry *ce = active_cache[i++];
|
||||
if (ce_stage(ce)) {
|
||||
strbuf_addch(msgbuf, '\t');
|
||||
strbuf_addstr(msgbuf, ce->name);
|
||||
|
@ -371,8 +371,9 @@ static int is_index_unchanged(void)
|
|||
active_cache_tree = cache_tree();
|
||||
|
||||
if (!cache_tree_fully_valid(active_cache_tree))
|
||||
if (cache_tree_update(active_cache_tree, active_cache,
|
||||
active_nr, 0))
|
||||
if (cache_tree_update(active_cache_tree,
|
||||
(const struct cache_entry * const *)active_cache,
|
||||
active_nr, 0))
|
||||
return error(_("Unable to update cache tree\n"));
|
||||
|
||||
return !hashcmp(active_cache_tree->sha1, head_commit->tree->object.sha1);
|
||||
|
|
|
@ -1234,7 +1234,7 @@ static void diagnose_invalid_index_path(int stage,
|
|||
const char *filename)
|
||||
{
|
||||
struct stat st;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
int pos;
|
||||
unsigned namelen = strlen(filename);
|
||||
unsigned fullnamelen;
|
||||
|
@ -1328,7 +1328,7 @@ static int get_sha1_with_context_1(const char *name,
|
|||
*/
|
||||
if (name[0] == ':') {
|
||||
int stage = 0;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
char *new_path = NULL;
|
||||
int pos;
|
||||
if (!only_to_die && namelen > 2 && name[1] == '/') {
|
||||
|
|
|
@ -623,7 +623,7 @@ int fetch_populated_submodules(const struct argv_array *options,
|
|||
struct strbuf submodule_path = STRBUF_INIT;
|
||||
struct strbuf submodule_git_dir = STRBUF_INIT;
|
||||
struct strbuf submodule_prefix = STRBUF_INIT;
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
const char *git_dir, *name, *default_argv;
|
||||
|
||||
if (!S_ISGITLINK(ce->ce_mode))
|
||||
|
|
|
@ -59,6 +59,8 @@ int main(int ac, char **av)
|
|||
struct cache_tree *another = cache_tree();
|
||||
if (read_cache() < 0)
|
||||
die("unable to read index file");
|
||||
cache_tree_update(another, active_cache, active_nr, WRITE_TREE_DRY_RUN);
|
||||
cache_tree_update(another,
|
||||
(const struct cache_entry * const *)active_cache,
|
||||
active_nr, WRITE_TREE_DRY_RUN);
|
||||
return dump_cache_tree(active_cache_tree, another, "");
|
||||
}
|
||||
|
|
2
tree.c
2
tree.c
|
@ -159,7 +159,7 @@ int read_tree(struct tree *tree, int stage, struct pathspec *match)
|
|||
* sort at the end.
|
||||
*/
|
||||
for (i = 0; !fn && i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
if (ce_stage(ce) == stage)
|
||||
fn = read_one_entry;
|
||||
}
|
||||
|
|
|
@ -179,7 +179,7 @@ static void display_error_msgs(struct unpack_trees_options *o)
|
|||
* Unlink the last component and schedule the leading directories for
|
||||
* removal, such that empty directories get removed.
|
||||
*/
|
||||
static void unlink_entry(struct cache_entry *ce)
|
||||
static void unlink_entry(const struct cache_entry *ce)
|
||||
{
|
||||
if (!check_leading_path(ce->name, ce_namelen(ce)))
|
||||
return;
|
||||
|
@ -199,7 +199,7 @@ static int check_updates(struct unpack_trees_options *o)
|
|||
|
||||
if (o->update && o->verbose_update) {
|
||||
for (total = cnt = 0; cnt < index->cache_nr; cnt++) {
|
||||
struct cache_entry *ce = index->cache[cnt];
|
||||
const struct cache_entry *ce = index->cache[cnt];
|
||||
if (ce->ce_flags & (CE_UPDATE | CE_WT_REMOVE))
|
||||
total++;
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ static int check_updates(struct unpack_trees_options *o)
|
|||
if (o->update)
|
||||
git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result);
|
||||
for (i = 0; i < index->cache_nr; i++) {
|
||||
struct cache_entry *ce = index->cache[i];
|
||||
const struct cache_entry *ce = index->cache[i];
|
||||
|
||||
if (ce->ce_flags & CE_WT_REMOVE) {
|
||||
display_progress(progress, ++cnt);
|
||||
|
@ -376,7 +376,7 @@ static struct cache_entry *next_cache_entry(struct unpack_trees_options *o)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void add_same_unmerged(struct cache_entry *ce,
|
||||
static void add_same_unmerged(const struct cache_entry *ce,
|
||||
struct unpack_trees_options *o)
|
||||
{
|
||||
struct index_state *index = o->src_index;
|
||||
|
@ -650,7 +650,7 @@ static int find_cache_pos(struct traverse_info *info,
|
|||
int p_len = tree_entry_len(p);
|
||||
|
||||
for (pos = o->cache_bottom; pos < index->cache_nr; pos++) {
|
||||
struct cache_entry *ce = index->cache[pos];
|
||||
const struct cache_entry *ce = index->cache[pos];
|
||||
const char *ce_name, *ce_slash;
|
||||
int cmp, ce_len;
|
||||
|
||||
|
@ -1353,7 +1353,7 @@ static int verify_clean_subdirectory(const struct cache_entry *ce,
|
|||
*/
|
||||
static int icase_exists(struct unpack_trees_options *o, const char *name, int len, struct stat *st)
|
||||
{
|
||||
struct cache_entry *src;
|
||||
const struct cache_entry *src;
|
||||
|
||||
src = index_name_exists(o->src_index, name, len, 1);
|
||||
return src && !ie_match_stat(o->src_index, src, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
|
||||
|
@ -1364,7 +1364,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
|
|||
enum unpack_trees_error_types error_type,
|
||||
struct unpack_trees_options *o)
|
||||
{
|
||||
struct cache_entry *result;
|
||||
const struct cache_entry *result;
|
||||
|
||||
/*
|
||||
* It may be that the 'lstat()' succeeded even though
|
||||
|
|
|
@ -371,7 +371,7 @@ static void wt_status_collect_changed_cb(struct diff_queue_struct *q,
|
|||
static int unmerged_mask(const char *path)
|
||||
{
|
||||
int pos, mask;
|
||||
struct cache_entry *ce;
|
||||
const struct cache_entry *ce;
|
||||
|
||||
pos = cache_name_pos(path, strlen(path));
|
||||
if (0 <= pos)
|
||||
|
@ -475,7 +475,7 @@ static void wt_status_collect_changes_initial(struct wt_status *s)
|
|||
for (i = 0; i < active_nr; i++) {
|
||||
struct string_list_item *it;
|
||||
struct wt_status_change_data *d;
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
const struct cache_entry *ce = active_cache[i];
|
||||
|
||||
if (!ce_path_match(ce, &pathspec))
|
||||
continue;
|
||||
|
|
Загрузка…
Ссылка в новой задаче