>From my point of view two examples of dependency from previous post is just 
>example of same relation between changes.

However in real life this two cases treated differently.

Example 1.

For first case when there is no intersection between two changes

{A', B', C'}
{D'. E', F'}

two current Solaris patches will be created

patch 111111-01 contains {A', B', C'}
patch 222222-01 contains {D'. E', F'}

and this kind of dependency is specified by REQUIRE field and it is directly 
stated in pkginfo file (for each deltapackage) in patch 222222-01:

SUNW_REQUIRES=111111-01

For the second case if change includes file from previous change:

Example 2.

{A', B', C'} and {C'', D', E'}

Instead of have two patches with dependency specified patch for first change 
will be revisioned:

111111-01 contains {A', B', C'}
111111-02 contains {A', B', C'', D', E'}

This is called accumulation for Solaris patches and this is biggest patch 
problem Solaris has.

Why?

1. Patches grows up in result absorbing more and more files.
2. Patch configuration scripts hard to maintain because they should accumulate 
all previous revision scripts.
3. Independent patch lines tend to merge to each other.

Example 3.

We have
patch 111111-01 contains {A', B', C'}
patch 222222-01 contains {D', E', F'}

new cage is {C'', D''}

for this case we are creating new revision 

patch 111111-02 contains {A', B', C'', D'', E', F'}

Also in 111111-02 descriptor we define 

SUNW_OBSOLETES=222222-01

This usually happens many times and in result we will have huge unmaintainable 
patch which includes all possible change lines - nightmare to support on RE 
side and deal with on customer side.

Another problem is that if for some area we fixing bugs let say once a month 
issuing patch for it once a month, and in another area also once a month, then 
when they merge we will have twice a month to issue patch or if 10 patch lines 
merged together  then 10 times a month! And regular developer can not do this 
because changes from different areas are involved - it require special expert 
to maintaining such a complicated patch.

So defining this relation with REQUIRE notation look much prettier. For Example 
2 we will have 

Example 4.

patch 111111-01 contains {A', B', C'}
patch 222222-01 contains {C'', D'. E'}

and descriptor in 222222-01:

SUNW_REQUIRES=111111-01

which is absolutely same what we have in Example 1.

For Example 3 we will have 
Example 5.

patch 111111-01 contains {A', B', C'}
patch 222222-01 contains {D', E', F'}

new cage is {C'', D''}

for this case we are creating new patch 

patch 333333-01 contains {C'', D''}

with descriptors:

SUNW_REQUIRES=111111-01
SUNW_REQUIRES=222222-01

This way all patches represents only one change and much more manageable in 
result on both developers and customer sites. In this case however we will have 
more small patches and much more advanced dependency tree - which is not big 
deal to handle while we have new C-code for it in Solaris 10FCS. And recursive 
patching is what need to be provided to handle this bigger dependancy tree as 
well as big number of small patches.

vassun
 
 
This message posted from opensolaris.org

Reply via email to