瀏覽代碼

Kate: make it possible to force a mode for the "files" entry

By default, kate will try to autodetect whether the project is
a svn or git checkout or not.
In case this does not give a satisfying result, the user can now
set CMAKE_KATE_FILES_MODE to the mode he wants.
Alexander Neundorf 2 年之前
父節點
當前提交
9a7612d2d0

+ 1 - 0
Help/manual/cmake-variables.7.rst

@@ -226,6 +226,7 @@ Variables that Change Behavior
    /variable/CMAKE_INSTALL_MESSAGE
    /variable/CMAKE_INSTALL_PREFIX
    /variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
+   /variable/CMAKE_KATE_FILES_MODE
    /variable/CMAKE_KATE_MAKE_ARGUMENTS
    /variable/CMAKE_LIBRARY_PATH
    /variable/CMAKE_LINK_DIRECTORIES_BEFORE

+ 20 - 0
Help/variable/CMAKE_KATE_FILES_MODE.rst

@@ -0,0 +1,20 @@
+CMAKE_KATE_FILES_MODE
+---------------------
+
+.. versionadded:: 3.27
+
+This cache variable is used by the Kate project generator and controls
+to what mode the ``files`` entry in the project file will be set.  See
+:manual:`cmake-generators(7)`.
+
+Possible values are ``AUTO``, ``SVN``, ``GIT`` and ``LIST``.
+
+When set to ``LIST``, CMake will put the list of source files known to CMake
+in the project file.
+When set to ``SVN``, CMake will put ``svn`` into the project file so that Kate
+will use svn to retrieve the list of files in the project.
+When set to ``GIT``, CMake will put ``git`` into the project file so that Kate
+will use git to retrieve the list of files in the project.
+When unset or set to ``AUTO``, CMake will try to detect whether the
+source directory is part of a git or svn checkout or not, and put the
+respective entry into the project file.

+ 4 - 0
Modules/CMakeFindKate.cmake

@@ -19,3 +19,7 @@ endif()
 
 # This variable is used by the Kate generator and appended to the make invocation commands.
 set(CMAKE_KATE_MAKE_ARGUMENTS "${_CMAKE_KATE_INITIAL_MAKE_ARGS}" CACHE STRING "Additional command line arguments when Kate invokes make. Enter e.g. -j<some_number> to get parallel builds")
+
+
+set(CMAKE_KATE_FILES_MODE "AUTO" CACHE STRING "Option to override the version control detection and force a mode for the Kate project.")
+set_property(CACHE CMAKE_KATE_FILES_MODE PROPERTY STRINGS "AUTO;SVN;GIT;LIST")

+ 24 - 6
Source/cmExtraKateGenerator.cxx

@@ -220,14 +220,32 @@ void cmExtraKateGenerator::CreateDummyKateProjectFile(
 std::string cmExtraKateGenerator::GenerateFilesString(
   const cmLocalGenerator& lg) const
 {
-  std::string s = cmStrCat(lg.GetSourceDirectory(), "/.git");
-  if (cmSystemTools::FileExists(s)) {
-    return "\"git\": 1 ";
+  const cmMakefile* mf = lg.GetMakefile();
+  std::string mode =
+    cmSystemTools::UpperCase(mf->GetSafeDefinition("CMAKE_KATE_FILES_MODE"));
+  static const std::string gitString = "\"git\": 1 ";
+  static const std::string svnString = "\"svn\": 1 ";
+
+  if (mode == "SVN") {
+    return svnString;
   }
+  if (mode == "GIT") {
+    return gitString;
+  }
+
+  std::string s;
 
-  s = cmStrCat(lg.GetSourceDirectory(), "/.svn");
-  if (cmSystemTools::FileExists(s)) {
-    return "\"svn\": 1 ";
+  // check for the VCS files except when "forced" to "FILES" mode:
+  if (mode != "LIST") {
+    s = cmStrCat(lg.GetSourceDirectory(), "/.git");
+    if (cmSystemTools::FileExists(s)) {
+      return gitString;
+    }
+
+    s = cmStrCat(lg.GetSourceDirectory(), "/.svn");
+    if (cmSystemTools::FileExists(s)) {
+      return svnString;
+    }
   }
 
   s = cmStrCat(lg.GetSourceDirectory(), '/');