On 10/04/13 00:26, Nico Williams wrote:
>> But again, git ls-files seems WAY EASIER.
> 
> This will tell you if a file is tracked, not whether it has unstaged
> or uncommitted changes.

Ok, let me be sure of one thing: the usage scenario I got into, is one in which
one opens a file-name with LyX:

  lyx /path/to/name.lyx

then, in case the file-name does not exist on the local FS, LyX makes the 
following (LyXVC.cpp)

        call *::findFile(), to understand whether a file can be checked out

        if (foundRCS || foundCVS || foundSVN || foundGIT) {
                // PROMPT USER
                if (user agrees) {
                        if (foundRCS)
                                return RCS::retrieve(fn);
                        else if (foundCVS)
                                return CVS::retrieve(fn);
                        else if (foundSVN)
                                return SVN::retrieve(fn);
                        else
                                return GIT::retrieve(fn);
                }
        }

So, this is very simple, seems VC-independent, and prevents the user from 
creating new files that can already be checked out.

Does anyone see glitches in the behaviour, or thinks it should be changed or 
improved ?

AFAICS, Nico's request might imply a preference option for not even having the 
question bothering the user. Equivalently, enhancing the question dialog with a 
checkbox (assume always this answer from now on).

Considering a little refactoring, findFile() returns a FileName that doesn't 
seem very useful:

$ find . -name '*.cpp' -exec grep -Hn findFile {} \;
./src/LyXVC.cpp:50:     if (!RCS::findFile(fn).empty())
./src/LyXVC.cpp:52:     if (!CVS::findFile(fn).empty())
./src/LyXVC.cpp:54:     if (!SVN::findFile(fn).empty())
./src/LyXVC.cpp:56:     if (!GIT::findFile(fn).empty())
./src/LyXVC.cpp:66:     if (!(found_file = RCS::findFile(fn)).empty()) {
./src/LyXVC.cpp:71:     if (!(found_file = CVS::findFile(fn)).empty()) {
./src/LyXVC.cpp:76:     if (!(found_file = SVN::findFile(fn)).empty()) {
./src/LyXVC.cpp:81:     if (!(found_file = GIT::findFile(fn)).empty()) {
./src/LyXVC.cpp:97:     bool foundRCS = !RCS::findFile(fn).empty();
./src/LyXVC.cpp:98:     bool foundCVS = foundRCS ? false : 
!CVS::findFile(fn).empty();
./src/LyXVC.cpp:99:     bool foundSVN = (foundRCS || foundCVS) ? false : 
!SVN::findFile(fn).empty();
./src/LyXVC.cpp:100:    bool foundGIT = (foundRCS || foundCVS || foundSVN) ? 
false : !GIT::findFile(fn).empty();
./src/VCBackend.cpp:132:FileName const RCS::findFile(FileName const & file)
./src/VCBackend.cpp:524:FileName const CVS::findFile(FileName const & file)
./src/VCBackend.cpp:1151:FileName const SVN::findFile(FileName const & file)
./src/VCBackend.cpp:1821:FileName const GIT::findFile(FileName const & file)

So, what about turning that return value into a Boolean ? (I provide the fname 
as input, what fname would I expect as output ?)

        T.

Reply via email to