Hi,
Today, a step to the future was given, in order to help developers to better
do their work: the addition of -git support at linuxtv.org server.
This is one idea that is being recurrent along the last years: to start using
-git
as our primary resource for managing the patches at the development[1].
At the beginning, the usage CVS for of a SCM (Source Code Management) were
choosen on V4L/DVB. Both of the original V4L and DVB trees were developed with
the
help of cvs. On that time, upstream Linux kernel used to have another tree
(BitKeeper).
In 2005, both V4L and DVB trees got merged into one cvs repository, and we've
discussed about what would be the better SCM solution. We've discussed more
about using svn, hg and git. On that time, both hg and git were new
technologies,
based on the concept of a distributed SCM, where you don't need to go to the
server every time you're doing a command at the SCM.
Yet, Mercurial were more stable and used, while -git were giving his first
steps[2], being used almost only by the Linux Kernel, and several distros
didn't use
to package it. Git objects were stored uncompressed, generating very large
trees. Also, -git tools were complex to use, and some "porcelain" packages were
needed, in order to be used by a normal user.
So, the decision was made to use mercurial. However, as time goes by, -git got
much
more eyes than any other SCM, having all their weakness solved, and being
developed
really fast. Also, it got adopted by several other projects, due to its
capability
and its number of features.
Technically speaking, -git is currently the most advanced distributed
open-source
SCM application I know.
Yet, Mercurial has been doing a very good job maintaining the V4L/DVB trees,
and, except
for a few points, it does the job.
However, the entire Linux Kernel development happens around -git. Even the ones
that
were adopting other tools (like -alsa, that used to have also Mercurial
repositories)
migrated to -git.
Despite all technical advantages, the rationale for the migration is quite
simple:
converting patches between different repositories and SCM tools cause
development
and merge delays, may cause patch mangling and eats lot of the time for people
that are part of the process.
Also, every time a patch needs to touch on files outside the incomplete tree
used at the subsystem, an workaround need to be done, in order to avoid troubles
and to be able to send the patch upstream.
So, it is simpler to just use -git.
Due to all the above reasons, I took some time to add -git support at linuxtv
servers.
Both http and git methods to retrieve trees were enabled.
The new trees will be available at:
http://linuxtv.org/git/
The merge tree, where all submitted patches will be merged, before sending
upstream is:
http://linuxtv.org/git?p=v4l-dvb.git;a=summary
This tree is basically a clone of Linus tree, so it runs the latest development
kernel.
It is also (almost) in sync with our -hg tree (needing just a few adjustments).
The above tree will never be rebased, so it should be safe to use it for
development.
I'll basically merge there all patches I receive. It is OK to submit patches
against -hg,
since I can still run my old conversion stripts to convert them to -git.
However, as
the conversion script is not fast (it takes between 15-30 secs to convert a
single patch
to -git, since it needs to re-generate the entire tree with
v4l/scripts/gentree.pl, for
ever patch), I kindly ask you to prefer submit me patches directly to -git.
With respect to the -hg tree with the out-of-tree building system, We really
want to
keep having a way to allow running the drivers with kernels other than the
latest -rc
one, for both development and testing.
As you all know, the number of drivers and the average number of merges per day
is being
increasing, among with more complexity on some drivers that also touches arch
and other
files outside drivers/media tree. Due to that, lots of my current time is
devoted to keep
-hg and -git in sync, distracting me from my develoment and maintanership tasks
to do it.
So, I simply don't have more time to keep maintaining both -hg and -git.
Due to that, I'm delegating the task of keeping -hg in sync with upstream and
backporting
patches to run on older kernels to another person: Douglas has offered his help
to keep
the tree synchronized with the -git tree, and to add backport support.
He already started doing that, fixing some incompatibility troubles between
some drivers
and older kernels.