Solving random 404 errors while editing release definition environments on TFS 2015


Dealing with too many environments


Getting straight to the point, remote chances are that you may be using way too much environments on a single release. Normally, this would never happen, as the usual route is to have dev, qa, staging, and production environments at most. And because of that, they never thought this could possibly become an issue.

When you edit a release, a web api call is made to check the current user’s permission to access each one of them. If this method happens to fail, you won’t be able to access the context menu options for each environment (such as variables or deployment conditions). Click here to read more.

How to find everyone (and their groups) on TFS 2015


All the groups


Sometimes it’s difficult to know who is in which TFS group. The groups keep getting bigger, some people change from one department to another, a group gets created for a particular set of special permissions, and so on, and so forth. Be it for auditing or just to keep things tidy and organized, knowing who is in which group can be a tiresome task by navigating group by group.


The query


For all that matters, let’s say [Tfs_Configuration] is our TFS 2015 configuration database. With this, you can get group membership recursively until you figure out who is in which group. Please note that this may not be the best/fastest way to do it, as I didn’t worry too much about optimization. Click here to read more.

Expectations, impressions, efforts, and results.

This post is not programming-related. It’s also purely anedoctal and based solely on my own experiences.


Expectations


I’ve recently watched all the unfold fiasco regarding Mighty No. 9. For those who don’t know, it’s a game that was promised to be almost like a “spiritual successor” of megaman, but apparently failed in a outrageous way. When this kind of thing happens, as always, we see some people take an initial stand, and everyone else following the bandwagon. Some judge, others defend. “It’s not that bad”, “It’s atrocious”, and everything in-between. One post that got my attention was: “If it was me doing a game like this, I would be so proud. I don’t understand why people are bashing it so much”. Click here to read more.

.NET Core RC 2, TFS, and you in a pickle. “Failed to make the following project runnable” – Access Denied


Can’t touch this


This is basically an issue which is likely to happen (AFAIK) if you’re currently using Server Workspaces in TFS. Due to the size of the solutions and projects I’m working in, changing to a local workspace feels a lot slower. Now, I’ve recently switched some of my projects to .NET Core, and building one of them has yielded the offending error:

Failed to make the following project runnable: aaa.bbb.ccc (.NETFramework,Version=v4.5) reason: Access to the path ‘g:\xxx\yyy\zzz\bin\Release\net45\uvw.dll’ is denied.

This is caused by the fact that those files are marked as “read-only”, which is the default for files in source control that are not checked out. Click here to read more.

The end to all of your TF14098: Access Denied, or how to figure out wrong permissions (TFS2013)


But I do have permissions!


I’ve come across a pestering access issue on TFS2013 (On-Premises), where I couldn’t delete some branches because I had no access to path/*. After reviewing my permissions a thousand times on the accusing path, I almost gave up and used tf destroy to incinerate them. (PROTIP: don’t do that unless you ABSOLUTELY have to). Most of the times, this problem is caused by a permission set in some subfolder or file inside of the folder you’re willing to delete. The thing is: VS doesn’t tell you exactly what files have the treacherous permission set that drives you to insanity. Click here to read more.

Quick and dirty setup for tracking currently playing Spotify tracks (Only works with the PC app)

I am getting ready to participate in the next Ludum Dare (LD35), and being my first time, I wanted to do it on Twitch as well. So I started setting things up, such as adjusting my screen and webcam layout and getting some music. I’ve found that there was no easy way to show my current playing track on spotify. Not the way I wanted, anyway.


What have I tried?


First, I tried capturing the Spotify App windows partially, but it hides part of the song if it’s longer than the widget size. It was kinda ugly. Then, I tried using their api, but it seems there is not such method to get the current playing track. Without any further options, I noticed that the song/artist names showed up on the title of the window. So I’ve come up with a quick and dirty C# wpf app to capture the title and format it to my needs. Click here to read more.

A mild Caveat while reading the InputStream in a Custom TFS Plugin if you’re using Git as Source Control

This is related to the implementation of a custom plugin using ITeamFoundationRequestFilter.

You can go to the first part of my post series by clicking the link below:

https://conradoclarkdeveloper.com/2015/03/02/iteamfoundationrequestfilter-part1-tfs

This post is a fix to a possible problem while reading requests if you’re using Git.


The problem with InputStream


In my first posts about implementing ITeamFoundationRequestFilter, I’m using HttpContext.Current.Request.InputStream to read the contents of the request. It happens so that, depending on the implementation, this may break Git functionality. If you access the InputStream before trying to push content to git, the following error is shown: Click here to read more.

Focus? Or a brief decompilation of our brains 


A simple concept, in theory


This post is not directly programming-related. It’s just a plethora of ticks and tacks over my own thought processes.

When I first started this development blog, I wrote the following in the “About” section: “I’m going to focus on the thorns in our side; Or how to work around all pesky limitations, all pain in the neck around different kinds of libraries and technologies that pulverize our precious time”. I originally planned to post at least once a week. And despite having enough content, and enough time to write, I was unable to fulfill this weak, fragile requirement formulated by my wanting mind. Click here to read more.

Your identity just got OWNED, or “How to figure out OwnerId, CommitterId, and why isn’t the committer always the owner”


The identity trinity: tbl_Changeset, tbl_VCIdentityMap and Constants


First of all, please note that this post applies to TFS2013. Earlier or later versions may have a different structure, leaving this deprecated or invalid for you.

Now, I’m posting this just out of awareness, because I had to look around a lot before I figured out how some of the tables of the project collection database are related. Usually we’d see these kinds of relationships denoted by foreign keys and whatnot, and I don’t exactly know the reason this isn’t the case here. Must’ve a motive.

Not many people will find use in this, but it may be very important if you’re customizing TFS or migrating it. Or just for any shadowy reason you might have. Click here to read more.

Same yet different. Getting information from a TFS Request (WebAccess JSON)

This is the third part of a series on how to implement a validation plugin using ITeamFoundationRequestFilter.

You can go to the first part by clicking the link below:

https://conradoclarkdeveloper.com/2015/03/02/iteamfoundationrequestfilter-part1-tfs

In this post I’ll explain how to handle work item create/update requests from WebAccess.


What’s in the request again ?


Last time we figured out what Visual Studio requests to TFS in order to create/update Work Items. With this information, we’ve created a simple validator which prevents a specific user from creating work items. It may work wonders when the request is being sent to the ClientService.asmx service as VS does, but unfortunately this kind of operation is not centralized, so if you try to create the work item through WebAccess, your validation just won’t work.

Keeping that in mind, we’re going to inspect WebAccess to figure out how does it creates/updates work items. It’s actually easier than before because we can see the request in the browser itself: Click here to read more.