Machine.Specifications (MSpec) has moved (and git rocks)

EDIT:The actual clone url is here, the original link is to the github page. Sorry for the confusion:

git clone git://

I just completed breaking Machine.Specifications into its own repository. It is now here:

Why did I do this? Many reasons, for one, git is better suited for many smaller repositories. There is support for submodules so that you can combine and nest repositories. As soon as I finish breaking out all of the various pieces of Machine I will make Machine the root of all Machine projects so you only have to grab the one. Also, having MSpec in its own repository allows you to keep its history in one place. This is helpful if you want to listen to/care about changes only to MSpec and not the rest of the Machine library.

If you’ll notice, Machine.Specification’s commit log is fully intact. Not only that, but it doesn’t have any of the commits for non-related libraries. Yep, I was able to cleanly split it into its own branch and preserve history. Like I said, git rocks. How did I do this? Check out this awesome guide. After following that guide, I used a script to prune empty commits. Quite painless and powerful. I love git.

Oh and be sure to take a look at the latest stuff in there, Alexander Groß added a ReSharper 4.1 and 4.5 runner and Adam Tybor added TeamCity support to the console runner. Thanks guys!

This entry was posted in machine, mspec. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • aaronjensen

    Hi Henning,

    I don’t have any plans to write one, but I doubt it would be much work (unless I use APIs unavailable on SL, which may be the case) if someone wanted to take it on.

  • Henning Anderssen

    Is there any plans for a silverlight version of MSpec?

  • aaronjensen

    Hi Kyralessa,

    Sorry about all the mess. MSpec was in heavy turmoil in its early days while I experimented with syntax. There isn’t a migration guide that I know of, I should do another post with the current way things are since they’ve pretty much stabilized. The problem you’re seeing right now is that you need to add a reference to the Machine.Specifications.NUnit assembly. This was added so that XUnit assertions can be used instead of NUnit if you so desired. In reality, this doesn’t serve much purpose and I plan to do away with the NUnit (or XUnit) dependencies.

    I’ll try and do better about obsoleting or at least documenting changes if I make any drastic changes in the future. Also, if you have any other issues with it, feel free to ping me on twitter @aaronjensen so I can help.

  • Kyralessa

    OK, figured out that the extension methods moved into the NUnit and XUnit namespaces. Well and good. Definitely need some ObsoleteAttribute, though! :)

  • Kyralessa

    Argh. And now the extension methods don’t work anymore, for no apparent reason. Surely you have working projects that use mspec, and that broke on more recent versions in a similar fashion. Do you have a migration guide anywhere?

  • Kyralessa

    My boss is having us try out mspec. It’s pretty nifty, once you create a few snippets and macros to ease the pain of typing everything.

    Since I couldn’t do a .ShouldBeGreaterThanOrEqualTo in v0.2, I downloaded the latest version from git so I could add it myself to our in-house copy. And all of a sudden all the places where I used ConcernAttribute had ugly red squigglies. Where did it go?

    Searching back through the git commits, I found that you’d renamed Concern to Subject. Fair enough. But in the future, could you maybe use the ObsoleteAttribute in cases like that? It’s a lot easier to figure out what the new name is if the old one points to it instead of just giving an error.

  • Louis Salin

    Hey Aaron,
    We are trying to use MSpec to internally test our silverlight application. I downloaded the source and ported Machine.Specifications and Machine.Specification.Reporting so far, and it looks like we are going to have to create our own runner.

    I was wondering if you’d be willing to maintain a Silverlight version of MSpec? :) I’m more than willing to help out a bit with that. However, I don’t know anything about git. You can contact me at louis (dot) phil (at) gmail (dot) com.

    Thanks for the great BDD framework!

  • David Mohundro

    Github apparently has a few problems with cloning repositories via http – I’ve had problems with this on other repositories as well, but it always seems to work via the git protocol.

  • aaronjensen

    Odd. Until you mentioned it I didn’t even know it was possible to clone via http, so I’m a bit clueless :) Glad you were able to clone it from home though.

  • Jay Turpin

    I’m using the latest version of msysgit. I have been able to clone ironruby with no issue – using both http and git protocols. I retried it from home this evening and got the same results using the http protocol, though the git protocol worked fine.

  • Aaron Jensen


    Are you able to clone other git repositories? What version of git are you using? This is likely either a firewall issue or a client issue. I was able to clone using http.

    I’m using msysgit

  • Jay Turpin

    Thanks! I got further, but now I get this error (I have to use the http: protocol instead of git: since I am behind a corporate proxy server):

    $ git clone
    Initialized empty Git repository in c:/Projects/machine.specifications/.git/
    error: File 0000000000000000000000000000000000000000 (
    machine.specifications.git/objects/00/00000000000000000000000000000000000000) co
    Getting pack list for
    Getting alternates list for

  • Aaron Jensen

    Hey Jay,

    That’s my fault. I linked to the github page not the github repository. If you click the link you can see the clone url:

    git clone git://



  • Jay Turpin

    Not sure if I’m just being a dumb git newbie, but I get the following error when trying to clone the repository:

    $ git clone
    Initialized empty Git repository in c:/Projects/machine.specifications/.git/
    fatal: not found: did
    you run git update-server-info on the server?