mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Add support for "local" packing
This adds the "--local" flag to git-pack-objects, which acts like "--incremental", except that instead of ignoring all packed objects, it only ignores objects that are packed and in an alternate object tree. As a result, it effectively only does a local re-pack: any remote-packed objects will stay in the alternate object directories. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
committed by
Junio C Hamano
parent
9d835df246
commit
64560374cc
@@ -5,7 +5,7 @@
|
|||||||
#include "pack.h"
|
#include "pack.h"
|
||||||
#include "csum-file.h"
|
#include "csum-file.h"
|
||||||
|
|
||||||
static const char pack_usage[] = "git-pack-objects [--incremental] [--window=N] [--depth=N] {--stdout | base-name} < object-list";
|
static const char pack_usage[] = "git-pack-objects [--local] [--incremental] [--window=N] [--depth=N] {--stdout | base-name} < object-list";
|
||||||
|
|
||||||
struct object_entry {
|
struct object_entry {
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
@@ -20,6 +20,7 @@ struct object_entry {
|
|||||||
|
|
||||||
static unsigned char object_list_sha1[20];
|
static unsigned char object_list_sha1[20];
|
||||||
static int non_empty = 0;
|
static int non_empty = 0;
|
||||||
|
static int local = 0;
|
||||||
static int incremental = 0;
|
static int incremental = 0;
|
||||||
static struct object_entry **sorted_by_sha, **sorted_by_type;
|
static struct object_entry **sorted_by_sha, **sorted_by_type;
|
||||||
static struct object_entry *objects = NULL;
|
static struct object_entry *objects = NULL;
|
||||||
@@ -195,8 +196,20 @@ static int add_object_entry(unsigned char *sha1, unsigned int hash)
|
|||||||
unsigned int idx = nr_objects;
|
unsigned int idx = nr_objects;
|
||||||
struct object_entry *entry;
|
struct object_entry *entry;
|
||||||
|
|
||||||
if (incremental && has_sha1_pack(sha1))
|
if (incremental || local) {
|
||||||
return 0;
|
struct packed_git *p;
|
||||||
|
|
||||||
|
for (p = packed_git; p; p = p->next) {
|
||||||
|
struct pack_entry e;
|
||||||
|
|
||||||
|
if (find_pack_entry_one(sha1, &e, p)) {
|
||||||
|
if (incremental)
|
||||||
|
return 0;
|
||||||
|
if (local && !p->pack_local)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (idx >= nr_alloc) {
|
if (idx >= nr_alloc) {
|
||||||
unsigned int needed = (idx + 1024) * 3 / 2;
|
unsigned int needed = (idx + 1024) * 3 / 2;
|
||||||
@@ -404,6 +417,10 @@ int main(int argc, char **argv)
|
|||||||
non_empty = 1;
|
non_empty = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp("--local", arg)) {
|
||||||
|
local = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!strcmp("--incremental", arg)) {
|
if (!strcmp("--incremental", arg)) {
|
||||||
incremental = 1;
|
incremental = 1;
|
||||||
continue;
|
continue;
|
||||||
@@ -436,6 +453,7 @@ int main(int argc, char **argv)
|
|||||||
if (pack_to_stdout != !base_name)
|
if (pack_to_stdout != !base_name)
|
||||||
usage(pack_usage);
|
usage(pack_usage);
|
||||||
|
|
||||||
|
prepare_packed_git();
|
||||||
while (fgets(line, sizeof(line), stdin) != NULL) {
|
while (fgets(line, sizeof(line), stdin) != NULL) {
|
||||||
unsigned int hash;
|
unsigned int hash;
|
||||||
char *p;
|
char *p;
|
||||||
|
|||||||
Reference in New Issue
Block a user