<HTML>
<HEAD>
<TITLE>Re: [Openstack] openstack-common</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Yippe common code that people can share! Win!<BR>
<BR>
On 1/26/12 8:32 AM, "Mark McLoughlin" <<a href="markmc@redhat.com">markmc@redhat.com</a>> wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Hey,<BR>
<BR>
On Tue, 2012-01-03 at 16:57 +0000, Mark McLoughlin wrote:<BR>
<BR>
> The openstack-common project intends to produce a python library containing<BR>
> infrastructure code shared by OpenStack projects. The APIs provided by the<BR>
> project should be high quality, stable, consistent and generally useful.<BR>
<BR>
Jason and I have come up with a bit of a compromise on this front:<BR>
<BR>
  <a href="http://wiki.openstack.org/CommonLibrary#Incubation">http://wiki.openstack.org/CommonLibrary#Incubation</a><BR>
<BR>
I've appended the text below. We've started with melange:<BR>
<BR>
  <a href="http://review.openstack.org/3465">http://review.openstack.org/3465</a><BR>
<BR>
While we still think that we should be able to make API compat<BR>
guarantees about the openstack-common library, there needs to be a<BR>
stepping stone for new APIs which are shared between multiple projects<BR>
but aren't yet up to criteria required for inclusion in the library.<BR>
<BR>
This is still evil copy-and-paste, but it's managed evilness :-)<BR>
<BR>
Thanks,<BR>
Mark.<BR>
<BR>
== Incubation ==<BR>
<BR>
openstack-common also provides a process for incubating APIs which,<BR>
while they are shared between multiple OpenStack projects, have not yet<BR>
matured to meet the criteria described above.<BR>
<BR>
APIs which are incubating can be copied into individual openstack<BR>
projects from openstack-common using the {{{update.py}}} script<BR>
provided. An {{{openstack-common.conf}}} configuration file in the<BR>
project describes which modules to copy and where they should be copied<BR>
to e.g.<BR>
<BR>
  $> git clone .../melange<BR>
  $> cd melange<BR>
  $> cat openstack-common.conf<BR>
  [DEFAULT]<BR>
<BR>
  # The list of modules to copy from openstack-common<BR>
  modules=config,exception,extensions,utils,wsgi<BR>
<BR>
  # The base module to hold the copy of openstack.common<BR>
  base=melange<BR>
<BR>
and then, to copy the code across:<BR>
<BR>
  $> cd ../<BR>
  $> git clone .../openstack-common<BR>
  $> cd openstack-common<BR>
  $> python update.py ../melange<BR>
  Copying the config,exception,extensions,utils,wsgi modules under the melange module in ../melange<BR>
<BR>
Projects which are using such incubating APIs must avoid ever modifying<BR>
their copies of the code. All changes should be made in openstack-common<BR>
itself and copied into the project.<BR>
<BR>
Developers making changes to incubating APIs in openstack-common must be<BR>
prepared to update the copies in the projects which have previously<BR>
imported the code.<BR>
<BR>
Incubation shouldn't be seen as a long term option for any API - it is<BR>
merely a stepping stone to inclusion into the openstack-common library<BR>
proper.<BR>
<BR>
<BR>
_______________________________________________<BR>
Mailing list: <a href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a><BR>
Post to     : <a href="openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><BR>
Unsubscribe : <a href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a><BR>
More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a><BR>
<BR>
</SPAN></FONT></BLOCKQUOTE>
</BODY>
</HTML>