s/TfOptions/DriverOptions/
[tfs.git] / tools / tf / GetCommand.cs
blob29906f991c3e790e1bb4c830fc354ff0183ba4a8
1 //
2 // GetCommand.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("get", "Update local repository copy with latest versions from the server.")]
37 class GetCommand : Command
39 List<string> setPermissions = new List<string>();
40 Workspace workspace;
42 public GetCommand(string[] arguments, DriverOptions options,
43 VersionControlServer vcs):
44 base(arguments, options, vcs)
46 workspace = GetWorkspaceFromCache();
47 vcs.Getting += MyGettingEventHandler;
50 public void MyGettingEventHandler(Object sender, GettingEventArgs e)
52 if (e.ItemType == ItemType.Folder) return;
53 if (e.DeletionId != 0)
55 Console.WriteLine("deleting " + e.SourceLocalItem);
56 return;
59 if ((!String.IsNullOrEmpty(e.TargetLocalItem))&&
60 (!String.IsNullOrEmpty(e.SourceLocalItem))&&
61 (e.SourceLocalItem != e.TargetLocalItem))
62 Console.WriteLine("renaming " + e.TargetLocalItem);
63 else
64 Console.WriteLine("updating " + e.TargetLocalItem);
66 setPermissions.Add(e.TargetLocalItem);
69 public GetOptions GetOptionFlags()
71 GetOptions getOptions = GetOptions.None;
72 if (Options.All || Options.Force) getOptions |= GetOptions.GetAll;
73 if (Options.Overwrite || Options.Force) getOptions |= GetOptions.Overwrite;
74 return getOptions;
77 public GetStatus UpdatePathFromServer(string path, RecursionType rtype)
79 if (path[0] != '$') path = Path.GetFullPath(path);
80 GetRequest request = new GetRequest(path, rtype, Version);
81 return workspace.Get(request, GetOptionFlags());
84 public override void Run()
86 // process command options
87 RecursionType rtype = Options.Recursive ? RecursionType.Full : RecursionType.None;
88 bool getSetting = Settings.Current.GetAsBool("Get.Recursive");
89 if (getSetting) rtype = RecursionType.Full;
91 GetStatus status;
92 if (Arguments.Length > 1)
93 status = UpdatePathFromServer(Arguments[1], rtype);
94 else
95 status = workspace.Get(Version, GetOptionFlags());
97 if (status.NumOperations == 0)
99 Console.WriteLine("Nothing to do.");
100 Environment.Exit(0);
103 foreach (string file in setPermissions)
105 if (! FileTypeDatabase.ShouldBeExecutable(file)) continue;
106 FileTypeDatabase.MakeExecutable(file);