[Kolab-devel] CVS - New Modules and Tools (releng, devel, utils)

Stuart Bingë omicron-list at mighty.co.za
Wed May 12 19:33:52 CEST 2004


On Wednesday, 12 May 2004 17:38, Bernhard Reiter wrote:
> > I wouldn't say they belong under the server module, as these three
> > modules are not really Kolab (server) specific. These new modules are
> > designed as central places for in-development code (devel), files
> > relating to release engineering (releng) and miscellaneous utilities that
> > are used in various modules (utils) - that's why there's a 'kolab'
> > subdirectory in the devel module, as this is intended as the central
> > place for in-progess development of the Kolab server itself.
>
> But these tools are not for use on the Kolab KDE Client, the Kolab Concept
> or the webpages as far as I understood it.
> This is is the case then they would all belong under server.

OK, I'm a bit lost here :-) Tools as in the 'utils' module? Also, isn't the 
KDE Client maintained in KDE's CVS? And what exactly is the "Kolab Concept"?

With regards to the webpages, I would say they're in a decent place under 
'doc'. We could however convert the Makefile used in doc/www to a 
devtool.conf, in which case we can use devtool to manage the website as well. 

I would argue that 'utils' belongs as a separate module (at least with the 
utilities we're using now) as it is better to maintain these in a single 
location that is separate from everything else, otherwise currently we'd have 
two copies of devtool in the different releng directories (three if we start 
using it for the webpages) - this becomes irritating when you want to move to 
a new version of devtool.

Perhaps a more descriptive name for this module would have been 
'external-utils'. My intention for this module was to hold copies of the 
various external utilities that we use, such as obmtool and devtool, and any 
more that we may use in the future.

> > With this new system, I would say that ultimately we could remove the
> > server module, as all the sub-directories that are present there can go
> > into release engineering folders under releng, whereas if we're actively
> > developing portions of these modules we can create additional directories
> > under devel for them. I would say that the doc module is already in a
> > suitable place.
>
> I might not fully grasp the CVS structure then.

I could also be way off here - I don't have that much experience with project 
structure when it comes to CVS, however this system is something that works 
for us internally, and I thought it would be beneficial for Intevation's CVS 
as well.

> Usually in CVS there are Branches and tags that would mark
> development versions from stable source code lines.

Yeah, I think that's the idea.

> So within the "devel" directory there will be stable and development
> code in several CVS branches?

Correct.

> Why not call that directory "src" then?

We could do that if you want. I would say 'devel' and 'src' are interchangable 
terms.

> 	server/
> 	    src/
>             releng/
>             utils/
> seems a good structure to me.

So then the structure would basically become

    doc/
    server/
        imapd/
        ...
        src/
            kolab/
            admin/
            utils/
            releng/
                kolab/
                perl-kolab/

Correct? If that's the case, then I would say there's no need for src/ under 
server/. What about moving releng/ and utils/ up a level so they're siblings 
of src/? To me at least there should be a strict separation of files that are 
development-related, and files that relate to release engineering.

> That would include moving the admin interface under src,
> because we also want to have several branches on it, right?

Steffen would know the answer to this - I'm not sure what his ideas are with 
regards to the webclient.

> Also we want to preserve the history of the KO'LAB_1_0 branch
> so for CVS technical reason we have to think if doing
> a server2 and moving stuff in there is better to not deal
> with too much old branches in server.

Well, I can definitely see why you want to maintain server/, in terms of 
releases/taggings that have already been made. Perhaps server2/ would be a 
good idea...

> What do you think about my suggestions? 
> I am still trying to understand the structure.

That is my fault for not putting forward a suitable argument for the new 
structure. Let me try and clear it up... at least, this is the way I view it:

The development directories (devel or src) hold code that is structured so 
that a user can check the modules out and start hacking/running them 
immediately (assuming the code isn't broken at the time). The release 
engineering directories are structured so that users can check them out and 
easily build a release, by running make or by using devtool.

Each subdirectory of releng/ then corresponds to a separate package (in our 
case, kolab and perl-kolab, and other stuff that we can add such as Smarty, 
etc). Releng packages are separate from one another, as they each have 
different build requirements and files from one package must never appear in 
another (packages never overlap). This is the case currently with all the 
subdirectories under server/ - each of these is a separate package, and you 
would never think of merging two of these.

This becomes an issue with our Perl code, as we have several modules that are 
distributed as the perl-kolab package, and of course on which the engine 
itself relies. If you want to check out the engine and develop on it, as well 
as test/run it, you're going to need the perl-kolab modules.

Now, I'm sure that when you're coding and you modify a perl-kolab module, you 
definitely DO NOT want to have to rebuild the perl module's dist tarball, 
roll a new perl-kolab source rpm and finally upgrade your existing Kolab's 
perl-kolab package with the new one, just to test your new change. This is 
why I moved everything into a development directory, which contains the 
daemon and configuration executables themselves, and also has the perl-kolab 
modules in the correct directory structure so that Perl can read them (out of 
the current directory) - this then (almost) satisfies the criterion of being 
able to check out the code and immediately start running it.

I say almost as there are also data files in the release engineering 
directories that that daemon requires in order to run, such as the templates 
and configuration files. This is actually the biggest flaw with the new 
system I put in place, as currently you are required to have the kolab 
OpenPKG rpm in place so that the code you're developing on in your devel 
checkout can actually run. This becomes a problem when you want to modify 
your data files, as you have to manually copy them over.

OK, what about the following:

doc/
  www/                <-- convert Makefile to devtool.conf
  ...                 <-- the other documentation modules
server/               <-- leave it as it stands now
server2/
  src/
    kolab/            <-- kolabd & kolabconf
      Kolab/          <-- the perl-kolab modules
      etc/
        kolab/        <-- This holds kolab.conf/.globals
          templates/  <-- all the templates
      var/
        kolab/        <-- (.cvsignore'd) kolab.pid & kolab.log
    admin/            <-- create a link in /kolab/var/kolab/www to this
    ...               <-- any other projects we may have
  releng/
    kolab/            <-- devtool.conf
    perl-kolab/       <-- all the Kolab-BLAH h2xs module files
external-utils/

With this system, we can set the kolab root in the server2/src/kolab module to 
be '.' and the code will then reference all the 'in-development' data files 
that you are using, out of the current directory. The templates will still 
have their 'location' field set to their proper destination under /kolab so 
that you can actually test your changes fairly easily using your 
existing /kolab hierarchy.

server2/releng/kolab basically then becomes a repository for the devtool.conf 
that is used to build a kolab release tarball. This will then archive up the 
daemon, utility scripts, and data files from server2/kolab, while at the same 
time performing the necessary transformations ('.' -> @l_prefix@, etc) and 
moving them into their release locations within the tarball.

server2/releng/perl-kolab will be very similar to what releng/perl-kolab is 
now, holding all the h2xs-generated perl module files as these directly 
relate to release engineering of the package. When building a release from 
here it will copy & transform the perl modules from server2/src/kolab.

> We should start a webpage with it.

Good idea.

A bit OT - relating to the website... are there any plans to merge the content 
on kolab.org and kroupware.org into a single hierarchy on kolab.org? Or is 
there a specific reason that the two separate websites exist separately?

-- 
Stuart Bingë
Code Fusion cc.

Office: +27 11 673 0411
Mobile: +27 83 298 9727
Email: s.binge at codefusion.co.za

Tailored email solutions; Kolab specialists.
http://www.codefusion.co.za/




More information about the devel mailing list