pack: move add_packed_git()
Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
97de1803f8
commit
9a42865374
1
cache.h
1
cache.h
@ -1640,7 +1640,6 @@ extern int odb_mkstemp(struct strbuf *template, const char *pattern);
|
|||||||
extern int odb_pack_keep(const char *name);
|
extern int odb_pack_keep(const char *name);
|
||||||
|
|
||||||
extern void clear_delta_base_cache(void);
|
extern void clear_delta_base_cache(void);
|
||||||
extern struct packed_git *add_packed_git(const char *path, size_t path_len, int local);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure that a pointer access into an mmap'd index file is within bounds,
|
* Make sure that a pointer access into an mmap'd index file is within bounds,
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "sigchain.h"
|
#include "sigchain.h"
|
||||||
#include "connected.h"
|
#include "connected.h"
|
||||||
#include "transport.h"
|
#include "transport.h"
|
||||||
|
#include "pack.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we feed all the commits we want to verify to this command
|
* If we feed all the commits we want to verify to this command
|
||||||
|
53
packfile.c
53
packfile.c
@ -605,3 +605,56 @@ void unuse_pack(struct pack_window **w_cursor)
|
|||||||
*w_cursor = NULL;
|
*w_cursor = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void try_to_free_pack_memory(size_t size)
|
||||||
|
{
|
||||||
|
release_pack_memory(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct packed_git *add_packed_git(const char *path, size_t path_len, int local)
|
||||||
|
{
|
||||||
|
static int have_set_try_to_free_routine;
|
||||||
|
struct stat st;
|
||||||
|
size_t alloc;
|
||||||
|
struct packed_git *p;
|
||||||
|
|
||||||
|
if (!have_set_try_to_free_routine) {
|
||||||
|
have_set_try_to_free_routine = 1;
|
||||||
|
set_try_to_free_routine(try_to_free_pack_memory);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure a corresponding .pack file exists and that
|
||||||
|
* the index looks sane.
|
||||||
|
*/
|
||||||
|
if (!strip_suffix_mem(path, &path_len, ".idx"))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ".pack" is long enough to hold any suffix we're adding (and
|
||||||
|
* the use xsnprintf double-checks that)
|
||||||
|
*/
|
||||||
|
alloc = st_add3(path_len, strlen(".pack"), 1);
|
||||||
|
p = alloc_packed_git(alloc);
|
||||||
|
memcpy(p->pack_name, path, path_len);
|
||||||
|
|
||||||
|
xsnprintf(p->pack_name + path_len, alloc - path_len, ".keep");
|
||||||
|
if (!access(p->pack_name, F_OK))
|
||||||
|
p->pack_keep = 1;
|
||||||
|
|
||||||
|
xsnprintf(p->pack_name + path_len, alloc - path_len, ".pack");
|
||||||
|
if (stat(p->pack_name, &st) || !S_ISREG(st.st_mode)) {
|
||||||
|
free(p);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ok, it looks sane as far as we can check without
|
||||||
|
* actually mapping the pack file.
|
||||||
|
*/
|
||||||
|
p->pack_size = st.st_size;
|
||||||
|
p->pack_local = local;
|
||||||
|
p->mtime = st.st_mtime;
|
||||||
|
if (path_len < 40 || get_sha1_hex(path + path_len - 40, p->sha1))
|
||||||
|
hashclr(p->sha1);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
@ -46,6 +46,7 @@ extern unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t
|
|||||||
extern void close_pack_windows(struct packed_git *);
|
extern void close_pack_windows(struct packed_git *);
|
||||||
extern void close_all_packs(void);
|
extern void close_all_packs(void);
|
||||||
extern void unuse_pack(struct pack_window **);
|
extern void unuse_pack(struct pack_window **);
|
||||||
|
extern struct packed_git *add_packed_git(const char *path, size_t path_len, int local);
|
||||||
|
|
||||||
extern void release_pack_memory(size_t);
|
extern void release_pack_memory(size_t);
|
||||||
|
|
||||||
|
61
sha1_file.c
61
sha1_file.c
@ -719,67 +719,6 @@ void *xmmap(void *start, size_t length,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct packed_git *alloc_packed_git(int extra)
|
|
||||||
{
|
|
||||||
struct packed_git *p = xmalloc(st_add(sizeof(*p), extra));
|
|
||||||
memset(p, 0, sizeof(*p));
|
|
||||||
p->pack_fd = -1;
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void try_to_free_pack_memory(size_t size)
|
|
||||||
{
|
|
||||||
release_pack_memory(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct packed_git *add_packed_git(const char *path, size_t path_len, int local)
|
|
||||||
{
|
|
||||||
static int have_set_try_to_free_routine;
|
|
||||||
struct stat st;
|
|
||||||
size_t alloc;
|
|
||||||
struct packed_git *p;
|
|
||||||
|
|
||||||
if (!have_set_try_to_free_routine) {
|
|
||||||
have_set_try_to_free_routine = 1;
|
|
||||||
set_try_to_free_routine(try_to_free_pack_memory);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure a corresponding .pack file exists and that
|
|
||||||
* the index looks sane.
|
|
||||||
*/
|
|
||||||
if (!strip_suffix_mem(path, &path_len, ".idx"))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ".pack" is long enough to hold any suffix we're adding (and
|
|
||||||
* the use xsnprintf double-checks that)
|
|
||||||
*/
|
|
||||||
alloc = st_add3(path_len, strlen(".pack"), 1);
|
|
||||||
p = alloc_packed_git(alloc);
|
|
||||||
memcpy(p->pack_name, path, path_len);
|
|
||||||
|
|
||||||
xsnprintf(p->pack_name + path_len, alloc - path_len, ".keep");
|
|
||||||
if (!access(p->pack_name, F_OK))
|
|
||||||
p->pack_keep = 1;
|
|
||||||
|
|
||||||
xsnprintf(p->pack_name + path_len, alloc - path_len, ".pack");
|
|
||||||
if (stat(p->pack_name, &st) || !S_ISREG(st.st_mode)) {
|
|
||||||
free(p);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ok, it looks sane as far as we can check without
|
|
||||||
* actually mapping the pack file.
|
|
||||||
*/
|
|
||||||
p->pack_size = st.st_size;
|
|
||||||
p->pack_local = local;
|
|
||||||
p->mtime = st.st_mtime;
|
|
||||||
if (path_len < 40 || get_sha1_hex(path + path_len - 40, p->sha1))
|
|
||||||
hashclr(p->sha1);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void install_packed_git(struct packed_git *pack)
|
void install_packed_git(struct packed_git *pack)
|
||||||
{
|
{
|
||||||
if (pack->pack_fd != -1)
|
if (pack->pack_fd != -1)
|
||||||
|
Reference in New Issue
Block a user