From: Clayton H. <dr...@us...> - 2004-10-28 06:42:34
|
Update of /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Misc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18006/src/ICSharpCode/SharpCvsLib/Misc Modified Files: CvsRoot.cs PasswordScrambler.cs WorkingDirectory.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: CvsRoot.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Misc/CvsRoot.cs,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** CvsRoot.cs 1 Oct 2004 14:44:08 -0000 1.15 --- CvsRoot.cs 28 Oct 2004 06:42:22 -0000 1.16 *************** *** 179,199 **** /// up. The cvsroot can consisit of the following components: /// ! /// 1) protocol: such as the pserver, ssh and ext protocols ! /// NOTE: Currently unsupported, but valid cvs protocols include: sspi and ntserver ! /// 2) username: the login user for the remote client. This will be /// used to authenticate the user on the remote machine. ! /// 3) server: server that the repository sits on. ! /// 4) path: path to the repository on the server ! /// /// </summary> /// <param name="cvsRoot"></param> /// <example> /// Cvsroot examples: ! /// 1) :pserver:ano...@cv...:/cvsroot/sharpcvslib ! /// /// would be parsed as follows: ! /// protocol = pserver (password server protocol) ! /// user = anonymous ! /// server = cvs.sourceforge.net /// port = 2401 (default port) /// path = /cvsroot/sharpcvslib --- 179,209 ---- /// up. The cvsroot can consisit of the following components: /// ! /// <list type="table"> ! /// <term>protocol:</term> ! /// <description>pserver, ssh and ext protocols ! /// <warn>NOTE: Currently unsupported, but valid cvs protocols include: sspi and ntserver</warn> ! /// </description> ! /// <term>username:</term> ! /// <description>the login user for the remote client. This will be /// used to authenticate the user on the remote machine. ! /// </description> ! /// <term>server:</term> ! /// <description>server that the repository sits on.</description> ! /// <term>path:</term> ! /// <description>path to the repository on the server</description> ! /// </list> /// </summary> /// <param name="cvsRoot"></param> /// <example> /// Cvsroot examples: ! /// <table> ! /// ! /// <item>:pserver:ano...@cv...:/cvsroot/sharpcvslib ! /// /// would be parsed as follows: ! /// <list> ! /// <item>protocol = pserver (password server protocol)</item> ! /// <item>user = anonymous</item> ! /// <item>server = cvs.sourceforge.net</item> /// port = 2401 (default port) /// path = /cvsroot/sharpcvslib *************** *** 228,232 **** Match matches = regex.Match(cvsRoot); - LOGGER.Debug(String.Format("Matches count: {0}.", matches.Groups.Count)); if (!matches.Success) { --- 238,241 ---- *************** *** 242,245 **** --- 251,271 ---- } + /// <summary> + /// Determine if the given string is a valid cvs root or not. + /// </summary> + /// <param name="cvsRoot">A string value that represents a potential cvs root.</param> + /// <returns><code>true</code> if the string is a valid cvs root, + /// otherwise <code>false</code>.</returns> + public static bool IsValid (string cvsRoot) { + Regex regex = new Regex(CVSROOT_REGEX, RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + + Match matches = regex.Match(cvsRoot); + + if (!matches.Success) { + return false; + } + return true; + } + private bool HasUserVar (String[] vars) { return this.HasUserVar(vars[PROTOCOL_INDEX]); Index: PasswordScrambler.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Misc/PasswordScrambler.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** PasswordScrambler.cs 5 Nov 2003 08:07:45 -0000 1.3 --- PasswordScrambler.cs 28 Oct 2004 06:42:22 -0000 1.4 *************** *** 37,129 **** namespace ICSharpCode.SharpCvsLib.Misc { - /// <summary> - /// SCRAMBLE and DESCRAMBLE work like this: - /// - /// scramble(STR) returns SCRM, a scrambled copy of STR. SCRM[0] is a - /// single letter indicating the scrambling method. As of this - /// writing, the only legal method is 'A', but check the code for more - /// up-to-date information. - /// - /// descramble(SCRM) returns STR. - /// descramble() uses SCRM[0] to determine which method of unscrambling - /// to use. If it does not recognize the method, it throws an exception. - /// </summary> - public class PasswordScrambler - { - private static readonly ILog LOGGER = - LogManager.GetLogger (typeof (PasswordScrambler)); /// <summary> ! /// Map characters to each other randomly and symmetrically, A <--> B. /// ! /// We divide the ASCII character set into 3 domains: control chars (0 ! /// thru 31), printing chars (32 through 126), and "meta"-chars (127 ! /// through 255). The control chars map _to_ themselves, the printing ! /// chars map _among_ themselves, and the meta chars map _among_ ! /// themselves. Why is this thus? /// ! /// No character in any of these domains maps to a character in another ! /// domain, because I'm not sure what characters are legal in ! /// passwords, or what tools people are likely to use to cut and paste ! /// them. It seems prudent not to introduce control or meta chars, ! /// unless the user introduced them first. And having the control ! /// chars all map to themselves insures that newline and ! /// carriage-return are safely handled. /// </summary> ! private readonly static byte[] shifts = new byte[] { ! 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ! 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ! 114,120, 53, 79, 96,109, 72,108, 70, 64, 76, 67,116, 74, 68, 87, ! 111, 52, 75,119, 49, 34, 82, 81, 95, 65,112, 86,118,110,122,105, ! 41, 57, 83, 43, 46,102, 40, 89, 38,103, 45, 50, 42,123, 91, 35, ! 125, 55, 54, 66,124,126, 59, 47, 92, 71,115, 78, 88,107,106, 56, ! 36,121,117,104,101,100, 69, 73, 99, 63, 94, 93, 39, 37, 61, 48, ! 58,113, 32, 90, 44, 98, 60, 51, 33, 97, 62, 77, 84, 80, 85,223, ! 225,216,187,166,229,189,222,188,141,249,148,200,184,136,248,190, ! 199,170,181,204,138,232,218,183,255,234,220,247,213,203,226,193, ! 174,172,228,252,217,201,131,230,197,211,145,238,161,179,160,212, ! 207,221,254,173,202,146,224,151,140,196,205,130,135,133,143,246, ! 192,159,244,239,185,168,215,144,139,165,180,157,147,186,214,176, ! 227,231,219,169,175,156,206,198,129,164,150,210,154,177,134,127, ! 182,128,158,208,162,132,167,209,149,241,153,251,237,236,171,195, ! 243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152 }; ! ! /// <returns> ! /// a scrambled version of text. ! /// </returns> ! public static string Scramble(string text) { ! string str = "A"; ! if (LOGGER.IsDebugEnabled) { ! String msg = "text to scramble=[" + text + "]"; ! LOGGER.Debug (msg); ! } ! if (text == null || text == String.Empty) { ! return str; ! } ! foreach (char ch in text) { ! str += (char)shifts[(byte)ch]; } - return str; - } ! /// <summary> ! /// Unincrypts the specified text. ! /// </summary> ! /// <param name="text">a scrabmled text.</param> ! /// <returns>a descrambled version of text.</returns> ! /// <throws name="ArgumentException"> ! /// when text isn't scambled with a known method. ! /// </throws> ! public static string Descramble(string text) ! { ! switch (text[0]) { ! case 'A': // currently the only recognized scrambeling method ! return Scramble(text.Substring(1)).Substring(1); ! default: ! throw new ArgumentException("This isn't a scrambled text, or an unknown scrambeling method is used."); } } } - } --- 37,129 ---- namespace ICSharpCode.SharpCvsLib.Misc { /// <summary> ! /// SCRAMBLE and DESCRAMBLE work like this: /// ! /// scramble(STR) returns SCRM, a scrambled copy of STR. SCRM[0] is a ! /// single letter indicating the scrambling method. As of this ! /// writing, the only legal method is 'A', but check the code for more ! /// up-to-date information. /// ! /// descramble(SCRM) returns STR. ! /// descramble() uses SCRM[0] to determine which method of unscrambling ! /// to use. If it does not recognize the method, it throws an exception. /// </summary> ! public class PasswordScrambler { ! private static readonly ILog LOGGER = ! LogManager.GetLogger (typeof (PasswordScrambler)); ! /// <summary> ! /// Map characters to each other randomly and symmetrically, A <--> B. ! /// ! /// We divide the ASCII character set into 3 domains: control chars (0 ! /// thru 31), printing chars (32 through 126), and "meta"-chars (127 ! /// through 255). The control chars map _to_ themselves, the printing ! /// chars map _among_ themselves, and the meta chars map _among_ ! /// themselves. Why is this thus? ! /// ! /// No character in any of these domains maps to a character in another ! /// domain, because I'm not sure what characters are legal in ! /// passwords, or what tools people are likely to use to cut and paste ! /// them. It seems prudent not to introduce control or meta chars, ! /// unless the user introduced them first. And having the control ! /// chars all map to themselves insures that newline and ! /// carriage-return are safely handled. ! /// </summary> ! private readonly static byte[] shifts = new byte[] { ! 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ! 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ! 114,120, 53, 79, 96,109, 72,108, 70, 64, 76, 67,116, 74, 68, 87, ! 111, 52, 75,119, 49, 34, 82, 81, 95, 65,112, 86,118,110,122,105, ! 41, 57, 83, 43, 46,102, 40, 89, 38,103, 45, 50, 42,123, 91, 35, ! 125, 55, 54, 66,124,126, 59, 47, 92, 71,115, 78, 88,107,106, 56, ! 36,121,117,104,101,100, 69, 73, 99, 63, 94, 93, 39, 37, 61, 48, ! 58,113, 32, 90, 44, 98, 60, 51, 33, 97, 62, 77, 84, 80, 85,223, ! 225,216,187,166,229,189,222,188,141,249,148,200,184,136,248,190, ! 199,170,181,204,138,232,218,183,255,234,220,247,213,203,226,193, ! 174,172,228,252,217,201,131,230,197,211,145,238,161,179,160,212, ! 207,221,254,173,202,146,224,151,140,196,205,130,135,133,143,246, ! 192,159,244,239,185,168,215,144,139,165,180,157,147,186,214,176, ! 227,231,219,169,175,156,206,198,129,164,150,210,154,177,134,127, ! 182,128,158,208,162,132,167,209,149,241,153,251,237,236,171,195, ! 243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152 }; ! /// <returns> ! /// a scrambled version of text. ! /// </returns> ! public static string Scramble(string text) ! { ! string str = "A"; ! if (LOGGER.IsDebugEnabled) { ! String msg = "text to scramble=[" + text + "]"; ! LOGGER.Debug (msg); ! } ! if (text == null || text == String.Empty) { ! return str; ! } ! ! foreach (char ch in text) { ! str += (char)shifts[(byte)ch]; ! } ! return str; } ! /// <summary> ! /// Unincrypts the specified text. ! /// </summary> ! /// <param name="text">a scrabmled text.</param> ! /// <returns>a descrambled version of text.</returns> ! /// <throws name="ArgumentException"> ! /// when text isn't scambled with a known method. ! /// </throws> ! public static string Descramble(string text) ! { ! switch (text[0]) { ! case 'A': // currently the only recognized scrambeling method ! return Scramble(text.Substring(1)).Substring(1); ! default: ! throw new ArgumentException("This isn't a scrambled text, or an unknown scrambeling method is used."); ! } } } } Index: WorkingDirectory.cs =================================================================== RCS file: /cvsroot/sharpcvslib/sharpcvslib/src/ICSharpCode/SharpCvsLib/Misc/WorkingDirectory.cs,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** WorkingDirectory.cs 13 Dec 2003 01:17:09 -0000 1.20 --- WorkingDirectory.cs 28 Oct 2004 06:42:22 -0000 1.21 *************** *** 55,59 **** LogManager.GetLogger (typeof (WorkingDirectory)); CvsRoot cvsroot; ! private String localdirectory; String repositoryname; String revision; --- 55,59 ---- LogManager.GetLogger (typeof (WorkingDirectory)); CvsRoot cvsroot; ! private DirectoryInfo localDir; String repositoryname; String revision; *************** *** 73,78 **** new ToStringFormatter ("WorkingDirectory"); formatter.AddProperty ("cvsRoot", cvsroot); ! formatter.AddProperty ("localdirectory", localdirectory); ! formatter.AddProperty ("LocalDirectory", LocalDirectory); formatter.AddProperty ("repositoryname", repositoryname); formatter.AddProperty ("revision", revision); --- 73,77 ---- new ToStringFormatter ("WorkingDirectory"); formatter.AddProperty ("cvsRoot", cvsroot); ! formatter.AddProperty ("localdirectory", localDir.FullName); formatter.AddProperty ("repositoryname", repositoryname); formatter.AddProperty ("revision", revision); *************** *** 91,95 **** /// </summary> public string LocalDirectory { ! get {return localdirectory;} } --- 90,98 ---- /// </summary> public string LocalDirectory { ! get {return this.localDir.FullName;} ! } ! ! public DirectoryInfo LocalDir { ! get {return this.localDir;} } *************** *** 126,132 **** public String WorkingPath { get { ! if (null != this.LocalDirectory && ! null != this.WorkingDirectoryName) { ! String tempWorkingPath = Path.Combine(this.LocalDirectory, this.WorkingDirectoryName); if (!tempWorkingPath.EndsWith(Path.DirectorySeparatorChar.ToString())) { tempWorkingPath = tempWorkingPath + Path.DirectorySeparatorChar; --- 129,139 ---- public String WorkingPath { get { ! if (null != this.LocalDirectory) { ! string tempWorkingPath; ! if (null == this.WorkingDirectoryName || string.Empty == this.WorkingDirectoryName) { ! tempWorkingPath = this.LocalDirectory; ! } else { ! tempWorkingPath = Path.Combine(this.LocalDirectory, this.WorkingDirectoryName); ! } if (!tempWorkingPath.EndsWith(Path.DirectorySeparatorChar.ToString())) { tempWorkingPath = tempWorkingPath + Path.DirectorySeparatorChar; *************** *** 261,271 **** this.repositoryname = repositoryname; this.cvsroot = cvsroot; ! if (localdirectory.EndsWith (Path.DirectorySeparatorChar.ToString ()) || ! localdirectory.EndsWith ("/")) { ! this.localdirectory = ! localdirectory.Substring (0, localdirectory.Length - 1); ! } else { ! this.localdirectory = localdirectory; ! } this.manager = new Manager(this.WorkingPath); } --- 268,272 ---- this.repositoryname = repositoryname; this.cvsroot = cvsroot; ! this.localDir = new DirectoryInfo(localdirectory); this.manager = new Manager(this.WorkingPath); } *************** *** 300,304 **** public string ToRemotePath(string directory) { return directory.Substring( ! localdirectory.Length).Replace(Path.DirectorySeparatorChar, '/'); } --- 301,305 ---- public string ToRemotePath(string directory) { return directory.Substring( ! this.localDir.FullName.Length).Replace(Path.DirectorySeparatorChar, '/'); } *************** *** 314,318 **** [Obsolete ("Use the OrgPath to parse the org path string")] public string ToLocalPath(string orgPath) { ! string _localBasePath = this.localdirectory; string _orgPathWithoutRoot = --- 315,319 ---- [Obsolete ("Use the OrgPath to parse the org path string")] public string ToLocalPath(string orgPath) { ! string _localBasePath = this.localDir.FullName; string _orgPathWithoutRoot = *************** *** 418,432 **** public void ReadAllExistingEntries() { Clear(); - if (LOGGER.IsDebugEnabled) { - String msg = "Read all existing entries in the " + - "localdirectory=[" + this.localdirectory + "]"; - LOGGER.Debug (msg); - } string wd = ! Path.Combine (localdirectory, this.ModuleName); AddEntriesIn(wd); - // if (null == this.Folders || 0 == this.Folders.Count) { - // AddEntriesIn (Path.Combine (localdirectory, this.ModuleName)); - // } } --- 419,425 ---- public void ReadAllExistingEntries() { Clear(); string wd = ! Path.Combine (this.localDir.FullName, this.ModuleName); AddEntriesIn(wd); } |