{"id":999,"date":"2010-07-11T15:11:49","date_gmt":"2010-07-11T15:11:49","guid":{"rendered":"http:\/\/www.navision-blog.de\/2010\/07\/11\/fake-f-make-1-33-0-released\/"},"modified":"2010-07-12T06:59:58","modified_gmt":"2010-07-12T06:59:58","slug":"fake-f-make-1-33-0-released","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2010\/07\/11\/fake-f-make-1-33-0-released\/","title":{"rendered":"&#8220;Fake &#8211; F# Make&#8221; 1.33.0 released"},"content":{"rendered":"<p>Yesterday I released \u201cFAKE \u2013 F# Make\u201d version 1.33.0. This release has lots of small bug fixes and a couple of new features.<\/p>\n<p>Important links:<\/p>\n<ul>\n<li><a href=\"http:\/\/bitbucket.org\/forki\/fake\/wiki\/Home\">Project page<\/a><\/li>\n<li><a href=\"http:\/\/bitbucket.org\/forki\/fake\/downloads\">Download<\/a><\/li>\n<li><a href=\"http:\/\/github.com\/forki\/FAKE\">Repository<\/a><\/li>\n<\/ul>\n<h5>Git helpers -Fake.Git.dll<\/h5>\n<blockquote><p>Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux kernel development. Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server.<\/p>\n<p>[<a href=\"http:\/\/en.wikipedia.org\/wiki\/Git_%28software%29\">Wikipedia<\/a>]<\/p><\/blockquote>\n<p>In the last couple of months I worked on small helper library for controlling <a href=\"http:\/\/en.wikipedia.org\/wiki\/Git_%28software%29\">Git<\/a>. This library is now released as part of \u201cFAKE \u2013 F# Make\u201d. You can find the source code at <a title=\"http:\/\/github.com\/forki\/FAKE\/tree\/master\/src\/app\/Fake.Git\/\" href=\"http:\/\/github.com\/forki\/FAKE\/tree\/master\/src\/app\/Fake.Git\/\">http:\/\/github.com\/forki\/FAKE\/tree\/master\/src\/app\/Fake.Git\/<\/a>.<\/p>\n<p>Features:<\/p>\n<ul>\n<li>Repository handling\n<ul>\n<li>init, clone<\/li>\n<\/ul>\n<\/li>\n<li>Submodules\n<ul>\n<li>init, clone, information about submodules<\/li>\n<\/ul>\n<\/li>\n<li>Branches\n<ul>\n<li>checkout, create, delete, merge, rebase, tag, pull, push, reset, commit, \u2026<\/li>\n<\/ul>\n<\/li>\n<li>SHA1 calculation<\/li>\n<\/ul>\n<h5>Documentation generation with James Gregory&#8217;s docu tool<\/h5>\n<blockquote><p><strong>What&#8217;s a docu?<\/strong> A documentation generator for .Net that isn&#8217;t complicated, awkward, or difficult to use. Given an assembly and the XML that&#8217;s generated by Visual Studio, docu can produce an entire website of documentation with a single command.<\/p>\n<p>[<a href=\"http:\/\/docu.jagregory.com\/\">docu website<\/a>]<\/p><\/blockquote>\n<p>Fake comes bundled with James Gregory\u2019s documentations generator \u201c<a href=\"http:\/\/docu.jagregory.com\/\">docu<\/a>\u201d, which converts <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/b2s063f7%28VS.71%29.aspx\">XML-Documentation<\/a> comments into HTML files. All you need to do is downloading a <a href=\"http:\/\/bitbucket.org\/forki\/fake\/downloads\/templates.zip\">template<\/a> and calling the docu task inside your build script:<\/p>\n<pre style=\"font-family: consolas;\">!+ (buildDir + <span style=\"color: maroon;\">\"*.dll\"<\/span>)\r\n \u00a0\u00a0\u00a0 |&gt; Scan\r\n\u00a0\u00a0\u00a0\u00a0 |&gt; Docu (<span style=\"color: blue;\">fun<\/span> p <span style=\"color: blue;\">-&gt;\r\n<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {p <span style=\"color: blue;\">with\r\n<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ToolPath = docuPath + <span style=\"color: maroon;\">\"docu.exe\"<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TemplatesPath = templatesSrcDir\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OutputPath = docsDir })<\/pre>\n<p>Since FAKE builds its own documentation with docu I started to add more (and hopefully better) XML doc comments. My plan is to describe more and more of the internal FAKE functions in the next releases. An updated HTML-document (generated via a <a href=\"http:\/\/docu.jagregory.com\/\">docu<\/a> task) can be found at <a title=\"http:\/\/www.navision-blog.de\/fake\/\" href=\"http:\/\/www.navision-blog.de\/fake\/\">http:\/\/www.navision-blog.de\/fake\/<\/a>.<\/p>\n<h5>Side by side specification<\/h5>\n<p>For Test-driven development (TDD) it\u2019s sometimes nice to have the specifications next to the implementation files since the specs are considered as documentation.<\/p>\n<p>By using a tool like <a title=\"VsCommands\" href=\"http:\/\/mokosh.co.uk\/vscommands\/\">VSCommands<\/a> it is possible to group the implementation with the specs (see also <a href=\"http:\/\/gist.github.com\/457248\">http:\/\/gist.github.com\/457248<\/a>).<\/p>\n<p>This \u201cside by side specification\u201d makes TDD a lot easier but of course  we don&#8217;t want to deploy the specification classes and the test data.<\/p>\n<table>\n<tbody>\n<tr>\n<td><img loading=\"lazy\" style=\"display: inline; border-width: 0px;\" title=\"Side by side specification\" src=\"http:\/\/www.navision-blog.de\/images\/FakeFMake1.33.0released_B55F\/image.png\" border=\"0\" alt=\"Side by side specification\" width=\"221\" height=\"201\" \/><\/td>\n<td>==&gt;<\/td>\n<td><img loading=\"lazy\" style=\"display: inline; border-width: 0px;\" title=\"After &quot;RemoveTestFromProject&quot;\" src=\"http:\/\/www.navision-blog.de\/images\/FakeFMake1.33.0released_B55F\/image_3.png\" border=\"0\" alt=\"After &quot;RemoveTestFromProject&quot;\" width=\"142\" height=\"117\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>FAKE has a new feature which automatically removes all specification files and test framework references according to a given convention:<\/p>\n<pre style=\"font-family: consolas;\">Target <span style=\"color: maroon;\">\"BuildApp\"<\/span> (<span style=\"color: blue;\">fun<\/span> _ \u2013<span style=\"color: blue;\">&gt;\r\n<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0 !+ <span style=\"color: maroon;\">@\"src\\app\\**\\*.csproj\"<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |&gt; Scan\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |&gt; <strong>Seq.map (\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 RemoveTestsFromProject\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AllNUnitReferences\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: green;\">\/\/ a default references convention<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 AllSpecAndTestDataFiles <span style=\"color: green;\">\/\/ a default file convention\r\n<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )<\/strong>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |&gt; MSBuildRelease buildDir <span style=\"color: maroon;\">\"Build\"<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |&gt; Log <span style=\"color: maroon;\">\"AppBuild-Output: \"<\/span>\r\n)<\/pre>\n<p>The conventions are simple functions and can be customized e.g.:<\/p>\n<pre style=\"font-family: consolas;\"><span style=\"color: green;\">\/\/\/ All Spec.cs or Spec.fs files and all files containing TestData<\/span>\r\n<span style=\"color: blue;\">let<\/span> AllSpecAndTestDataFiles elementName (s:string) =\r\n\u00a0\u00a0\u00a0\u00a0 s.EndsWith <span style=\"color: maroon;\">\"Specs.cs\"<\/span> ||\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s.EndsWith <span style=\"color: maroon;\">\"Specs.fs\"<\/span> ||\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (elementName = <span style=\"color: maroon;\">\"Content\"<\/span> &amp;&amp; s.Contains <span style=\"color: maroon;\">\"TestData\"<\/span>)<\/pre>\n<h5>Miscellaneous<\/h5>\n<ul>\n<li>SQL Server helpers are moved to Fake.SQL.dll\n<ul>\n<li>Additional functions for attaching and detaching databases.<\/li>\n<\/ul>\n<\/li>\n<li>FileHelper.CopyCached function was added\n<ul>\n<li>Copies the files from a cache folder. If the files are not cached or the original files have a different write time the cache will be refreshed.<\/li>\n<\/ul>\n<\/li>\n<li>EnvironmentHelper.environVarOrDefault added\n<ul>\n<li>Retrieves the environment variable or a given default.<\/li>\n<\/ul>\n<\/li>\n<li>Fixed <a href=\"http:\/\/github.com\/forki\/FAKE\/issues\/closed#issue\/3\">Issue 3<\/a>: toRelativePath calculates paths with ..\\..\\ if needed<\/li>\n<li>Added a build time report to the build output.<\/li>\n<li>XPathReplace and XMLPoke tasks added.\n<ul>\n<li>Replaces text in an XML file at the location specified by an XPath expression.<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"http:\/\/research.microsoft.com\/en-us\/people\/mbarnett\/ilmerge.aspx\">ILMerge<\/a> task added<\/li>\n<li><a href=\"http:\/\/wix.sourceforge.net\/\">Windows Installer XML (WiX)<\/a> task added<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Yesterday I released \u201cFAKE \u2013 F# Make\u201d version 1.33.0. This release has lots of small bug fixes and a couple of new features. Important links: Project page Download Repository Git helpers -Fake.Git.dll Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by Linus Torvalds for Linux [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[448,546],"tags":[664,545,544,592,593,644,531,54,594],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/999"}],"collection":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=999"}],"version-history":[{"count":13,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/999\/revisions"}],"predecessor-version":[{"id":1012,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/999\/revisions\/1012"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=999"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}