commsfwutils/commsbufs/mbufgobblerlayer/how to clone this component.txt
author hgs
Thu, 23 Sep 2010 10:22:55 +0100
changeset 78 dd4909eb54cd
permissions -rw-r--r--
201037_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
78
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     1
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     2
#####################################
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     3
#                                   #
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     4
# Update Content And Filenames tool #
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     5
#                                   #
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     6
#####################################
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     7
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     8
The Update Content And Filenames tool allows you to clone this component to a new implementation.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
     9
It does the boring housekeeping to rename the source, change target DLL name,
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    10
update the UIDs etc. etc.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    11
It does this by performing recursive search and replace on file names and content.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    12
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    13
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    14
How to clone this component to a new implementation:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    15
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    16
-	Ensure this component builds as is:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    17
        cd group
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    18
        sbs -c winscw_udeb
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    19
        sbs -c winscw_udeb.test
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    20
	If you're feeling conscientious you could test it too :-)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    21
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    22
-	Nominate an appropriate name for the new component.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    23
		e.g. Test123
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    24
	If there's any chance the new component will end up
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    25
	in a deliverable, please choose the name more carefully
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    26
	than I just did
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    27
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    28
-	Copy this folder (the one containing this README file),
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    29
	naming the new folder as something appropriate,
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    30
	relating to the component name you have chosen
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    31
	(and keep it lower case to keep linux builds happy)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    32
		e.g. "Copy Of mbufgobblerlayer" => "test123layer"
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    33
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    34
-	Ensure the new folder and all its contents are writable.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    35
	(if you got mbufgobblerlayer from a version control system it might be read-only)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    36
	
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    37
Then, in the *new* folder:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    38
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    39
-	Modify the file UpdateContentsAndFilenames.ini accordingly,
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    40
	to reflect the values required by your new component.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    41
	Obviously you'll need to obtain new UIds rather than just making them up :-)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    42
	 (Ask your architect where new UIds should come from these days)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    43
	The "Search" fields specify the current values which will be replaced.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    44
	The "Replace" fields must be changed from CHANGEME to the desired values.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    45
		e.g. [Name].Replace=CHANGEME => [Name].Replace=Test123
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    46
		e.g. [DllUid].Replace=CHANGEME => [DllUid].Replace=01234567
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    47
		etc..
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    48
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    49
-	Ensure Python 2.6.2 or greater is installed. This should come down automatically
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    50
  with SymSEE or whatever you used to put together your development environment.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    51
	
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    52
-	Open a command window in the *new* folder, and run:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    53
		updatecontentandfilenames.py
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    54
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    55
-	Before you make further modifications, ensure the script updated
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    56
	everything correctly:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    57
        cd group
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    58
        sbs -c winscw_udeb
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    59
        sbs -c winscw_udeb.test
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    60
	(and run any regression tests over the new copy of the component)
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    61
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    62
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    63
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    64
Notes and caveats:
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    65
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    66
1.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    67
Remember you're taking a copy, so if you're cloning something feature-rich,
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    68
please think carefully about whether either..
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    69
	- you really do want 2 copies of the same feature code knocking about, which is
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    70
	  totally ok if you're just trying something out and/or you want to isolate the new
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    71
	  component from changes in the cloned component
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    72
.. or ..
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    73
	- you should be considering cloning a more basic implementation,
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    74
	  then applying techniques such as inheritance to reuse the existing features
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    75
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    76
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    77
So it's more suited for cloning basic ("feature-impoverished?") implementations as a
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    78
starting point for developing more functional implementations.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    79
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    80
e.g. mbufgobbler Layer	-> some new layer
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    81
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    82
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    83
2.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    84
Correct functioning of the script of course assumes some reasonably pragmatic
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    85
correlation between class names, folder names, dll names etc.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    86
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    87
It's easy for you to add extra search and replace pairs as needed to address
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    88
more complicated renaming tasks. Just add more sections to the
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    89
UpdateContentsAndFilenames.ini file. The [Header Names] are not used for anything, they're
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    90
just for your reference and should probably be unique across the file.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    91
The really important bit is the Search/Replace pairs.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    92
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    93
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    94
3.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    95
Each search/replace pair is applied in turn. So don't expect to be able to do anything
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    96
sneaky like swapping strings in a single run.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    97
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    98
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
    99
4.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   100
Reusing this script elsewhere should be easy,
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   101
because there is no special significance to the .ini file section names-
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   102
they are just there to assist the user in populating the fields.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   103
i.e. .ini file sections purely exist to group together each Search/Replace pair.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   104
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   105
Just copy the updatecontentandfilenames.* files into the root folder of a new
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   106
copy of the component that you want to clone, edit the ini file, and run the python script.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   107
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   108
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   109
5.
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   110
Have fun..
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   111
dd4909eb54cd 201037_01
hgs
parents:
diff changeset
   112