views:

63

answers:

4

I have an unusual environment in a project where I have many files that are each independent standalone scripts. All of the code required by the script must be in the one file and I can't reference outside files with includes etc.

There is a common function in all of these files that does authorization that is the last function in each file. If this function changes at all (as it does now and then) it has to changed in all the files and there are plenty of them.

Initially I was thinking of keeping the authorization function in a separate file and running a batch process that produced the final files by combining the auth file with each of the others. However, this is extremely cumbersome when debugging because the auth function needs to be in the main file for this purpose. So I'd always be testing and debugging in the folder with the combined file and then have to copy changes back to the uncombined files.

Can anyone think of a way to solve this problem? i.e. maintain an identical fragment of code in multiple files.

+2  A: 

I'm not sure what you mean by "the auth function needs to be in the main file for this purpose", but a typical Unix solution might be to use make(1) and cpp(1) here.

Ken
+1  A: 

Not sure what environment/editor your using but one thing you can do is to use prebuild events. create a start-tag/end-tag which defines the import region, and then in the prebuild event copy the common code between the tags and then compile...

//$start-tag-common-auth ..... code here ..... //$end-tag-common-auth

In your prebuild event just find those tags, and replace them with the import code and then finish compiling.

VS supports pre-post build events which can call external processes, but do not directly interact with the environment (like batch files or scripts).

GrayWizardx
A: 

I ugly way I can think of:

have the original code in all the files, and surround it with markers like:

///To be replaced automatically by the build process to the latest code
String str = "my code copy that can be old";
///Marker end.

This code block can be replaced automatically by the build process, from one common code file.

Priyank Bolia
+1  A: 

Instead of keeping the authentication code in a separate file, designate one of your existing scripts as the primary or master script. Use this one to edit/debug/work on the authentication code. Then add a build/batch process like you are talking about that copies the authentication code from the master script into all of the other scripts.

That way you can still debug and work with the master script at any time, you don't have to worry about one more file, and your build/deploy process keeps everything in sync.

You can use a technique like @Priyank Bolia suggested to make it easy to find/replace the required bit of code.

Steven M. Cherry