|  | @@ -84,6 +84,54 @@ void cmCTestGIT::NoteNewRevision()
 | 
	
		
			
				|  |  |               << this->NewRevision << "\n");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +//----------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +std::string cmCTestGIT::FindGitDir()
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +  std::string git_dir;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Run "git rev-parse --git-dir" to locate the real .git directory.
 | 
	
		
			
				|  |  | +  const char* git = this->CommandLineTool.c_str();
 | 
	
		
			
				|  |  | +  char const* git_rev_parse[] = {git, "rev-parse", "--git-dir", 0};
 | 
	
		
			
				|  |  | +  std::string git_dir_line;
 | 
	
		
			
				|  |  | +  OneLineParser rev_parse_out(this, "rev-parse-out> ", git_dir_line);
 | 
	
		
			
				|  |  | +  OutputLogger rev_parse_err(this->Log, "rev-parse-err> ");
 | 
	
		
			
				|  |  | +  if(this->RunChild(git_rev_parse, &rev_parse_out, &rev_parse_err))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    git_dir = git_dir_line;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  if(git_dir.empty())
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    git_dir = ".git";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Git reports a relative path only when the .git directory is in
 | 
	
		
			
				|  |  | +  // the current directory.
 | 
	
		
			
				|  |  | +  if(git_dir[0] == '.')
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    git_dir = this->SourceDirectory + "/" + git_dir;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +#if defined(_WIN32) && !defined(__CYGWIN__)
 | 
	
		
			
				|  |  | +  else if(git_dir[0] == '/')
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    // Cygwin Git reports a full path that Cygwin understands, but we
 | 
	
		
			
				|  |  | +    // are a Windows application.  Run "cygpath" to get Windows path.
 | 
	
		
			
				|  |  | +    std::string cygpath_exe = cmSystemTools::GetFilenamePath(git);
 | 
	
		
			
				|  |  | +    cygpath_exe += "/cygpath.exe";
 | 
	
		
			
				|  |  | +    if(cmSystemTools::FileExists(cygpath_exe.c_str()))
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +      char const* cygpath[] = {cygpath_exe.c_str(), "-w", git_dir.c_str(), 0};
 | 
	
		
			
				|  |  | +      OneLineParser cygpath_out(this, "cygpath-out> ", git_dir_line);
 | 
	
		
			
				|  |  | +      OutputLogger cygpath_err(this->Log, "cygpath-err> ");
 | 
	
		
			
				|  |  | +      if(this->RunChild(cygpath, &cygpath_out, &cygpath_err))
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +        git_dir = git_dir_line;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +  return git_dir;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  //----------------------------------------------------------------------------
 | 
	
		
			
				|  |  |  bool cmCTestGIT::UpdateByFetchAndReset()
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -121,8 +169,13 @@ bool cmCTestGIT::UpdateByFetchAndReset()
 | 
	
		
			
				|  |  |    // Identify the merge head that would be used by "git pull".
 | 
	
		
			
				|  |  |    std::string sha1;
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  | -  std::string fetch_head = this->SourceDirectory + "/.git/FETCH_HEAD";
 | 
	
		
			
				|  |  | +  std::string fetch_head = this->FindGitDir() + "/FETCH_HEAD";
 | 
	
		
			
				|  |  |    std::ifstream fin(fetch_head.c_str(), std::ios::in | std::ios::binary);
 | 
	
		
			
				|  |  | +  if(!fin)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +    this->Log << "Unable to open " << fetch_head << "\n";
 | 
	
		
			
				|  |  | +    return false;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    std::string line;
 | 
	
		
			
				|  |  |    while(sha1.empty() && cmSystemTools::GetLineFromStream(fin, line))
 | 
	
		
			
				|  |  |      {
 |