mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-30 02:01:52 +00:00
commit
c11daac9de
@ -325,6 +325,13 @@ on_error:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GIT_INLINE(bool) has_entry(git_indexer *idx, git_oid *id)
|
||||||
|
{
|
||||||
|
khiter_t k;
|
||||||
|
k = kh_get(oid, idx->pack->idx_cache, id);
|
||||||
|
return (k != kh_end(idx->pack->idx_cache));
|
||||||
|
}
|
||||||
|
|
||||||
static int save_entry(git_indexer *idx, struct entry *entry, struct git_pack_entry *pentry, git_off_t entry_start)
|
static int save_entry(git_indexer *idx, struct entry *entry, struct git_pack_entry *pentry, git_off_t entry_start)
|
||||||
{
|
{
|
||||||
int i, error;
|
int i, error;
|
||||||
@ -339,8 +346,11 @@ static int save_entry(git_indexer *idx, struct entry *entry, struct git_pack_ent
|
|||||||
|
|
||||||
pentry->offset = entry_start;
|
pentry->offset = entry_start;
|
||||||
k = kh_put(oid, idx->pack->idx_cache, &pentry->sha1, &error);
|
k = kh_put(oid, idx->pack->idx_cache, &pentry->sha1, &error);
|
||||||
if (!error)
|
|
||||||
|
if (error <= 0) {
|
||||||
|
giterr_set(GITERR_INDEXER, "cannot insert object into pack");
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
kh_value(idx->pack->idx_cache, k) = pentry;
|
kh_value(idx->pack->idx_cache, k) = pentry;
|
||||||
|
|
||||||
@ -791,6 +801,9 @@ static int fix_thin_pack(git_indexer *idx, git_transfer_progress *stats)
|
|||||||
git_oid_fromraw(&base, base_info);
|
git_oid_fromraw(&base, base_info);
|
||||||
git_mwindow_close(&w);
|
git_mwindow_close(&w);
|
||||||
|
|
||||||
|
if (has_entry(idx, &base))
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (inject_object(idx, &base) < 0)
|
if (inject_object(idx, &base) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -959,8 +959,15 @@ git_off_t get_delta_base(
|
|||||||
if (k != kh_end(p->idx_cache)) {
|
if (k != kh_end(p->idx_cache)) {
|
||||||
*curpos += 20;
|
*curpos += 20;
|
||||||
return ((struct git_pack_entry *)kh_value(p->idx_cache, k))->offset;
|
return ((struct git_pack_entry *)kh_value(p->idx_cache, k))->offset;
|
||||||
|
} else {
|
||||||
|
/* If we're building an index, don't try to find the pack
|
||||||
|
* entry; we just haven't seen it yet. We'll make
|
||||||
|
* progress again in the next loop.
|
||||||
|
*/
|
||||||
|
return GIT_PASSTHROUGH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The base entry _must_ be in the same pack */
|
/* The base entry _must_ be in the same pack */
|
||||||
if (pack_entry_find_offset(&base_offset, &unused, p, (git_oid *)base_info, GIT_OID_HEXSZ) < 0)
|
if (pack_entry_find_offset(&base_offset, &unused, p, (git_oid *)base_info, GIT_OID_HEXSZ) < 0)
|
||||||
return packfile_error("base entry delta is not in the same pack");
|
return packfile_error("base entry delta is not in the same pack");
|
||||||
|
Loading…
Reference in New Issue
Block a user