From: Clayton H. <dr...@us...> - 2004-10-28 06:43:03
|
Update of /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18006/src/ICSharpCode.Console/SharpCvsLib/Console/Parser Modified Files: AddCommandParser.cs CheckoutCommandParser.cs CommandLineParser.cs CommitCommandParser.cs RemoveCommandParser.cs UpdateCommandParser.cs Added Files: ListCommandParser.cs Log Message: Big update to the FileSystem namespace both to cleanup the implementation and to handle the condition: c:\CVS\src\sharpcvslib where CVS is not a management folder. Also added the cvsnt specific List (ls) command. Index: AddCommandParser.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser/AddCommandParser.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** AddCommandParser.cs 6 Sep 2004 08:10:15 -0000 1.6 --- AddCommandParser.cs 28 Oct 2004 06:42:20 -0000 1.7 *************** *** 233,240 **** } if (!folder.Entries.Contains(file)) { ! Entry entry = Entry.CreateEntry(file); folder.Entries.Add (file, entry); } else { ! folder.Entries[file] = Entry.CreateEntry(file); } } --- 233,240 ---- } if (!folder.Entries.Contains(file)) { ! Entry entry = Entry.CreateEntry(new FileInfo(file)); folder.Entries.Add (file, entry); } else { ! folder.Entries[file] = Entry.CreateEntry(new FileInfo(file)); } } Index: CheckoutCommandParser.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser/CheckoutCommandParser.cs,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CheckoutCommandParser.cs 6 Sep 2004 08:10:15 -0000 1.5 --- CheckoutCommandParser.cs 28 Oct 2004 06:42:20 -0000 1.6 *************** *** 110,114 **** /// <param name="repositoryName">Name of the local repository path.</param> /// <param name="coOptions">All unparsed checkout options.</param> ! // [Obsolete("Use CheckCommandParser(CvsRoot, string[])")] public CheckoutCommandParser (CvsRoot cvsRoot, string repositoryName, string coOptions) { this.cvsRoot = cvsRoot; --- 110,114 ---- /// <param name="repositoryName">Name of the local repository path.</param> /// <param name="coOptions">All unparsed checkout options.</param> ! [Obsolete("Use CheckCommandParser(CvsRoot, string[])")] public CheckoutCommandParser (CvsRoot cvsRoot, string repositoryName, string coOptions) { this.cvsRoot = cvsRoot; Index: UpdateCommandParser.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser/UpdateCommandParser.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** UpdateCommandParser.cs 6 Sep 2004 08:10:15 -0000 1.6 --- UpdateCommandParser.cs 28 Oct 2004 06:42:20 -0000 1.7 *************** *** 51,55 **** /// </summary> public class UpdateCommandParser : AbstractCommandParser { ! private CvsRoot cvsRoot; private string fileNames; private string revision; --- 51,55 ---- /// </summary> public class UpdateCommandParser : AbstractCommandParser { ! private CvsRoot cvsRootVar; private string fileNames; private string revision; *************** *** 58,61 **** --- 58,89 ---- private string unparsedOptions; + private CvsRoot CvsRootVar { + get { + if (null == cvsRootVar) { + try { + Manager m = new Manager(Environment.CurrentDirectory); + Root root = m.FetchRoot(Environment.CurrentDirectory); + this.cvsRootVar = new CvsRoot(root.FileContents); + } catch (CvsFileNotFoundException) { + this.cvsRootVar = new CvsRoot(Environment.GetEnvironmentVariable("CVSROOT")); + + if (null == this.cvsRootVar) { + this.InvalidRepository(); + } + } + } + return this.cvsRootVar; + } + set { + this.cvsRootVar = value; + } + } + + private void InvalidRepository () { + System.Console.WriteLine(String.Format("cvs update: No CVSROOT specified! Please use the `-d' option")); + System.Console.WriteLine(String.Format("cvs [update aborted]: or set the CVSROOT environment variable.")); + System.Environment.Exit(-1); + } + /// <summary> /// Create a new instance of the <see cref="UpdateCommandParser"/>. *************** *** 104,108 **** /// <param name="upOptions">Options</param> public UpdateCommandParser(CvsRoot cvsroot, string fileNames, string upOptions) { ! this.cvsRoot = cvsroot; this.fileNames = fileNames; this.unparsedOptions = upOptions; --- 132,136 ---- /// <param name="upOptions">Options</param> public UpdateCommandParser(CvsRoot cvsroot, string fileNames, string upOptions) { ! this.cvsRootVar = cvsroot; this.fileNames = fileNames; this.unparsedOptions = upOptions; *************** *** 141,171 **** this.ParseOptions(this.unparsedOptions); ! try ! { ! // Open the Repository file in the CVS directory ! Manager manager = new Manager(Environment.CurrentDirectory); ! Repository repository = manager.FetchRepository(Environment.CurrentDirectory); ! // If this fails error out and state the user ! // is not in a CVS repository directory tree. ! if (localDirectory == null) { ! localDirectory = Environment.CurrentDirectory; ! } ! CurrentWorkingDirectory = new WorkingDirectory( this.cvsRoot, ! localDirectory, repository.FileContents); ! if (revision != null) { ! CurrentWorkingDirectory.Revision = revision; ! } ! if (!date.Equals(DateTime.MinValue)) { ! CurrentWorkingDirectory.Date = date; ! } ! CurrentWorkingDirectory.FoldersToUpdate = ! manager.FetchFilesToUpdate (Environment.CurrentDirectory); ! // Create new UpdateCommand2 object ! updateCommand = new UpdateCommand2(CurrentWorkingDirectory); } ! catch (Exception e) { ! LOGGER.Error (e); ! throw e; } return updateCommand; } --- 169,205 ---- this.ParseOptions(this.unparsedOptions); ! Manager manager = new Manager(Environment.CurrentDirectory); ! ! Repository repository = null; ! try { ! repository = manager.FetchRepository(Environment.CurrentDirectory); ! } catch (NullReferenceException) { ! this.InvalidRepository(); ! } catch (CvsFileNotFoundException) { ! this.InvalidRepository(); } ! ! if (null == repository) { ! this.InvalidRepository(); ! } ! ! // If this fails error out and state the user ! // is not in a CVS repository directory tree. ! if (localDirectory == null) { ! localDirectory = Environment.CurrentDirectory; ! } ! CurrentWorkingDirectory = new WorkingDirectory( this.CvsRootVar, ! localDirectory, repository.FileContents); ! if (revision != null) { ! CurrentWorkingDirectory.Revision = revision; ! } ! if (!date.Equals(DateTime.MinValue)) { ! CurrentWorkingDirectory.Date = date; } + CurrentWorkingDirectory.FoldersToUpdate = + manager.FetchFilesToUpdate (Environment.CurrentDirectory); + // Create new UpdateCommand2 object + updateCommand = new UpdateCommand2(CurrentWorkingDirectory); + return updateCommand; } Index: CommandLineParser.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser/CommandLineParser.cs,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** CommandLineParser.cs 6 Aug 2004 07:37:02 -0000 1.36 --- CommandLineParser.cs 28 Oct 2004 06:42:20 -0000 1.37 *************** *** 39,42 **** --- 39,43 ---- using System; using System.Collections; + using System.IO; using System.Text; using System.Text.RegularExpressions; *************** *** 263,298 **** } ! Regex cvsRoot = new Regex(@"[-d]+[\s]*[\s]*" + CvsRoot.CVSROOT_REGEX); Match match = cvsRoot.Match(this.CommandLine); ! if (match.Groups.Count > 0) { this.cvsRoot = new CvsRoot(this.CommandLine); startIndex = 1; ! /* ! if (arguments[0].IndexOf ("-d", 0, 2) >= 0) { ! String tempRoot = arguments[0].Substring (2); ! this.cvsRoot = new CvsRoot (tempRoot); ! if (arguments.Length == 1) { ! throw new CommandLineParseException("Only specified a cvsroot, need to specify a command."); ! } ! startIndex = 1; ! */ ! } else { ! try { ! // Get the cvsroot from the Root file in the CVS directory ! Manager manager = new Manager(Environment.CurrentDirectory); ! Root root = manager.FetchRoot(Environment.CurrentDirectory); ! this.cvsRoot = new CvsRoot(root.FileContents); ! } catch { ! // Should be using CVSROOT as last option ! String tempRoot = Environment.GetEnvironmentVariable (ENV_CVS_ROOT); ! try { ! this.cvsRoot = new CvsRoot(tempRoot); ! } catch (CvsRootParseException e) { ! LOGGER.Error(e); ! return null; ! } ! } ! } for (int i = startIndex; i < arguments.Length; i++) { --- 264,274 ---- } ! Regex cvsRoot = new Regex(@"[-d]+[:\s]*" + CvsRoot.CVSROOT_REGEX); Match match = cvsRoot.Match(this.CommandLine); ! if (match.Groups.Count > 0 && CvsRoot.IsValid(this.CommandLine)) { this.cvsRoot = new CvsRoot(this.CommandLine); startIndex = 1; ! } for (int i = startIndex; i < arguments.Length; i++) { *************** *** 303,307 **** } LOGGER.Debug("Before we grab the arguments."); ! switch (arguments[i].Trim()) { case "add": case "ad": --- 279,286 ---- } LOGGER.Debug("Before we grab the arguments."); ! string commandString = arguments[i].Trim(); ! CommandParserFactory factory; ! ICommandParser parser; ! switch (commandString) { case "add": case "ad": *************** *** 312,316 **** // get rest of arguments which is options on the commit command. while (arguments.Length > i && arguments[i].IndexOf("-", 0, 1) >= 0) { - LOGGER.Debug("Parsing arguments. Argument[" + i + "]=[" + arguments[i]); // Get options with second parameters? if (arguments[i].IndexOfAny( singleOptions.ToCharArray(), 1, 1) >= 0) { --- 291,294 ---- *************** *** 335,349 **** this.repository = String.Empty; } ! try { ! AddCommandParser addCommand = ! new AddCommandParser(this.CvsRoot, repository, options); ! command = addCommand.CreateCommand (); ! this.currentWorkingDirectory = ! addCommand.CurrentWorkingDirectory; ! } ! catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create add command.", e); ! } break; case "commit": --- 313,321 ---- this.repository = String.Empty; } ! AddCommandParser addCommand = ! new AddCommandParser(this.CvsRoot, repository, options); ! command = addCommand.CreateCommand (); ! this.currentWorkingDirectory = ! addCommand.CurrentWorkingDirectory; break; case "commit": *************** *** 378,392 **** this.repository = String.Empty; } ! try { ! CommitCommandParser commitCommand = ! new CommitCommandParser(this.CvsRoot, repository, options); ! command = commitCommand.CreateCommand (); ! this.currentWorkingDirectory = ! commitCommand.CurrentWorkingDirectory; ! } ! catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create commit command.", e); ! } break; case "checkout": --- 350,358 ---- this.repository = String.Empty; } ! CommitCommandParser commitCommand = ! new CommitCommandParser(this.CvsRoot, repository, options); ! command = commitCommand.CreateCommand (); ! this.currentWorkingDirectory = ! commitCommand.CurrentWorkingDirectory; break; case "checkout": *************** *** 426,450 **** this.repository = String.Empty; } ! try { ! CheckoutCommandParser checkoutCommand = ! new CheckoutCommandParser(this.CvsRoot, this.Repository, options); ! command = checkoutCommand.CreateCommand (); ! this.currentWorkingDirectory = ! checkoutCommand.CurrentWorkingDirectory; ! } catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create checkout command.", e); ! } break; case "init": this.commandTxt = arguments[i]; ! try { ! InitCommandParser initCommand = new InitCommandParser(this.CvsRoot); ! command = initCommand.CreateCommand (); ! this.currentWorkingDirectory = initCommand.CurrentWorkingDirectory; ! } catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create init command.", e); ! } break; case "login": --- 392,406 ---- this.repository = String.Empty; } ! CheckoutCommandParser checkoutCommand = ! new CheckoutCommandParser(this.CvsRoot, this.Repository, options); ! command = checkoutCommand.CreateCommand (); ! this.currentWorkingDirectory = ! checkoutCommand.CurrentWorkingDirectory; break; case "init": this.commandTxt = arguments[i]; ! InitCommandParser initCommand = new InitCommandParser(this.CvsRoot); ! command = initCommand.CreateCommand (); ! this.currentWorkingDirectory = initCommand.CurrentWorkingDirectory; break; case "login": *************** *** 453,467 **** // login to server this.commandTxt = arguments[i]; ! try { ! LoginCommand loginCommand = ! new LoginCommand(this.CvsRoot, this.currentWorkingDirectory); ! loginCommand.Args = arguments; ! this.currentWorkingDirectory.CvsRoot = this.CvsRoot; ! command = loginCommand; ! } ! catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create login command.", e); ! } break; case "passwd": --- 409,430 ---- // login to server this.commandTxt = arguments[i]; ! LoginCommand loginCommand = ! new LoginCommand(this.CvsRoot, this.currentWorkingDirectory); ! loginCommand.Args = arguments; ! this.currentWorkingDirectory = loginCommand.CurrentWorkingDirectory; ! command = loginCommand; ! break; ! case "dir": ! case "list": ! case "ls": ! factory = ! new CommandParserFactory("ls", arguments, ! this.cvsRoot, this.currentWorkingDirectory); ! ! parser = factory.GetCommandParser(); ! i = arguments.Length; ! command = parser.CreateCommand(); ! this.currentWorkingDirectory = ! parser.CurrentWorkingDirectory; break; case "passwd": *************** *** 500,514 **** this.files = String.Empty; } ! try { ! RemoveCommandParser removeCommand = ! new RemoveCommandParser(this.CvsRoot, files, options); ! command = removeCommand.CreateCommand (); ! this.currentWorkingDirectory = ! removeCommand.CurrentWorkingDirectory; ! } ! catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create remove command.", e); ! } break; case "rt": --- 463,471 ---- this.files = String.Empty; } ! RemoveCommandParser removeCommand = ! new RemoveCommandParser(this.CvsRoot, files, options); ! command = removeCommand.CreateCommand (); ! this.currentWorkingDirectory = ! removeCommand.CurrentWorkingDirectory; break; case "rt": *************** *** 541,555 **** this.repository = String.Empty; } ! try { ! RTagCommandParser rtagCommand = ! new RTagCommandParser(this.CvsRoot, repository, options); ! command = rtagCommand.CreateCommand (); ! this.currentWorkingDirectory = ! rtagCommand.CurrentWorkingDirectory; ! } ! catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create rtag command.", e); ! } break; case "up": --- 498,506 ---- this.repository = String.Empty; } ! RTagCommandParser rtagCommand = ! new RTagCommandParser(this.CvsRoot, repository, options); ! command = rtagCommand.CreateCommand (); ! this.currentWorkingDirectory = ! rtagCommand.CurrentWorkingDirectory; break; case "up": *************** *** 581,603 **** this.repository = String.Empty; } ! try { ! UpdateCommandParser updateCommand = ! new UpdateCommandParser(this.CvsRoot, repository, options); ! command = updateCommand.CreateCommand (); ! this.currentWorkingDirectory = ! updateCommand.CurrentWorkingDirectory; ! } ! catch (Exception e) { ! LOGGER.Error(e); ! throw new CommandLineParseException("Unable to create update command.", e); ! } break; case "xml": ! CommandParserFactory factory = new CommandParserFactory("xml", arguments, this.cvsRoot, this.currentWorkingDirectory); // TODO: Move this outside of case statement when all commands use same pattern ! ICommandParser parser = factory.GetCommandParser(); i = arguments.Length; command = parser.CreateCommand(); --- 532,548 ---- this.repository = String.Empty; } ! UpdateCommandParser updateCommand = ! new UpdateCommandParser(this.CvsRoot, repository, options); ! command = updateCommand.CreateCommand (); ! this.currentWorkingDirectory = ! updateCommand.CurrentWorkingDirectory; break; case "xml": ! factory = new CommandParserFactory("xml", arguments, this.cvsRoot, this.currentWorkingDirectory); // TODO: Move this outside of case statement when all commands use same pattern ! parser = factory.GetCommandParser(); i = arguments.Length; command = parser.CreateCommand(); *************** *** 671,677 **** case "--help-synonyms": System.Console.WriteLine(Usage.Synonyms); ! return true; ! case "--version": ! System.Console.WriteLine(Usage.Version); return true; } --- 616,622 ---- case "--help-synonyms": System.Console.WriteLine(Usage.Synonyms); ! return true; ! case "--version": ! System.Console.WriteLine(Usage.Version); return true; } *************** *** 683,686 **** --- 628,632 ---- return false; } + } } Index: CommitCommandParser.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser/CommitCommandParser.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CommitCommandParser.cs 6 Sep 2004 08:10:15 -0000 1.3 --- CommitCommandParser.cs 28 Oct 2004 06:42:20 -0000 1.4 *************** *** 203,211 **** } if (!folder.Entries.Contains(file)) { ! Entry entry = Entry.CreateEntry(file); folder.Entries.Add (file, entry); ! } ! else { ! folder.Entries[file] = Entry.CreateEntry(file); } } --- 203,210 ---- } if (!folder.Entries.Contains(file)) { ! Entry entry = Entry.CreateEntry(new FileInfo(file)); folder.Entries.Add (file, entry); ! } else { ! folder.Entries[file] = Entry.CreateEntry(new FileInfo(file)); } } Index: RemoveCommandParser.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode.Console/SharpCvsLib/Console/Parser/RemoveCommandParser.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RemoveCommandParser.cs 6 Sep 2004 08:10:15 -0000 1.2 --- RemoveCommandParser.cs 28 Oct 2004 06:42:20 -0000 1.3 *************** *** 152,157 **** // Create new RemoveCommand object removeCommand = new ICSharpCode.SharpCvsLib.Commands.RemoveCommand( ! this.CurrentWorkingDirectory, currentDirectory, ! new ICSharpCode.SharpCvsLib.FileSystem.Entry( currentDirectory, removeEntry.FileContents)); } catch (Exception e) { --- 152,157 ---- // Create new RemoveCommand object removeCommand = new ICSharpCode.SharpCvsLib.Commands.RemoveCommand( ! this.CurrentWorkingDirectory, currentDirectory, ! removeEntry); } catch (Exception e) { --- NEW FILE: ListCommandParser.cs --- #region "Copyright" // // Copyright (C) 2003 Steve Kenzell // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // // <author>Steve Kenzell</author> // <author>Clayton Harbour</author> #endregion using System; using System.Collections; using System.Globalization; using System.IO; using System.Text; using ICSharpCode.SharpCvsLib.Commands; using ICSharpCode.SharpCvsLib.Client; using ICSharpCode.SharpCvsLib.Exceptions; using ICSharpCode.SharpCvsLib.Misc; using log4net; namespace ICSharpCode.SharpCvsLib.Console.Parser{ /// <summary> /// Check out module files from a cvs repository. /// </summary> public class ListCommandParser : AbstractCommandParser{ private string repository; private string revision; private string localDirectory; private DateTime date; private string unparsedOptions; /// <summary> /// Create a new instance of the <see cref="CheckoutCommandParser"/>. /// </summary> /// <returns></returns> public static ICommandParser GetInstance() { return GetInstance(typeof(ListCommandParser)); } /// <summary> /// Name of the command being parsed. /// </summary> public override string CommandName { get {return "ls";} } /// <summary> /// Description of the command. /// </summary> public override string CommandDescription { get {return "List files in the repository";} } /// <summary> /// Default constructor. /// </summary> public ListCommandParser () { } /// <summary> /// Create a new <see cref="ListCommand"/>, initialize the variables that are used /// in a list. /// </summary> /// <param name="cvsRoot">The cvs root to use for this checkout.</param> /// <param name="repositoryName">Name of the local repository path.</param> /// <param name="coOptions">All unparsed checkout options.</param> [Obsolete("Use ListCommandParser(CvsRoot, string[])")] public ListCommandParser (CvsRoot cvsRoot, string repositoryName, string coOptions) { this.CvsRoot = cvsRoot; repository = repositoryName; this.unparsedOptions = coOptions; } /// <summary> /// Create a new <see cref="ListCommand"/>, initialize the variables that are used /// in a checkout. /// </summary> /// <param name="cvsRoot">The cvs root to use for this checkout.</param> /// <param name="args">Commandline arguments to be parsed out and used for the command.</param> public ListCommandParser (CvsRoot cvsRoot, string[] args) { this.CvsRoot = cvsRoot; StringBuilder coOptions = new StringBuilder (); foreach (string arg in args) { coOptions.Append(arg); } this.unparsedOptions = coOptions.ToString(); } /// <summary> /// Nicknames for the add command. /// </summary> public override ICollection Nicks { get { if (commandNicks.Count == 0) { commandNicks.Add("dir"); commandNicks.Add("list"); } return commandNicks; } } /// <summary> /// The checkout command is implemented in the library and commandline parser. /// </summary> public override bool Implemented { get {return true;} } /// <summary> /// Create the command object that will be used to act on the repository. /// </summary> /// <returns>A <see cref="ListCommand"/> object to perform the list.</returns> /// <exception cref="Exception">TODO: Make a more specific exception</exception> /// <exception cref="NotImplementedException">If the command argument /// is not implemented currently. TODO: Implement the argument.</exception> public override ICommand CreateCommand () { ListCommand listCommand; this.ParseOptions(); // create CvsRoot object parameter if (localDirectory == null) { localDirectory = Environment.CurrentDirectory; } this.CurrentWorkingDirectory = new WorkingDirectory(this.CvsRoot, localDirectory, repository); if (revision != null) { this.CurrentWorkingDirectory.Revision = revision; } if (!date.Equals(DateTime.MinValue)) { this.CurrentWorkingDirectory.Date = date; } listCommand = new ListCommand(this.CurrentWorkingDirectory); return listCommand; } /// <summary> /// Parse the command line options/ arguments and populate the command /// object with the arguments. /// </summary> /// <param name="options">A string value that holds the command /// line options the user has selected.</param> public override void ParseOptions () { int endofOptions = 0; // get Checkout Options and parameters if (null == this.unparsedOptions) { return; } for (int i = 0; i < this.unparsedOptions.Length; i++){ if (unparsedOptions[i]== '-' && unparsedOptions[i+1] == 'r'){ i += 2; // get revision of files to checkout if (unparsedOptions.IndexOf(" -", i, unparsedOptions.Length - i) == -1){ endofOptions = unparsedOptions.Length - i - 1; } else{ endofOptions = unparsedOptions.IndexOf(" -", i, unparsedOptions.Length - i) - 2; } revision = unparsedOptions.Substring(i, endofOptions); i = i + endofOptions; } if (unparsedOptions[i]== '-' && unparsedOptions[i+1] == 'T'){ i += 2; // get location to place files locally if (unparsedOptions.IndexOf(" -", i, unparsedOptions.Length - i) == -1){ endofOptions = unparsedOptions.Length - i - 1; // minus one so not to // include last space } else{ endofOptions = unparsedOptions.IndexOf(" -", i, unparsedOptions.Length - i) - 2; } localDirectory = unparsedOptions.Substring(i, endofOptions); i = i + endofOptions; } if (unparsedOptions[i]== '-' && unparsedOptions[i+1] == 'D'){ i += 2; // get date of files to checkout // Date format needs to be the short date pattern as stated in the // Control Panel -> Regional Options -> see Date tab if (unparsedOptions.IndexOf(" -", i, unparsedOptions.Length - i) == -1){ endofOptions = unparsedOptions.Length - i - 1; // minus one so not to // include last space } else{ endofOptions = unparsedOptions.IndexOf(" -", i, unparsedOptions.Length - i) - 2; } try{ // Parse string to DateTime format string datepar = unparsedOptions.Substring(i, endofOptions); i = i + endofOptions; date = System.Convert.ToDateTime(datepar, DateTimeFormatInfo.CurrentInfo); } catch{ StringBuilder msg = new StringBuilder (); msg.Append("The -D checkout option parameter is not "); msg.Append("in correct format of "); msg.Append(DateTimeFormatInfo.CurrentInfo.ShortDatePattern); msg.Append("."); throw new ApplicationException (msg.ToString()); } } if (unparsedOptions[i]== '-' && unparsedOptions[i+1] == 'R'){ String msg = "The -R checkout option is not " + "implemented."; throw new NotImplementedException (msg); } } } /// <summary> /// Output the command usage and arguements. /// </summary> public override string Usage { get { string usage = @"Usage: cvs ls [-q] [-e] [-l] [-R] [-r rev] [-D date] [-t] [modules...] -D date Show files from date. -e Display in CVS/Entries format. -l Display all details. -P Ignore empty directories. -q Quieter output. -R List recursively. -r rev Show files with revision or tag. -T Show time in local time instead of GMT. (Specify the --help global option for a list of other help options)"; return usage; } } } } |