From: <dr...@us...> - 2003-12-05 05:38:02
|
Update of /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses In directory sc8-pr-cvs1:/tmp/cvs-serv6109/src/ICSharpCode/SharpCvsLib/Responses Modified Files: CheckedInResponse.cs ClearStaticDirectoryResponse.cs CreatedResponse.cs ModTimeResponse.cs ModuleExpansionResponse.cs OkResponse.cs ResponseFactory.cs SetStaticDirectoryResponse.cs SetStickyResponse.cs UpdatedResponse.cs Log Message: Various changes to get the AddCommand working. Reworked the filesystem to check for duplicates and filter out problems with path. Also added exception if attempt is made to add files outside of the working path. Added a CvsRootParseException, various modifications to fix the formatting from astyle. Index: CheckedInResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/CheckedInResponse.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** CheckedInResponse.cs 5 Nov 2003 08:07:46 -0000 1.6 --- CheckedInResponse.cs 5 Dec 2003 05:27:53 -0000 1.7 *************** *** 34,37 **** --- 34,38 ---- using System; + using ICSharpCode.SharpCvsLib.Misc; using ICSharpCode.SharpCvsLib.FileSystem; *************** *** 39,77 **** using ICSharpCode.SharpCvsLib.Streams; namespace ICSharpCode.SharpCvsLib.Responses { - /// <summary> - /// Handle a checked in response. - /// </summary> - public class CheckedInResponse : IResponse - { /// <summary> ! /// Process a checked in response. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! string localPath = cvsStream.ReadLine(); ! string repositoryPath = cvsStream.ReadLine(); ! string entryLine = cvsStream.ReadLine(); ! string fileName = services.ConvertPath(localPath, repositoryPath); ! Entry entry = new Entry(fileName, entryLine); ! // TODO: Determine if this is needed or not. ! //services.SetEntry(fileName, entry); ! Manager manager = new Manager (); ! manager.Add (entry); ! } ! /// <summary> ! /// Return true if this response cancels the transaction ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 40,85 ---- using ICSharpCode.SharpCvsLib.Streams; + using log4net; + namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Handle a checked in response. /// </summary> ! public class CheckedInResponse : IResponse { ! private readonly ILog LOGGER = LogManager.GetLogger(typeof (CheckedInResponse)); ! /// <summary> ! /// Process a checked in response. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! string localPath = cvsStream.ReadLine(); ! string repositoryPath = cvsStream.ReadLine(); ! string entryLine = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, ! repositoryPath); ! //string fileName = services.ConvertPath(localPath, repositoryPath); ! string fileName = orgPath.LocalPathAndFilename; ! Entry entry = new Entry(orgPath.LocalPath, entryLine); ! LOGGER.Debug ("CheckedInResponse adding entry=[" + entry + "]"); ! // TODO: Determine if this is needed or not. ! //services.SetEntry(fileName, entry); ! Manager manager = new Manager (services.Repository.WorkingPath); ! manager.Add (entry); ! } ! ! /// <summary> ! /// Return true if this response cancels the transaction ! /// </summary> ! public bool IsTerminating { ! get { ! return false; ! } } } } Index: ClearStaticDirectoryResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/ClearStaticDirectoryResponse.cs,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** ClearStaticDirectoryResponse.cs 5 Nov 2003 08:07:47 -0000 1.10 --- ClearStaticDirectoryResponse.cs 5 Dec 2003 05:27:53 -0000 1.11 *************** *** 44,108 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Handle a clear static directory response. - /// - /// from: http://www.loria.fr/~molli/cvs/doc/cvsclient_5.html - /// Clear-static-directory pathname \n - /// - /// This instructs the client to un-set the Entries.Static flag, - /// which it should then send back to the server in a Static-directory - /// request whenever the directory is operated on. pathname ends in a - /// slash; its purpose is to specify a directory, not a file within a - /// directory. - /// - /// </summary> - public class ClearStaticDirectoryResponse : IResponse - { - private readonly ILog LOGGER = - LogManager.GetLogger (typeof (ClearStaticDirectoryResponse)); /// <summary> ! /// Process a clear static directory response. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! string localPath = cvsStream.ReadLine(); ! string reposPath = cvsStream.ReadLine(); ! // TODO: Remove this code, cvs file creation is moving all into the manager class. ! // PathTranslator pathTranslator = ! // new PathTranslator (services.Repository, ! // reposPath); ! if (LOGGER.IsDebugEnabled) { ! StringBuilder msg = new StringBuilder (); ! msg.Append ("\nClear static directory response. "); ! msg.Append ("\n\tlocalPath=[").Append (localPath).Append ("]"); ! msg.Append ("\n\treposPath=[").Append (reposPath).Append ("]"); ! // msg.Append ("\n\tpathTranslator=[").Append (pathTranslator).Append ("]"); ! LOGGER.Debug (msg); ! } ! Manager manager = new Manager (); ! // Factory factory = new Factory (); ! // ICvsFile repository = factory.CreateCvsObject (pathTranslator.LocalPath, ! // Factory.FileType.Repository, ! // pathTranslator.RelativePath); ! // ! // ICvsFile root = factory.CreateCvsObject (pathTranslator.LocalPath, ! // Factory.FileType.Root, ! // services.Repository.CvsRoot.ToString ()); ! manager.AddRepository (services.Repository, localPath, reposPath); ! manager.AddRoot (services.Repository, localPath, reposPath); ! } ! /// <summary> ! /// Return true if this response cancels the transaction ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 44,101 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Handle a clear static directory response. ! /// ! /// from: http://www.loria.fr/~molli/cvs/doc/cvsclient_5.html ! /// Clear-static-directory pathname \n ! /// ! /// This instructs the client to un-set the Entries.Static flag, ! /// which it should then send back to the server in a Static-directory ! /// request whenever the directory is operated on. pathname ends in a ! /// slash; its purpose is to specify a directory, not a file within a ! /// directory. ! /// /// </summary> ! public class ClearStaticDirectoryResponse : IResponse { ! private readonly ILog LOGGER = ! LogManager.GetLogger (typeof (ClearStaticDirectoryResponse)); ! /// <summary> ! /// Process a clear static directory response. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! string localPath = cvsStream.ReadLine(); ! string reposPath = cvsStream.ReadLine(); ! Manager manager = new Manager (services.Repository.WorkingPath); ! manager.AddRepository (services.Repository, localPath, reposPath); ! manager.AddRoot (services.Repository, localPath, reposPath); ! PathTranslator pathTranslator = new PathTranslator (services.Repository, reposPath); ! Entry entry = Entry.CreateEntry(pathTranslator.LocalPathAndFilename); ! // the root module directory does not get a cvs Entries line. ! if (!services.Repository.WorkingPath.Equals(pathTranslator.LocalPathAndFilename)) { ! manager.AddEntry(services.Repository, localPath, reposPath, entry.FileContents); ! } ! ! if (LOGGER.IsDebugEnabled) { ! StringBuilder msg = new StringBuilder (); ! msg.Append ("\n Clear static directory response. "); ! msg.Append ("\n\t localPath=[").Append (localPath).Append ("]"); ! msg.Append ("\n\t reposPath=[").Append (reposPath).Append ("]"); ! msg.Append ("\n\t entry=[").Append(entry).Append("]"); ! msg.Append("\n\t entry.FullPath=[").Append(entry.FullPath).Append("]"); ! msg.Append("\n\t entry.Path=[").Append(entry.Path).Append("]"); ! LOGGER.Debug (msg); ! } ! } ! ! /// <summary> ! /// Return true if this response cancels the transaction ! /// </summary> ! public bool IsTerminating { ! get {return false;} } } } Index: CreatedResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/CreatedResponse.cs,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** CreatedResponse.cs 5 Nov 2003 08:07:47 -0000 1.11 --- CreatedResponse.cs 5 Dec 2003 05:27:53 -0000 1.12 *************** *** 46,159 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Command: - /// Created pathname \n - /// - /// This is just like Updated and takes the same additional - /// data, but is used only if no Entry, Modified, or Unchanged - /// request has been sent for the file in question. The - /// distinction between Created and Update-existing is so that - /// the client can give an error message in several cases: - /// (1) there is a file in the working directory, - /// but not one for which Entry, Modified, or Unchanged - /// was sent (for example, a file which was ignored, - /// or a file for which Questionable was sent), - /// (2) there is a file in the working directory whose name - /// differs from the one mentioned in Created in ways that - /// the client is unable to use to distinguish files. - /// For example, the client is case-insensitive and the names - /// differ only in case. - /// </summary> - public class CreatedResponse : IResponse - { - private readonly ILog LOGGER = - LogManager.GetLogger (typeof (CreatedResponse)); - /// <summary> ! /// Process a created file response. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! Manager manager = new Manager (); ! String localPath = cvsStream.ReadLine(); ! String reposPath = cvsStream.ReadLine (); ! String entry = cvsStream.ReadLine(); ! String flags = cvsStream.ReadLine(); ! String sizeStr = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, reposPath); ! String localPathAndFilename = orgPath.LocalPathAndFilename; ! String directory = orgPath.LocalPath; ! bool compress = sizeStr[0] == 'z'; ! if (LOGGER.IsDebugEnabled) { ! String msg = "In created response process. " + ! "orgPath=[" + orgPath.ToString () + "]" + ! "localPathAndFilename=[" + localPathAndFilename + "]" + ! "directory=[" + directory + "]" + ! "entry=[" + entry + "]" + ! "flags=[" + flags + "]" + ! "sizestr=[" + sizeStr + "]"; ! LOGGER.Debug (msg); ! } ! if (compress) { ! sizeStr = sizeStr.Substring(1); ! } ! int size = Int32.Parse(sizeStr); ! if (!Directory.Exists(orgPath.LocalPath)) { ! Directory.CreateDirectory(orgPath.LocalPath); ! } - if (services.NextFile != null && services.NextFile.Length > 0) { - localPathAndFilename = services.NextFile; - services.NextFile = null; - } ! Entry e = manager.AddEntry (services.Repository, ! localPath, ! reposPath, ! entry); ! if (e.IsBinaryFile) { ! services.UncompressedFileHandler.ReceiveBinaryFile(cvsStream, ! localPathAndFilename, ! size); ! } else { ! services.UncompressedFileHandler.ReceiveTextFile(cvsStream, ! localPathAndFilename, ! size); ! } ! e.Date = services.NextFileDate; ! services.NextFileDate = null; ! manager.SetFileTimeStamp (localPathAndFilename, e.TimeStamp); ! UpdateMessage message = new UpdateMessage (); ! message.Module = services.Repository.WorkingDirectoryName; ! message.Repository = orgPath.RelativePath; ! message.Filename = e.Name; ! services.SendMessage (message.Message); ! } ! /// <summary> ! /// Return true if this response cancels the transaction ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 46,152 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Command: ! /// Created pathname \n ! /// ! /// This is just like Updated and takes the same additional ! /// data, but is used only if no Entry, Modified, or Unchanged ! /// request has been sent for the file in question. The ! /// distinction between Created and Update-existing is so that ! /// the client can give an error message in several cases: ! /// (1) there is a file in the working directory, ! /// but not one for which Entry, Modified, or Unchanged ! /// was sent (for example, a file which was ignored, ! /// or a file for which Questionable was sent), ! /// (2) there is a file in the working directory whose name ! /// differs from the one mentioned in Created in ways that ! /// the client is unable to use to distinguish files. ! /// For example, the client is case-insensitive and the names ! /// differ only in case. /// </summary> ! public class CreatedResponse : IResponse { ! private readonly ILog LOGGER = ! LogManager.GetLogger (typeof (CreatedResponse)); ! /// <summary> ! /// Process a created file response. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! Manager manager = new Manager (services.Repository.WorkingPath); ! String localPath = cvsStream.ReadLine(); ! String reposPath = cvsStream.ReadLine (); ! String entry = cvsStream.ReadLine(); ! String flags = cvsStream.ReadLine(); ! String sizeStr = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, reposPath); ! String localPathAndFilename = orgPath.LocalPathAndFilename; ! String directory = orgPath.LocalPath; ! bool compress = sizeStr[0] == 'z'; ! if (LOGGER.IsDebugEnabled) { ! String msg = "In created response process. " + ! "orgPath=[" + orgPath.ToString () + "]" + ! "localPathAndFilename=[" + localPathAndFilename + "]" + ! "directory=[" + directory + "]" + ! "entry=[" + entry + "]" + ! "flags=[" + flags + "]" + ! "sizestr=[" + sizeStr + "]"; ! LOGGER.Debug (msg); ! } ! if (compress) { ! sizeStr = sizeStr.Substring(1); ! } ! int size = Int32.Parse(sizeStr); + if (!Directory.Exists(orgPath.LocalPath)) { + Directory.CreateDirectory(orgPath.LocalPath); + } ! if (services.NextFile != null && services.NextFile.Length > 0) { ! localPathAndFilename = services.NextFile; ! services.NextFile = null; ! } ! Entry e = new Entry(orgPath.LocalPath, entry); ! ! if (e.IsBinaryFile) { ! services.UncompressedFileHandler.ReceiveBinaryFile(cvsStream, ! localPathAndFilename, ! size); ! } else { ! services.UncompressedFileHandler.ReceiveTextFile(cvsStream, ! localPathAndFilename, ! size); ! } ! e.Date = services.NextFileDate; ! services.NextFileDate = null; ! manager.Add(e); ! manager.SetFileTimeStamp (localPathAndFilename, e.TimeStamp); ! UpdateMessage message = new UpdateMessage (); ! message.Module = services.Repository.WorkingDirectoryName; ! message.Repository = orgPath.RelativePath; ! message.Filename = e.Name; ! services.SendMessage (message.Message); ! } ! /// <summary> ! /// Return true if this response cancels the transaction ! /// </summary> ! public bool IsTerminating { ! get {return false;} } } } Index: ModTimeResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/ModTimeResponse.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ModTimeResponse.cs 5 Nov 2003 08:07:47 -0000 1.6 --- ModTimeResponse.cs 5 Dec 2003 05:27:53 -0000 1.7 *************** *** 34,63 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Handles a response from the server containing the modified - /// time. - /// </summary> - public class ModTimeResponse : IResponse - { /// <summary> ! /// Process the server response. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! string date = cvsStream.ReadLine(); ! services.NextFileDate = date; ! } ! /// <summary> ! /// Response terminates transaction: <code>false</code>. ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 34,58 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Handles a response from the server containing the modified ! /// time. /// </summary> ! public class ModTimeResponse : IResponse { ! /// <summary> ! /// Process the server response. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! string date = cvsStream.ReadLine(); ! services.NextFileDate = date; ! } ! /// <summary> ! /// Response terminates transaction: <code>false</code>. ! /// </summary> ! public bool IsTerminating { ! get {return false;} } } } Index: ModuleExpansionResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/ModuleExpansionResponse.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ModuleExpansionResponse.cs 5 Nov 2003 08:07:47 -0000 1.4 --- ModuleExpansionResponse.cs 5 Dec 2003 05:27:53 -0000 1.5 *************** *** 38,72 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// TODO: Find documentation on this. - /// </summary> - public class ModuleExpansionResponse : IResponse - { - private readonly ILog LOGGER = - LogManager.GetLogger (typeof (ModuleExpansionResponse)); - /// <summary> ! /// Process the module expansion response. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! string which = cvsStream.ReadLine(); ! if (LOGGER.IsDebugEnabled) ! { ! LOGGER.Debug("module expansion : " + which); } - } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 38,73 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Module-expansion pathname \n ! /// Return a file or directory which is included in a particular module. ! /// pathname is relative to cvsroot, unlike most pathnames in responses. ! /// pathname should be used to look and see whether some or all of the ! /// module exists on the client side; it is not necessarily suitable for ! /// passing as an argument to a co request (for example, if the modules ! /// file contains the `-d' option, it will be the directory specified ! /// with `-d', not the name of the module). /// </summary> ! public class ModuleExpansionResponse : IResponse { ! private readonly ILog LOGGER = ! LogManager.GetLogger (typeof (ModuleExpansionResponse)); ! ! /// <summary> ! /// Process the module expansion response. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! string which = cvsStream.ReadLine(); ! if (LOGGER.IsDebugEnabled) { ! LOGGER.Debug("module expansion : " + which); ! } } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get {return false;} } } } Index: OkResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/OkResponse.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** OkResponse.cs 5 Nov 2003 08:07:47 -0000 1.4 --- OkResponse.cs 5 Dec 2003 05:27:53 -0000 1.5 *************** *** 34,61 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Handle the cvs server "Ok" response. - /// </summary> - public class OkResponse : IResponse - { /// <summary> ! /// All good response /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! // TODO: Do something useful with this stream. ! } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get { ! return true; } } - } } --- 34,59 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// ok \n ! /// The command completed successfully. /// </summary> ! public class OkResponse : IResponse { ! /// <summary> ! /// Process an ok response from the server. ! /// ! /// TODO: Do something useful with this response. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! // TODO: Do something useful with this stream. ! } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get {return true;} } } } Index: ResponseFactory.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/ResponseFactory.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ResponseFactory.cs 5 Nov 2003 08:07:47 -0000 1.3 --- ResponseFactory.cs 5 Dec 2003 05:27:53 -0000 1.4 *************** *** 31,83 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Factory method for instanciating the correct response handler - /// for the cvs response. - /// </summary> - public sealed class ResponseFactory - { /// <summary> ! /// Create the response object based on the response string. /// </summary> ! /// <param name="responseStr"></param> ! /// <returns></returns> ! public static IResponse CreateResponse(string responseStr) ! { ! switch (responseStr) { ! case "M": ! return new MessageResponse(); ! case "E": ! return new ErrorMessageResponse(); ! case "MT": ! return new MessageTaggedResponse(); ! case "Checked-in": ! return new CheckedInResponse(); ! case "Mod-time": ! return new ModTimeResponse(); ! case "ok": ! return new OkResponse(); ! case "error": ! return new ErrorResponse(); ! case "Updated": ! return new UpdatedResponse(); ! case "Created": ! return new CreatedResponse(); ! case "Module-expansion": ! return new ModuleExpansionResponse(); ! case "Clear-sticky": ! return new ClearStickyResponse(); ! case "Set-static-directory": ! return new SetStaticDirectoryResponse(); ! case "Clear-static-directory": ! return new ClearStaticDirectoryResponse(); ! case "Valid-requests": ! return new ValidRequestsResponse(); ! case "Set-sticky": ! return new SetStickyResponse (); ! default: ! return null; } } - } } --- 31,80 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Factory method for instanciating the correct response handler ! /// for the cvs response. /// </summary> ! public sealed class ResponseFactory { ! /// <summary> ! /// Create the response object based on the response string. ! /// </summary> ! /// <param name="responseStr"></param> ! /// <returns></returns> ! public static IResponse CreateResponse(string responseStr) { ! switch (responseStr) { ! case "M": ! return new MessageResponse(); ! case "E": ! return new ErrorMessageResponse(); ! case "MT": ! return new MessageTaggedResponse(); ! case "Checked-in": ! return new CheckedInResponse(); ! case "Mod-time": ! return new ModTimeResponse(); ! case "ok": ! return new OkResponse(); ! case "error": ! return new ErrorResponse(); ! case "Updated": ! return new UpdatedResponse(); ! case "Created": ! return new CreatedResponse(); ! case "Module-expansion": ! return new ModuleExpansionResponse(); ! case "Clear-sticky": ! return new ClearStickyResponse(); ! case "Set-static-directory": ! return new SetStaticDirectoryResponse(); ! case "Clear-static-directory": ! return new ClearStaticDirectoryResponse(); ! case "Valid-requests": ! return new ValidRequestsResponse(); ! case "Set-sticky": ! return new SetStickyResponse (); ! default: ! return null; ! } } } } Index: SetStaticDirectoryResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/SetStaticDirectoryResponse.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SetStaticDirectoryResponse.cs 5 Nov 2003 08:07:47 -0000 1.6 --- SetStaticDirectoryResponse.cs 5 Dec 2003 05:27:53 -0000 1.7 *************** *** 42,100 **** namespace ICSharpCode.SharpCvsLib.Responses { - /// <summary> - /// "Set-static-directory pathname \n" - /// - /// This instructs the client to set the Entries.Static flag, - /// which it should then send back to the server in a - /// Static-directory request whenever the directory is operated on. - /// Pathname ends in a slash; its purpose is to specify a directory, - /// not a file within a directory. - /// - /// </summary> - public class SetStaticDirectoryResponse : IResponse - { - private ILog LOGGER = - LogManager.GetLogger (typeof (SetStaticDirectoryResponse)); - /// <summary> ! /// Process the response stream. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! string localPath = cvsStream.ReadLine(); ! string repositoryPath = cvsStream.ReadLine(); ! if (LOGGER.IsDebugEnabled) { ! StringBuilder msg = new StringBuilder (); ! msg.Append ("localPath=[").Append (localPath).Append ("]"); ! msg.Append ("repositoryPath=[").Append (repositoryPath).Append ("]"); ! LOGGER.Debug (msg); ! } ! PathTranslator pathTranslator = ! new PathTranslator (services.Repository, ! repositoryPath); ! if (LOGGER.IsDebugEnabled) { ! LOGGER.Debug (pathTranslator.ToString ()); ! } ! LOGGER.Debug ("directory exitsts=[" + Directory.Exists (pathTranslator.LocalPath) + "]"); ! if (!Directory.Exists (pathTranslator.LocalPath)) { ! LOGGER.Debug ("Creating directory=[" + pathTranslator.LocalPath + "]"); ! if (!(pathTranslator.LocalPath == null && pathTranslator.LocalPath == String.Empty)) { ! Directory.CreateDirectory (pathTranslator.LocalPath); } } - // TODO : make something useful with this request - } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 42,96 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// "Set-static-directory pathname \n" ! /// ! /// This instructs the client to set the Entries.Static flag, ! /// which it should then send back to the server in a ! /// Static-directory request whenever the directory is operated on. ! /// Pathname ends in a slash; its purpose is to specify a directory, ! /// not a file within a directory. ! /// /// </summary> ! public class SetStaticDirectoryResponse : IResponse { ! private ILog LOGGER = ! LogManager.GetLogger (typeof (SetStaticDirectoryResponse)); ! /// <summary> ! /// Process the response stream. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! string localPath = cvsStream.ReadLine(); ! string repositoryPath = cvsStream.ReadLine(); ! ! if (LOGGER.IsDebugEnabled) { ! StringBuilder msg = new StringBuilder (); ! msg.Append ("localPath=[").Append (localPath).Append ("]"); ! msg.Append ("repositoryPath=[").Append (repositoryPath).Append ("]"); ! LOGGER.Debug (msg); ! } ! PathTranslator pathTranslator = ! new PathTranslator (services.Repository, ! repositoryPath); ! if (LOGGER.IsDebugEnabled) { ! LOGGER.Debug (pathTranslator.ToString ()); ! } ! LOGGER.Debug ("directory exitsts=[" + Directory.Exists (pathTranslator.LocalPath) + "]"); ! if (!Directory.Exists (pathTranslator.LocalPath)) { ! LOGGER.Debug ("Creating directory=[" + pathTranslator.LocalPath + "]"); ! if (!(pathTranslator.LocalPath == null && pathTranslator.LocalPath == String.Empty)) { ! Directory.CreateDirectory (pathTranslator.LocalPath); ! } } + // TODO : make something useful with this request } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get {return false;} } } } Index: SetStickyResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/SetStickyResponse.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SetStickyResponse.cs 5 Nov 2003 08:07:47 -0000 1.3 --- SetStickyResponse.cs 5 Dec 2003 05:27:53 -0000 1.4 *************** *** 40,95 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Set-sticky pathname \n - /// Additional data: tagspec \n. Tell the client to set a sticky tag - /// or date, which should be supplied with the Sticky request for future - /// operations. pathname ends in a slash; its purpose is to specify a - /// directory, not a file within a directory. The client should store - /// tagspec and pass it back to the server as-is, to allow for future - /// expansion. The first character of tagspec is `T' for a tag, `D' for - /// a date, or something else for future expansion. The remainder of - /// tagspec contains the actual tag or date. - /// </summary> - public class SetStickyResponse : IResponse { - - private ILog LOGGER = - LogManager.GetLogger (typeof (SetStickyResponse)); - /// <summary> ! /// Process the response stream. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! string localPath = cvsStream.ReadLine(); ! string repositoryPath = cvsStream.ReadLine(); ! string stickyTag = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, repositoryPath); ! string localPathAndFilename = orgPath.LocalPathAndFilename; ! string directory = orgPath.LocalPath; ! if (LOGGER.IsDebugEnabled) { ! } ! Tag tag = new Tag (directory, stickyTag); ! Manager manager = new Manager (); ! manager.Add (tag); ! } - /// <summary> - /// Indicator stating whether the response is terminating or not. - /// </summary> - public bool IsTerminating { - get { - return false; } - } - } } --- 40,87 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Set-sticky pathname \n ! /// Additional data: tagspec \n. Tell the client to set a sticky tag ! /// or date, which should be supplied with the Sticky request for future ! /// operations. pathname ends in a slash; its purpose is to specify a ! /// directory, not a file within a directory. The client should store ! /// tagspec and pass it back to the server as-is, to allow for future ! /// expansion. The first character of tagspec is `T' for a tag, `D' for ! /// a date, or something else for future expansion. The remainder of ! /// tagspec contains the actual tag or date. /// </summary> ! public class SetStickyResponse : IResponse { ! private ILog LOGGER = ! LogManager.GetLogger (typeof (SetStickyResponse)); ! /// <summary> ! /// Process the response stream. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! string localPath = cvsStream.ReadLine(); ! string repositoryPath = cvsStream.ReadLine(); ! string stickyTag = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, repositoryPath); ! string localPathAndFilename = orgPath.LocalPathAndFilename; ! string directory = orgPath.LocalPath; ! Manager manager = ! new Manager (services.Repository.WorkingPath); ! manager.AddTag (services.Repository, localPath, repositoryPath, stickyTag); } + /// <summary> + /// Indicator stating whether the response is terminating or not. + /// </summary> + public bool IsTerminating { + get {return false;} + } + } } Index: UpdatedResponse.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Responses/UpdatedResponse.cs,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** UpdatedResponse.cs 5 Nov 2003 08:07:47 -0000 1.10 --- UpdatedResponse.cs 5 Dec 2003 05:27:53 -0000 1.11 *************** *** 46,176 **** namespace ICSharpCode.SharpCvsLib.Responses { - - /// <summary> - /// Response from cvs server after update command. - /// - /// Updated pathname \n - /// Additional data: New Entries line, \n, mode, \n, file transmission. - /// A new copy of the file is enclosed. This is used for a new revision - /// of an existing file, or for a new file, or for any other case in which - /// the local (client-side) copy of the file needs to be updated, and after - /// being updated it will be up to date. If any directory in pathname does - /// not exist, create it. This response is not used if Created and - /// Update-existing are supported. - /// - /// Created pathname \n - /// This is just like Updated and takes the same additional data, but is - /// used only if no Entry, Modified, or Unchanged request has been sent - /// for the file in question. The distinction between Created and - /// Update-existing is so that the client can give an error message in - /// several cases: - /// (1) There is a file in the working directory, but not one for which - /// Entry, Modified, or Unchanged was sent (for example, a file - /// which was ignored, or a file for which Questionable was sent) - /// (2) There is a file in the working directory whose name differs - /// from the one mentioned in Created in ways that the client is - /// unable to use to distinguish files. For example, the client - /// is case-insensitive and the names differ only in case. - /// - /// Update-existing pathname \n - /// This is just like Updated and takes the same additional data, but - /// is used only if a Entry, Modified, or Unchanged request has been - /// sent for the file in question. This response, or Merged, indicates - /// that the server has determined that it is OK to overwrite the - /// previous contents of the file specified by pathname. Provided that - /// the client has correctly sent Modified or Is-modified requests - /// for a modified file, and the file was not modified while CVS was - /// running, the server can ensure that a user's modifications are - /// not lost. - /// - /// </summary> - public class UpdatedResponse : IResponse - { - private readonly ILog LOGGER = - LogManager.GetLogger (typeof (UpdatedResponse)); - /// <summary> ! /// Process the response from the cvs server. /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) { ! Manager manager = new Manager (); ! string localPath = cvsStream.ReadLine(); ! string reposPath = cvsStream.ReadLine (); ! string entry = cvsStream.ReadLine(); ! string flags = cvsStream.ReadLine(); ! string sizeStr = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, ! reposPath); ! string localPathAndFilename = orgPath.LocalPathAndFilename; ! string directory = orgPath.LocalPath; ! bool compress = sizeStr[0] == 'z'; ! if (LOGGER.IsDebugEnabled) { ! StringBuilder msg = new StringBuilder (); ! msg.Append ("reposPath=[").Append (reposPath).Append ("]"); ! msg.Append ("entry=[").Append (entry).Append ("]"); ! msg.Append ("flags=[").Append (flags).Append ("]"); ! msg.Append ("sizestr=[").Append (sizeStr).Append ("]"); ! LOGGER.Debug (msg); ! } ! if (compress) { ! sizeStr = sizeStr.Substring(1); ! } ! int size = Int32.Parse(sizeStr); ! if (!Directory.Exists(orgPath.LocalPath)) { ! Directory.CreateDirectory(orgPath.LocalPath); ! } ! if (services.NextFile != null && services.NextFile.Length > 0) { ! localPathAndFilename = services.NextFile; ! services.NextFile = null; ! } ! Entry e = manager.AddEntry (services.Repository, ! localPath, ! reposPath, ! entry); ! if (e.IsBinaryFile) { ! services.UncompressedFileHandler.ReceiveBinaryFile(cvsStream, ! localPathAndFilename, ! size); ! } else { ! services.UncompressedFileHandler.ReceiveTextFile(cvsStream, ! localPathAndFilename, ! size); ! } ! e.Date = services.NextFileDate; ! services.NextFileDate = null; ! manager.SetFileTimeStamp (localPathAndFilename, e.TimeStamp); ! UpdateMessage message = new UpdateMessage (); ! message.Module = services.Repository.WorkingDirectoryName; ! message.Repository = orgPath.RelativePath; ! message.Filename = e.Name; ! services.SendMessage (message.Message); ! } ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get { ! return false; } } - } } --- 46,173 ---- namespace ICSharpCode.SharpCvsLib.Responses { /// <summary> ! /// Response from cvs server after update command. ! /// ! /// Updated pathname \n ! /// Additional data: New Entries line, \n, mode, \n, file transmission. ! /// A new copy of the file is enclosed. This is used for a new revision ! /// of an existing file, or for a new file, or for any other case in which ! /// the local (client-side) copy of the file needs to be updated, and after ! /// being updated it will be up to date. If any directory in pathname does ! /// not exist, create it. This response is not used if Created and ! /// Update-existing are supported. ! /// ! /// Created pathname \n ! /// This is just like Updated and takes the same additional data, but is ! /// used only if no Entry, Modified, or Unchanged request has been sent ! /// for the file in question. The distinction between Created and ! /// Update-existing is so that the client can give an error message in ! /// several cases: ! /// (1) There is a file in the working directory, but not one for which ! /// Entry, Modified, or Unchanged was sent (for example, a file ! /// which was ignored, or a file for which Questionable was sent) ! /// (2) There is a file in the working directory whose name differs ! /// from the one mentioned in Created in ways that the client is ! /// unable to use to distinguish files. For example, the client ! /// is case-insensitive and the names differ only in case. ! /// ! /// Update-existing pathname \n ! /// This is just like Updated and takes the same additional data, but ! /// is used only if a Entry, Modified, or Unchanged request has been ! /// sent for the file in question. This response, or Merged, indicates ! /// that the server has determined that it is OK to overwrite the ! /// previous contents of the file specified by pathname. Provided that ! /// the client has correctly sent Modified or Is-modified requests ! /// for a modified file, and the file was not modified while CVS was ! /// running, the server can ensure that a user's modifications are ! /// not lost. ! /// /// </summary> ! public class UpdatedResponse : IResponse { ! private readonly ILog LOGGER = ! LogManager.GetLogger (typeof (UpdatedResponse)); ! /// <summary> ! /// Process the response from the cvs server. ! /// </summary> ! /// <param name="cvsStream"></param> ! /// <param name="services"></param> ! public void Process(CvsStream cvsStream, IResponseServices services) ! { ! Manager manager = new Manager (services.Repository.WorkingPath); ! string localPath = cvsStream.ReadLine(); ! string reposPath = cvsStream.ReadLine (); ! string entry = cvsStream.ReadLine(); ! string flags = cvsStream.ReadLine(); ! string sizeStr = cvsStream.ReadLine(); ! PathTranslator orgPath = ! new PathTranslator (services.Repository, ! reposPath); ! string localPathAndFilename = orgPath.LocalPathAndFilename; ! string directory = orgPath.LocalPath; ! bool compress = sizeStr[0] == 'z'; ! if (LOGGER.IsDebugEnabled) { ! StringBuilder msg = new StringBuilder (); ! msg.Append ("reposPath=[").Append (reposPath).Append ("]"); ! msg.Append ("entry=[").Append (entry).Append ("]"); ! msg.Append ("flags=[").Append (flags).Append ("]"); ! msg.Append ("sizestr=[").Append (sizeStr).Append ("]"); ! LOGGER.Debug (msg); ! } ! if (compress) { ! sizeStr = sizeStr.Substring(1); ! } ! int size = Int32.Parse(sizeStr); ! if (!Directory.Exists(orgPath.LocalPath)) { ! Directory.CreateDirectory(orgPath.LocalPath); ! } ! if (services.NextFile != null && services.NextFile.Length > 0) { ! localPathAndFilename = services.NextFile; ! services.NextFile = null; ! } ! Entry e = new Entry(orgPath.LocalPath, entry); ! if (e.IsBinaryFile) { ! services.UncompressedFileHandler.ReceiveBinaryFile(cvsStream, ! localPathAndFilename, ! size); ! } else { ! services.UncompressedFileHandler.ReceiveTextFile(cvsStream, ! localPathAndFilename, ! size); ! } ! e.Date = services.NextFileDate; ! services.NextFileDate = null; ! manager.Add(e); ! manager.SetFileTimeStamp (localPathAndFilename, e.TimeStamp); ! UpdateMessage message = new UpdateMessage (); ! message.Module = services.Repository.WorkingDirectoryName; ! message.Repository = orgPath.RelativePath; ! message.Filename = e.Name; ! services.SendMessage (message.Message); ! } ! ! /// <summary> ! /// Indicator stating whether the response is terminating or not. ! /// </summary> ! public bool IsTerminating { ! get { ! return false; ! } } } } |