merging project files to latest commits

I have recently installed the egit plugin in my eclipse installation to fetch and keep my local CB installation updated to the latest copy on gitbhub.
(i have the coldbox/system folder mapped in a cf mapping in the CF administrator instead of in my webroot so that i can share it on various projects). This has been working well.

most of my projects were created using the Advanced applicationTempalates. as i fetch the latest from the repository, i notice that there are on going updates to the ApplicationTemplates/Advanced files as well and i have the issue that newer version of the templates are coming in all the time.

I was wondering, how I how can i easily manage and automate any merged changes to those file into my projects without overriding any of my own seettings. until now i have been comparing dates on files and trying to figure out the changes and manually copy them in.

for example the latest config/Coldbox.cfc is dated August 04 (mine is july 29th)… (obviously i have my own settings that i wish not to loose )…I see there is now a CacheBox.cfc which i don’t have at all.

Has anybody else come up with a way to stay up to date? I have the latest system files at all times, but can be out of sync on project files — like config files and it is pain to figure what the differences are and handle it manually.

I think you’re fighting an uphill battle because the changes may be very disruptive to your app as the march to 3.0 final continues.

I’d hunker down on a version and wait for something more final so that you can make one set of updates. Otherwise, you’ll have to adapt to new changes as you’re experiencing.

  • Gabriel

You might find the process a little easier if you’re using source control. I’d give git a try - you don’t even need a server. Just commit changes before and after pulling the files down or use something like gitx to see the changes before you commit them. You may get merge conflicts sometimes, but they should be fairly easy to identify and fix.

Best wishes,
Peter

thanks for the response… are you saying i should version control my own project template skeleton against the one from the coldbox-platform on github.? i am using egit to fetch the CB system files currently which works fine because the changes are one-directional.
but with this proposal, i am worried about accepting changes from the HEAD that i do not want as it will pick differences in things like appname= “app name goes here” for example.

i guess i am not seeing how mechanically that would work.

I am not sure how you have setup your project, but if your config file is separate from the coldbox directory, what you say is not an issue.

Regards,

Andrew Scott

http://www.andyscott.id.au/

maybe i am not being clear… in fact, what i describe in my mail below is what i am painstakingly having to do right now.
let me describe what i have done and what i have to do by showing an example.

  1. i have fetched the latest copy of CB from into a local directory on my machine. 2) this local directory c:…\coldbox\system is setup as a CF mapped path so that all my CB projects in my webroot can find the CB system files (the latest version with all patches fixes, enhancements, etc…) 3) i have myCBapp project for example which was built some time ago by using the CFbudiler app creation wizard which copies the files and folders from the c:… coldbox\ApplicationTemplates\advanced directory into my builder project. 4) i modify for example the config/ColdBox.cfc to my own needs for this app 5) right now i am seeing from my latest fetch and comparing the files on github that many are newer than the ones that i have. If i want to be fully in sync… I need to compare all the files (mostly the ones in config folder ) figure out the differences and then merge them into my myCBapp version manually 5) i note for example that i have no CacheBox.cfc in my config folder for any of my CB proejcts. (i will need to copy this file into each one of my config folders) 6) i also note that coldbox-platform/config/coldbox.cfc has a new struct called . Mine does not. so i must decide do i merge this in to all my coldbox.cfc files are not 7) sometimes the changes are enhancements and do not need to always be kept up to date., but sometimes, you have to receive updates that are critical if you are getting the bleeding edge version of the system files. I have had errors occur in the past until i have updated my config files. The question is how to do this effortlessly and without loss of settings… I can imagine this can only get more difficult with the more CB projects you have. perhaps mapping the github CB platform to the my local CB system files against projects that were created months ago is in hindsight, not a good decision? On 09/10/2010 12:04 PM, Andrew Scott wrote:

One thing is that the run for 3.0 final is on, so the commits will be multiplied in the coming weeks as we push for final release. The core has been solid for a year now and just a few pending things are loose.

I have definitely seen some issues with cfthread and loosing scope, we see that in the old cache and also in the logbox async appenders. I really have a hard time testing this, since it is incredibly hard to reproduce. So help is appreciated.

Wirebox is coming along great on my dev machines, and soon it will be decoupled. Anyways, tahnks

Luis F. Majano
President
Ortus Solutions, Corp

ColdBox Platform: http://www.coldbox.org
Linked In: http://www.linkedin.com/pub/3/731/483
Blog: http://www.luismajano.com
IECFUG Manager: http://www.iecfug.com

If you are simply looking to use the settings from the new commits while ensuring your settings are not overwritten, you can do this:

public struct function configure(){
var config = {
coldbox = { appName = ‘Advanced Application’,
(… place the config of the new commit here … should be lots of code )
}
return config;
}

Place the above in some CFC (like coreConfig.cfc)

Next, in your ColdBox.cfc, do this:

component name=‘ColdBox’ {
// Configure ColdBox Application
function configure(){
var coreConfig = new path.to.coreConfig();
coreConfig = coreConfig.configure();
// Copy the structures into this variables scope
var k = ‘’;
for (k in coreConfig)
variables[k] = coreConfig[k];

// Override anything from core here…
coldbox.appName = ‘My Application’;

// Or, place your entire normal ColdBox config below
coldbox = { appName = ‘My Application’, … }

}
}

Essentially, in this example we create a struct, copy the values to the variables scope and then overwrite the keys in the variable scope with your config. If the advanced template adds a new key, you will get it, but, your settings will win if there is a conflict.