зеркало из https://github.com/microsoft/git.git
git-repack --max-pack-size: new file statics and code restructuring
Add "pack_size_limit", the limit specified by --max-pack-size, "written_list", the list of objects written to the current pack, and "nr_written", the number of objects in written_list. Put "base_name" at file scope again and add forward declarations. Move write_index_file() call from cnd_pack_objects() to write_pack_file() since only the latter will know how many times to call write_index_file(). Signed-off-by: Dana L. How <danahow@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
f02153696f
Коммит
d01fb92f8d
|
@ -52,7 +52,8 @@ struct object_entry {
|
|||
* nice "minimum seek" order.
|
||||
*/
|
||||
static struct object_entry *objects;
|
||||
static uint32_t nr_objects, nr_alloc, nr_result;
|
||||
static struct object_entry **written_list;
|
||||
static uint32_t nr_objects, nr_alloc, nr_result, nr_written;
|
||||
|
||||
static int non_empty;
|
||||
static int no_reuse_delta, no_reuse_object;
|
||||
|
@ -61,9 +62,11 @@ static int incremental;
|
|||
static int allow_ofs_delta;
|
||||
static const char *pack_tmp_name, *idx_tmp_name;
|
||||
static char tmpname[PATH_MAX];
|
||||
static const char *base_name;
|
||||
static unsigned char pack_file_sha1[20];
|
||||
static int progress = 1;
|
||||
static int window = 10;
|
||||
static uint32_t pack_size_limit;
|
||||
static int depth = 50;
|
||||
static int pack_to_stdout;
|
||||
static int num_preferred_base;
|
||||
|
@ -501,7 +504,11 @@ static int open_object_dir_tmp(const char *path)
|
|||
return mkstemp(tmpname);
|
||||
}
|
||||
|
||||
static off_t write_pack_file(void)
|
||||
/* forward declarations for write_pack_file */
|
||||
static void write_index_file(off_t last_obj_offset, unsigned char *sha1);
|
||||
static int adjust_perm(const char *path, mode_t mode);
|
||||
|
||||
static void write_pack_file(void)
|
||||
{
|
||||
uint32_t i;
|
||||
struct sha1file *f;
|
||||
|
@ -543,7 +550,32 @@ static off_t write_pack_file(void)
|
|||
die("wrote %u objects while expecting %u", written, nr_result);
|
||||
sha1close(f, pack_file_sha1, 1);
|
||||
|
||||
return last_obj_offset;
|
||||
if (!pack_to_stdout) {
|
||||
unsigned char object_list_sha1[20];
|
||||
mode_t mode = umask(0);
|
||||
|
||||
umask(mode);
|
||||
mode = 0444 & ~mode;
|
||||
|
||||
write_index_file(last_obj_offset, object_list_sha1);
|
||||
snprintf(tmpname, sizeof(tmpname), "%s-%s.pack",
|
||||
base_name, sha1_to_hex(object_list_sha1));
|
||||
if (adjust_perm(pack_tmp_name, mode))
|
||||
die("unable to make temporary pack file readable: %s",
|
||||
strerror(errno));
|
||||
if (rename(pack_tmp_name, tmpname))
|
||||
die("unable to rename temporary pack file: %s",
|
||||
strerror(errno));
|
||||
snprintf(tmpname, sizeof(tmpname), "%s-%s.idx",
|
||||
base_name, sha1_to_hex(object_list_sha1));
|
||||
if (adjust_perm(idx_tmp_name, mode))
|
||||
die("unable to make temporary index file readable: %s",
|
||||
strerror(errno));
|
||||
if (rename(idx_tmp_name, tmpname))
|
||||
die("unable to rename temporary index file: %s",
|
||||
strerror(errno));
|
||||
puts(sha1_to_hex(object_list_sha1));
|
||||
}
|
||||
}
|
||||
|
||||
static int sha1_sort(const void *_a, const void *_b)
|
||||
|
@ -1537,8 +1569,6 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
|||
int use_internal_rev_list = 0;
|
||||
int thin = 0;
|
||||
uint32_t i;
|
||||
off_t last_obj_offset;
|
||||
const char *base_name = NULL;
|
||||
const char **rp_av;
|
||||
int rp_ac_alloc = 64;
|
||||
int rp_ac;
|
||||
|
@ -1707,33 +1737,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
|||
fprintf(stderr, "Result has %u objects.\n", nr_result);
|
||||
if (nr_result)
|
||||
prepare_pack(window, depth);
|
||||
last_obj_offset = write_pack_file();
|
||||
if (!pack_to_stdout) {
|
||||
unsigned char object_list_sha1[20];
|
||||
mode_t mode = umask(0);
|
||||
|
||||
umask(mode);
|
||||
mode = 0444 & ~mode;
|
||||
|
||||
write_index_file(last_obj_offset, object_list_sha1);
|
||||
snprintf(tmpname, sizeof(tmpname), "%s-%s.pack",
|
||||
base_name, sha1_to_hex(object_list_sha1));
|
||||
if (adjust_perm(pack_tmp_name, mode))
|
||||
die("unable to make temporary pack file readable: %s",
|
||||
strerror(errno));
|
||||
if (rename(pack_tmp_name, tmpname))
|
||||
die("unable to rename temporary pack file: %s",
|
||||
strerror(errno));
|
||||
snprintf(tmpname, sizeof(tmpname), "%s-%s.idx",
|
||||
base_name, sha1_to_hex(object_list_sha1));
|
||||
if (adjust_perm(idx_tmp_name, mode))
|
||||
die("unable to make temporary index file readable: %s",
|
||||
strerror(errno));
|
||||
if (rename(idx_tmp_name, tmpname))
|
||||
die("unable to rename temporary index file: %s",
|
||||
strerror(errno));
|
||||
puts(sha1_to_hex(object_list_sha1));
|
||||
}
|
||||
write_pack_file();
|
||||
if (progress)
|
||||
fprintf(stderr, "Total %u (delta %u), reused %u (delta %u)\n",
|
||||
written, written_delta, reused, reused_delta);
|
||||
|
|
Загрузка…
Ссылка в новой задаче