<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>michal.Log</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/michalma/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/michalma/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:19:41 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Interesting problem when using IVsSccEnlistmentPathTranslation</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/interesting-problem-when-using-ivssccenlistmentpathtranslation</link>
      <pubDate>Fri, 04 Jun 2010 12:57:21 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/06/04/interesting-problem-when-using-ivssccenlistmentpathtranslation/</guid>
      <description><![CDATA[One of the less recognized features of TFS integration with Visual Studio, is that we track how...]]></description>
      <content:encoded><![CDATA[<p>One of the less recognized features of TFS integration with Visual Studio, is that we track how selection changes in Solution Explorer and we update Team Explorer accordingly. The motivation is that when you use Team menu, to for example create work item, you want to do it in the most probable team project – team project that contains files that you were editing.</p> <p>Of course in order to do it, we need to to translate path we get from IVsSelectionEvents into server path. The path we get is a URL, whenever you select a http website in solution explorer. This is where IVsSccEnlistmentPathTranslation comes in. It is Visual Studio service, which allows translation of project path to enlistment path and vice versa. The enlistment path is the physical path, used by the scc provider. The project path is the path (possibly virtual) that is stored in the solution file. So for example <a href="http://localhost/foo">http://localhost/foo</a> is a project path, and c:\wwwroot\foo is a enlistment path. So far so good? You can try it, it works great.</p> <p>The problem is after you open solution from source control. If solution contains http website and there already exists website with this name. Website will ask you if you want to overwrite existing website or not. If you say no, it will create <a href="http://localhost/foo_1">http://localhost/<strong>foo_1</strong></a>. However sln file stays unchanged and project path is still <a href="http://localhost/foo">http://localhost/foo</a>. The 10$ question is what kind of path you get from IVsSelectionEvents… Yes, it’s foo_1 :) The translation service does not have method that will handle it (it cares only about <a href="http://localhost/foo">http://localhost/foo</a> and c:\\wwwroot\foo).</p> <p>The solution: just use something else. In our case I’m using __VSHPROPID.VSHPROPID_ProjectDir from the IVsHierarchy object that is provided by IVsSelectionEvents as well.</p>]]></content:encoded>
    </item>
    <item>
      <title>Project system integration with version control - please don't optimize too much!</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/project-system-integration-with-version-control-please-dont-optimize-too-much</link>
      <pubDate>Tue, 01 Jun 2010 08:28:31 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/06/01/project-system-integration-with-version-control-please-dont-optimize-too-much/</guid>
      <description><![CDATA[Motto for today is: "We should forget about small efficiencies, say about 97% of the time: premature...]]></description>
      <content:encoded><![CDATA[<p>Motto for today is: <p>"We should forget about small efficiencies, say about 97% of the time: <strong>premature optimization is the root of all evil</strong>" <p>Visual Studio 2010 was significant for TFS version control for many reasons (biggest being probably schema change), but one that every one in the division was paying attention was that we became the default scc provider. So whatever perf tests were run (and we were running a lot of them) it was hitting tfs scc provider. In different points in time different project system groups were realizing that calling GetSccGlyph is not optimized for not source controlled projects and takes some significant amount of time (I think 15% when loading C# project). They also realized that in those cases, GetSccGlyph is a no-op. You may see where it is going :) Of course project system knows the bindings that are stored in it, because it's passing them to the RegisterSccProject call. So as you can imagine, obvious solution was to bypass calling GetSccGlyphs if there are no bindings. <p>Surprisingly tfs is not a victim in this story. We add bindings as soon as project is added to source control and we keep them forever (or until you remove them). However some scc providers don't use bindings at all (one of the providers for Source Depot) or save them lazily (e.g. on checkin - VSS). In that case, they won't be called and no glyphs will be displayed. In some cases the provider may depend even more on GetSccGlyph calls and other functionality will be broken as well. <p>Solution: rollback changes to the project systems and make GetSccGlyph in tfsprovider very, very fast. Please don't cut public calls just because it works with one scc provider!</p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>"tf difference" improvements in TFS 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/tf-difference-improvements-in-tfs-2010</link>
      <pubDate>Tue, 01 Jun 2010 08:27:03 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/06/01/tf-difference-improvements-in-tfs-2010/</guid>
      <description><![CDATA[One very small annoyance that we were hitting regularly in TFS 2008 was trying to diff file which...]]></description>
      <content:encoded><![CDATA[<p>One very small annoyance that we were hitting regularly in TFS 2008 was trying to diff file which didn't have pending change. Assuming that we want to see changes checked in on a server, we would need to specify some less than trivial parameter: <p>"tf diff foo.txt;W~T" <p>If there was a pending rename involved, it would fail and we will need to specify both paths separately: <p>tf diff foo.txt;W~T<br />Item $/michal1/foo.txt was not found in the current workspace. <p>In TFS 2010 we hide all those "ifs" and "unless": <p>tf diff foo.txt<br />Comparing local to latest: e:\ws\foo.txt <p>So what we do? Whenever user specifies single path which doesn't have pending change, we are comparing local file to latest version on the server. We gracefully handle pending changes and different encodings. <p>When we don't do it? Whenever user specified /r (recursive) or wildcard (*) - we don't want to start diffing unknown number of files. Please just use folderdiff for that.</p></p></p></p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>TFS Msscci Provider 2010 RTM</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/tfs-msscci-provider-2010-rtm</link>
      <pubDate>Tue, 27 Apr 2010 10:46:00 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/04/27/tfs-msscci-provider-2010-rtm/</guid>
      <description><![CDATA[As you can read in Brian's blog...]]></description>
      <content:encoded><![CDATA[<p>As you can read in Brian's blog (<a href="http://blogs.msdn.com/bharry/archive/2010/04/26/tfs-2010-power-tools-have-released.aspx">http://blogs.msdn.com/bharry/archive/2010/04/26/tfs-2010-power-tools-have-released.aspx</a>), we shipped RTM version of the TFS Msscci Provider (yay!). It is available here:</p><p><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/bce06506-be38-47a1-9f29-d3937d3d88d6">http://visualstudiogallery.msdn.microsoft.com/en-us/bce06506-be38-47a1-9f29-d3937d3d88d6</a></p><p><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/bce06506-be38-47a1-9f29-d3937d3d88d6"></a>As Mario describes on the download page, we made a few nice improvements in this release. The biggest one was adding support for Sybase extension to the msscci interface- SccQueryInfoEx function. It decreases number of server calls PowerBuilder is doing, when loading project and allows it to avoid hitting some problems around white spaces and new lines added when generating files. You should also start seeing changeset numbers inside the IDE.</p><p>We also try to report situations when IDE is creating multiple workspace mappings. It's not necessarily always a bad thing but in a few situations it causes super hard to troubleshoot problems. The warning is displayed only during "Open from source control" so I hope it won't be too annoying. It just asks the user to validate workspace mappings in Team Explorer.</p>]]></content:encoded>
    </item>
    <item>
      <title>Version control only specific folders inside a website project (or: "TFS 2010 and DotNetNuke source control - How can I exclude folders/files from source control?")</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/version-control-only-specific-folders-inside-a-website-project-or-tfs-2010-and-dotnetnuke-source-control-how-can-i-exclude-foldersfiles-from-source-control</link>
      <pubDate>Sun, 25 Apr 2010 16:21:00 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/04/25/version-control-only-specific-folders-inside-a-website-project-or-tfs-2010-and-dotnetnuke-source-control-how-can-i-exclude-foldersfiles-from-source-control/</guid>
      <description><![CDATA[Last week we had interesting problem described on the tfs...]]></description>
      <content:encoded><![CDATA[<p>Last week we had interesting problem described on the tfs forum:&nbsp;<a mce_href="http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/thread/f1486665-02b5-42c1-bc4d-bbc29169670f" href="http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/thread/f1486665-02b5-42c1-bc4d-bbc29169670f">http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/thread/f1486665-02b5-42c1-bc4d-bbc29169670f</a>&nbsp;</p><p>The problem:</p><p>How to version control only specific folders inside a website. Please keep in mind, we are ordinary user, not a project creator. We don't want to reimplement GetSccFiles :) We have c:\workspace\nuke website full of folders, but we want to version control only App_code and DesktopModules folders.</p><p>Solution:</p><p>workspace mappings. The website will be still reporting some errors, but cloaking root of the website and mapping only specific folder allows us to get exactly what we wanted:</p><span class="Apple-style-span" style="font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; color: rgb(51, 51, 51); line-height: 16px; "><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-family: inherit; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; list-style-type: none; text-decoration: none; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-family: Verdana, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; font-size: 8pt; ">$/tp - c:\workspace</span></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-family: inherit; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; list-style-type: none; text-decoration: none; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-family: Verdana, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; font-size: 8pt; ">(Cloak) $/tp/nuke</span></p><p style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-family: inherit; margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; list-style-type: none; text-decoration: none; "><span style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-family: Verdana, sans-serif; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; font-size: 8pt; ">$/tp/nuke/App_Code - c:\workspace\nuke\App_code</span></p></span><p><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 11px; line-height: 16px; ">$/tp/nuke/DesktopModules - c:\workspace\nuke\DesktopModules</span></p><p><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 11px; line-height: 16px; "></span>Enjoy!&nbsp;</p><p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Project system integration with version control - how to *not* control specific files</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/project-system-integration-with-version-control-how-to-not-control-specific-files</link>
      <pubDate>Sun, 25 Apr 2010 15:28:00 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/04/25/project-system-integration-with-version-control-how-to-not-control-specific-files/</guid>
      <description><![CDATA[Controlling state of the files is a bread and butter of the scc provider's work. However from time...]]></description>
      <content:encoded><![CDATA[<p>Controlling state of the files is a bread and butter of the scc provider's work. However from time to time project is referencing file that should not be source controlled. It can be a generated file (like a xap file inside web application projects, or idl generated files inside cpp project) or a common file, which is shared by many other projects. How project creator should mark them as not source controlled? How scc provider will know that? Well, there are two possible solutions, each one with its weaknesses and&nbsp;strengths.</p><p>&nbsp;The first solution, which I favor, is two implement IVsSccProject2.GetSccFiles in a way that it returns success (S_OK) and empty list for the interesting files. Returning success is a key here, because otherwise caller should fall back to GetMKDocument() call. Returning empty list indicates that this node in the hierarchy has no source controlled files&nbsp;associated&nbsp;with it.</p><p>The second solution is to use DTE.SourceControl.ExcludeItem. This solution is much simpler than the first one - we don't need to complicate implementation of the GetSccFiles after all. However It comes with a price:</p><p>- calling ExcludeItem will cause scc provider to be loaded. This maybe a noticeable delay when you create first project in a Visual Studio session</p><p>- format in which excluded items are stored is not standardized. If you create project with one scc provider being active and you change provider, the file will not be excluded any more. This is not true between VSS and TFS, just because they both use vspscc file format.</p><p>- ExcludeItem does not work for websites. In case of both VSS and TFS we store excluded items in a hint file. Websites don't have project files, so keeping hint files would be much more complicated.</p><p>I hope that this description will let you make the right design decision in the future!</p>]]></content:encoded>
    </item>
    <item>
      <title>Project system integration with version control - "All files are up to date" ????</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/project-system-integration-with-version-control-all-files-are-up-to-date</link>
      <pubDate>Sat, 13 Feb 2010 20:26:00 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/02/13/project-system-integration-with-version-control-all-files-are-up-to-date/</guid>
      <description><![CDATA[If you are following closely Brian's blog or history of TFS in general, you may realized that in VS...]]></description>
      <content:encoded><![CDATA[<p>If you are following closely <a href="http://blogs.msdn.com/bharry/">Brian's blog</a> or history of TFS in general, you may realized that in VS 2010, for the first time, we are the default source control provider in every Visual Studio (except of Express). This, combined with dogfooding and general drive to speed up IDE, made us to do several perf improvements. Among others we improved our code responsible for project system integration. I will try to describe our improvements and lessons I learned in a few blog posts, since they may be beneficial for all users (today's blog post), scc provider developers and project developers.</p> <p>The problem I want to describe today was actually not fixed in VS 2010 (it's high on my todo list though) and can shave off some time off the solution load. Its symptoms are progress dialog popping up during solution load and "All files are up to date" text in the Output Window.</p> <p>So what is happening? Basically whenever the project is open, we are collecting list of files it is referencing and we check if they all exist on the disk. If any of those files are gone, we are performing get. The usual cause of this problem is referencing binary files that are created during build or long time forgotten resources files that are not used in the source code. To fix the problem you can manually inspect solution structure, you may also turn on soap tracing to see what files/directories we are requesting. Then remove invalid references. You may also try using registry key described by Tim <a href="http://blogs.msdn.com/hippietim/archive/2006/03/14/551320.aspx" mce_href="http://blogs.msdn.com/hippietim/archive/2006/03/14/551320.aspx">here</a>. Be aware that the functionality I describe below will not be working when this key is turned on!</p> <p>Why we are doing this get at all? It is required to handle situation when user does "get" on the project file and its new version is referencing new files. The get invoked by the user will download only project file and trigger its reload. During reload, the code I described above will download new files.</p> <p>Hope this helps!</p>]]></content:encoded>
    </item>
    <item>
      <title>Different approaches to binding solution to source control</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/different-approaches-to-binding-solution-to-source-control</link>
      <pubDate>Thu, 07 Jan 2010 10:57:09 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2010/01/07/different-approaches-to-binding-solution-to-source-control/</guid>
      <description><![CDATA[Last Tuesday I was going through all tasks that we have open related to TFS Msscci provider, tfpt...]]></description>
      <content:encoded><![CDATA[<p>Last Tuesday I was going through all tasks that we have open related to TFS Msscci provider, tfpt bind and bindings in general. One of the <em>gems</em> ;) I found was automating the process to bind existing solution to source control.</p> <p>The story goes as follows: user is migrating source code to tfs. He can use VSSConverter or he can just copy sources to a workspace, run “tf add” and then “tf checkin”. The problem he still has, is that when he opens migrated solution in VS, it is not recognized as source controlled. The things it’s still lacking are “bindings” – pieces of information in sln and proj files, that indicate that this solution is in fact source controlled. </p> <p>If the solution was bound to VSS before, then the problem may be fixed already for him, because latest VssConverter will fix bindings for you. If not, you can run “tfpt bind” which will definitely do it.</p> <p>If solution was not bound at all (e.g. you were using CVS or SVN), then the solution is not that trivial. Although we don’t have a tool that would fix this situation yet, I will provide you information that can simplify the process a lot.</p> <p>The possible solutions (afaik) are as follow:</p> <ol> <li>The most obvious one ( and the slowest). After opening the solution, go to File-&gt;Source Control-&gt;Change Source Control. Select each project and click Bind.</li> <li>Right click solution and choose “Add Solution to Source Control” or run DTE command File.TfsAddSolutionToSourceControl. If the solution has not been checked in yet (you still have pending adds) than you are good and the task is done. If the files are already on the server, then you will be prompted whether you want to select different location, cancel or ignore. Click Ignore.</li> <li>You can attempt to manually add bindings to the solution and project files (they are all text files after all). It may be very simple for a known projects but in general is less trivial – each project can have them in different format (e.g. websites, setup projects) and projects located outside of solution root add extra complexity. Please backup before, don’t checkin without proper testing etc. Do it on your own risk!</li></ol> <p>I feel that approach #2 is the simplest and safest one. You can automate it a little by running “devenv solution.sln /command file.tfsAddSolutionToSourceControl” which will open the solution and execute the command. I feel that opening the solutions after the migration is a good idea anyway, just to do a quick sanity testing.</p> <p>Good luck!</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Management Studio, TFS Msscci Provider and branching</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/sql-management-studio-tfs-msscci-provider-and-branching</link>
      <pubDate>Thu, 31 Dec 2009 13:03:10 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2009/12/31/sql-management-studio-tfs-msscci-provider-and-branching/</guid>
      <description><![CDATA[Recently user has reported problem when using SQL Server Management Studio and TFS. When he branched...]]></description>
      <content:encoded><![CDATA[<p>Recently user has <a href="http://social.msdn.microsoft.com/Forums/en-CA/tfsversioncontrol/thread/8efbcd38-bac3-428c-87f9-e1fac2aa2857">reported</a> problem when using SQL Server Management Studio and TFS. When he branched folder and opened a newly created solution, he kept pending changes on the original projects instead of the branched one. Veterans of source control integration in Visual Studio (2003, 6.0 and others) will probably recognize this problem immediately – solution file has embedded server path, which is not updated during branch operation.</p> <p>This problem, however, was solved already in VS 2003, by introduction of mssccprj.scc files, which store bindings and are local only. So why SSMS does not use them? Well, it’s a partially our fault, partially weakness of Msscci standard. Creation of mssccprj files is optional and we didn’t enable it for SSMS. The second problem is that we need to know what files should contain bindings, and embed necessary information in mssccprj.scc for them. The knowledge of those files is not standardized and both VSS and TFS msscci providers have necessary file extensions stored in the registry. As you can guess, we didn’t include ssms extensions in that list.</p> <p>The good news is that you can fix this problem with a simple registry script. Of course be careful – the script is provided without any warranty:</p> <p><em>Windows Registry Editor Version 5.00 </em> <p><em>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Team Foundation Server MSSCCI Provider]<br>"BindingExtensions"="vbp, mak, dsp, sln, vbproj, csproj, vcproj, mdp, vfpproj, vdp, vdproj, dbp, vsmproj, vsmacros, hwproj, etp, etpproxy, actproj, atp, dmp, mdmp, dsw, vjsproj, csdproj, vbdproj, ssmssln, ssmssqlproj, ssmsasproj, ssmsmobileproj" </em> <p><em>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Team Foundation Server MSSCCI Provider\Settings\VssProvider\SQLWB.EXE]<br>"issues"=dword:00000510 </em></p>]]></content:encoded>
    </item>
    <item>
      <title>What to do when history ends with delete, source rename?</title>
      <link>https://docs.microsoft.com/archive/blogs/michalma/what-to-do-when-history-ends-with-delete-source-rename</link>
      <pubDate>Thu, 31 Dec 2009 11:17:48 GMT</pubDate>
      <dc:creator><![CDATA[Michal Malecki MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michalma/2009/12/31/what-to-do-when-history-ends-with-delete-source-rename/</guid>
      <description><![CDATA[As you probably know, one of the biggest changes in the version control part of TFS 2010 was moving...]]></description>
      <content:encoded><![CDATA[<p>As you probably know, one of the biggest changes in the version control part of TFS 2010 was moving from item mode (files and folders are uniquely tracked by itemId) to slot mode (itemId is attached to a slot and renaming file or folder changes its itemId). Matt wrote more about it <a href="http://blogs.msdn.com/mitrik/archive/2009/05/28/changing-to-slot-mode-in-tfs-2010-version-control.aspx">here</a>. </p> <p>Of course when we made this change, we had to ask ourselves how much we want to try to pretend on the client level, that everything is the same way as in TFS 2008. Soon we understood that we can’t completely hide we should provide tools that allow user to find all information he needs about given file, the same way as in the previous versions. Most often the tool we are talking about is History, that allow us to track file changes across merges, branches and renames.</p> <p>One situation when history does not provide all information user (or at least user, who is new to slot mode) expects is when he start tracking history, by specifying file name <strong>before</strong> the rename. For example:</p> <p>7&nbsp;&nbsp;&nbsp; rename&nbsp;&nbsp;&nbsp; michal&nbsp;&nbsp;&nbsp; 12/31/2009 1:30:18 PM&nbsp;&nbsp;&nbsp; $/michal1/1/MyAddin1/MyAddin12/Connect2.cs&nbsp;&nbsp;&nbsp; <br>6&nbsp;&nbsp;&nbsp; rename&nbsp;&nbsp;&nbsp; michal&nbsp;&nbsp;&nbsp; 12/31/2009 1:30:02 PM&nbsp;&nbsp;&nbsp; $/michal1/1/MyAddin1/MyAddin1/Connect2.cs&nbsp;&nbsp;&nbsp; <br>5&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp; michal&nbsp;&nbsp;&nbsp; 12/31/2009 9:13:46 AM&nbsp;&nbsp;&nbsp; $/michal1/1/MyAddin1/MyAddin1/Connect.cs  <p>user specifies:  <p>tf history $/michal1/1/MyAddin1/<font color="#000080"><u>MyAddin1</u></font>/Connect2.cs  <p>and sees the following dialog:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/history_2.png" original-url="http://blogs.msdn.com/blogfiles/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/history_2.png"><img title="history" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="history" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/history_thumb.png" original-url="http://blogs.msdn.com/blogfiles/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/history_thumb.png" width="244" border="0"></a> <p>Now he doesn’t know what happened after file was renamed in the changeset 6. The only information we have is that it wasn’t deleted, it was renamed - “source rename” tells us that.</p> <p>So what we can do? We have 2 choices:</p> <ul> <li>We can open changeset 6 and see what item has a rename change. This is very easily done from the history dialog, but may not be conclusive if there were more than one rename in the changeset:<br><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/changeset_2.png" original-url="http://blogs.msdn.com/blogfiles/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/changeset_2.png"><img title="changeset" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="175" alt="changeset" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/changeset_thumb.png" original-url="http://blogs.msdn.com/blogfiles/michalma/WindowsLiveWriter/Whattodowhenhistoryendswithdeletesourcer_C8E6/changeset_thumb.png" width="244" border="0"></a> </li> <li>We can open history in the item mode: “tf history $/michal1/1/MyAddin1/MyAddin1/Connect2.cs /itemmode”. This way we will see history of this item, the same we would see it with VS 2008. Unfortunately we can do it only from the command line.</li></ul> <p>Happy New Year!</p>]]></content:encoded>
    </item>
  </channel>
</rss>