On Fri, Dec 18, 2020 at 10:13:25PM +0100, Richard Kimberly Heck wrote:
> commit 7e5c42593e45424676b466db257e5c377329c2e4
> Author: Richard Kimberly Heck <[email protected]>
> Date:   Fri Dec 18 16:43:52 2020 -0500
> 
>     Simplify checking whether files are controlled by SVN and GIT.
> ---
>  src/VCBackend.cpp |   40 ++++++++++++----------------------------
>  1 files changed, 12 insertions(+), 28 deletions(-)
> 
> diff --git a/src/VCBackend.cpp b/src/VCBackend.cpp
> index f8c2497..01d546d 100644
> --- a/src/VCBackend.cpp
> +++ b/src/VCBackend.cpp
> @@ -537,25 +537,19 @@ CVS::CVS(FileName const & m, Buffer * b) : VCS(b)
>  
>  FileName const CVS::findFile(FileName const & file)
>  {
> -     // First we look for the CVS/Entries in the same dir
> -     // where we have file.
> +     LYXERR(Debug::LYXVC, "LyXVC: Checking if "
> +                << onlyFileName(file.absFileName()) << "is under cvs");
> +     // First we look for the CVS/Entries in the same dir where we have file.
>       // Note that it is not necessary to search parent directories, since
>       // there will be a CVS/Entries file in every subdirectory.
>       FileName const entries(onlyPath(file.absFileName()) + "/CVS/Entries");
> -     string const tmpf = '/' + onlyFileName(file.absFileName()) + '/';
> -     LYXERR(Debug::LYXVC, "LyXVC: Checking if file is under cvs in `" << 
> entries
> -                          << "' for `" << tmpf << '\'');
>       if (entries.isReadableFile()) {
> -             // Ok we are at least in a CVS dir. Parse the CVS/Entries
> -             // and see if we can find this file. We do a fast and
> -             // dirty parse here.
> -             ifstream ifs(entries.toFilesystemEncoding().c_str());
> -             string line;
> -             while (getline(ifs, line)) {
> -                     LYXERR(Debug::LYXVC, "\tEntries: " << line);
> -                     if (contains(line, tmpf))
> -                             return entries;
> -             }
> +             // We are in a CVS-managed directory
> +             // See if the file is known to CVS
> +             string const cmd = "cvs log " + 
> quoteName(file.toFilesystemEncoding());
> +             int const ret = doVCCommandCall(cmd, file.onlyPath());
> +             if (ret == 0)
> +                     return entries;
>       }
>       return FileName();
>  }
> @@ -1837,23 +1831,13 @@ bool GIT::findFile(FileName const & file)
>               return false;
>       }
>  
> -     // Now we check the status of the file.
> -     TempFile tempfile("lyxvcout");
> -     FileName tmpf = tempfile.name();
> -     if (tmpf.empty()) {
> -             LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
> -             return false;
> -     }
> -
> +     // Now we check if the file is known to git.
>       string const fname = onlyFileName(file.absFileName());
>       LYXERR(Debug::LYXVC, "LyXVC: Checking if file is under git control for 
> `"
>                       << fname << '\'');
> -     doVCCommandCall("git ls-files " +
> -                     quoteName(fname) + " > " +
> -                     quoteName(tmpf.toFilesystemEncoding()),
> +     int const ret = doVCCommandCall("git log " + quoteName(fname),
>                       file.onlyPath());
> -     tmpf.refresh();
> -     bool found = !tmpf.isFileEmpty();
> +     bool const found = (ret == 0);
>       LYXERR(Debug::LYXVC, "GIT control: " << (found ? "enabled" : 
> "disabled"));
>       return found;
>  }

I am sorry not to have a time to follow this thoroughly, but is this
cvs log / git log used only inh "register" case as initially discussed
or you want to use it on every file load?
Calling log could but pretty expensive operation for large archives.

Pavel
-- 
lyx-devel mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to