show the difference between two versions for a specified path
[tfs.git] / tools / opentf / ShelveCommand.cs
blob5cbffca578e6b11db0ca3a8aa393c6d4743440aa
1 //
2 // ShelveCommand.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.Common;
35 using Microsoft.TeamFoundation.VersionControl.Client;
36 using Mono.GetOptions;
38 [Command("shelve", "Manage a shelveset.", "[<shelveset name> | <shelveset name;owner name>]")]
39 class ShelveCommand : StatusCommand
41 [Option("Owner name", "O", "owner")]
42 public string OptionOwner = RepositoryConstants.AuthenticatedUser;
44 [Option("Delete the shelveset", "", "delete")]
45 public bool OptionDelete = false;
47 [Option("Replace an existing shelveset", "", "replace")]
48 public bool OptionReplace = false;
50 public ShelveCommand(Driver driver, string[] args): base(driver, args)
54 public override void Run()
56 string name = String.Empty;
57 string owner = OwnerFromString(OptionOwner);
59 if (Arguments.Length < 1)
61 Console.WriteLine("Usage: tf shelve [name] [path]");
62 Environment.Exit((int)ExitCode.Failure);
65 if (Arguments.Length > 0)
67 int semicolon = Arguments[0].IndexOf(";");
68 if (semicolon == -1) name = Arguments[0];
69 else
71 name = Arguments[0].Substring(0, semicolon);
72 owner = Arguments[0].Substring(semicolon+1);
76 if (OptionDelete)
78 VersionControlServer.DeleteShelveset(name, owner);
79 Console.WriteLine("Deleted shelveset {0}", name);
80 Environment.Exit((int)ExitCode.Success);
83 // must be creating or replacing a shelveset
84 Workspace workspace = GetWorkspaceFromCache();
86 PendingChange[] pendingChanges;
87 if (Arguments.Length < 2)
88 pendingChanges = workspace.GetPendingChanges();
89 else
91 List<string> paths = new List<string>();
92 for (int i = 1; i < Arguments.Length; i++)
93 paths.Add(Path.GetFullPath(Arguments[i]));
95 // process command options
96 RecursionType rtype = OptionRecursive ? RecursionType.Full : RecursionType.None;
97 pendingChanges = workspace.GetPendingChanges(paths.ToArray(), rtype);
100 if (pendingChanges.Length == 0)
102 Console.WriteLine("No changes to shelve.");
103 return;
106 Shelveset shelve = new Shelveset(VersionControlServer, name, owner);
107 ShelvingOptions options = (OptionReplace)? ShelvingOptions.Replace : ShelvingOptions.None;
108 workspace.Shelve(shelve, pendingChanges, options);
110 Console.WriteLine("Created shelveset {0}", name);
111 BriefOutput(pendingChanges, " ");