Closed richardprior closed 11 years ago
Additionally, I see there's already a pull request for a custom timestamp formatter but it was over a year old and I didn't agree with the need for a migration requiring a base class, it seems more of a configuration option to me - hence the addition to MigrationOptions.
Thanks for your pull request. Having a customizable way of specifying timestamps seems to be an important feature.
I like your approach, except that having an IMigrationTimestampProvider as a property on the MigrationOptions doesn't help for the console app. When you launch Mig# from the command line, you cannot pass object instances - only text. So my preferred solution to this would be to use MEF as suggested in the discussion of #31. In this way, the client doesn't need to set the IMigrationTimestampProvider explicitly and it works for the console app as well. What do you think about that?
That's a good point, I don't use the console application so missed that. I've updated the time stamp provider to be loaded by MEF and added an export attribute to support multi-modules.
The load priority of time stamp providers is now:
From the first glance it looks like you did a fabulous job here! This will be definitely included in the next version of Mig#. Currently, I'm busy working on another project but I think I will get to it mid December.
Remaining questions from the top of my head:
I've updated the code to raise an error if more than one TimestampProvider is defined for the same module as well as adding some tests to support this.
I didn't want to edit your wiki directly, but I've also put up some initial documentation (https://github.com/richardprior/MigSharp/wiki/Timestamp-Documentation-Update) which should replace the 'Specifying a Timestamp (Version) of a Migration' section of your manual. I've tried to keep it in the same style as the rest of your documentation so hopefully it should just be a case of cutting and pasting.
(Thanks for taking the time to create and maintain this project by the way, your efforts are most appreciated!)
Wow - excellent work! Can't wait to integrate it! :+1:
I have a confession to make...I hadn't set up the environment for all the DB specifc tests so only ran the main NUnit project. When investigating another issue which required me running these tests I realised I'd broken the integration tests by exporting intentionally broken timestamp providers in the main test assembly. I've updated the test code so that the migrations and providers used for the timestamp provider tests are compiled into an in-memory assembly and used from there.
I also made an incorrect assumption about the way you were loading migrations. I'd assumed that if a module was specified that the migrations would be filtered on load. It appears that you are loading all the migrations and filtering later so the way the timestamp provider was implemented did not work in all scenarios. I've fixed this as well. All tests are now green :-) (Disclaimer: Haven't run Oracle/Teradata test suites)
I've just finished integrating your changes. Excellent work! Thanks a lot!
No worries, glad I could help. On 5 Dec 2012 15:02, "dradovic" notifications@github.com wrote:
I've just finished integrating your changes. Excellent work! Thanks a lot!
— Reply to this email directly or view it on GitHubhttps://github.com/dradovic/MigSharp/pull/43#issuecomment-11044476.
Adds a IMigrationTimestampProvider property called TimestampProvider to MigrationOpions. This allows the user to customise how they fetch the timestamp from the migration. The current method of post-fixing the timestamp is included in the MigSharp project. Implementions of attribute-based timestamp retrieval and interface-based timestamp retrieval are included in the tests.