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());
 }

Reply via email to