Blame Manual/Filesystem/branches.texi

b130a0
@subsection Goals
b130a0
9bfd15
This directory implements the Subversion's branches concept in a
9bfd15
trunk, branches, tags repository structure.
b130a0
b130a0
@subsection Description
b130a0
9bfd15
The @file{branches/} directory structure is an intermediate space
9bfd15
between @file{trunk/} directory structure and @file{tags/} directory
9bfd15
structure.
b130a0
b130a0
@subsection Usage
b130a0
995423
If changes committed up to the main develpment line are all
995423
predictable (e.g., there is just one person committing changes), there
995423
is no a big need of using @file{branches/} directory structure, in
995423
this case we can go straight from @file{trunk/} to @file{tags/}.
995423
However, when there is no way to predict changes in the main
995423
development line (e.g., there are many people working at it at the
995423
same time) it is needed to find out a different place for changes to
995423
occur in more predictable ways. 
9bfd15
995423
At this point, several options may arise to create branches. In the
995423
CentOS Artwork Repository we prefer to use the idea of separating the
995423
main development line into different major development lines whose
995423
receive frequent update in a fixed period of time. In this
995423
configuration, a major development line is a directory structure
995423
branched from @file{trunk/} directory structure. That is, we take a
995423
functional instance of @file{trunk/} directory structure and store it
995423
under @file{branches/} directory structure using a branch identifier
995423
and the same hierarchy the main development line uses.
9bfd15
995423
When we create separete development lines, this way, we are creating a
995423
major development line that will receive minor updates to current
995423
functionalities but won't introduce new functionalities nor remove old
995423
ones. This is very importat if you need to have a predictable
995423
behaviour for that branch content through a period of time. When that
995423
period of time is gone, a new major development line is created to
995423
introduce new functionalities from @file{trunk/} directory structure
995423
and so repeating the whole production cycle.
9bfd15
995423
In order to create branches inside the CentOS Artwork Repository the
995423
whole repository structure must be considered. This is because all
995423
directory structures stored under @file{trunk/} directory structure
995423
are connected among themselves. This way, we create branches for the
995423
whole @file{trunk/} directory structure and never to individual
995423
components inside it. On the other hand, creating branches for the
995423
whole @file{trunk/} directory structure duplicates lots of files and
995423
demands a considerable amount of storage space which is not
995423
convenient. As an intermediate solution, we do not create branches for
995423
the @file{trunk/Identity/} directory structure, but the
995423
@file{trunk/Manual}, @file{trunk/Scripts} and @file{trunk/Locales}
995423
directory structures only. This way, we create documentation,
995423
automation scripts and locale information for specific revisions of
995423
@file{turnk/Identity} directory structure.
9bfd15
995423
A good reason to create a major development line could be
995423
documentation.  Consider how hard it could be build a documentation
995423
manual if the target of it is changing unpredictably; what are we
995423
documenting? Something similar happens with @command{centos-art}
995423
command-line, if the directory structure the @command{centos-art} was
995423
design to work with changes unexpectedly it is very hard to implement
995423
a path-based functionality in that environment; where are we retriving
995423
files from or saving them to?
9bfd15
995423
Assuming there is no way to predict changes in main development line,
995423
the creation of new @file{branches} inside the CentOS Artwork
995423
Repository uses The CentOS Project Release Schema.  This is, a new
995423
major development line is created every 2 years using @file{trunk/}
995423
directory structure as reference. Each major development line is
995423
updated regulary in order to create frozen lines under @file{tags/}
995423
directory structure every 6 months.
9bfd15
995423
@image{trunk/Identity/Models/Img/Scripts/Bash/Functions/Path/figure-1,400pt}
9bfd15
995423
The updates commited up to individual major development lines need to
995423
be merged into the @file{trunk/} directory structure in order for
995423
further major development lines to benefit from previous major
995423
development lines improvements.  The appropriate moment to commit from
995423
major development lines to @file{trunk/} directory structure is when
995423
the frozen line of a major development line is been created.  This
995423
way, the main development line is the central place for changes, a
995423
place to concentrate changes from different major development lines
995423
that may be or not being developed at the same time.
9bfd15
995423
As general convenction, when a new major development line is created,
995423
functionalities from previous major development lines are included
995423
into the new development line. However, improvements for components
995423
included from previous major development lines are not handled inside
995423
the new major development line which imported them. Such improvements
995423
are handled by the previous development line and merged up to main
995423
development line to improve the main development line, in the same way
995423
the new major development line merges the improvements of the new
995423
functionalities it was created for. As final resault, both changes
995423
merged from new and previous major development lines will be included
995423
into the next major development line.
b130a0
b130a0
@subsection See also
b130a0
b130a0
@menu
9bfd15
* Filesystem trunk::
9bfd15
* Filesystem tags::
b130a0
@end menu