mirror of
https://github.com/git/git.git
synced 2024-10-31 06:17:56 +01:00
receive-pack: allow using --strict mode for unpacking objects
When a configuration variable receive.fsckobjects is set, receive-pack runs unpack-objects with --strict mode to check all received objects. Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f2898cfadc
commit
20dc0016ee
2 changed files with 29 additions and 13 deletions
|
@ -939,6 +939,12 @@ imap::
|
||||||
The configuration variables in the 'imap' section are described
|
The configuration variables in the 'imap' section are described
|
||||||
in linkgit:git-imap-send[1].
|
in linkgit:git-imap-send[1].
|
||||||
|
|
||||||
|
receive.fsckObjects::
|
||||||
|
If it is set to true, git-receive-pack will check all received
|
||||||
|
objects. It will abort in the case of a malformed object or a
|
||||||
|
broken link. The result of an abort are only dangling objects.
|
||||||
|
Defaults to false.
|
||||||
|
|
||||||
receive.unpackLimit::
|
receive.unpackLimit::
|
||||||
If the number of objects received in a push is below this
|
If the number of objects received in a push is below this
|
||||||
limit then the objects will be unpacked into loose object
|
limit then the objects will be unpacked into loose object
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
static const char receive_pack_usage[] = "git-receive-pack <git-dir>";
|
static const char receive_pack_usage[] = "git-receive-pack <git-dir>";
|
||||||
|
|
||||||
static int deny_non_fast_forwards = 0;
|
static int deny_non_fast_forwards = 0;
|
||||||
|
static int receive_fsck_objects;
|
||||||
static int receive_unpack_limit = -1;
|
static int receive_unpack_limit = -1;
|
||||||
static int transfer_unpack_limit = -1;
|
static int transfer_unpack_limit = -1;
|
||||||
static int unpack_limit = 100;
|
static int unpack_limit = 100;
|
||||||
|
@ -35,6 +36,11 @@ static int receive_pack_config(const char *var, const char *value)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(var, "receive.fsckobjects") == 0) {
|
||||||
|
receive_fsck_objects = git_config_bool(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return git_default_config(var, value);
|
return git_default_config(var, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,11 +374,13 @@ static const char *unpack(void)
|
||||||
ntohl(hdr.hdr_version), ntohl(hdr.hdr_entries));
|
ntohl(hdr.hdr_version), ntohl(hdr.hdr_entries));
|
||||||
|
|
||||||
if (ntohl(hdr.hdr_entries) < unpack_limit) {
|
if (ntohl(hdr.hdr_entries) < unpack_limit) {
|
||||||
int code;
|
int code, i = 0;
|
||||||
const char *unpacker[3];
|
const char *unpacker[4];
|
||||||
unpacker[0] = "unpack-objects";
|
unpacker[i++] = "unpack-objects";
|
||||||
unpacker[1] = hdr_arg;
|
if (receive_fsck_objects)
|
||||||
unpacker[2] = NULL;
|
unpacker[i++] = "--strict";
|
||||||
|
unpacker[i++] = hdr_arg;
|
||||||
|
unpacker[i++] = NULL;
|
||||||
code = run_command_v_opt(unpacker, RUN_GIT_CMD);
|
code = run_command_v_opt(unpacker, RUN_GIT_CMD);
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -393,8 +401,8 @@ static const char *unpack(void)
|
||||||
return "unpacker exited with error code";
|
return "unpacker exited with error code";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const char *keeper[6];
|
const char *keeper[7];
|
||||||
int s, status;
|
int s, status, i = 0;
|
||||||
char keep_arg[256];
|
char keep_arg[256];
|
||||||
struct child_process ip;
|
struct child_process ip;
|
||||||
|
|
||||||
|
@ -402,12 +410,14 @@ static const char *unpack(void)
|
||||||
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
|
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
|
||||||
strcpy(keep_arg + s, "localhost");
|
strcpy(keep_arg + s, "localhost");
|
||||||
|
|
||||||
keeper[0] = "index-pack";
|
keeper[i++] = "index-pack";
|
||||||
keeper[1] = "--stdin";
|
keeper[i++] = "--stdin";
|
||||||
keeper[2] = "--fix-thin";
|
if (receive_fsck_objects)
|
||||||
keeper[3] = hdr_arg;
|
keeper[i++] = "--strict";
|
||||||
keeper[4] = keep_arg;
|
keeper[i++] = "--fix-thin";
|
||||||
keeper[5] = NULL;
|
keeper[i++] = hdr_arg;
|
||||||
|
keeper[i++] = keep_arg;
|
||||||
|
keeper[i++] = NULL;
|
||||||
memset(&ip, 0, sizeof(ip));
|
memset(&ip, 0, sizeof(ip));
|
||||||
ip.argv = keeper;
|
ip.argv = keeper;
|
||||||
ip.out = -1;
|
ip.out = -1;
|
||||||
|
|
Loading…
Reference in a new issue