<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://arildf.spaces.live.com/mmm2008-04-25_07.02/rsspretty.aspx?rssquery=en-US;http%3a%2f%2farildf.spaces.live.com%2fcategory%2fAnkhSVN%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Random thoughts about AnkhSVN, .NET, Powershell and other stuff: AnkhSVN</title><description /><link>http://arildf.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catAnkhSVN</link><language>en-US</language><pubDate>Mon, 12 May 2008 09:18:37 GMT</pubDate><lastBuildDate>Mon, 12 May 2008 09:18:37 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://arildf.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-1612417020300539472</live:id><live:alias>arildf</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Ankh and AccessViolationExceptions</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!216.entry</link><description>&lt;p&gt;Lately, I've been receiving a number of Ankh error reports that had an AccessViolationException. This was particularly weird because you cannot get that exception from safe managed code. AccessViolationException is the exception you get when you try to access memory you're not allowed to access, usually because you are dereferencing an invalid pointer. Since safe managed code does not expose raw pointers, it's not an exception you usually see in .NET development. &lt;p&gt;As it turned out, the exception came from a property accessor on an object from the Visual Studio automation model, a Project object. This is a COM object exposed to .NET and is implemented by the implementor of a specific project type, such as a C# project or a C++ project. Being a COM object, it can, of course, be implemented in a non-managed language, usually C++, which I suspect is the case here. &lt;p&gt;That answered the question of why such an exception could be caught inside Ankh, but it did not answer why we were seeing it in this particular case. It took a while for me to be able to reproduce it, but one submitter of an error report finally gave me a reproducible recipe: he had clicked on a linker error message in the Visual Studio error list. Linker errors aren't associated with a specific source file, so clicking it usually does you no good, but in this case, it was clear that Ankh was doing something in response to this clicking and in the process, triggering the exception. &lt;p&gt;All files opened in Visual Studio belong to a project. This holds true even if you open a file that's not part of your current solution, or if you don't have a solution open. In that case, Visual Studio has a special project called &amp;quot;Miscellaneous Items&amp;quot;, into which all files not part of any other project are put. This project is usually not shown in the solution explorer, but you can enable it by checking the &amp;quot;Show Miscellaneous files in Solution Explorer&amp;quot; checkbox in Tools-&amp;gt;Options-&amp;gt;Environment-&amp;gt;Documents. &lt;p&gt;This project is not always present; rather, VS will load this project when the first &amp;quot;miscellanous&amp;quot; file is opened and close it again when no such files remain. Ankh has code to detect when a project is loaded and unloaded, and when a project is unloaded, we hook up an event sink to handle the case where files are added to or removed from the project, so we can refresh the status icons in the solution explorer. However, when such an event is raised, we cannot perform the refresh right away, because for some weird reason, the object model for the items hasn't been updated to account for the changes yet. What we chose to do here is to schedule a delayed refresh of the item in question; ie, perform a refresh after a specific amount of time after the event. &lt;p&gt;What happened in this case was this: &lt;ol&gt; &lt;li&gt;User clicked on the linker error in the error list. &lt;li&gt;This, for some reason, triggered Visual Studio to load the Misc. Items project. &lt;li&gt;Ankh then dutifully hooked itself up as an event sink for events on the Misc. Items project &lt;li&gt;Visual Studio would then trigger the &amp;quot;Item added&amp;quot; event for the Misc. Items project (I'm not sure what it actually added, and don't think I'll spend much time trying to investigate it). &lt;li&gt;Ankh would then schedule a delayed refresh of the project. &lt;li&gt;Visual Studio would then, probably because it suddenly realized there was nothing to show, unload the Misc Items project again. &lt;li&gt;Ankh would unhook itself as an event sink for the Misc Items project. &lt;li&gt;&lt;em&gt;However&lt;/em&gt;, the delayed refresh would still fire after its given interval. &lt;li&gt;The refresh would then work against a Project object representing a project that was no longer loaded. Accessing its properties at this time triggers the AccessViolationException.&lt;/ol&gt; &lt;p&gt;The above sequence is a little simplified - Visual Studio did actually fire several Item Added and Item Removed events before unloading the Misc Items project, but it illustrates the problem. &lt;p&gt;One unanswered question here is why the COM/.NET infrastructure allowed the Project object to become invalid when there was still a reference to it in the managed heap. We've had a similar problem with ProjectItem objects, but in that case we got a more informative exception stating &amp;quot;ProjectItem not available&amp;quot;. &lt;p&gt;Oh well, now that I know what the problem is, I only have to find a solution :-)&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Ankh+and+AccessViolationExceptions&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!216.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!216.entry</guid><pubDate>Sun, 12 Nov 2006 18:24:41 GMT</pubDate><slash:comments>6</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!216/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!216.entry#comment</wfw:comment><dcterms:modified>2006-11-12T18:24:41Z</dcterms:modified></item><item><title>Ankh and Exclude From Project</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!215.entry</link><description>&lt;p&gt;There was a user on our users mailing list that asked if there was a way to remove a file from an Ankh-managed project without having Ankh delete it. I was about to tell him to use &amp;quot;Exclude from project&amp;quot; when I realized I should at least test it first (it's not a feature I use a lot). I was pretty shocked to see that we do in fact delete files when Exclude From Project is invoked (if they are versioned - we don't touch unversioned files). &lt;p&gt;I was even more shocked to see how VS behaves in this case:  The API we work against allows handling of delete (as well as rename and add) by implementing &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstrackprojectdocuments2_members(VS.80).aspx"&gt;a certain interface&lt;/a&gt;. This interface has two sets of methods, OnQueryRemove* and OnAfterRemove* (with * being either Files or Directories). Normally, VS will first call OnQueryRemove*, where we have the option of cancelling the delete, and if we don't, call OnAfterRemove*. &lt;p&gt;In the case of &amp;quot;Exclude from project&amp;quot;, OnQueryRemove* is not called. &lt;p&gt;However, OnAfterRemove* &lt;em&gt;is&lt;/em&gt; called, passing in a flag of VSREMOVEFILEFLAGS_IsDirectoryBased, &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.vsremovefileflags(VS.80).aspx"&gt;which is documented as &amp;quot;Deprecated. Do not use.&amp;quot;&lt;/a&gt; &lt;p&gt;Gah.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Ankh+and+Exclude+From+Project&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!215.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!215.entry</guid><pubDate>Fri, 10 Nov 2006 21:09:59 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!215/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!215.entry#comment</wfw:comment><dcterms:modified>2006-11-10T21:09:59Z</dcterms:modified></item><item><title>New wiki</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!204.entry</link><description>&lt;p&gt;I have now changed the Wiki software for the &lt;a href="http://ankhsvn.com/AnkhWiki/AnkhSVN+Wiki+Home.ashx"&gt;AnkhSVN wiki&lt;/a&gt; to the wiki engine &lt;a href="http://dotavery.com/blog/archive/2006/10/19/22818.aspx"&gt;everyone&lt;/a&gt; &lt;a href="http://www.arcware.net/archive/2006/10/17/ScrewTurn-Wiki.aspx"&gt;is&lt;/a&gt; &lt;a href="http://www.ayende.com/Blog/ScrewTurnWikiThumbsUp.aspx"&gt;blogging&lt;/a&gt; &lt;a href="http://pluralsight.com/blogs/craig/archive/2006/10/23/41065.aspx"&gt;about&lt;/a&gt;, namely &lt;a href="http://www.screwturn.eu/"&gt;ScrewTurn&lt;/a&gt;. I was immediately impressed by just how slick ScrewTurn was; dead easy to install and configure. &lt;p&gt;I have imported all the history from the previous Flexwiki-based wiki, however, historical versions lack proper formatting. &lt;p&gt;Unlike the previous wiki, this one requires users to be signed up in order to edit pages. This should let us avoid the wiki spam that plagued the old wiki. &lt;p&gt;Of course, it's still a bit lacking in content, but I'm sure this will pick up quickly - ScrewTurn is so much more &lt;em&gt;fun&lt;/em&gt; to work with than FlexWiki.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+New+wiki&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!204.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!204.entry</guid><pubDate>Mon, 23 Oct 2006 17:48:40 GMT</pubDate><slash:comments>8</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!204/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!204.entry#comment</wfw:comment><dcterms:modified>2006-10-23T17:48:40Z</dcterms:modified></item><item><title>Damien Guard new AnkhSVN committer</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!181.entry</link><description>&lt;p&gt;Damien Guard, more known as &lt;a href="http://www.damieng.com/blog/"&gt;DamienG&lt;/a&gt;, is a &lt;a href="http://www.damieng.com/blog/archive/2006/10/12/AnkhSVN-join.aspx"&gt;new committer on the AnkhSVN project&lt;/a&gt;. He's done some very good work for us already on redesigning the command icon set, and we look forward to working with him on new features in the post-1.0 timeframe. &lt;p&gt;The new icons will be available in the upcoming RC4. &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Damien+Guard+new+AnkhSVN+committer&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!181.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!181.entry</guid><pubDate>Thu, 12 Oct 2006 16:51:02 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!181/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!181.entry#comment</wfw:comment><dcterms:modified>2006-10-12T16:51:02Z</dcterms:modified></item><item><title>Losing faith</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!172.entry</link><description>&lt;p&gt;(Also posted as a reply to a post on our mailing list, &lt;a href="mailto:users@ankhsvn.hm.hm"&gt;users@ankhsvn.hm.hm&lt;/a&gt;) &lt;p&gt;Gah. I'm starting to lose my faith in my fellow programmers. A little background: &lt;p&gt;Ankh uses a couple of hash tables to map EnvDTE.Project and EnvDTE.ProjectItem objects (these are from the VS automation model) representing projects and (doh) their project items to our internal objects representing the same artifacts. These hash tables are used extensively when gathering SVN resources to determine whether commands should be enabled and to provide input to the execution of said commands. In other words, when a command is invoked, the hash tables are queried for our internal objects corresponding to the currently selected ProjectItem or Project. &lt;p&gt;So, if this mechanism fails, commands won't be enabled in the first place, and if they were, they wouldn't execute correctly since no resources had been harvested. &lt;p&gt;And this mechanism will obviously fail if the hash codes retrieved from the Project and ProjectItem objects are different each time they are retrieved using GetHashCode(). &lt;p&gt;I'll leave the rest of this horror story to the imagination of the reader. I will not reveal the particular type of project that is committing this atrocity; suffice it to say that the common name for it starts with an R and ends with -eport Server Project.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Losing+faith&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!172.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!172.entry</guid><pubDate>Thu, 07 Sep 2006 20:56:39 GMT</pubDate><slash:comments>11</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!172/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!172.entry#comment</wfw:comment><dcterms:modified>2006-09-07T20:59:21Z</dcterms:modified></item><item><title>Oops</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!161.entry</link><description>&lt;p&gt; &lt;p&gt;/me sighs. &lt;p&gt;Ok, I screwed up. Due to a braino and a particularly brain dead &amp;quot;feature&amp;quot; of our build script, the MSI wasn't built from the release branch. It was instead built from a short-lived branch I created to integrate our build process with Subversion 1.4. The released MSI is pretty close to what was supposed to have been released (which is of course why I didn't discover this ;-), but lacks some bug fixes made in the last day. &lt;p&gt;An updated MSI can be found at &lt;a href="http://ankhsvn.tigris.org/servlets/ProjectDocumentList?folderID=7315"&gt;the same URL&lt;/a&gt; as the other one.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Oops&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!161.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!161.entry</guid><pubDate>Wed, 16 Aug 2006 18:12:43 GMT</pubDate><slash:comments>8</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!161/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!161.entry#comment</wfw:comment><dcterms:modified>2006-08-16T19:02:48Z</dcterms:modified></item><item><title>AnkhSVN 1.0 release candidate available</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!160.entry</link><description>&lt;p&gt;An AnkhSVN 1.0 release candidate is now available at &lt;a href="http://ankhsvn.tigris.org/servlets/ProjectDocumentList?folderID=7315"&gt;http://ankhsvn.tigris.org/servlets/ProjectDocumentList?folderID=7315&lt;/a&gt;. This is linked to Subversion 1.4 rc4, Berkeley DB 4.4.20, OpenSSL 0.9.8a, Neon 0.25.5 and Zlib 1.2.3.  &lt;p&gt;Note that any application linked to Subversion 1.4 (including the Ankh release candidate) will silently and irrevocably upgrade your working copies to a new working copy format. Use of such an application together with a pre-1.4 client will not work. The TortoiseSVN project makes a 1.4-compatible client available at &lt;a href="http://tortoisesvn.net/downloads"&gt;http://tortoisesvn.net/downloads&lt;/a&gt;. 1.4-compatible versions of the svn binaries can be found with the AnkhSVN release candidate.  &lt;p&gt;Also, the release candidate is linked to Berkeley DB 4.4. If you are using a local (file://) BDB repository with Ankh, it will need to be upgraded. Our general recommendation is to avoid the use of BDB for file:// access in favour of FSFS repositories.  &lt;p&gt;Changes since 0.5.5:  &lt;ul&gt; &lt;li&gt;Internal diff no longer shows duplicates  &lt;p&gt; &lt;li&gt;Fix a memory leak in the NSvn.Core.Pool class  &lt;li&gt;Clicking the X in the commit dialog now performs a cancel, regardless of whether the most recent action was a cancel or not  &lt;li&gt;NSvn exceptions are now serializable  &lt;li&gt;Commit dialog now supports Ctrl-Enter for proceeding with a commit  &lt;li&gt;Commit dialog text control now supports Ctrl-A to select the whole text  &lt;li&gt;NSvn.Core.Client.Delete now supports the 'force' parameter... :-/  &lt;li&gt;Status icons in the solution explorer are no longer overwritten by VSS ones  &lt;li&gt;Configuration dialog has templates for the most common diff and merge tools  &lt;li&gt;Individual project items can now be refreshed with the Ankh-&amp;gt;Refresh command  &lt;li&gt;The '?' status no longer propagates up the solution explorer treeview  &lt;li&gt;New projects are now automatically SVN-added if they are versionable  &lt;li&gt;Add Solution To Subversion Repository now warns the user if some projects are not under the solution root  &lt;li&gt;New configuration dialog  &lt;li&gt;Config file changes are picked up without having to restart VS  &lt;li&gt;Fix for a memory leak in the solution explorer  &lt;li&gt;Redesigned delete support  &lt;li&gt;Support for the VS refresh button  &lt;li&gt;Fix for a problem in which a premature solution explorer refresh after a folder add terminates the rename of the newly added folder and forces it to be named &amp;quot;NewFolder1&amp;quot;.  &lt;li&gt;We now call svn_utf_initialize so that iconv SOs don't have to be loaded for every SVN error message.  &lt;li&gt;Workaround for Windows Workflow Foundations beta 2 bug  &lt;li&gt;GDI handle leak plugged  &lt;li&gt;All dialogs now invariably support standard Enter/Esc for OK/Cancel  &lt;li&gt;Blame now works correctly on compound items  &lt;li&gt;Use Visual Studio SDK for better VS integration  &lt;li&gt;The commit dialog can now be suppressed with the Shift key, like other dialogs  &lt;li&gt;Support for alternative names for the SVN administrative directory now uses the functionality offered by SVN itself  &lt;li&gt;New &amp;quot;Working Copy Explorer&amp;quot; tool window  &lt;li&gt;Better support for renames and moves  &lt;li&gt;Redesigned VS integration to take advantage of the Visual Studio SDK  &lt;li&gt;Better unicode support for log messages  &lt;li&gt;Support for VS 2005 solution folders  &lt;li&gt;Dialog tab order fixes  &lt;li&gt;New installer using WiX instead of the VS.NET setup projects  &lt;li&gt;Fix bug in which Ankh would refuse to load if VC++ wasn't installed  &lt;li&gt;Prevent .svn dir from being autoadded  &lt;li&gt;Support rename on folders in projects  &lt;li&gt;Prevent Ankh from autoadding ignored files  &lt;li&gt;Prevent the solution explorer from repainting itself while Ankh is scanning the tree, improving solution load performance  &lt;li&gt;Running of SVN commands from the VS command line is now streamy  &lt;li&gt;New command that lets user send a suggestion or error report without actually experiencing an error  &lt;li&gt;Diff/Patch uses path relative to the solution directory  &lt;li&gt;Better support for third party project types  &lt;li&gt;Support commits on working copies created from multiple repositories  &lt;li&gt;Commit dialog is now &amp;quot;pseudomodal&amp;quot;, allowing the user to diff or view files using VS directly  &lt;li&gt;Ankh no longer loads on command line builds that use /rebuild or /clean  &lt;li&gt;Support for blame  &lt;li&gt;Diff/patch between arbitrary revisions  &lt;li&gt;Use the correct name for the Tools menu in non-english versions of VS  &lt;li&gt;Support for log  &lt;li&gt;Better support for file deletions  &lt;li&gt;More intelligent status cache, improving performance (especially in pathological cases)  &lt;li&gt;Support for VS 2005  &lt;li&gt;Error reports contains the DTE version (and thus implicitly the version of VS)  &lt;li&gt;Support for lock/unlock  &lt;li&gt;New design for the repository explorer  &lt;li&gt;Support for Enterprise Template projects  &lt;li&gt;Support for database projects  &lt;li&gt;Lots of tweaks, bug fixes and performance enhancements.  &lt;p&gt;&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+AnkhSVN+1.0+release+candidate+available&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!160.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!160.entry</guid><pubDate>Tue, 15 Aug 2006 21:25:34 GMT</pubDate><slash:comments>34</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!160/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!160.entry#comment</wfw:comment><dcterms:modified>2006-08-16T16:48:04Z</dcterms:modified></item><item><title>Ok, maybe not this weekend, then</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!157.entry</link><description>&lt;p&gt;I promised a release candidate this weekend, but it looks like that won’t happen. Integrating our build process with Subversion 1.4 and Neon 0.25 took a lot more effort than expected. We’re now probably looking at either Monday or Tuesday.
&lt;p&gt;And we still haven’t quite decided on the version number…&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Ok%2c+maybe+not+this+weekend%2c+then&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!157.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!157.entry</guid><pubDate>Sun, 13 Aug 2006 20:26:51 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!157/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!157.entry#comment</wfw:comment><dcterms:modified>2006-08-13T20:26:51Z</dcterms:modified></item><item><title>Ankh, how do I number thee?</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!151.entry</link><description>&lt;p&gt;We’ve decided to go ahead and make a new Ankh release.  A release candidate will come this weekend, and then a proper release will follow in a week if there are no major problems found. I’ve closed &lt;a href="http://ankhsvn.tigris.org/issues/show_bug.cgi?id=270"&gt;the last&lt;/a&gt; of the issues marked 0.6 in our &lt;a href="http://ankhsvn.tigris.org/servlets/ProjectIssues"&gt;issue tracker&lt;/a&gt;, so this seems like a good time to do it 
&lt;p&gt;One problem remains, though: what version number to give it? The obvious choice would be 0.6, since our last “official” release was 0.5.5. However, we’re getting sort of tired of the 0.6 marker by now, and we’re considering to maybe give it a version number of 0.7 or even higher. One person I talked to on IRC yesterday suggested 0.9 or even 1.0. 
&lt;p&gt;There are already 35 different snapshots all marked as 0.6.0.* around, and the idea is that giving it a higher version number might give a much clearer message that this is indeed a &lt;em&gt;new &lt;/em&gt;version. 
&lt;p&gt;What do you think?&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Ankh%2c+how+do+I+number+thee%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!151.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!151.entry</guid><pubDate>Thu, 10 Aug 2006 18:22:21 GMT</pubDate><slash:comments>10</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!151/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!151.entry#comment</wfw:comment><dcterms:modified>2006-08-10T18:24:22Z</dcterms:modified></item><item><title>Is Ankh a dead project?</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!147.entry</link><description>&lt;p&gt;To avoid any potential confusion, I’ll start out this post by answering the question above: heck no! 
&lt;p&gt;I’m posting this because it is starting to dawn on me that there seems to be a pretty widespread perception that we are indeed a dead project.  In particular, &lt;a href="http://www.nabble.com/for-.NET--tf2058859.html"&gt;this thread&lt;/a&gt; on the Subversion users mailing list made this pretty clear.
&lt;p&gt;And of course, the reason for this is obvious. Our &lt;a href="http://ankhsvn.tigris.org"&gt;tigris.org&lt;/a&gt; front page has the following text: “The latest stable release of AnkhSVN was 0.5.5, released on August 17, 2004.” 
&lt;p&gt;Ouch.
&lt;p&gt;So it’s been nearly two years since our last “stable” release.  Why no releases since then? It’s not like there hasn’t been active development on it since. We’ve added tons of new features, gained VS 2005 compatibility and fixed lots and lots of bugs. “Snapshot” releases have been made at various intervals (the last one was yesterday), exposing users to the new features.
&lt;p&gt;As I see it, there are primarily two reasons we never made an “official” release. First, most of the users we interact directly with are those who use the snapshots. Whenever we talk to someone still using 0.5.5, the first thing we tell them is to try the latest snapshot instead. There’s been something of a feeling that having the snapshots available is “good enough”.
&lt;p&gt;The second is that work on Ankh, while it has never been dormant, has always been something of a fire-and-movement exercise. Every now and then, life and work interferes with Ankh development, and by the time I get back to it, there’s always a feeling of “well, we should at least fix this bug before a release” or “this feature needs to go in before we can call it 0.6”. Halfway into fixing those bugs and implementing those features, life and/or work interferes again, and the cycle starts from the beginning.
&lt;p&gt;I’m starting to think this cycle needs to end.
&lt;p&gt;There is no doubt in my mind that the current snapshots are miles ahead of 0.5.5 both in features and stability. If we took yesterday’s snapshot, renamed the MSI and released it as 0.6, it would be a huge improvement over 0.5.5. And it would definitely shatter the impression that the project is abandoned. 
&lt;p&gt;Maybe we should do just that. What do other people think?&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Is+Ankh+a+dead+project%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!147.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!147.entry</guid><pubDate>Tue, 08 Aug 2006 16:25:09 GMT</pubDate><slash:comments>7</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!147/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!147.entry#comment</wfw:comment><dcterms:modified>2006-08-08T16:27:12Z</dcterms:modified></item><item><title>Why Ankh isn’t an SCC provider</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!146.entry</link><description>&lt;p&gt;A question that comes up occasionally is why AnkhSVN wasn’t implemented using the Microsoft Source Code Control Interface (MSSCCI). This is a de-facto standard today for integrating source control into various IDEs and other application, so it would seem like a natural choice for integrating Subversion into the Visual Studio IDE. However, we chose to take another approach and implement AnkhSVN as a regular Visual Studio addin instead.
&lt;p&gt;Initial planning on AnkhSVN started in December of 2002. At that time, it was a school project that was supposed to last throughout the spring semester of 2003 at &lt;a href="http://www.hio.no/content/view/full/4563"&gt;Oslo University College&lt;/a&gt;. I had some clear ideas about what I wanted to do for my project: I wanted to make something open source, I wanted to relate it somehow to Subversion and I wanted to implement it using C#/.NET, since those were my interests at the time (and still are). Using MSSCCI conflicted with goals #1 and #3. In 2002, the MSSCCI API was under a strict Non-Disclosure Agreement, meaning we wouldn’t have been able to make something open source if we were to use it. There was also a rumor going around that getting hold of the right person inside Microsoft in order to obtain the documentation for the API and sign the NDA was something of a Kafkaesque quest. Since we didn’t attempt to go down this route, I never did find out whether this was true.
&lt;p&gt;Another problem with MSSCCI is that it is essentially a specification for a number of exported C functions from a DLL. At that time I had dabbled with C#/.NET for a while and wanted to try it out for a major project. A .NET assembly cannot (easily, there are ways…) export regular functions, so implementing an MSSCCI provider using .NET would prove to be rather awkward. The technical problems here aren’t insurmountable, however, I can easily think of some ways in which we could have made Ankh using MSSCCI and still got to write most parts of it in .NET. If there hadn’t been other reasons for not using MSSCCI, this problem alone wouldn’t have caused us to make the choice we did. If MSSCCI had been the best choice, it’s also quite possible that we would have implemented the whole thing in C++ instead.
&lt;p&gt;MSSCCI, unfortunately, has one more major problem: it’s not a very good API. It is more or less designed around the needs of Visual Sourcesafe, and source control systems that don’t subscribe to the same ideology as VSS plain don’t fit very well into it. Eric Sink (founder of Sourcegear, which makes the &lt;a href="http://www.sourcegear.com/vault/"&gt;Vault&lt;/a&gt; source control system) , in his excellent series &lt;a href="http://software.ericsink.com/scm/source_control.html"&gt;Source Control HOWTO&lt;/a&gt;, writes about MSSCCI’s deficiencies in &lt;a href="http://software.ericsink.com/scm/scm_ide_integration.html"&gt;Chapter 9: Source Control Integration with IDEs&lt;/a&gt;. Which is good, because then I don’t have to go on about it here.
&lt;p&gt;We already knew about most of the criticisms leveraged at MSSCCI back when we were planning the project, so it proved to be the final and decisive argument against using it for Ankh.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Why+Ankh+isn%e2%80%99t+an+SCC+provider&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!146.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!146.entry</guid><pubDate>Thu, 03 Aug 2006 15:12:27 GMT</pubDate><slash:comments>6</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!146/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!146.entry#comment</wfw:comment><dcterms:modified>2006-08-03T15:12:27Z</dcterms:modified></item><item><title>Ankh: Why doesn’t “Add Solution To Repository” add all my projects?</title><link>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!139.entry</link><description>&lt;p&gt;The ”Add Solution To Subversion Repository” command in Ankh seems to be one of the greatest sources of confusion among Ankh users. They will often try to import one of their solutions and find that one or more of the projects are not included in the project. There is a message in the output pane stating that the project(s) could not be imported as they are not under the solution root. In snapshot 33, this was changed to display a warning dialog when projects in the solution were detected not to be under the solution root and allow the user to cancel out of the operation. This was added as the realization grew on me that this was causing a lot of users trouble.
&lt;p&gt;So what is this “solution root”? Quite simply, it is the directory in which the solution file (.sln) is located. When performing the “Add Solution To…” command, Ankh will assume this is to be the root of the new working copy that is created. In other words, it will import projects that are located in directories beneath this directory (or in it), and omit those that are outside this directory. 
&lt;p&gt;Obviously, we could try to make a guess at some kind of common root that included all projects and use that. However, what if the projects are on different drives? Or if the only common root is the root of the drive? You really don’t want to import that. This is not an uncommon situation, with VS having a tendency to put web projects in C:\inetpub\wwwroot. Unfortunately, this cannot be easily dealt with, and there is also another complication with regards to this kind of solution layout.
&lt;p&gt;Subversion does not allow you to commit items from two disjunct working copies in the same commit, even if the two working copies in question are from the same repository. So if you have parts of your project in a working copy under C:\inetpub\wwwroot and the remaining parts under D:\Projects, the commit will fail if it includes files from both locations. This is not something Ankh can work around in a reasonable manner. At best we could detect the situation and display a warning before it happens, but such an operation would be rather complex for not much gain. After all, if the commit errors out, no actual damage is done to the working copy.
&lt;p&gt;I can think of two scenarios where this limitation in “Add Solution To…” is a problem:
&lt;ol&gt;&lt;li&gt;&lt;div&gt;The solution has projects scattered all over (as in the above wwwroot example).
&lt;/div&gt;&lt;li&gt;&lt;div&gt;All of the projects are in a single tree, but the solution file is not in the root directory.
&lt;/div&gt;&lt;/ol&gt;&lt;p&gt;For the first scenario, the only thing you can currently do is import the projects using another Subversion client such as TortoiseSVN or the command line client, then set up the working copies as you want them. The limitation with regards to committing items from disjunct working copies will still apply, though. For this reason alone I recommend against doing this. Restructuring the source to be in a single tree is far preferable.
&lt;p&gt;For the second scenario, again, using another Subversion client to do the initial import is an acceptable workaround. Ankh will pick up on a working copy no matter what as long as the solution directory is under Subversion control. However, I think Ankh could do more in this scenario by allowing the user to manually specify the common root that is to be imported. Recent refactorings in the Ankh source would also make this easier to achieve; in fact, it would be pretty easy.
&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1612417020300539472&amp;page=RSS%3a+Ankh%3a+Why+doesn%e2%80%99t+%e2%80%9cAdd+Solution+To+Repository%e2%80%9d+add+all+my+projects%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=arildf.spaces.live.com&amp;amp;GT1=arildf"&gt;</description><comments>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!139.entry#comment</comments><guid isPermaLink="true">http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!139.entry</guid><pubDate>Thu, 13 Jul 2006 22:14:37 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://arildf.spaces.live.com/blog/cns!E99F8B43533149B0!139/comments/feed.rss</wfw:commentRss><wfw:comment>http://arildf.spaces.live.com/Blog/cns!E99F8B43533149B0!139.entry#comment</wfw:comment><dcterms:modified>2006-07-13T22:14:38Z</dcterms:modified></item></channel></rss>