Here are the patch I propose to apply. We could have gone a bit further and use QuoteName on log messages too, instead of the explicit "quoting".
Lars, still OK? JMarc
Index: src/ChangeLog =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v retrieving revision 1.1021.2.74 diff -u -p -r1.1021.2.74 ChangeLog --- src/ChangeLog 25 Mar 2005 15:35:48 -0000 1.1021.2.74 +++ src/ChangeLog 25 Mar 2005 16:06:47 -0000 @@ -1,3 +1,8 @@ +2005-03-25 Stephan Witt <[EMAIL PROTECTED]> + + * vc-backend.C: use QuoteName to protect file names wherever + necessary. + 2005-03-10 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> * lyxrc.C (setDefaults, read, output): add support for Index: src/vc-backend.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/vc-backend.C,v retrieving revision 1.36.2.3 diff -u -p -r1.36.2.3 vc-backend.C --- src/vc-backend.C 5 Jan 2005 15:53:17 -0000 1.36.2.3 +++ src/vc-backend.C 25 Mar 2005 16:06:47 -0000 @@ -94,8 +94,7 @@ string const RCS::find_file(string const void RCS::retrieve(string const & file) { lyxerr[Debug::LYXVC] << "LyXVC::RCS: retrieve.\n\t" << file << endl; - VCS::doVCCommand("co -q -r \"" - + file + '"', + VCS::doVCCommand("co -q -r " + QuoteName(file), string()); } @@ -168,9 +167,8 @@ void RCS::registrer(string const & msg) { string cmd = "ci -q -u -i -t-\""; cmd += msg; - cmd += "\" \""; - cmd += OnlyFilename(owner_->fileName()); - cmd += '"'; + cmd += "\" "; + cmd += QuoteName(OnlyFilename(owner_->fileName())); doVCCommand(cmd, owner_->filePath()); reload(); } @@ -178,8 +176,8 @@ void RCS::registrer(string const & msg) void RCS::checkIn(string const & msg) { - doVCCommand("ci -q -u -m\"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("ci -q -u -m\"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); reload(); } @@ -188,8 +186,7 @@ void RCS::checkIn(string const & msg) void RCS::checkOut() { owner_->markClean(); - doVCCommand("co -q -l \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("co -q -l " + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); reload(); } @@ -197,8 +194,8 @@ void RCS::checkOut() void RCS::revert() { - doVCCommand("co -f -u" + version() + " \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("co -f -u" + version() + " " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); // We ignore changes and just reload! owner_->markClean(); @@ -209,16 +206,16 @@ void RCS::revert() void RCS::undoLast() { lyxerr[Debug::LYXVC] << "LyXVC: undoLast" << endl; - doVCCommand("rcs -o" + version() + " \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("rcs -o" + version() + " " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } void RCS::getLog(string const & tmpf) { - doVCCommand("rlog \"" - + OnlyFilename(owner_->fileName()) + "\" > " + doVCCommand("rlog " + + QuoteName(OnlyFilename(owner_->fileName())) + " > " + tmpf, owner_->filePath()); } @@ -308,8 +305,8 @@ void CVS::scanMaster() void CVS::registrer(string const & msg) { - doVCCommand("cvs -q add -m \"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("cvs -q add -m \"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); reload(); } @@ -317,8 +314,8 @@ void CVS::registrer(string const & msg) void CVS::checkIn(string const & msg) { - doVCCommand("cvs -q commit -m \"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("cvs -q commit -m \"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); reload(); } @@ -335,9 +332,9 @@ void CVS::revert() { // Reverts to the version in CVS repository and // gets the updated version from the repository. - string const fil = OnlyFilename(owner_->fileName()); + string const fil = QuoteName(OnlyFilename(owner_->fileName())); - doVCCommand("rm -f \"" + fil + "\"; cvs update \"" + fil + '"', + doVCCommand("rm -f " + fil + "; cvs update " + fil, owner_->filePath()); owner_->markClean(); reload(); @@ -355,7 +352,7 @@ void CVS::undoLast() void CVS::getLog(string const & tmpf) { - doVCCommand("cvs log \"" - + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, + doVCCommand("cvs log " + + QuoteName(OnlyFilename(owner_->fileName())) + " > " + tmpf, owner_->filePath()); }
Index: src/ChangeLog =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v retrieving revision 1.2142 diff -u -p -r1.2142 ChangeLog --- src/ChangeLog 25 Mar 2005 15:27:27 -0000 1.2142 +++ src/ChangeLog 25 Mar 2005 16:09:09 -0000 @@ -1,3 +1,8 @@ +2005-03-25 Stephan Witt <[EMAIL PROTECTED]> + + * vc-backend.C: use QuoteName to protect file names wherever + necessary. + 2005-03-14 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> * lyxrc.C (setDefaults, read, output, getDescription): add support Index: src/vc-backend.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/vc-backend.C,v retrieving revision 1.50 diff -u -p -r1.50 vc-backend.C --- src/vc-backend.C 31 Jan 2005 10:42:21 -0000 1.50 +++ src/vc-backend.C 25 Mar 2005 16:09:09 -0000 @@ -31,6 +31,7 @@ using lyx::support::contains; using lyx::support::OnlyFilename; using lyx::support::OnlyPath; using lyx::support::Path; +using lyx::support::QuoteName; using lyx::support::rtrim; using lyx::support::split; using lyx::support::Systemcall; @@ -99,8 +100,7 @@ string const RCS::find_file(string const void RCS::retrieve(string const & file) { lyxerr[Debug::LYXVC] << "LyXVC::RCS: retrieve.\n\t" << file << endl; - VCS::doVCCommand("co -q -r \"" - + file + '"', + VCS::doVCCommand("co -q -r " + QuoteName(file), string()); } @@ -173,17 +173,16 @@ void RCS::registrer(string const & msg) { string cmd = "ci -q -u -i -t-\""; cmd += msg; - cmd += "\" \""; - cmd += OnlyFilename(owner_->fileName()); - cmd += '"'; + cmd += "\" "; + cmd += QuoteName(OnlyFilename(owner_->fileName())); doVCCommand(cmd, owner_->filePath()); } void RCS::checkIn(string const & msg) { - doVCCommand("ci -q -u -m\"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("ci -q -u -m\"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } @@ -191,16 +190,15 @@ void RCS::checkIn(string const & msg) void RCS::checkOut() { owner_->markClean(); - doVCCommand("co -q -l \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("co -q -l " + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } void RCS::revert() { - doVCCommand("co -f -u" + version() + " \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("co -f -u" + version() + " " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); // We ignore changes and just reload! owner_->markClean(); @@ -210,17 +208,17 @@ void RCS::revert() void RCS::undoLast() { lyxerr[Debug::LYXVC] << "LyXVC: undoLast" << endl; - doVCCommand("rcs -o" + version() + " \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("rcs -o" + version() + " " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } void RCS::getLog(string const & tmpf) { - doVCCommand("rlog \"" - + OnlyFilename(owner_->fileName()) + "\" > " - + tmpf, owner_->filePath()); + doVCCommand("rlog " + QuoteName(OnlyFilename(owner_->fileName())) + + " > " + tmpf, + owner_->filePath()); } @@ -304,16 +302,16 @@ void CVS::scanMaster() void CVS::registrer(string const & msg) { - doVCCommand("cvs -q add -m \"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("cvs -q add -m \"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } void CVS::checkIn(string const & msg) { - doVCCommand("cvs -q commit -m \"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + '"', + doVCCommand("cvs -q commit -m \"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } @@ -329,9 +327,9 @@ void CVS::revert() { // Reverts to the version in CVS repository and // gets the updated version from the repository. - string const fil = OnlyFilename(owner_->fileName()); + string const fil = QuoteName(OnlyFilename(owner_->fileName())); - doVCCommand("rm -f \"" + fil + "\"; cvs update \"" + fil + '"', + doVCCommand("rm -f " + fil + "; cvs update " + fil, owner_->filePath()); owner_->markClean(); } @@ -348,7 +346,7 @@ void CVS::undoLast() void CVS::getLog(string const & tmpf) { - doVCCommand("cvs log \"" - + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, + doVCCommand("cvs log " + QuoteName(OnlyFilename(owner_->fileName())) + + " > " + tmpf, owner_->filePath()); }