aboutsummaryrefslogtreecommitdiffstats
path: root/read-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c73
1 files changed, 45 insertions, 28 deletions
diff --git a/read-cache.c b/read-cache.c
index 4e67dc182e..e678c13e8f 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -5,6 +5,7 @@
*/
#define USE_THE_REPOSITORY_VARIABLE
+#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
#include "bulk-checkin.h"
@@ -31,6 +32,7 @@
#include "path.h"
#include "preload-index.h"
#include "read-cache.h"
+#include "repository.h"
#include "resolve-undo.h"
#include "revision.h"
#include "strbuf.h"
@@ -1521,7 +1523,8 @@ int refresh_index(struct index_state *istate, unsigned int flags,
int t2_sum_scan = 0;
if (flags & REFRESH_PROGRESS && isatty(2))
- progress = start_delayed_progress(_("Refresh index"),
+ progress = start_delayed_progress(the_repository,
+ _("Refresh index"),
istate->cache_nr);
trace_performance_enter();
@@ -1714,7 +1717,7 @@ int verify_ce_order;
static int verify_hdr(const struct cache_header *hdr, unsigned long size)
{
- git_hash_ctx c;
+ struct git_hash_ctx c;
unsigned char hash[GIT_MAX_RAWSZ];
int hdr_version;
unsigned char *start, *end;
@@ -1736,8 +1739,8 @@ static int verify_hdr(const struct cache_header *hdr, unsigned long size)
return 0;
the_hash_algo->init_fn(&c);
- the_hash_algo->update_fn(&c, hdr, size - the_hash_algo->rawsz);
- the_hash_algo->final_fn(hash, &c);
+ git_hash_update(&c, hdr, size - the_hash_algo->rawsz);
+ git_hash_final(hash, &c);
if (!hasheq(hash, start, the_repository->hash_algo))
return error(_("bad index file sha1 signature"));
return 0;
@@ -1751,7 +1754,7 @@ static int read_index_extension(struct index_state *istate,
istate->cache_tree = cache_tree_read(data, sz);
break;
case CACHE_EXT_RESOLVE_UNDO:
- istate->resolve_undo = resolve_undo_read(data, sz);
+ istate->resolve_undo = resolve_undo_read(data, sz, the_hash_algo);
break;
case CACHE_EXT_LINK:
if (read_link_extension(istate, data, sz))
@@ -1999,7 +2002,7 @@ static struct index_entry_offset_table *read_ieot_extension(const char *mmap, si
static void write_ieot_extension(struct strbuf *sb, struct index_entry_offset_table *ieot);
static size_t read_eoie_extension(const char *mmap, size_t mmap_size);
-static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context, size_t offset);
+static void write_eoie_extension(struct strbuf *sb, struct git_hash_ctx *eoie_context, size_t offset);
struct load_index_extensions
{
@@ -2187,6 +2190,7 @@ static unsigned long load_cache_entries_threaded(struct index_state *istate, con
if (err)
die(_("unable to join load_cache_entries thread: %s"), strerror(err));
mem_pool_combine(istate->ce_mem_pool, p->ce_mem_pool);
+ free(p->ce_mem_pool);
consumed += p->consumed;
}
@@ -2562,7 +2566,7 @@ int repo_index_has_changes(struct repository *repo,
}
static int write_index_ext_header(struct hashfile *f,
- git_hash_ctx *eoie_f,
+ struct git_hash_ctx *eoie_f,
unsigned int ext,
unsigned int sz)
{
@@ -2572,8 +2576,8 @@ static int write_index_ext_header(struct hashfile *f,
if (eoie_f) {
ext = htonl(ext);
sz = htonl(sz);
- the_hash_algo->update_fn(eoie_f, &ext, sizeof(ext));
- the_hash_algo->update_fn(eoie_f, &sz, sizeof(sz));
+ git_hash_update(eoie_f, &ext, sizeof(ext));
+ git_hash_update(eoie_f, &sz, sizeof(sz));
}
return 0;
}
@@ -2827,7 +2831,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
{
uint64_t start = getnanotime();
struct hashfile *f;
- git_hash_ctx *eoie_c = NULL;
+ struct git_hash_ctx *eoie_c = NULL;
struct cache_header hdr;
int i, err = 0, removed, extended, hdr_version;
struct cache_entry **cache = istate->cache;
@@ -3029,7 +3033,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
istate->resolve_undo) {
strbuf_reset(&sb);
- resolve_undo_write(&sb, istate->resolve_undo);
+ resolve_undo_write(&sb, istate->resolve_undo, the_hash_algo);
err = write_index_ext_header(f, eoie_c, CACHE_EXT_RESOLVE_UNDO,
sb.len) < 0;
hashwrite(f, sb.buf, sb.len);
@@ -3123,6 +3127,7 @@ out:
if (f)
free_hashfile(f);
strbuf_release(&sb);
+ free(eoie_c);
free(ieot);
return ret;
}
@@ -3238,22 +3243,26 @@ static int should_delete_shared_index(const char *shared_index_path)
static int clean_shared_index_files(const char *current_hex)
{
struct dirent *de;
- DIR *dir = opendir(get_git_dir());
+ DIR *dir = opendir(repo_get_git_dir(the_repository));
if (!dir)
- return error_errno(_("unable to open git dir: %s"), get_git_dir());
+ return error_errno(_("unable to open git dir: %s"),
+ repo_get_git_dir(the_repository));
while ((de = readdir(dir)) != NULL) {
const char *sha1_hex;
- const char *shared_index_path;
+ char *shared_index_path;
if (!skip_prefix(de->d_name, "sharedindex.", &sha1_hex))
continue;
if (!strcmp(sha1_hex, current_hex))
continue;
- shared_index_path = git_path("%s", de->d_name);
+
+ shared_index_path = repo_git_path(the_repository, "%s", de->d_name);
if (should_delete_shared_index(shared_index_path) > 0 &&
unlink(shared_index_path))
warning_errno(_("unable to unlink: %s"), shared_index_path);
+
+ free(shared_index_path);
}
closedir(dir);
@@ -3265,6 +3274,7 @@ static int write_shared_index(struct index_state *istate,
{
struct split_index *si = istate->split_index;
int ret, was_full = !istate->sparse_index;
+ char *path;
move_cache_to_base_index(istate);
convert_to_sparse(istate, 0);
@@ -3280,18 +3290,20 @@ static int write_shared_index(struct index_state *istate,
if (ret)
return ret;
- ret = adjust_shared_perm(get_tempfile_path(*temp));
+ ret = adjust_shared_perm(the_repository, get_tempfile_path(*temp));
if (ret) {
error(_("cannot fix permission bits on '%s'"), get_tempfile_path(*temp));
return ret;
}
- ret = rename_tempfile(temp,
- git_path("sharedindex.%s", oid_to_hex(&si->base->oid)));
+
+ path = repo_git_path(the_repository, "sharedindex.%s", oid_to_hex(&si->base->oid));
+ ret = rename_tempfile(temp, path);
if (!ret) {
oidcpy(&si->base_oid, &si->base->oid);
clean_shared_index_files(oid_to_hex(&si->base->oid));
}
+ free(path);
return ret;
}
@@ -3331,8 +3343,9 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
int new_shared_index, ret, test_split_index_env;
struct split_index *si = istate->split_index;
- if (git_env_bool("GIT_TEST_CHECK_CACHE_TREE", 0))
- cache_tree_verify(the_repository, istate);
+ if (git_env_bool("GIT_TEST_CHECK_CACHE_TREE", 0) &&
+ cache_tree_verify(the_repository, istate) < 0)
+ return -1;
if ((flags & SKIP_IF_UNCHANGED) && !istate->cache_changed) {
if (flags & COMMIT_LOCK)
@@ -3371,9 +3384,12 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
if (new_shared_index) {
struct tempfile *temp;
int saved_errno;
+ char *path;
/* Same initial permissions as the main .git/index file */
- temp = mks_tempfile_sm(git_path("sharedindex_XXXXXX"), 0, 0666);
+ path = repo_git_path(the_repository, "sharedindex_XXXXXX");
+ temp = mks_tempfile_sm(path, 0, 0666);
+ free(path);
if (!temp) {
ret = do_write_locked_index(istate, lock, flags,
~WRITE_SPLIT_INDEX_EXTENSION);
@@ -3394,9 +3410,10 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
/* Freshen the shared index only if the split-index was written */
if (!ret && !new_shared_index && !is_null_oid(&si->base_oid)) {
- const char *shared_index = git_path("sharedindex.%s",
- oid_to_hex(&si->base_oid));
+ char *shared_index = repo_git_path(the_repository, "sharedindex.%s",
+ oid_to_hex(&si->base_oid));
freshen_shared_index(shared_index, 1);
+ free(shared_index);
}
out:
@@ -3572,7 +3589,7 @@ static size_t read_eoie_extension(const char *mmap, size_t mmap_size)
uint32_t extsize;
size_t offset, src_offset;
unsigned char hash[GIT_MAX_RAWSZ];
- git_hash_ctx c;
+ struct git_hash_ctx c;
/* ensure we have an index big enough to contain an EOIE extension */
if (mmap_size < sizeof(struct cache_header) + EOIE_SIZE_WITH_HEADER + the_hash_algo->rawsz)
@@ -3627,12 +3644,12 @@ static size_t read_eoie_extension(const char *mmap, size_t mmap_size)
if (src_offset + 8 + extsize < src_offset)
return 0;
- the_hash_algo->update_fn(&c, mmap + src_offset, 8);
+ git_hash_update(&c, mmap + src_offset, 8);
src_offset += 8;
src_offset += extsize;
}
- the_hash_algo->final_fn(hash, &c);
+ git_hash_final(hash, &c);
if (!hasheq(hash, (const unsigned char *)index, the_repository->hash_algo))
return 0;
@@ -3643,7 +3660,7 @@ static size_t read_eoie_extension(const char *mmap, size_t mmap_size)
return offset;
}
-static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context, size_t offset)
+static void write_eoie_extension(struct strbuf *sb, struct git_hash_ctx *eoie_context, size_t offset)
{
uint32_t buffer;
unsigned char hash[GIT_MAX_RAWSZ];
@@ -3653,7 +3670,7 @@ static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context,
strbuf_add(sb, &buffer, sizeof(uint32_t));
/* hash */
- the_hash_algo->final_fn(hash, eoie_context);
+ git_hash_final(hash, eoie_context);
strbuf_add(sb, hash, the_hash_algo->rawsz);
}