rename options in preparation for making per class optionlists
[tfs.git] / tools / tf / CheckinCommand.cs
blobbb72c19e2cf7d4014de4a90273e75650bad217a0
1 //
2 // CheckinCommand.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("checkin", "Commit pending changes to server.")]
37 class CheckinCommand : StatusCommand
39 public CheckinCommand(Driver driver, string[] args): base(driver, args)
43 public override void Run()
45 Workspace workspace = GetWorkspaceFromCache();
47 PendingChange[] pendingChanges;
48 if (Arguments.Length < 2)
50 pendingChanges = workspace.GetPendingChanges();
52 else
54 List<string> paths = new List<string>();
55 for (int i = 1; i < Arguments.Length; i++)
56 paths.Add(Path.GetFullPath(Arguments[i]));
58 // process command options
59 RecursionType rtype = OptionRecursive ? RecursionType.Full : RecursionType.None;
60 pendingChanges = workspace.GetPendingChanges(paths.ToArray(), rtype);
63 if (pendingChanges.Length == 0)
65 Console.WriteLine("Nothing to do");
66 return;
69 bool validateSetting = Settings.Current.GetAsBool("Checkin.Validate");
70 if (OptionValidate || validateSetting)
72 BriefOutput(pendingChanges);
73 Console.Write("OK to commit? [y/N] ");
74 ConsoleKeyInfo keyInfo = Console.ReadKey(true);
75 Console.WriteLine();
76 if (keyInfo.KeyChar != 'y') return;
79 bool emptyCommentSetting = Settings.Current.GetAsBool("Checkin.EmptyCommentIsFileList");
80 if (String.IsNullOrEmpty(OptionComment) && emptyCommentSetting)
82 string cwd = Environment.CurrentDirectory;
83 StringBuilder sb = new StringBuilder();
84 foreach (PendingChange pendingChange in pendingChanges)
86 if (sb.Length > 0) sb.Append(",");
88 string fname;
89 if (pendingChange.LocalItem.StartsWith(cwd)) fname = pendingChange.LocalItem.Substring(cwd.Length+1);
90 else fname = pendingChange.LocalItem;
92 sb.Append(fname);
94 OptionComment = sb.ToString();
97 int cset = workspace.CheckIn(pendingChanges, OptionComment);
98 if (cset == 0) return;
100 Console.WriteLine("ChangeSet {0} checked in.", cset);