move OptionOwner out to leaves
[tfs.git] / tools / tf / HelpCommand.cs
blobc4b13b58c402f61ad607a77eb3ce323c5aa6f54f
1 //
2 // HelpCommand.cs
3 //
4 // Authors:
5 // Joel Reed (joelwreed@gmail.com)
6 //
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System;
30 using System.Collections.Generic;
31 using System.IO;
32 using System.Text;
33 using Microsoft.TeamFoundation.Client;
34 using Microsoft.TeamFoundation.VersionControl.Client;
36 [Command("help", "Describe the usage of this program or its subcommands.")]
37 class HelpCommand : Command
39 public HelpCommand(Driver driver, string[] args): base(driver, args)
43 public void ShowHelp()
45 Console.WriteLine("usage: tf [subcommand] [arguments]");
46 Console.WriteLine();
47 Console.WriteLine("Available subcommands:");
48 Console.WriteLine();
50 foreach (CommandAttribute attribute in CommandRegistry.Attributes.Values)
52 ShowCommandHelp(attribute, " ");
56 static public void ShowCommandHelp(CommandAttribute attribute,
57 string indent)
59 Console.Write(indent + attribute.Name);
60 if (!String.IsNullOrEmpty(attribute.Alias)) Console.Write(" (alias {0})", attribute.Alias);
61 Console.WriteLine();
63 string description = attribute.Description;
64 int x = 0;
66 while (x < description.Length)
68 int y = Math.Min(x + 60, description.Length);
69 int z = description.IndexOf(' ', y) + 1;
70 if (z == 0) z = description.Length;
72 Console.WriteLine(indent + " " + description.Substring(x, z - x));
73 x = z;
76 Console.WriteLine();
79 public void ShowCommandHelp(string cmd)
81 CommandAttribute attr = CommandRegistry.GetCommandAttribute(cmd);
82 if (attr == null)
84 Console.WriteLine("Unknown command: " + cmd);
85 Console.WriteLine();
86 ShowHelp();
87 return;
90 ShowCommandHelp(attr, "");
93 public override void Run()
95 if (Arguments.Length > 1)
96 ShowCommandHelp(Arguments[1]);
97 else
98 ShowHelp();