Stream OpenOutput(string gitExe, string fileName, string blobHash) { if (!File.Exists(fileName)) { return(null); } if (blobHash == null) { return(null); } AnonymousPipeServerStream pipe = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable); StartupInfo startupInfo = new GitVersionProvider.StartupInfo(); startupInfo.dwFlags = STARTF_USESTDHANDLES; startupInfo.hStdOutput = pipe.ClientSafePipeHandle; startupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); startupInfo.cb = 16; PROCESS_INFORMATION procInfo; string commandLine = "\"" + gitExe + "\" cat-file blob " + blobHash; string workingDir = Path.GetDirectoryName(fileName); Debug.WriteLine(workingDir + "> " + commandLine); const uint CREATE_NO_WINDOW = 0x08000000; if (!CreateProcess(null, commandLine, IntPtr.Zero, IntPtr.Zero, true, CREATE_NO_WINDOW, IntPtr.Zero, workingDir, ref startupInfo, out procInfo)) { pipe.DisposeLocalCopyOfClientHandle(); pipe.Close(); return(null); } pipe.DisposeLocalCopyOfClientHandle(); return(pipe); }
Stream OpenOutput(string gitExe, string fileName, string blobHash) { if (!File.Exists(fileName)) return null; if (blobHash == null) return null; AnonymousPipeServerStream pipe = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable); StartupInfo startupInfo = new GitVersionProvider.StartupInfo(); startupInfo.dwFlags = STARTF_USESTDHANDLES; startupInfo.hStdOutput = pipe.ClientSafePipeHandle; startupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); startupInfo.cb = 16; PROCESS_INFORMATION procInfo; string commandLine = "\"" + gitExe + "\" cat-file blob " + blobHash; string workingDir = Path.GetDirectoryName(fileName); Debug.WriteLine(workingDir + "> " + commandLine); const uint CREATE_NO_WINDOW = 0x08000000; if (!CreateProcess(null, commandLine, IntPtr.Zero, IntPtr.Zero, true, CREATE_NO_WINDOW, IntPtr.Zero, workingDir, ref startupInfo, out procInfo)) { pipe.DisposeLocalCopyOfClientHandle(); pipe.Close(); return null; } pipe.DisposeLocalCopyOfClientHandle(); return pipe; }
Stream OpenOutput(string fileName, string blobHash) { if (blobHash == null) return null; AnonymousPipeServerStream pipe = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable); StartupInfo startupInfo = new GitVersionProvider.StartupInfo(); startupInfo.dwFlags = STARTF_USESTDHANDLES; startupInfo.hStdOutput = pipe.ClientSafePipeHandle; startupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); startupInfo.cb = 16; PROCESS_INFORMATION procInfo; if (!CreateProcess(null, string.Format("cmd /c git cat-file blob {0}", blobHash), IntPtr.Zero, IntPtr.Zero, true, 0, IntPtr.Zero, Path.GetDirectoryName(fileName), ref startupInfo, out procInfo)) { pipe.DisposeLocalCopyOfClientHandle(); pipe.Close(); return null; } pipe.DisposeLocalCopyOfClientHandle(); return pipe; }