Merge branch 'js/mingw-hooks-with-exe-suffix'
authorJunio C Hamano <gitster@pobox.com>
Thu, 2 Feb 2017 21:36:57 +0000 (13:36 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Feb 2017 21:36:57 +0000 (13:36 -0800)
Names of the various hook scripts must be spelled exactly, but on
Windows, an .exe binary must be named with .exe suffix; notice
$GIT_DIR/hooks/<hookname>.exe as a valid <hookname> hook.

* js/mingw-hooks-with-exe-suffix:
mingw: allow hooks to be .exe files

1  2 
run-command.c
diff --combined run-command.c
index 73bfba7ef94e678afa830550199f14b6f5ca5ad0,79780a4ab251ab8d277141231e5a9b52b7123c11..5227f78aeaae7e76bfc85d4d7ca2886b2b52215e
@@@ -29,8 -29,6 +29,8 @@@ static int installed_child_cleanup_hand
  
  static void cleanup_children(int sig, int in_signal)
  {
 +      struct child_to_clean *children_to_wait_for = NULL;
 +
        while (children_to_clean) {
                struct child_to_clean *p = children_to_clean;
                children_to_clean = p->next;
                }
  
                kill(p->pid, sig);
 +
 +              if (p->process->wait_after_clean) {
 +                      p->next = children_to_wait_for;
 +                      children_to_wait_for = p;
 +              } else {
 +                      if (!in_signal)
 +                              free(p);
 +              }
 +      }
 +
 +      while (children_to_wait_for) {
 +              struct child_to_clean *p = children_to_wait_for;
 +              children_to_wait_for = p->next;
 +
 +              while (waitpid(p->pid, NULL, 0) < 0 && errno == EINTR)
 +                      ; /* spin waiting for process exit or error */
 +
                if (!in_signal)
                        free(p);
        }
@@@ -871,8 -852,14 +871,14 @@@ const char *find_hook(const char *name
  
        strbuf_reset(&path);
        strbuf_git_path(&path, "hooks/%s", name);
-       if (access(path.buf, X_OK) < 0)
+       if (access(path.buf, X_OK) < 0) {
+ #ifdef STRIP_EXTENSION
+               strbuf_addstr(&path, STRIP_EXTENSION);
+               if (access(path.buf, X_OK) >= 0)
+                       return path.buf;
+ #endif
                return NULL;
+       }
        return path.buf;
  }