On Tue, May 18, 2021 at 06:23:40PM +0700, Bagas Sanjaya wrote: > > You could try using strace or gdb to see what it's doing. > > > > But as a guess, one thing that sometimes causes a stall near the end of > > "enumerating objects" is loosening unreachable objects that are > > currently packed. You told repack to use "-A", which asks to loosen > > those objects so they aren't lost when the old packs are deleted (as > > opposed to "-a"). > > > > I attached two strace logs, one for "git repack -A -d" and one for "git > repack -a -d". > > For the former, I got following excerpt before I had to SIGINT the process: > > > stat("/opt/git/libexec/git-core/git", {st_mode=S_IFREG|0755, st_size=22096480, ...}) = 0 > > pipe([5, 7]) = 0 > > openat(AT_FDCWD, "/dev/null", O_RDWR|O_CLOEXEC) = 8 > > fcntl(8, F_GETFD) = 0x1 (flags FD_CLOEXEC) > > fcntl(8, F_SETFD, FD_CLOEXEC) = 0 > > rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0 > > clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7feb5ecbfa10) = 13691 > > rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 > > close(7) = 0 > > read(5, "", 8) = 0 > > close(5) = 0 > > close(8) = 0 > > close(4) = 0 > > fcntl(3, F_GETFL) = 0 (flags O_RDONLY) > > fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 > > read(3, 0x55a540de5250, 4096) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) > > I thought that in the case of "git repack -A -d", it is stucked at the > last read() before I ctrl-c'ed to trigger SIGINT. You need "strace -f". The parent repack process spawns pack-objects (via the clone() call above), and then waits for it to print the name of the generated pack at the end. So it will stall on that read() for quite a while, even under normal circumstances. -Peff