<div dir="ltr"><div class="gmail_default" style="font-size:small">In the release meeting today, Russell proposed that we at least include the hash of the HEAD when the merge is done, to indicate how far along the oslo changes are. More detail is obviously better.</div>
<div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">So, let's consider this as a new policy. Does anyone foresee issues with making this work?</div><div class="gmail_default" style="font-size:small">
<br></div><div class="gmail_default" style="font-size:small">Doug</div><div class="gmail_default" style="font-size:small"><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jan 14, 2014 at 4:23 AM, Flavio Percoco <span dir="ltr"><<a href="mailto:flavio@redhat.com" target="_blank">flavio@redhat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 13/01/14 12:07 -0500, Doug Hellmann wrote:<br>
[.................]<div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I spent some time trying to think through how we could improve the update<br>
script for [1], and I'm stumped on how to figure out *accurately* what state<br>
the project repositories are in today.<br>
We can't just compute the hash of the modules in the project receiving copies,<br>
and then look for them in the oslo-incubator repo, because we modify the files<br>
as we copy them out (to update the import statements and replace "oslo" with<br>
the receiving project name in some places like config option defaults).<br>
We could undo those changes before computing the hash, but the problem is<br>
further complicated because syncs are not being done of all modules together.<br>
The common code in a project doesn't move forward in step with the<br>
oslo-incubator repository as a whole. For example, sometimes only the openstack<br>
/common/log.py module is copied and not all of openstack/common. So log.py<br>
might be newer than a lot of the rest of the oslo code. The problem is even<br>
worse for something like rpc, where it's possible that modules within the rpc<br>
package might not all be updated together.<br>
We could probably spend a lot of effort building a tool to tell us exactly what<br>
the state of all of each common file is in each project, to figure out what<br>
needs to be synced. I would much rather spend that effort on turning the common<br>
code into libraries, though.<br>
So, here's an alternative:<br>
1. Projects accept a full sync of Oslo soon, including adding a value in their<br>
openstack-common.conf indicating which commit in oslo-incubator is reflected in<br>
the sync. We'll try to make those commit messages as detailed as possible.<br>
2. We modify update.py to remove the option to update individual modules when<br>
copying from oslo-incubator. The new version would always apply all changes<br>
from the last merged commit, as a series of commits, to the receiving project.<br>
So if nova is out of step by 3 commits, then 3 new commits would be created in<br>
the branch by the person doing the update, each with the commit log message<br>
from the change in oslo-incubator. (This lock-step approach is necessary to<br>
have any hope of figuring out which commits are actually being synced, so the<br>
log messages are accurate.)<br>
In my experience, when syncing files from oslo, it'll most likely<br>
require syncing more than one module. There's been just *few* times<br>
where copying a module from oslo resulted in just that specific module<br>
being copied.<br>
All that to say that I agree with this point.<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
3. The person proposing the merge into the project can decide whether to squash<br>
the commits, or leave them as separate reviews.<br>
If we use relative imports for modules in oslo incubators (as<br>
mentioned in another email in this thread) and we *always* keep<br>
everything up to the latest. What about reconsidering using git<br>
AFAIR, the main issue with git submodules is that we wanted to support<br>
updating individual modules. If we remove that option, I think git<br>
submodules would work just fine. Am I missing something?<br>
Instead of hacking on update.py we could work on a migration plan out<br>
of it.<br>
A downside of using submodules is that when moving the reference in<br>
the submodule, it won't be obvious why that's happening, which is<br>
something we wanted to fix with update.py. It would be up to the<br>
committer to write a good commit message or to get the messages out of<br>
the submodule history.<br>
Another downside is that it would be hard to apply isolated patches on<br>
stable branches for security issues or really awful bugs.<br>
I'm less convinced about submodules now but I'm leaving this in the<br>
email in case someone wants to dig a bit deeper in the topic.<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm not entirely certain I like this approach myself, but it's the best I've<br>
been able to come up with. It essentially gives us the current process, while<br>
removing the ability to potentially take a version of a module without taking<br>
its dependencies (allowing us to step forward, and track the commit messages<br>
accurately). It will also produce results similar to what we will have when all<br>
of this oslo code moves into separate libraries, where the changes to the<br>
library will be seen by the projects without any action at all on their part.<br>
After going through this for a bit, I agree with you. The goal<br>
of the update script should be:<br>
   - Sync modules from the current state to the most updated version<br>
   - Make sure the update information is not lost. If there's an oslo<br>
     sync review without the commits shas + description, it simply<br>
     means the committer amended the message.<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
OTOH, it will also require spending time on update.py, instead of releasing a<br>
library from the incubator. And it doesn't really buy us that much in terms of<br>
making the sync happen more easily, other than a reliable way of having<br>
entirely accurate commit messages.<br>
Although it distracts us from our real goal - releasing libraries - I<br>
still think is necessary. We should probably just reduce the changes<br>
needed as much as possible, but we'll need it anyway.<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I would love to have someone else offer an alternative that's less effort to<br>
change and provides the desired detailed log messages accurately.<br>
I think this actually simplifies the way update.py works, TBH. We'll<br>
be removing single module sync and we'll also force projects to be<br>
updated to the latest version of those modules in oslo-incubator,<br>
which is safer, IMHO.<div class="HOEnZb"><div class="h5"><br>
Flavio Percoco<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>