I'm trying to programmatically intercept and cancel a user's attempt to check out a file in TFS.
Am I correct in thinking that the proper way to go about this would be to handle the NewPendingChange in a Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer ?
What is the proper way for canceling the event from its event handler?
I was wrong! TFS does allow me to disable merge and multiple check outs on sln/csproj files!
In the "Team Foundation Server Settings > Source Control File Types..." dialog I was able to add new file types (one for sln and one for csproj) and set the File Merging attribute on them to "Disabled". Works like a charm.
Too bad I still don't know how to answer my original question - how to cancel a NewPendingChange event.
Related
Actually editing *.cproj files manually, some code in the project template deletes my edits. So i'm forced to edit the file constantly before i build..
What way would you take to automate this:
is it possible to write a vs extension to have a custom tab in project options that reacts to checkboxes modifying project file for me
any other way?..
Thanks
automate editing project file
Something like a button or menu in VS, click it then some content which you used to add manually will be added into .proj file automatically? If I misunderstand, feel free to correct me:)
What way would you take to automate this:
Hard to say, but in short, I think it depends on whether you're experienced in extension development.
Since if you combine the functions into a extension. Every time when you want to add some custom changes to them, all you need to do is just click a button in VS or select a checkbox. It sounds good but the development of extension may take you some time and you may encounter some issues during the development.The journey could be challenging but instersting!
is it possible to write a vs extension to have a custom tab in project
options that reacts to checkboxes modifying project file for me
It's absolutely possible.Just take a look at this extension,it provides a function which edit project in VS.
Not sure the details how your ideal extension is. But I think you may get some help below:
1.Extend menus and commands if you want to start the function by menu command.
Also, you may get some help from this issue which gives the suggestion about how to put function button under Add-node in solution explorer.
2.Assuming you have function code which adds content into a .xxproj file.(This part is about developing, add nodes to xml-based proj file?).Then add that code into a event handle which will be called when clicking the button or menu.(Something like this)
So I think it's possible but may take some time. And it will be the most automatic way but it takes some time to develop. Anyway, hope it helps and good luck with you.
Is it possible to automatically have the state of a work item be changed to something appropriate like "Active" when dragging it from your available workitems to the in progress work-field?
It would save the work of manually opening the workitems whenever you start working on them, just to set the status, and then adding them to the "in progress work" anyways.
EDIT
I am talking about the visual studio tfs explorer! thanks for editing my post so that it doesn't reflect that anymore! (sarcasm)
You didn't specify so I'm going to make some assumptions. I'll assume you're using TFS 2013 and the Scrum Process Template. I'm not sure if you're talking about dragging items around on the Kanban board, or the Task Board. The way you configure each of those boards is different.
For the Kanban board you can map columns to WI states using the built in UI. Just click Customize columns, then you have the name of the columns at the top, and the WI state they map to at the bottom:
For the Task Board you need to use the witadmin.exe command-line tool, you execute witadmin exportprocessconfig, modify the xml file, then do a witadmin importprocessconfig to upload the changes. The relevant section you need to change is the TaskBacklog section which maps taskboard columns to WI states:
I am able to fire an Event using an Event receiver which I created using Visual Studio 2010 on a custom list. But instead of firing once, it fires twice. I tried to debug the code and I saw that the ItemAdded event was getting executed twice. Is there any particular reason that this is executing in such a manner?
Alas!! I found it!!! I had left the elements file for the Event Receiver there, and therefore when the feature was activated for the project, the receiver got associated to ALL custom lists on the site. And in the Feature Activated event, I was stapling the event to the particular custom list. So, in effect, the Event receiver was getting attached to my particular custom list twice, ie, from the elements file & feature activated event. So, i just deleted the elements file of the event reveicer and it WORKED!!!
Thanks all for your suggestions...
You should check if your itemAdded event handler has not been registered twice. If yes, then deactivate the feature and delete the duplicate receiver.
You can use SharePoint Manager 2010 from codeplex to figure out how many event handlers are attached to your list
It might also be related to your versioning / requirement of checking out the file within the library : http://support.microsoft.com/kb/939307 this was for 2007 but still the case in 2010
Regards
How do people generally deal with TFS when you've got to work with multiple solution files? If you've got one instance it's easy because you can always go to that window for the source control explorer, pending changes, check on builds or work items. But when you have 4-5 solutions, it becomes tricky to deal with. You might expand some folders or check some pending items on one VS instance but you have to remember which one you did it on.
Having a separate instance dedicated just to TFS tasks is tempting, but there's only one window state for the whole program. If that instance is closed last, all instances will come up with all the TFS windows open.
How do other people deal with this? Can you use separate profiles somehow and cordon off a "TFS" instance of Visual Studio?
Use the Pending Changes window. View -> Other Windows -> Pending Changes. This has a toolbar option to show only those changes pending for the current solution also. It's the last toolbar button in the Pending Changes window. I usually make this a full document in VS and then memorize the keyboard shortcut to it: ALT+V, E, H. Obviously you could bind your own shortcut, but what fun is that.
Eclipse has a similar perspective/view to Pending Changes, but it's name escapes me and I don't have my Ubuntu VM up at the moment.
Solution Explorer and Source Control Explorer are definitely not my recommendation for check-in activities. I personally like to clear out all of the checkboxes on Pending Changes and then Diff each file. This keeps me from A) waiting too long before a checkin (it sucks to compare 20 files 1 by 1) and B) avoids checking in a change I didn't intend.
If you have multiple instances of Visual Studio open at one time (which I'm not quite sure why you would need to do this), your changes are "synchronized" across all instances of Visual Studio. Don't do your check-in from the solution explorer, do it from the Source Control explorer, then you're sure to get all your updates in a single check-in.
You might find VSCommands useful when working with VS/TFS - it can be configured to display the Solution and TFS Branch name in the title bar, this indication is invaluable when working with multiple instances of VS (or multiple branches of the same project).
I recently switched from a Java based project to a C#/.net project. I previously used IntelliJ which had the concept of change lists where you could group your pending changes together and check each group in individually.
I have two problems with the pending changes window in visual studio.
1) Every time I check anything in, visual studio checks the checkbox beside Every pending change in the list forcing me to uncheck each and every one of them so I don't accidentally check something in. This is extremely frustrating because there are several files that I need to keep changed to correctly run my code locally. Is there any way to change this default behavior to not check any pending changes on check-in?
2) Is there any way to group changes into lists as opposed one big bucket of changes? Again this becomes frustrating when I need to check something in, but I have to search through the files and check the pertinent changes. I understand that shelve sets exist using TFS, but that doesn't cut it for me, especially since I have several changed files that I need to keep altered in order to correctly deploy locally, and I rarely ever want to check in.
Thanks in advance!
I have to manage lots of changes every day in Visual Studio, and I've got a few tips for you, but no silver bullet:
Use Ctrl+A to select all items and then press a checkbox to toggle the checkboxes for all items. This can be useful when performing changes to only a few items -- just uncheck everything, then make sure you have only the items checked that you'd like to update.
Use Ctrl+Click (then right-click) to 'Undo' selected changes. By default, the undo action will only apply to the selected items.
You might want to experiment with using multiple Workspaces -- and then filtering changes by workspace or by solution.
No, I don't know of a way to fix your problems. It sounds like the best answer would be to refactor your configuration settings or code so that you can check in all of your changes.
If your changes are in different projects you can partition what you check in using the Source Control Explorer by right clicking on the project folder and checking in that way. It will auto check only the files in the folder you right click on. Just keep in mind the Source Control Explorer gives you some other options. Otherwise, I do not know of a way to manually control your change sets file-by-file thought if this exists I would like to know about it too.
You can also use Ctrl+A to select all items and then press Spacebar to toggle the checkedboxes as checked/unchecked.