[Cmake-commits] CMake branch, next, updated. v2.8.2-272-ge682e66

Brad King brad.king at kitware.com
Mon Jul 26 11:45:36 EDT 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  e682e668481b37cfcf22b348a99abf429f0c1b51 (commit)
       via  7bf8dc1ac9d2c2430e247c2cfb54a6a4cb5f698a (commit)
      from  4ee6fab20aa7451d94b7c01abcd728135746c9db (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e682e668481b37cfcf22b348a99abf429f0c1b51
commit e682e668481b37cfcf22b348a99abf429f0c1b51
Merge: 4ee6fab 7bf8dc1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jul 26 11:45:34 2010 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Jul 26 11:45:34 2010 -0400

    Merge topic 'ctest-git-flexibility' into next
    
    7bf8dc1 ctest_update: Support ".git file" work trees

diff --cc Tests/CTestUpdateGIT.cmake.in
index f672a52,e1d345c..793b987
--- a/Tests/CTestUpdateGIT.cmake.in
+++ b/Tests/CTestUpdateGIT.cmake.in
@@@ -275,9 -259,14 +275,14 @@@ execute_process
    WORKING_DIRECTORY \"${TOP}\"
    COMMAND \"${GIT}\" clone \"${REPO}\" dash-source
    )
+ 
+ # Test .git file.
+ file(RENAME \"${TOP}/dash-source/.git\" \"${TOP}/dash-source/repo.git\")
+ file(WRITE \"${TOP}/dash-source/.git\" \"gitdir: repo.git\n\")
+ 
  execute_process(
    WORKING_DIRECTORY \"${TOP}/dash-source\"
 -  COMMAND \"${GIT}\" reset --hard master~2
 +  COMMAND \"${GIT}\" reset --hard ${revision1}
    )
  execute_process(
    WORKING_DIRECTORY \"${TOP}/dash-source\"

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7bf8dc1ac9d2c2430e247c2cfb54a6a4cb5f698a
commit 7bf8dc1ac9d2c2430e247c2cfb54a6a4cb5f698a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jul 26 11:40:20 2010 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Jul 26 11:40:20 2010 -0400

    ctest_update: Support ".git file" work trees
    
    Commit c3781efb (Support Git upstream branch rewrites, 2010-06-08)
    assumed that ".git/FETCH_HEAD" exists inside the source tree.  Fix the
    implementation to handle a work tree using a ".git file" to link to its
    repository.  Use "git rev-parse --git-dir" to locate the real .git dir.

diff --git a/Source/CTest/cmCTestGIT.cxx b/Source/CTest/cmCTestGIT.cxx
index 41c1393..e44f81d 100644
--- a/Source/CTest/cmCTestGIT.cxx
+++ b/Source/CTest/cmCTestGIT.cxx
@@ -85,6 +85,54 @@ void cmCTestGIT::NoteNewRevision()
 }
 
 //----------------------------------------------------------------------------
+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()
 {
   const char* git = this->CommandLineTool.c_str();
@@ -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))
     {
diff --git a/Source/CTest/cmCTestGIT.h b/Source/CTest/cmCTestGIT.h
index d8681fe..760def0 100644
--- a/Source/CTest/cmCTestGIT.h
+++ b/Source/CTest/cmCTestGIT.h
@@ -32,6 +32,8 @@ private:
   virtual void NoteNewRevision();
   virtual bool UpdateImpl();
 
+  std::string FindGitDir();
+
   bool UpdateByFetchAndReset();
   bool UpdateByCustom(std::string const& custom);
   bool UpdateInternal();
diff --git a/Tests/CTestUpdateGIT.cmake.in b/Tests/CTestUpdateGIT.cmake.in
index 4ac1b31..e1d345c 100644
--- a/Tests/CTestUpdateGIT.cmake.in
+++ b/Tests/CTestUpdateGIT.cmake.in
@@ -259,6 +259,11 @@ execute_process(
   WORKING_DIRECTORY \"${TOP}\"
   COMMAND \"${GIT}\" clone \"${REPO}\" dash-source
   )
+
+# Test .git file.
+file(RENAME \"${TOP}/dash-source/.git\" \"${TOP}/dash-source/repo.git\")
+file(WRITE \"${TOP}/dash-source/.git\" \"gitdir: repo.git\n\")
+
 execute_process(
   WORKING_DIRECTORY \"${TOP}/dash-source\"
   COMMAND \"${GIT}\" reset --hard master~2

-----------------------------------------------------------------------

Summary of changes:
 Source/CTest/cmCTestGIT.cxx   |   55 ++++++++++++++++++++++++++++++++++++++++-
 Source/CTest/cmCTestGIT.h     |    2 +
 Tests/CTestUpdateGIT.cmake.in |    5 +++
 3 files changed, 61 insertions(+), 1 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list