Merge branch 'js/mingw-fallouts'
* js/mingw-fallouts: fetch-pack: Prepare for a side-band demultiplexer in a thread. rehabilitate some t5302 tests on 32-bit off_t machines Allow ETC_GITCONFIG to be a relative path. Introduce git_etc_gitconfig() that encapsulates access of ETC_GITCONFIG. Allow a relative builtin template directory. Close files opened by lock_file() before unlinking. builtin run_command: do not exit with -1. Move #include <sys/select.h> and <sys/ioctl.h> to git-compat-util.h. Use is_absolute_path() in sha1_file.c. Skip t3902-quoted.sh if the file system does not support funny names. t5302-pack-index: Skip tests of 64-bit offsets if necessary. t7501-commit.sh: Not all seds understand option -i t5300-pack-object.sh: Split the big verify-pack test into smaller parts.
This commit is contained in:
5
Makefile
5
Makefile
@ -754,7 +754,7 @@ TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
|
|||||||
LIBS = $(GITLIBS) $(EXTLIBS)
|
LIBS = $(GITLIBS) $(EXTLIBS)
|
||||||
|
|
||||||
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
|
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
|
||||||
-DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $(COMPAT_CFLAGS)
|
$(COMPAT_CFLAGS)
|
||||||
LIB_OBJS += $(COMPAT_OBJS)
|
LIB_OBJS += $(COMPAT_OBJS)
|
||||||
|
|
||||||
ALL_CFLAGS += $(BASIC_CFLAGS)
|
ALL_CFLAGS += $(BASIC_CFLAGS)
|
||||||
@ -903,6 +903,9 @@ exec_cmd.o: exec_cmd.c GIT-CFLAGS
|
|||||||
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
|
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
|
||||||
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
|
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
|
||||||
|
|
||||||
|
config.o: config.c GIT-CFLAGS
|
||||||
|
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $<
|
||||||
|
|
||||||
http.o: http.c GIT-CFLAGS
|
http.o: http.c GIT-CFLAGS
|
||||||
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
|
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ static int get_value(const char* key_, const char* regex_)
|
|||||||
local = repo_config = xstrdup(git_path("config"));
|
local = repo_config = xstrdup(git_path("config"));
|
||||||
if (home)
|
if (home)
|
||||||
global = xstrdup(mkpath("%s/.gitconfig", home));
|
global = xstrdup(mkpath("%s/.gitconfig", home));
|
||||||
system_wide = ETC_GITCONFIG;
|
system_wide = git_etc_gitconfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
key = xstrdup(key_);
|
key = xstrdup(key_);
|
||||||
@ -191,7 +191,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[1], "--system"))
|
else if (!strcmp(argv[1], "--system"))
|
||||||
setenv(CONFIG_ENVIRONMENT, ETC_GITCONFIG, 1);
|
setenv(CONFIG_ENVIRONMENT, git_etc_gitconfig(), 1);
|
||||||
else if (!strcmp(argv[1], "--file") || !strcmp(argv[1], "-f")) {
|
else if (!strcmp(argv[1], "--file") || !strcmp(argv[1], "-f")) {
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
usage(git_config_set_usage);
|
usage(git_config_set_usage);
|
||||||
|
@ -462,34 +462,12 @@ static int sideband_demux(int fd, void *data)
|
|||||||
{
|
{
|
||||||
int *xd = data;
|
int *xd = data;
|
||||||
|
|
||||||
close(xd[1]);
|
|
||||||
return recv_sideband("fetch-pack", xd[0], fd, 2);
|
return recv_sideband("fetch-pack", xd[0], fd, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_sideband(int fd[2], int xd[2], struct async *demux)
|
|
||||||
{
|
|
||||||
if (!use_sideband) {
|
|
||||||
fd[0] = xd[0];
|
|
||||||
fd[1] = xd[1];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* xd[] is talking with upload-pack; subprocess reads from
|
|
||||||
* xd[0], spits out band#2 to stderr, and feeds us band#1
|
|
||||||
* through demux->out.
|
|
||||||
*/
|
|
||||||
demux->proc = sideband_demux;
|
|
||||||
demux->data = xd;
|
|
||||||
if (start_async(demux))
|
|
||||||
die("fetch-pack: unable to fork off sideband demultiplexer");
|
|
||||||
close(xd[0]);
|
|
||||||
fd[0] = demux->out;
|
|
||||||
fd[1] = xd[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
static int get_pack(int xd[2], char **pack_lockfile)
|
static int get_pack(int xd[2], char **pack_lockfile)
|
||||||
{
|
{
|
||||||
struct async demux;
|
struct async demux;
|
||||||
int fd[2];
|
|
||||||
const char *argv[20];
|
const char *argv[20];
|
||||||
char keep_arg[256];
|
char keep_arg[256];
|
||||||
char hdr_arg[256];
|
char hdr_arg[256];
|
||||||
@ -497,7 +475,20 @@ static int get_pack(int xd[2], char **pack_lockfile)
|
|||||||
int do_keep = args.keep_pack;
|
int do_keep = args.keep_pack;
|
||||||
struct child_process cmd;
|
struct child_process cmd;
|
||||||
|
|
||||||
setup_sideband(fd, xd, &demux);
|
memset(&demux, 0, sizeof(demux));
|
||||||
|
if (use_sideband) {
|
||||||
|
/* xd[] is talking with upload-pack; subprocess reads from
|
||||||
|
* xd[0], spits out band#2 to stderr, and feeds us band#1
|
||||||
|
* through demux->out.
|
||||||
|
*/
|
||||||
|
demux.proc = sideband_demux;
|
||||||
|
demux.data = xd;
|
||||||
|
if (start_async(&demux))
|
||||||
|
die("fetch-pack: unable to fork off sideband"
|
||||||
|
" demultiplexer");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
demux.out = xd[0];
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
memset(&cmd, 0, sizeof(cmd));
|
||||||
cmd.argv = argv;
|
cmd.argv = argv;
|
||||||
@ -506,7 +497,7 @@ static int get_pack(int xd[2], char **pack_lockfile)
|
|||||||
if (!args.keep_pack && unpack_limit) {
|
if (!args.keep_pack && unpack_limit) {
|
||||||
struct pack_header header;
|
struct pack_header header;
|
||||||
|
|
||||||
if (read_pack_header(fd[0], &header))
|
if (read_pack_header(demux.out, &header))
|
||||||
die("protocol error: bad pack header");
|
die("protocol error: bad pack header");
|
||||||
snprintf(hdr_arg, sizeof(hdr_arg), "--pack_header=%u,%u",
|
snprintf(hdr_arg, sizeof(hdr_arg), "--pack_header=%u,%u",
|
||||||
ntohl(header.hdr_version), ntohl(header.hdr_entries));
|
ntohl(header.hdr_version), ntohl(header.hdr_entries));
|
||||||
@ -542,11 +533,10 @@ static int get_pack(int xd[2], char **pack_lockfile)
|
|||||||
*av++ = hdr_arg;
|
*av++ = hdr_arg;
|
||||||
*av++ = NULL;
|
*av++ = NULL;
|
||||||
|
|
||||||
cmd.in = fd[0];
|
cmd.in = demux.out;
|
||||||
cmd.git_cmd = 1;
|
cmd.git_cmd = 1;
|
||||||
if (start_command(&cmd))
|
if (start_command(&cmd))
|
||||||
die("fetch-pack: unable to fork off %s", argv[0]);
|
die("fetch-pack: unable to fork off %s", argv[0]);
|
||||||
close(fd[1]);
|
|
||||||
if (do_keep && pack_lockfile)
|
if (do_keep && pack_lockfile)
|
||||||
*pack_lockfile = index_pack_lockfile(cmd.out);
|
*pack_lockfile = index_pack_lockfile(cmd.out);
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
|
#include "exec_cmd.h"
|
||||||
|
|
||||||
#ifndef DEFAULT_GIT_TEMPLATE_DIR
|
#ifndef DEFAULT_GIT_TEMPLATE_DIR
|
||||||
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
|
#define DEFAULT_GIT_TEMPLATE_DIR "/usr/share/git-core/templates"
|
||||||
@ -131,10 +132,19 @@ static void copy_templates(const char *git_dir, int len, const char *template_di
|
|||||||
int template_len;
|
int template_len;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
|
|
||||||
if (!template_dir) {
|
if (!template_dir)
|
||||||
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
||||||
if (!template_dir)
|
if (!template_dir) {
|
||||||
template_dir = DEFAULT_GIT_TEMPLATE_DIR;
|
/*
|
||||||
|
* if the hard-coded template is relative, it is
|
||||||
|
* interpreted relative to the exec_dir
|
||||||
|
*/
|
||||||
|
template_dir = DEFAULT_GIT_TEMPLATE_DIR;
|
||||||
|
if (!is_absolute_path(template_dir)) {
|
||||||
|
const char *exec_path = git_exec_path();
|
||||||
|
template_dir = prefix_path(exec_path, strlen(exec_path),
|
||||||
|
template_dir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
strcpy(template_path, template_dir);
|
strcpy(template_path, template_dir);
|
||||||
template_len = strlen(template_path);
|
template_len = strlen(template_path);
|
||||||
|
2
cache.h
2
cache.h
@ -290,6 +290,7 @@ extern int refresh_index(struct index_state *, unsigned int flags, const char **
|
|||||||
|
|
||||||
struct lock_file {
|
struct lock_file {
|
||||||
struct lock_file *next;
|
struct lock_file *next;
|
||||||
|
int fd;
|
||||||
pid_t owner;
|
pid_t owner;
|
||||||
char on_list;
|
char on_list;
|
||||||
char filename[PATH_MAX];
|
char filename[PATH_MAX];
|
||||||
@ -556,6 +557,7 @@ extern int git_config_bool(const char *, const char *);
|
|||||||
extern int git_config_set(const char *, const char *);
|
extern int git_config_set(const char *, const char *);
|
||||||
extern int git_config_set_multivar(const char *, const char *, const char *, int);
|
extern int git_config_set_multivar(const char *, const char *, const char *, int);
|
||||||
extern int git_config_rename_section(const char *, const char *);
|
extern int git_config_rename_section(const char *, const char *);
|
||||||
|
extern const char *git_etc_gitconfig(void);
|
||||||
extern int check_repository_format_version(const char *var, const char *value);
|
extern int check_repository_format_version(const char *var, const char *value);
|
||||||
|
|
||||||
#define MAX_GITNAME (1000)
|
#define MAX_GITNAME (1000)
|
||||||
|
20
config.c
20
config.c
@ -6,6 +6,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
|
#include "exec_cmd.h"
|
||||||
|
|
||||||
#define MAXNAME (256)
|
#define MAXNAME (256)
|
||||||
|
|
||||||
@ -459,6 +460,21 @@ int git_config_from_file(config_fn_t fn, const char *filename)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *git_etc_gitconfig(void)
|
||||||
|
{
|
||||||
|
static const char *system_wide;
|
||||||
|
if (!system_wide) {
|
||||||
|
system_wide = ETC_GITCONFIG;
|
||||||
|
if (!is_absolute_path(system_wide)) {
|
||||||
|
/* interpret path relative to exec-dir */
|
||||||
|
const char *exec_path = git_exec_path();
|
||||||
|
system_wide = prefix_path(exec_path, strlen(exec_path),
|
||||||
|
system_wide);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return system_wide;
|
||||||
|
}
|
||||||
|
|
||||||
int git_config(config_fn_t fn)
|
int git_config(config_fn_t fn)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -471,8 +487,8 @@ int git_config(config_fn_t fn)
|
|||||||
* config file otherwise. */
|
* config file otherwise. */
|
||||||
filename = getenv(CONFIG_ENVIRONMENT);
|
filename = getenv(CONFIG_ENVIRONMENT);
|
||||||
if (!filename) {
|
if (!filename) {
|
||||||
if (!access(ETC_GITCONFIG, R_OK))
|
if (!access(git_etc_gitconfig(), R_OK))
|
||||||
ret += git_config_from_file(fn, ETC_GITCONFIG);
|
ret += git_config_from_file(fn, git_etc_gitconfig());
|
||||||
home = getenv("HOME");
|
home = getenv("HOME");
|
||||||
filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
|
filename = getenv(CONFIG_LOCAL_ENVIRONMENT);
|
||||||
if (!filename)
|
if (!filename)
|
||||||
|
@ -67,6 +67,8 @@
|
|||||||
#include <fnmatch.h>
|
#include <fnmatch.h>
|
||||||
#include <sys/poll.h>
|
#include <sys/poll.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/select.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
2
git.c
2
git.c
@ -256,7 +256,7 @@ static int run_command(struct cmd_struct *p, int argc, const char **argv)
|
|||||||
|
|
||||||
status = p->fn(argc, argv, prefix);
|
status = p->fn(argc, argv, prefix);
|
||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status & 0xff;
|
||||||
|
|
||||||
/* Somebody closed stdout? */
|
/* Somebody closed stdout? */
|
||||||
if (fstat(fileno(stdout), &st))
|
if (fstat(fileno(stdout), &st))
|
||||||
|
1
help.c
1
help.c
@ -7,7 +7,6 @@
|
|||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
#include "exec_cmd.h"
|
#include "exec_cmd.h"
|
||||||
#include "common-cmds.h"
|
#include "common-cmds.h"
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
/* most GUI terminals set COLUMNS (although some don't export it) */
|
/* most GUI terminals set COLUMNS (although some don't export it) */
|
||||||
static int term_columns(void)
|
static int term_columns(void)
|
||||||
|
17
lockfile.c
17
lockfile.c
@ -12,8 +12,10 @@ static void remove_lock_file(void)
|
|||||||
|
|
||||||
while (lock_file_list) {
|
while (lock_file_list) {
|
||||||
if (lock_file_list->owner == me &&
|
if (lock_file_list->owner == me &&
|
||||||
lock_file_list->filename[0])
|
lock_file_list->filename[0]) {
|
||||||
|
close(lock_file_list->fd);
|
||||||
unlink(lock_file_list->filename);
|
unlink(lock_file_list->filename);
|
||||||
|
}
|
||||||
lock_file_list = lock_file_list->next;
|
lock_file_list = lock_file_list->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,8 +122,6 @@ static char *resolve_symlink(char *p, size_t s)
|
|||||||
|
|
||||||
static int lock_file(struct lock_file *lk, const char *path)
|
static int lock_file(struct lock_file *lk, const char *path)
|
||||||
{
|
{
|
||||||
int fd;
|
|
||||||
|
|
||||||
if (strlen(path) >= sizeof(lk->filename)) return -1;
|
if (strlen(path) >= sizeof(lk->filename)) return -1;
|
||||||
strcpy(lk->filename, path);
|
strcpy(lk->filename, path);
|
||||||
/*
|
/*
|
||||||
@ -130,8 +130,8 @@ static int lock_file(struct lock_file *lk, const char *path)
|
|||||||
*/
|
*/
|
||||||
resolve_symlink(lk->filename, sizeof(lk->filename)-5);
|
resolve_symlink(lk->filename, sizeof(lk->filename)-5);
|
||||||
strcat(lk->filename, ".lock");
|
strcat(lk->filename, ".lock");
|
||||||
fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666);
|
lk->fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666);
|
||||||
if (0 <= fd) {
|
if (0 <= lk->fd) {
|
||||||
if (!lock_file_list) {
|
if (!lock_file_list) {
|
||||||
signal(SIGINT, remove_lock_file_on_signal);
|
signal(SIGINT, remove_lock_file_on_signal);
|
||||||
atexit(remove_lock_file);
|
atexit(remove_lock_file);
|
||||||
@ -148,7 +148,7 @@ static int lock_file(struct lock_file *lk, const char *path)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
lk->filename[0] = 0;
|
lk->filename[0] = 0;
|
||||||
return fd;
|
return lk->fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hold_lock_file_for_update(struct lock_file *lk, const char *path, int die_on_error)
|
int hold_lock_file_for_update(struct lock_file *lk, const char *path, int die_on_error)
|
||||||
@ -163,6 +163,7 @@ int commit_lock_file(struct lock_file *lk)
|
|||||||
{
|
{
|
||||||
char result_file[PATH_MAX];
|
char result_file[PATH_MAX];
|
||||||
int i;
|
int i;
|
||||||
|
close(lk->fd);
|
||||||
strcpy(result_file, lk->filename);
|
strcpy(result_file, lk->filename);
|
||||||
i = strlen(result_file) - 5; /* .lock */
|
i = strlen(result_file) - 5; /* .lock */
|
||||||
result_file[i] = 0;
|
result_file[i] = 0;
|
||||||
@ -194,7 +195,9 @@ int commit_locked_index(struct lock_file *lk)
|
|||||||
|
|
||||||
void rollback_lock_file(struct lock_file *lk)
|
void rollback_lock_file(struct lock_file *lk)
|
||||||
{
|
{
|
||||||
if (lk->filename[0])
|
if (lk->filename[0]) {
|
||||||
|
close(lk->fd);
|
||||||
unlink(lk->filename);
|
unlink(lk->filename);
|
||||||
|
}
|
||||||
lk->filename[0] = 0;
|
lk->filename[0] = 0;
|
||||||
}
|
}
|
||||||
|
2
pager.c
2
pager.c
@ -1,7 +1,5 @@
|
|||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
|
|
||||||
#include <sys/select.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is split up from the rest of git so that we might do
|
* This is split up from the rest of git so that we might do
|
||||||
* something different on Windows, for example.
|
* something different on Windows, for example.
|
||||||
|
@ -86,7 +86,7 @@ int safe_create_leading_directories(char *path)
|
|||||||
char *pos = path;
|
char *pos = path;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (*pos == '/')
|
if (is_absolute_path(path))
|
||||||
pos++;
|
pos++;
|
||||||
|
|
||||||
while (pos) {
|
while (pos) {
|
||||||
@ -253,7 +253,7 @@ static int link_alt_odb_entry(const char * entry, int len, const char * relative
|
|||||||
int entlen = pfxlen + 43;
|
int entlen = pfxlen + 43;
|
||||||
int base_len = -1;
|
int base_len = -1;
|
||||||
|
|
||||||
if (*entry != '/' && relative_base) {
|
if (!is_absolute_path(entry) && relative_base) {
|
||||||
/* Relative alt-odb */
|
/* Relative alt-odb */
|
||||||
if (base_len < 0)
|
if (base_len < 0)
|
||||||
base_len = strlen(relative_base) + 1;
|
base_len = strlen(relative_base) + 1;
|
||||||
@ -262,7 +262,7 @@ static int link_alt_odb_entry(const char * entry, int len, const char * relative
|
|||||||
}
|
}
|
||||||
ent = xmalloc(sizeof(*ent) + entlen);
|
ent = xmalloc(sizeof(*ent) + entlen);
|
||||||
|
|
||||||
if (*entry != '/' && relative_base) {
|
if (!is_absolute_path(entry) && relative_base) {
|
||||||
memcpy(ent->base, relative_base, base_len - 1);
|
memcpy(ent->base, relative_base, base_len - 1);
|
||||||
ent->base[base_len - 1] = '/';
|
ent->base[base_len - 1] = '/';
|
||||||
memcpy(ent->base + base_len, entry, len);
|
memcpy(ent->base + base_len, entry, len);
|
||||||
@ -333,7 +333,7 @@ static void link_alt_odb_entries(const char *alt, const char *ep, int sep,
|
|||||||
while (cp < ep && *cp != sep)
|
while (cp < ep && *cp != sep)
|
||||||
cp++;
|
cp++;
|
||||||
if (last != cp) {
|
if (last != cp) {
|
||||||
if ((*last != '/') && depth) {
|
if (!is_absolute_path(last) && depth) {
|
||||||
error("%s: ignoring relative alternate object store %s",
|
error("%s: ignoring relative alternate object store %s",
|
||||||
relative_base, last);
|
relative_base, last);
|
||||||
} else {
|
} else {
|
||||||
|
@ -20,6 +20,13 @@ LF='
|
|||||||
'
|
'
|
||||||
DQ='"'
|
DQ='"'
|
||||||
|
|
||||||
|
echo foo > "Name and an${HT}HT"
|
||||||
|
test -f "Name and an${HT}HT" || {
|
||||||
|
# since FAT/NTFS does not allow tabs in filenames, skip this test
|
||||||
|
say 'Your filesystem does not allow tabs in filenames, test skipped.'
|
||||||
|
test_done
|
||||||
|
}
|
||||||
|
|
||||||
for_each_name () {
|
for_each_name () {
|
||||||
for name in \
|
for name in \
|
||||||
Name "Name and a${LF}LF" "Name and an${HT}HT" "Name${DQ}" \
|
Name "Name and a${LF}LF" "Name and an${HT}HT" "Name${DQ}" \
|
||||||
|
@ -187,49 +187,51 @@ test_expect_success \
|
|||||||
test-3-${packname_3}.idx'
|
test-3-${packname_3}.idx'
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'corrupt a pack and see if verify catches' \
|
'verify-pack catches mismatched .idx and .pack files' \
|
||||||
'cat test-1-${packname_1}.idx >test-3.idx &&
|
'cat test-1-${packname_1}.idx >test-3.idx &&
|
||||||
cat test-2-${packname_2}.pack >test-3.pack &&
|
cat test-2-${packname_2}.pack >test-3.pack &&
|
||||||
if git verify-pack test-3.idx
|
if git verify-pack test-3.idx
|
||||||
then false
|
then false
|
||||||
else :;
|
else :;
|
||||||
fi &&
|
fi'
|
||||||
|
|
||||||
: PACK_SIGNATURE &&
|
test_expect_success \
|
||||||
cat test-1-${packname_1}.pack >test-3.pack &&
|
'verify-pack catches a corrupted pack signature' \
|
||||||
|
'cat test-1-${packname_1}.pack >test-3.pack &&
|
||||||
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=2 &&
|
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=2 &&
|
||||||
if git verify-pack test-3.idx
|
if git verify-pack test-3.idx
|
||||||
then false
|
then false
|
||||||
else :;
|
else :;
|
||||||
fi &&
|
fi'
|
||||||
|
|
||||||
: PACK_VERSION &&
|
test_expect_success \
|
||||||
cat test-1-${packname_1}.pack >test-3.pack &&
|
'verify-pack catches a corrupted pack version' \
|
||||||
|
'cat test-1-${packname_1}.pack >test-3.pack &&
|
||||||
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=7 &&
|
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=7 &&
|
||||||
if git verify-pack test-3.idx
|
if git verify-pack test-3.idx
|
||||||
then false
|
then false
|
||||||
else :;
|
else :;
|
||||||
fi &&
|
fi'
|
||||||
|
|
||||||
: TYPE/SIZE byte of the first packed object data &&
|
test_expect_success \
|
||||||
cat test-1-${packname_1}.pack >test-3.pack &&
|
'verify-pack catches a corrupted type/size of the 1st packed object data' \
|
||||||
|
'cat test-1-${packname_1}.pack >test-3.pack &&
|
||||||
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=12 &&
|
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=12 &&
|
||||||
if git verify-pack test-3.idx
|
if git verify-pack test-3.idx
|
||||||
then false
|
then false
|
||||||
else :;
|
else :;
|
||||||
fi &&
|
fi'
|
||||||
|
|
||||||
: sum of the index file itself &&
|
test_expect_success \
|
||||||
l=`wc -c <test-3.idx` &&
|
'verify-pack catches a corrupted sum of the index file itself' \
|
||||||
|
'l=`wc -c <test-3.idx` &&
|
||||||
l=`expr $l - 20` &&
|
l=`expr $l - 20` &&
|
||||||
cat test-1-${packname_1}.pack >test-3.pack &&
|
cat test-1-${packname_1}.pack >test-3.pack &&
|
||||||
dd if=/dev/zero of=test-3.idx count=20 bs=1 conv=notrunc seek=$l &&
|
dd if=/dev/zero of=test-3.idx count=20 bs=1 conv=notrunc seek=$l &&
|
||||||
if git verify-pack test-3.pack
|
if git verify-pack test-3.pack
|
||||||
then false
|
then false
|
||||||
else :;
|
else :;
|
||||||
fi &&
|
fi'
|
||||||
|
|
||||||
:'
|
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'build pack index for an existing pack' \
|
'build pack index for an existing pack' \
|
||||||
|
@ -61,17 +61,33 @@ test_expect_success \
|
|||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'index v2: force some 64-bit offsets with pack-objects' \
|
'index v2: force some 64-bit offsets with pack-objects' \
|
||||||
'pack3=$(git pack-objects --index-version=2,0x40000 test-3 <obj-list) &&
|
'pack3=$(git pack-objects --index-version=2,0x40000 test-3 <obj-list)'
|
||||||
git verify-pack -v "test-3-${pack3}.pack"'
|
|
||||||
|
|
||||||
|
have_64bits=
|
||||||
|
if msg=$(git verify-pack -v "test-3-${pack3}.pack" 2>&1) ||
|
||||||
|
! echo "$msg" | grep "pack too large .* off_t"
|
||||||
|
then
|
||||||
|
have_64bits=t
|
||||||
|
else
|
||||||
|
say "skipping tests concerning 64-bit offsets"
|
||||||
|
fi
|
||||||
|
|
||||||
|
test "$have_64bits" &&
|
||||||
|
test_expect_success \
|
||||||
|
'index v2: verify a pack with some 64-bit offsets' \
|
||||||
|
'git verify-pack -v "test-3-${pack3}.pack"'
|
||||||
|
|
||||||
|
test "$have_64bits" &&
|
||||||
test_expect_failure \
|
test_expect_failure \
|
||||||
'64-bit offsets: should be different from previous index v2 results' \
|
'64-bit offsets: should be different from previous index v2 results' \
|
||||||
'cmp "test-2-${pack2}.idx" "test-3-${pack3}.idx"'
|
'cmp "test-2-${pack2}.idx" "test-3-${pack3}.idx"'
|
||||||
|
|
||||||
|
test "$have_64bits" &&
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'index v2: force some 64-bit offsets with index-pack' \
|
'index v2: force some 64-bit offsets with index-pack' \
|
||||||
'git-index-pack --index-version=2,0x40000 -o 3.idx "test-1-${pack1}.pack"'
|
'git-index-pack --index-version=2,0x40000 -o 3.idx "test-1-${pack1}.pack"'
|
||||||
|
|
||||||
|
test "$have_64bits" &&
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'64-bit offsets: index-pack result should match pack-objects one' \
|
'64-bit offsets: index-pack result should match pack-objects one' \
|
||||||
'cmp "test-3-${pack3}.idx" "3.idx"'
|
'cmp "test-3-${pack3}.idx" "3.idx"'
|
||||||
@ -116,11 +132,11 @@ test_expect_failure \
|
|||||||
test_expect_success \
|
test_expect_success \
|
||||||
'[index v2] 1) stream pack to repository' \
|
'[index v2] 1) stream pack to repository' \
|
||||||
'rm -f .git/objects/pack/* &&
|
'rm -f .git/objects/pack/* &&
|
||||||
git-index-pack --index-version=2,0x40000 --stdin < "test-1-${pack1}.pack" &&
|
git-index-pack --index-version=2 --stdin < "test-1-${pack1}.pack" &&
|
||||||
git prune-packed &&
|
git prune-packed &&
|
||||||
git count-objects | ( read nr rest && test "$nr" -eq 1 ) &&
|
git count-objects | ( read nr rest && test "$nr" -eq 1 ) &&
|
||||||
cmp "test-1-${pack1}.pack" ".git/objects/pack/pack-${pack1}.pack" &&
|
cmp "test-1-${pack1}.pack" ".git/objects/pack/pack-${pack1}.pack" &&
|
||||||
cmp "test-3-${pack1}.idx" ".git/objects/pack/pack-${pack1}.idx"'
|
cmp "test-2-${pack1}.idx" ".git/objects/pack/pack-${pack1}.idx"'
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'[index v2] 2) create a stealth corruption in a delta base reference' \
|
'[index v2] 2) create a stealth corruption in a delta base reference' \
|
||||||
|
@ -79,7 +79,8 @@ test_expect_success \
|
|||||||
|
|
||||||
cat >editor <<\EOF
|
cat >editor <<\EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
sed -i -e "s/a file/an amend commit/g" $1
|
sed -e "s/a file/an amend commit/g" < $1 > $1-
|
||||||
|
mv $1- $1
|
||||||
EOF
|
EOF
|
||||||
chmod 755 editor
|
chmod 755 editor
|
||||||
|
|
||||||
@ -98,7 +99,8 @@ test_expect_success \
|
|||||||
|
|
||||||
cat >editor <<\EOF
|
cat >editor <<\EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
sed -i -e "s/amend/older/g" $1
|
sed -e "s/amend/older/g" < $1 > $1-
|
||||||
|
mv $1- $1
|
||||||
EOF
|
EOF
|
||||||
chmod 755 editor
|
chmod 755 editor
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user