When 'git gc --auto' is invoked it tells the user whether it is about to auto pack the repository in the background or in the foreground depending on 'gc.autoDetach' (enabled by default). However, going to the background is not supported at all on Windows, yet 'git gc --auto' by default claims that it will do so. Add a helper function that can tell whether the platform supports going to the background and use it in the 'git gc --auto' codepath to print an honest message. Signed-off-by: SZEDER Gábor <szeder@xxxxxxxxxx> --- I built and tested with 'NO_POSIX_GOODIES=UnfortunatelyYes': it worked. However, I did not test it on Windows due to lack of resources, hence the RFC out of caution. Arguably this helper function could be just a simple variable. I opted for a function because: - I preferred a single '#ifdef NO_POSIX_GOODIES', and putting a static variable so near to EOF felt just wrong. (And this is why it's not an inline-able function defined in a header file.) - currently we know already at compile time that Windows can't daemonize, but in the future we might want to extend this helper function to perform some runtime checks, too. But this is perhaps like preparing for crossing a bridge where we'll never get to. builtin/gc.c | 1 + cache.h | 1 + setup.c | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/builtin/gc.c b/builtin/gc.c index c583aad6ec28..79a0f6dc1126 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -368,6 +368,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix) */ if (!need_to_gc()) return 0; + detach_auto &= can_daemonize(); if (!quiet) { if (detach_auto) fprintf(stderr, _("Auto packing the repository in background for optimum performance.\n")); diff --git a/cache.h b/cache.h index fd728f079320..3662e5aabb98 100644 --- a/cache.h +++ b/cache.h @@ -524,6 +524,7 @@ extern int set_git_dir_init(const char *git_dir, const char *real_git_dir, int); extern int init_db(const char *template_dir, unsigned int flags); extern void sanitize_stdfds(void); +extern int can_daemonize(void); extern int daemonize(void); #define alloc_nr(x) (((x)+16)*3/2) diff --git a/setup.c b/setup.c index c86bf5c9fabe..6187a4ad9c47 100644 --- a/setup.c +++ b/setup.c @@ -1033,12 +1033,25 @@ void sanitize_stdfds(void) close(fd); } +#ifdef NO_POSIX_GOODIES +int can_daemonize(void) +{ + return 0; +} + int daemonize(void) { -#ifdef NO_POSIX_GOODIES errno = ENOSYS; return -1; +} #else +int can_daemonize(void) +{ + return 1; +} + +int daemonize(void) +{ switch (fork()) { case 0: break; @@ -1054,5 +1067,5 @@ int daemonize(void) close(2); sanitize_stdfds(); return 0; -#endif } +#endif /* #ifdef NO_POSIX_GOODIES */ -- 2.8.2.356.ge684b1d -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html