1. 11 11月, 2014 1 次提交
  2. 20 10月, 2014 2 次提交
  3. 21 8月, 2014 4 次提交
  4. 22 7月, 2014 1 次提交
    • K
      Win32: don't copy the environment twice when spawning child processes · 77734da2
      Karsten Blees 提交于
      When spawning child processes via start_command(), the environment and all
      environment entries are copied twice. First by make_augmented_environ /
      copy_environ to merge with child_process.env. Then a second time by
      make_environment_block to create a sorted environment block string as
      required by CreateProcess.
      
      Move the merge logic to make_environment_block so that we only need to copy
      the environment once. This changes semantics of the env parameter: it now
      expects a delta (such as child_process.env) rather than a full environment.
      This is not a problem as the parameter is only used by start_command()
      (all other callers previously passed char **environ, and now pass NULL).
      
      The merge logic no longer xstrdup()s the environment strings, so do_putenv
      must not free them. Add a parameter to distinguish this from normal putenv.
      
      Remove the now unused make_augmented_environ / free_environ API.
      Signed-off-by: NKarsten Blees <blees@dcon.de>
      Signed-off-by: NStepan Kasal <kasal@ucw.cz>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      77734da2
  5. 18 7月, 2014 1 次提交
  6. 16 5月, 2014 1 次提交
    • J
      run-command: store an optional argv_array · c460c0ec
      Jeff King 提交于
      All child_process structs need to point to an argv. For
      flexibility, we do not mandate the use of a dynamic
      argv_array. However, because the child_process does not own
      the memory, this can make memory management with a
      separate argv_array difficult.
      
      For example, if a function calls start_command but not
      finish_command, the argv memory must persist. The code needs
      to arrange to clean up the argv_array separately after
      finish_command runs. As a result, some of our code in this
      situation just leaks the memory.
      
      To help such cases, this patch adds a built-in argv_array to
      the child_process, which gets cleaned up automatically (both
      in finish_command and when start_command fails).  Callers
      may use it if they choose, but can continue to use the raw
      argv if they wish.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c460c0ec
  7. 19 3月, 2014 1 次提交
  8. 01 11月, 2013 1 次提交
  9. 13 7月, 2013 1 次提交
  10. 09 5月, 2013 1 次提交
    • J
      mingw: rename WIN32 cpp macro to GIT_WINDOWS_NATIVE · 380395d0
      Jonathan Nieder 提交于
      Throughout git, it is assumed that the WIN32 preprocessor symbol is
      defined on native Windows setups (mingw and msvc) and not on Cygwin.
      On Cygwin, most of the time git can pretend this is just another Unix
      machine, and Windows-specific magic is generally counterproductive.
      
      Unfortunately Cygwin *does* define the WIN32 symbol in some headers.
      Best to rely on a new git-specific symbol GIT_WINDOWS_NATIVE instead,
      defined as follows:
      
      	#if defined(WIN32) && !defined(__CYGWIN__)
      	# define GIT_WINDOWS_NATIVE
      	#endif
      
      After this change, it should be possible to drop the
      CYGWIN_V15_WIN32API setting without any negative effect.
      
      [rj: %s/WINDOWS_NATIVE/GIT_WINDOWS_NATIVE/g ]
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NRamsay Jones <ramsay@ramsay1.demon.co.uk>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      380395d0
  11. 17 4月, 2013 1 次提交
    • J
      run-command: use thread-aware die_is_recursing routine · 1ece66bc
      Jeff King 提交于
      If we die from an async thread, we do not actually exit the
      program, but just kill the thread. This confuses the static
      counter in usage.c's default die_is_recursing function; it
      updates the counter once for the thread death, and then when
      the main program calls die() itself, it erroneously thinks
      we are recursing. The end result is that we print "recursion
      detected in die handler" instead of the real error in such a
      case (the easiest way to trigger this is having a remote
      connection hang up while running a sideband demultiplexer).
      
      This patch solves it by using a per-thread counter when the
      async_die function is installed; we detect recursion in each
      thread (including the main one), but they do not step on
      each other's toes.
      
      Other threaded code does not need to worry about this, as
      they do not install specialized die handlers; they just let
      a die() from a sub-thread take down the whole program.
      
      Since we are overriding the default recursion-check
      function, there is an interesting corner case that is not a
      problem, but bears some explanation. Imagine the main thread
      calls die(), and then in the die_routine starts an async
      call. We will switch to using thread-local storage, which
      starts at 0, for the main thread's counter, even though
      the original counter was actually at 1. That's OK, though,
      for two reasons:
      
        1. It would miss only the first level of recursion, and
           would still find recursive failures inside the async
           helper.
      
        2. We do not currently and are not likely to start doing
           anything as heavyweight as starting an async routine
           from within a die routine or helper function.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      1ece66bc
  12. 22 3月, 2013 1 次提交
    • J
      run-command: always set failed_errno in start_command · 25043d8a
      Jeff King 提交于
      When we fail to fork, we set the failed_errno variable to
      the value of errno so it is not clobbered by later syscalls.
      However, we do so in a conditional, and it is hard to see
      later under what conditions the variable has a valid value.
      
      Instead of setting it only when fork fails, let's just
      always set it after forking. This is more obvious for human
      readers (as we are no longer setting it as a side effect of
      a strerror call), and it is more obvious to gcc, which no
      longer generates a spurious -Wuninitialized warning. It also
      happens to match what the WIN32 half of the #ifdef does.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      25043d8a
  13. 02 2月, 2013 1 次提交
    • S
      run-command: be more informative about what failed · 939296c4
      Stephen Boyd 提交于
      While debugging an error with verify_signed_buffer() the error
      messages from run-command weren't very useful:
      
       error: cannot create pipe for gpg: Too many open files
       error: could not run gpg.
      
      because they didn't indicate *which* pipe couldn't be created.
      
      Print which pipe failed to be created in the error message so we
      can more easily debug similar problems in the future.
      
      For example, the above error now prints:
      
       error: cannot create standard error pipe for gpg: Too many open files
       error: could not run gpg.
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      939296c4
  14. 15 1月, 2013 1 次提交
    • A
      hooks: Add function to check if a hook exists · 5a7da2dc
      Aaron Schrab 提交于
      Create find_hook() function to determine if a given hook exists and is
      executable.  If it is, the path to the script will be returned,
      otherwise NULL is returned.
      
      This encapsulates the tests that are used to check for the existence of
      a hook in one place, making it easier to modify those checks if that is
      found to be necessary.  This also makes it simple for places that can
      use a hook to check if a hook exists before doing, possibly lengthy,
      setup work which would be pointless if no such hook is present.
      
      The returned value is left as a static value from get_pathname() rather
      than a duplicate because it is anticipated that the return value will
      either be used as a boolean, immediately added to an argv_array list
      which would result in it being duplicated at that point, or used to
      actually run the command without much intervening work.  Callers which
      need to hold onto the returned value for a longer time are expected to
      duplicate the return value themselves.
      Signed-off-by: NAaron Schrab <aaron@schrab.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5a7da2dc
  15. 07 1月, 2013 1 次提交
    • J
      run-command: encode signal death as a positive integer · 709ca730
      Jeff King 提交于
      When a sub-command dies due to a signal, we encode the
      signal number into the numeric exit status as "signal -
      128". This is easy to identify (versus a regular positive
      error code), and when cast to an unsigned integer (e.g., by
      feeding it to exit), matches what a POSIX shell would return
      when reporting a signal death in $? or through its own exit
      code.
      
      So we have a negative value inside the code, but once it
      passes across an exit() barrier, it looks positive (and any
      code we receive from a sub-shell will have the positive
      form). E.g., death by SIGPIPE (signal 13) will look like
      -115 to us in inside git, but will end up as 141 when we
      call exit() with it. And a program killed by SIGPIPE but run
      via the shell will come to us with an exit code of 141.
      
      Unfortunately, this means that when the "use_shell" option
      is set, we need to be on the lookout for _both_ forms. We
      might or might not have actually invoked the shell (because
      we optimize out some useless shell calls). If we didn't invoke
      the shell, we will will see the sub-process's signal death
      directly, and run-command converts it into a negative value.
      But if we did invoke the shell, we will see the shell's
      128+signal exit status. To be thorough, we would need to
      check both, or cast the value to an unsigned char (after
      checking that it is not -1, which is a magic error value).
      
      Fortunately, most callsites do not care at all whether the
      exit was from a code or from a signal; they merely check for
      a non-zero status, and sometimes propagate the error via
      exit(). But for the callers that do care, we can make life
      slightly easier by just using the consistent positive form.
      
      This actually fixes two minor bugs:
      
        1. In launch_editor, we check whether the editor died from
           SIGINT or SIGQUIT. But we checked only the negative
           form, meaning that we would fail to notice a signal
           death exit code which was propagated through the shell.
      
        2. In handle_alias, we assume that a negative return value
           from run_command means that errno tells us something
           interesting (like a fork failure, or ENOENT).
           Otherwise, we simply propagate the exit code. Negative
           signal death codes confuse us, and we print a useless
           "unable to run alias 'foo': Success" message. By
           encoding signal deaths using the positive form, the
           existing code just propagates it as it would a normal
           non-zero exit code.
      
      The downside is that callers of run_command can no longer
      differentiate between a signal received directly by the
      sub-process, and one propagated. However, no caller
      currently cares, and since we already optimize out some
      calls to the shell under the hood, that distinction is not
      something that should be relied upon by callers.
      
      Fix the same logic in t/test-terminal.perl for consistency [jc:
      raised by Jonathan in the discussion].
      Signed-off-by: NJeff King <peff@peff.net>
      Acked-by: NJohannes Sixt <j6t@kdbg.org>
      Reviewed-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      709ca730
  16. 06 1月, 2013 1 次提交
  17. 02 12月, 2012 2 次提交
  18. 12 9月, 2012 1 次提交
  19. 01 8月, 2012 1 次提交
    • J
      sane_execvp(): ignore non-directory on $PATH · a7855083
      Junio C Hamano 提交于
      When you have a non-directory on your PATH, a funny thing happens:
      
      	$ PATH=$PATH:/bin/sh git foo
      	fatal: cannot exec 'git-foo': Not a directory?
      
      Worse yet, as real commands always take precedence over aliases,
      this behaviour interacts rather badly with them:
      
      	$ PATH=$PATH:/bin/sh git -c alias.foo=show git foo -s
      	fatal: cannot exec 'git-foo': Not a directory?
      
      This is because an ENOTDIR error from the underlying execvp(2) is
      reported back to the caller of our sane_execvp() wrapper as-is.
      
      Translating it to ENOENT, just like the case where we _might_ have
      the command in an unreadable directory, fixes it.  Without an alias,
      we would get
      
      	git: 'foo' is not a git command. See 'git --help'.
      
      and we use the 'foo' alias when it is available, of course.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a7855083
  20. 06 6月, 2012 1 次提交
    • J
      pager: drop "wait for output to run less" hack · e8320f35
      Jeff King 提交于
      Commit 35ce8622 (pager: Work around window resizing bug in
      'less', 2007-01-24) causes git's pager sub-process to wait
      to receive input after forking but before exec-ing the
      pager. To handle this, run-command had to grow a "pre-exec
      callback" feature. Unfortunately, this feature does not work
      at all on Windows (where we do not fork), and interacts
      poorly with run-command's parent notification system. Its
      use should be discouraged.
      
      The bug in less was fixed in version 406, which was released
      in June 2007. It is probably safe at this point to remove
      our workaround. That lets us rip out the preexec_cb feature
      entirely.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      e8320f35
  21. 17 4月, 2012 1 次提交
    • J
      Do not use SHELL_PATH from build system in prepare_shell_cmd on Windows · 77629754
      Johannes Sixt 提交于
      The recent change to use SHELL_PATH instead of "sh" to spawn shell commands
      is not suited for Windows:
      
      - The default setting, "/bin/sh", does not work when git has to run the
        shell because it is a POSIX style path, but not a proper Windows style
        path.
      
      - If it worked, it would hard-code a position in the files system where
        the shell is expected, making git (more precisely, the POSIX toolset that
        is needed alongside git) non-relocatable. But we cannot sacrifice
        relocatability on Windows.
      
      - Apart from that, even though the Makefile leaves SHELL_PATH set to
        "/bin/sh" for the Windows builds, the build system passes a mangled path
        to the compiler, and something like "D:/Src/msysgit/bin/sh" is used,
        which is doubly bad because it points to where /bin/sh resolves to on
        the system where git was built.
      
      - Finally, the system's CreateProcess() function that is used under
        mingw.c's hood does not work with forward slashes and cannot find the
        shell.
      
      Undo the earlier change on Windows.
      Signed-off-by: NJohannes Sixt <j6t@kdbg.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      77629754
  22. 06 4月, 2012 1 次提交
    • J
      run-command: treat inaccessible directories as ENOENT · 38f865c2
      Jeff King 提交于
      When execvp reports EACCES, it can be one of two things:
      
        1. We found a file to execute, but did not have
           permissions to do so.
      
        2. We did not have permissions to look in some directory
           in the $PATH.
      
      In the former case, we want to consider this a
      permissions problem and report it to the user as such (since
      getting this for something like "git foo" is likely a
      configuration error).
      
      In the latter case, there is a good chance that the
      inaccessible directory does not contain anything of
      interest. Reporting "permission denied" is confusing to the
      user (and prevents our usual "did you mean...?" lookup). It
      also prevents git from trying alias lookup, since we do so
      only when an external command does not exist (not when it
      exists but has an error).
      
      This patch detects EACCES from execvp, checks whether we are
      in case (2), and if so converts errno to ENOENT. This
      behavior matches that of "bash" (but not of simpler shells
      that use execvp more directly, like "dash").
      
      Test stolen from Junio.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      38f865c2
  23. 04 4月, 2012 1 次提交
    • B
      Use SHELL_PATH from build system in run_command.c:prepare_shell_cmd · b3e34ddd
      Ben Walton 提交于
      During the testing of the 1.7.10 rc series on Solaris for OpenCSW, it
      was discovered that t7006-pager was failing due to finding a bad "sh"
      in PATH after a call to execvp("sh", ...).  This call was setup by
      run_command.c:prepare_shell_cmd.
      
      The PATH in use at the time saw /opt/csw/bin given precedence to
      traditional Solaris paths such as /usr/bin and /usr/xpg4/bin.  A
      package named schilyutils (Joerg Schilling's utilities) was installed
      on the build system and it delivered a modified version of the
      traditional Solaris /usr/bin/sh as /opt/csw/bin/sh.  This version of
      sh suffers from many of the same problems as /usr/bin/sh.
      
      The command-specific pager test failed due to the broken "sh" handling
      ^ as a pipe character.  It tried to fork two processes when it
      encountered "sed s/^/foo:/" as the pager command.  This problem was
      entirely dependent on the PATH of the user at runtime.
      
      Possible fixes for this issue are:
      
      1. Use the standard system() or popen() which both launch a POSIX
         shell on Solaris as long as _POSIX_SOURCE is defined.
      
      2. The git wrapper could prepend SANE_TOOL_PATH to PATH thus forcing
         all unqualified commands run to use the known good tools on the
         system.
      
      3. The run_command.c:prepare_shell_command() could use the same
         SHELL_PATH that is in the #! line of all all scripts and not rely
         on PATH to find the sh to run.
      
      Option 1 would preclude opening a bidirectional pipe to a filter
      script and would also break git for Windows as cmd.exe is spawned from
      system() (cf. v1.7.5-rc0~144^2, "alias: use run_command api to execute
      aliases, 2011-01-07).
      
      Option 2 is not friendly to users as it would negate their ability to
      use tools of their choice in many cases.  Alternately, injecting
      SANE_TOOL_PATH such that it takes precedence over /bin and /usr/bin
      (and anything with lower precedence than those paths) as
      git-sh-setup.sh does would not solve the problem either as the user
      environment could still allow a bad sh to be found.  (Many OpenCSW
      users will have /opt/csw/bin leading their PATH and some subset would
      have schilyutils installed.)
      
      Option 3 allows us to use a known good shell while still honouring the
      users' PATH for the utilities being run.  Thus, it solves the problem
      while not negatively impacting either users or git's ability to run
      external commands in convenient ways.  Essentially, the shell is a
      special case of tool that should not rely on SANE_TOOL_PATH and must
      be called explicitly.
      
      With this patch applied, any code path leading to
      run_command.c:prepare_shell_cmd can count on using the same sane shell
      that all shell scripts in the git suite use.  Both the build system
      and run_command.c will default this shell to /bin/sh unless
      overridden.
      Signed-off-by: NBen Walton <bwalton@artsci.utoronto.ca>
      Reviewed-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b3e34ddd
  24. 09 1月, 2012 2 次提交
    • C
      dashed externals: kill children on exit · 10c6cddd
      Clemens Buchacher 提交于
      Several git commands are so-called dashed externals, that is commands
      executed as a child process of the git wrapper command. If the git
      wrapper is killed by a signal, the child process will continue to run.
      This is different from internal commands, which always die with the git
      wrapper command.
      
      Enable the recently introduced cleanup mechanism for child processes in
      order to make dashed externals act more in line with internal commands.
      Signed-off-by: NClemens Buchacher <drizzd@aon.at>
      Acked-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      10c6cddd
    • J
      run-command: optionally kill children on exit · afe19ff7
      Jeff King 提交于
      When we spawn a helper process, it should generally be done
      and finish_command called before we exit. However, if we
      exit abnormally due to an early return or a signal, the
      helper may continue to run in our absence.
      
      In the best case, this may simply be wasted CPU cycles or a
      few stray messages on a terminal. But it could also mean a
      process that the user thought was aborted continues to run
      to completion (e.g., a push's pack-objects helper will
      complete the push, even though you killed the push process).
      
      This patch provides infrastructure for run-command to keep
      track of PIDs to be killed, and clean them on signal
      reception or input, just as we do with tempfiles. PIDs can
      be added in two ways:
      
        1. If NO_PTHREADS is defined, async helper processes are
           automatically marked. By definition this code must be
           ready to die when the parent dies, since it may be
           implemented as a thread of the parent process.
      
        2. If the run-command caller specifies the "clean_on_exit"
           option. This is not the default, as there are cases
           where it is OK for the child to outlive us (e.g., when
           spawning a pager).
      
      PIDs are cleared from the kill-list automatically during
      wait_or_whine, which is called from finish_command and
      finish_async.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NClemens Buchacher <drizzd@aon.at>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      afe19ff7
  25. 15 9月, 2011 1 次提交
  26. 02 8月, 2011 1 次提交
    • C
      notice error exit from pager · fc1b56f0
      Clemens Buchacher 提交于
      If the pager fails to run, git produces no output, e.g.:
      
       $ GIT_PAGER=not-a-command git log
      
      The error reporting fails for two reasons:
      
       (1) start_command: There is a mechanism that detects errors during
           execvp introduced in 2b541bf8 (start_command: detect execvp
           failures early). The child writes one byte to a pipe only if
           execvp fails.  The parent waits for either EOF, when the
           successful execvp automatically closes the pipe (see
           FD_CLOEXEC in fcntl(1)), or it reads a single byte, in which
           case it knows that the execvp failed. This mechanism is
           incompatible with the workaround introduced in 35ce8622
           (pager: Work around window resizing bug in 'less'), which
           waits for input from the parent before the exec. Since both
           the parent and the child are waiting for input from each
           other, that would result in a deadlock. In order to avoid
           that, the mechanism is disabled by closing the child_notifier
           file descriptor.
      
       (2) finish_command: The parent correctly detects the 127 exit
           status from the child, but the error output goes nowhere,
           since by that time it is already being redirected to the
           child.
      
      No simple solution for (1) comes to mind.
      
      Number (2) can be solved by not sending error output to the pager.
      Not redirecting error output to the pager can result in the pager
      overwriting error output with standard output, however.
      
      Since there is no reliable way to handle error reporting in the
      parent, produce the output in the child instead.
      Signed-off-by: NClemens Buchacher <drizzd@aon.at>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fc1b56f0
  27. 01 8月, 2011 1 次提交
  28. 21 4月, 2011 1 次提交
    • J
      run-command: handle short writes and EINTR in die_child · a111eb78
      Jonathan Nieder 提交于
      If start_command fails after forking and before exec finishes, there
      is not much use in noticing an I/O error on top of that.
      finish_command will notice that the child exited with nonzero status
      anyway.  So as noted in v1.7.0.3~20^2 (run-command.c: fix build
      warnings on Ubuntu, 2010-01-30) and v1.7.5-rc0~29^2 (2011-03-16), it
      is safe to ignore errors from write in this codepath.
      
      Even so, the result from write contains useful information: it tells
      us if the write was cancelled by a signal (EINTR) or was only
      partially completed (e.g., when writing to an almost-full pipe).
      Let's use write_in_full to loop until the desired number of bytes have
      been written (still ignoring errors if that fails).
      
      As a happy side effect, the assignment to a dummy variable to appease
      gcc -D_FORTIFY_SOURCE is no longer needed.  xwrite and write_in_full
      check the return value from write(2).
      
      Noticed with gcc -Wunused-but-set-variable.
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a111eb78
  29. 19 4月, 2011 1 次提交
  30. 18 3月, 2011 1 次提交
    • J
      run-command: prettify -D_FORTIFY_SOURCE workaround · ebec8427
      Jonathan Nieder 提交于
      Current gcc + glibc with -D_FORTIFY_SOURCE try very aggressively to
      protect against a programming style which uses write(...) without
      checking the return value for errors.  Even the usual hint of casting
      to (void) does not suppress the warning.
      
      Sometimes when there is an output error, especially right before exit,
      there really is nothing to be done.  The obvious solution, adopted in
      v1.7.0.3~20^2 (run-command.c: fix build warnings on Ubuntu,
      2010-01-30), is to save the return value to a dummy variable:
      
      	ssize_t dummy;
      	dummy = write(...);
      
      But that (1) is ugly and (2) triggers -Wunused-but-set-variable
      warnings with gcc-4.6 -Wall, so we are not much better off than when
      we started.
      
      Instead, use an "if" statement with an empty body to make the intent
      clear.
      
      	if (write(...))
      		; /* yes, yes, there was an error. */
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Improved-by: NJunio C Hamano <gitster@pobox.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      ebec8427
  31. 08 2月, 2011 1 次提交
  32. 21 5月, 2010 1 次提交
    • B
      start_command: close cmd->err descriptor when fork/spawn fails · fc012c28
      bert Dvornik 提交于
      Fix the problem where the cmd->err passed into start_command wasn't
      being properly closed when certain types of errors occurr.  (Compare
      the affected code with the clean shutdown code later in the function.)
      
      On Windows, this problem would be triggered if mingw_spawnvpe()
      failed, which would happen if the command to be executed was malformed
      (e.g. a text file that didn't start with a #! line).  If cmd->err was
      a pipe, the failure to close it could result in a hang while the other
      side was waiting (forever) for either input or pipe close, e.g. while
      trying to shove the output into the side band.  On msysGit, this
      problem was causing a hang in t5516-fetch-push.
      
      [J6t: With a slight adjustment of the test case, the hang is also
      observed on Linux.]
      Signed-off-by: Nbert Dvornik <dvornik+git@gmail.com>
      Signed-off-by: NJohannes Sixt <j6t@kdbg.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fc012c28
  33. 12 4月, 2010 1 次提交
  34. 11 3月, 2010 1 次提交