Blame Manuals/Repository/en_US/Introduction/repo-convenctions.texinfo

b32b45
The CentOS Artwork Repository is supported by Subversion
b32b45
(@url{http://subversion.tigris.org/}), a version control system which
b32b45
allows you to keep old versions of files and directories (usually
b32b45
source code), keep a log of who, when, and why changes occurred, etc.,
b32b45
like CVS, RCS or SCCS.  
b32b45
b32b45
When using Subversion there is one @emph{source repository} and many
b32b45
@emph{working copies} of that source repository. The working copies
b32b45
are independent one another, can be distributed all around the world
b32b45
and provide a local place for designers, documentors, translators and
b32b45
programmers to perform their works in a descentralized way.  The
b32b45
source repository, on the other hand, provides a central place for all
b32b45
independent working copies to interchange data and provides the
b32b45
information required to permit extracting previous versions of files
b32b45
at any time.
b32b45
b32b45
@subsection Repository policy
b32b45
@cindex Repository policy
b32b45
b32b45
The CentOS Artwork Repository is a collaborative tool that anyone can
b32b45
have access to. However, changing that tool in any form is something
b32b45
that should be requested in @email{centos-devel@@centos.org} mailing
b32b45
list.  Generally, people download working copies from CentOS Artwork
b32b45
Repository, study the repository organization, make some changes in
b32b45
their working copies, make some tests to verify such changes do work
b32b45
the way expected and finally request access to commit them up to the
b32b45
CentOS Artwork Repository (i.e., the source repository) for others to
b32b45
benefit from them.
b32b45
b32b45
Once you've received access to commit your changes, there is no need
b32b45
for you to request permission again to commit other changes from your
b32b45
working copy to CentOS Artwork Repository as long as you behave as a
b32b45
@emph{good community citizen}.
b32b45
b32b45
As a good community citizen one understand of a person who respects
b32b45
the work already done for others and share ideas with authors before
b32b45
changing relevant parts of their work, specially in situations when
b32b45
the access required to realize the changes has been granted already.
b32b45
Of course, there is a time when conversation has taken place, the
b32b45
paths has been traced and changing the work is so obvious that there
b32b45
is no need for you to talk about it; that's because you already did,
b32b45
you already built the trust to keep going. Anyway, the mailing list
b32b45
mentioned above is available for sharing ideas in a way that good
b32b45
relationship between community citizens could be constantly balanced.
b32b45
b32b45
The relationship between community citizens is monitored by repository
b32b45
administrators. Repository administrators are responsible of granting
b32b45
everything goes the way it needs to go in order for the CentOS Artwork
b32b45
Repository to comply its mission which is: to provide a colaborative
b32b45
tool for The CentOS Community where The CentOS Project Corporate
b32b45
Identity is built and maintained from The CentOS Community itself.
b32b45
b32b45
It is also important to remember that all source files inside CentOS
b32b45
Artwork Repository should comply the terms of GNU General Public
b32b45
License (@pxref{GNU General Public License}) in order for them to
b32b45
remain inside the repository.
b32b45
b32b45
@subsection Repository organization 
b32b45
@cindex Repository organization
b32b45
b32b45
The CentOS Artwork Repository uses a @file{trunk}, @file{branches},
b32b45
and @file{tags} organization.  
b32b45
b32b45
@table @file
b32b45
@item trunk
b32b45
b32b45
The @file{trunk} directory organizes the main development line of
b32b45
CentOS Artwork Repository. @xref{Directories trunk}, for more
b32b45
information.
b32b45
b32b45
@item branches
b32b45
b32b45
The @file{branches} directory oranizes intermediate development lines
b32b45
taken from the main development line.  @xref{Directories branches},
b32b45
for more information.
b32b45
b32b45
@item tags
b32b45
b32b45
The @file{tags} directory organizes frozen development lines taken
b32b45
either from the main or the intermediate lines of development.
b32b45
@xref{Directories tags}, for more information.
b32b45
@end table
b32b45
b32b45
@subsection Repository file names
b32b45
@cindex Repository file names
b32b45
b32b45
Inside the CentOS Artwork Repository, file names are all written in
b32b45
lowercase (e.g., @samp{01-welcome.png}, @samp{splash.png},
b32b45
@samp{anaconda_header.png}, etc.) and directory names are all written
b32b45
capitalized (e.g., @samp{Identity}, @samp{Themes}, @samp{Motifs},
b32b45
@samp{TreeFlower}, etc.).
b32b45
b32b45
@subsection Repository work lines
b32b45
b32b45
Inside CentOS Artwork Repository there are four major work lines of
b32b45
production which are: @emph{graphic design}, @emph{documentation},
b32b45
@emph{localization} and @emph{automation}.  These work lines describe
b32b45
different areas of content production. Content production inside these
b32b45
specific areas may vary as much as persons be working on them.
b32b45
Producing content in too many different ways may result innapropriate
b32b45
in a collaborative environment like CentOS Artwork Repository where
b32b45
content produced in one area depends somehow from content produced in
b32b45
another different area. So, a @emph{content production standard} is
b32b45
required for each available work line.
b32b45
b32b45
@subsubsection Graphic design
b32b45
@cindex Graphic design work line
b32b45
b32b45
@xref{Directories trunk Identity}, for more information about The
b32b45
CentOS Corporate Identity and how graphic design fits on it.
b32b45
b32b45
@subsubsection Documentation
b32b45
@cindex Documentation work line
b32b45
b32b45
@xref{Directories trunk Manuals}, for more information on
b32b45
documentation.
b32b45
b32b45
@subsubsection Localization
b32b45
@cindex Localization work line
b32b45
b32b45
The localization work line exists to provide the translation messages
b32b45
required to produce content in different languages. Translation
b32b45
messages inside the repository are stored as portable objects (e.g.,
b32b45
.po, .pot) and machine objects (.mo) under @file{trunk/Locales}
b32b45
directory structure.
b32b45
b32b45
The procedure used to localize content is taken from @command{gettext}
b32b45
standard specification.  Basically, translatable strings are retrived
b32b45
from source files in order to create portable objects and machine
b32b45
objects for them.  These portable objects are editable files that
b32b45
contain the information used by translators to localize the
b32b45
translatable strings retrived from source files. On the other hand,
b32b45
machine objects are produced to be machine-redable only, as its name
b32b45
implies, and are produced from portable objects.
b32b45
b32b45
Since @command{gettext} needs to extract translatable strings form
b32b45
source files in order to let translators to localize them, we are
b32b45
limitted to use source files supported by @command{gettext} program.
b32b45
This is not a limitation at all since @command{gettext} supports most
b32b45
popular programming laguages (e.g., C, C++, Java, Bash, Python, Perl,
b32b45
PHP and GNU Awk just to mention a few ones). Nevertheless, formats
b32b45
like SVG, XHTML and Docbook don't figure as supported formats in the
b32b45
list of @command{gettext} supported source files.
b32b45
b32b45
To translate XML based source files like SVG, XHTML and Docbook we use
b32b45
the @command{xml2po} program instead. The @command{xml2po} comes with
b32b45
the @file{gnome-doc-utils} package and retrives translatable strings
b32b45
from one XML file to produce portable objects for them. 
b32b45
b32b45
@quotation
b32b45
@strong{Note}
b32b45
Portable objects produced by @command{xml2po} have the same format
b32b45
that portable objects produced by @command{gettext}. This make the
b32b45
localization process quite consistent from translators' point of view.
b32b45
No matter what the source file be, the translator will always face the
b32b45
same translation file format (i.e., the portable object format).
b32b45
@end quotation
b32b45
b32b45
With the portable object in place, the @command{xml2po} program is
b32b45
used again to create the final translated XML, just with the same
b32b45
definition of the source file where translatable strings were taken
b32b45
from (e.g., if we extract translatable strings from a SVG file, as
b32b45
result we get the same SVG file but with translatable strings already
b32b45
localized ---obviously, for this to happen translators need to
b32b45
localize translatable strings inside the portable object first,
b32b45
localization won't appear as art of magic---).  When using
b32b45
@command{xml2po}, the machine object is used as temporal file to
b32b45
produce the final translated XML file.
b32b45
b32b45
@quotation
b32b45
@strong{Tip} If you want to have your content localized inside CentOS
b32b45
Artwork Repository be sure to use source files supported either by
b32b45
@command{gettext} or @command{xml2po} programs.
b32b45
@end quotation
b32b45
b32b45
@xref{Directories trunk Locales}, for more information.
b32b45
b32b45
@subsubsection Automation
b32b45
@cindex Automation work line
b32b45
b32b45
The automation work line exists to standardize content production in
b32b45
CentOS Artwork Repository. There is no need to type several tasks,
b32b45
time after time, if they can be programmed into just one executable
b32b45
script.
b32b45
b32b45
The automation work line takes place under @file{trunk/Scripts}
b32b45
directory structure. Here is developed the @command{centos-art.sh}
b32b45
script, a bash script specially designed to automate most frequent
b32b45
tasks (e.g., rendition, documentation and localization) inside the
b32b45
repository.  Basically, the @command{centos-art.sh} script is divided
b32b45
in several functionalities independent one another that perform
b32b45
specific tasks and relay on repository organization to work as
b32b45
expected.
b32b45
b32b45
@quotation
b32b45
@strong{Tip} If you need to improve the way content is produced, look
b32b45
inside automation scripts and make your improvement there for everyone
b32b45
to benefit.
b32b45
@end quotation
b32b45
b32b45
@xref{Directories trunk Scripts}, for more information on automation.
b32b45
b32b45
@subsection Connection between directories
b32b45
@cindex Connection between directories
b32b45
@cindex Master paths
b32b45
@cindex Auxiliar paths
b32b45
b32b45
In order to produce content in CentOS Artwork Repository, it is
b32b45
required that all work lines be connected somehow.  This is the way
b32b45
automation scripts can know where to retrive the information they need
b32b45
to work with (e.g., design model, translation messages, output
b32b45
location, etc.).  We build this kind of connection using two path
b32b45
constructions named @emph{master paths} and @emph{auxiliar paths}.
b32b45
b32b45
The master path points only to directories that contain the source
b32b45
files (e.g., SVG files) required to produce base content (e.g., PNG
b32b45
files) through automation scripts.  Each master path inside the
b32b45
repository may have several auxiliar paths associated, but auxiliar
b32b45
paths can only have one master path associated.
b32b45
b32b45
The auxiliar paths can point either to directories or files. When an
b32b45
auxiliar path points to a directory, that directory contains
b32b45
information that modifies somehow the content produced from master
b32b45
paths (e.g., translation messages) or provides the output information
b32b45
required to know where to store the content produced from master path.
b32b45
When an auxiliar path points to a file, that file has no other purpose
b32b45
but to document the master path it refers to.
b32b45
b32b45
The relation between auxiliar paths and master paths is realized
b32b45
combining two path informations which are: the master path itself and
b32b45
one second level directory structure from the repository.  Generally,
b32b45
the master path is considered the path identifier and the second level
b32b45
directory structure taken from the repository is considered the common
b32b45
part of the path where the identifier is appended. 
b32b45
b32b45
@float Figure, Path construction
b32b45
@verbatim
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
Path | Suffix        | Identifier                 |Prefix| Type 
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
  A  |               |trunk/Identity/Models/Brands|      | Directory 
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
  B  |  trunk/Manual/|trunk/Identity/Models/Brands|.texinfo | File      
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
  C  | trunk/Locales/|trunk/Identity/Models/Brands|      | Directory 
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
  D  |               |trunk/Identity/Images/Brands|      | Directory 
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
  E  | trunk/Locales/|trunk/Identity/Images/Brands|.texinfo | File      
b32b45
-----+---------------+----------------------------+------+-----------
b32b45
b32b45
  A = Master path.
b32b45
  B = Auxiliar path to documentation entry.
b32b45
  C = Auxiliar path to translation messages.
b32b45
  D = Auxiliar path to final content output.
b32b45
  E = Auxiliar path to documentation entry.
b32b45
@end verbatim
b32b45
@caption{Path construction.}
b32b45
@end float
b32b45
b32b45
The path information described above (@pxref{Path construction}) is
b32b45
used by direct rendition and can be taken as reference to add other
b32b45
components that are equally produced in the repository.  To add new
b32b45
components that make use of direct rendition inside the repository,
b32b45
change just the component name used above (e.g., @file{Brands}) to
b32b45
that one you want to add, without changing the path structure around
b32b45
it.
b32b45
b32b45
The file organization used by theme rendition extends direct rendition
b32b45
by separating design models information from backgrounds information.
b32b45
To better understand this configuration, you can consider it as two
b32b45
independent lists, one of design models and one of artistic motifs,
b32b45
which are arbitrary combined between themselves in order to render
b32b45
images in specific ways. The possibilities of this configuration are
b32b45
endless and let us describe visual manifestations very well.  For
b32b45
example, consider the organization used to produce @file{Anaconda}
b32b45
images; for CentOS distribution major release 5; using @file{Default}
b32b45
design models and version @file{3} of @file{Flame} artistic motif:
b32b45
b32b45
@float Figure, Path construction extended
b32b45
@verbatim
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
Path | Suffix        | Identifier                                           |Prefix| Type 
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
  A  |               |trunk/Identity/Models/Themes/Default/Distro/5/Anaconda|      | Directory 
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
  B  |  trunk/Manual/|trunk/Identity/Models/Themes/Default/Distro/5/Anaconda|.texinfo | File      
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
  C  | trunk/Locales/|trunk/Identity/Models/Themes/Default/Distro/5/Anaconda|      | Directory 
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
  D  |               |trunk/Identity/Images/Themes/Flame/3/Distro/5/Anaconda|      | Directory 
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
  E  | trunk/Locales/|trunk/Identity/Images/Themes/Flame/3/Distro/5/Anaconda|.texinfo | File      
b32b45
-----+---------------+------------------------------------------------------+------+-----------
b32b45
b32b45
  A = Master path.
b32b45
  B = Auxiliar path to documentation entry.
b32b45
  C = Auxiliar path to translation messages.
b32b45
  D = Auxiliar path to final content output.
b32b45
  E = Auxiliar path to documentation entry.
b32b45
@end verbatim
b32b45
@caption{Path construction extended.}
b32b45
@end float
b32b45
b32b45
The path information described above (@pxref{Path construction
b32b45
extended}) is used by theme rendition and can be taken as reference to
b32b45
add other components that are equally produced in the repository.
b32b45
b32b45
In this configuration we can change both design model name (e.g.,
b32b45
@file{Default}) and artistic motif name (e.g., @file{Flame/3}) to
b32b45
something else in order to achieve a different result. The only
b32b45
limitations impossed are the storage space provided in the server
b32b45
machine and your own creativeness as graphic designer.
b32b45
b32b45
@quotation
b32b45
@strong{Note}
b32b45
A theme ready for implementation may consume from 100 MB to 400 MB of
b32b45
storage space. The exact space consumed by a theme depends on the
b32b45
amount of screen resolutions the theme supports. The more screen
b32b45
resolutions the theme supports, the more storage space demanded for
b32b45
it.
b32b45
@end quotation
b32b45
b32b45
In this configuration we saw how to build the path information for
b32b45
@file{Anaconda} component as part of CentOS Distribution visual
b32b45
manifestation, but that is not the only component we have inside
b32b45
CentOS Distribution visual manifestation.  There are other components
b32b45
like Syslinux, Grub, Rhgb, Gdm, Kdm, Gsplash and Ksplash that share a
b32b45
similar file organization to that described above for @file{Anaconda}
b32b45
component.
b32b45
b32b45
@subsection Syncronizing path information
b32b45
@cindex Syncronizing path information
b32b45
b32b45
Syncronizing path information is the action that keeps all path
b32b45
information up to date in the repository. This action implies both
b32b45
@emph{file movement} and @emph{file content replacement} in this very
b32b45
specific order. File movement is related to duplicate, delete and
b32b45
rename files and directories in the repository.  File content
b32b45
replacement is related to replace information, path information in
b32b45
this case, inside files in the repository.
b32b45
b32b45
The order followed to syncronize path information is relevant because
b32b45
the versioned nature of the files we are working with. We don't
b32b45
perform file content replacement first because that would imply a
b32b45
repository change which will immediatly demmand a commit in order for
b32b45
actions like duplicate, delete or rename to take place. However, if we
b32b45
perform file movement first, it is possible to commit both file moved
b32b45
and file content replacements as if they were just one change. In this
b32b45
case the file content replacement takes palce in the target location
b32b45
that have been duplicated or renamed, not the one use as source
b32b45
location. This configuration is specially useful when files are
b32b45
renamed (i.e., one file is copied from a source location to a target
b32b45
location and then the source location of it is removed from
b32b45
repository).
b32b45
b32b45
@quotation
b32b45
@strong{Warning} There is no support for URLs actions inside
b32b45
@command{centos-art.sh} script.  The @command{centos-art.sh} script is
b32b45
designed to work with local files inside the working copy only. If you
b32b45
need to perform URL actions directly, use Subversion commands instead.
b32b45
@end quotation
b32b45
b32b45
When one master path is changed it is required that all related
b32b45
auxiliar paths be changed, too. This is required in order for master
b32b45
paths to retain their relation with auxiliar paths.  This way,
b32b45
automation scripts are able to know where to retrive translation
b32b45
messages from, where to store final output images to and where to look
b32b45
for documentation. If relation between master paths and auxiliar paths
b32b45
is lost, there is no way for automation scripts to know where to
b32b45
retrive the information they need.
b32b45
b32b45
The auxiliar paths should never be modified under any reason but to
b32b45
satisfy the relationship with the master path.  Liberal change of
b32b45
auxiliar paths may suppress the conceptual idea they were initially
b32b45
created for; and certainly, automation scripts may stop working as
b32b45
expected. The update direction to rename path information must be from
b32b45
master path to auxiliar path and never the opposite.
b32b45
b32b45
The relation between master and auxiliar paths is useful to keep
b32b45
repository organized but introduce some complications when we work
b32b45
with files that use master path information as reference to build
b32b45
structural information.  This is the case of repository documentation
b32b45
manual source files where inclusions, menus, nodes and cross
b32b45
references are built using master path information as reference.  Now,
b32b45
to see what kind of complication we are talking about, consider what
b32b45
would happen to a structural definitions (i.e., inlusions, menus,
b32b45
nodes and cross refereces) already set in the manual from one master
b32b45
path that is suddenly renamed to something different.  If the path
b32b45
information is not syncronized, at this point, we lose connection
b32b45
between the master path and the auxiliar path created to store the
b32b45
related documentation entry, as well as the related structural
b32b45
definitions that end up pointing to a master path that no longer
b32b45
exist.
b32b45
b32b45
The syncronization of path information is aimed to solve these kind of
b32b45
issues.
b32b45
b32b45
@subsection Extending repository organization
b32b45
@cindex Extending repository organization
b32b45
b32b45
Occasionly, you may find that new components of The CentOS Project
b32b45
Corporate Identity need to be added to the repository in order to work
b32b45
them out. If that is the case, the first question we need to ask
b32b45
ourselves, before start to create directories blindly all over, is:
b32b45
@emph{What is the right place to store it?}
b32b45
b32b45
The best place to find answers is in The CentOS Community (see page
b32b45
@url{http://wiki.centos.org/GettingHelp}), but going there with hands
b32b45
empty is not good idea. It may give the impression you don't really
b32b45
care about. Instead, consider the following suggestions to find your
b32b45
own comprehension in order to make your own propositions based on it.
b32b45
b32b45
When extending respository structure it is very useful to bear in mind
b32b45
The CentOS Project Corporate Identity Structure (@pxref{Directories
b32b45
trunk Identity}) The CentOS Mission and The CentOS Release Schema. The
b32b45
rest is just matter of choosing appropriate names. It is also worth to
b32b45
know that each directory in the repository responds to a conceptual
b32b45
idea that justifies its existence.
b32b45
b32b45
To build a directory structure, you need to define the conceptual idea
b32b45
first and later create the directory. There are some locations inside
b32b45
the repository that already define some concepts you probably want to
b32b45
reuse. For example, @file{trunk/Identity/Images/Themes} to store theme
b32b45
artistic motifs, @file{trunk/Identity/Models/Themes} to store theme
b32b45
design models, @file{trunk/Manual} to store documentation files,
b32b45
@file{trunk/Locales} to store translation messages,
b32b45
@file{trunk/Scripts} to store automation scripts and so on.
b32b45
b32b45
To illustrate this desition process let's consider the
b32b45
@file{trunk/Identity/Images/Themes/TreeFlower/3} directory structure
b32b45
as example.  This directory can be read as: the theme development line
b32b45
of version @file{3} of @file{TreeFlower} artistic motif. Additional,
b32b45
we can identify that artistic motifs are part of themes as well as
b32b45
themes are part of The CentOS Project Corporate Identity. These
b32b45
concepts are better described independently in each documentation
b32b45
entry related to the directory structure as it is respectively shown
b32b45
in the list of commands bellow.
b32b45
b32b45
@verbatim
b32b45
centos-art help --read turnk
b32b45
centos-art help --read turnk/Identity
b32b45
centos-art help --read turnk/Identity/Themes
b32b45
centos-art help --read turnk/Identity/Images/Themes
b32b45
centos-art help --read turnk/Identity/Images/Themes/TreeFlower
b32b45
centos-art help --read turnk/Identity/Images/Themes/TreeFlower/3
b32b45
@end verbatim
b32b45
b32b45
The concepts behind other location can be found in the same way
b32b45
described above, just change the path information used above to the
b32b45
one you are trying to know concepts for.