Greetings all, just writing to let you all know the present status of
repomerge and a problem that we have encountered that you're likely to run
into later as well.

== Executive summary ==

* We probably have to rewrite git history to fix problems caused by the
repomerge script. This will break existing checkouts.

* Contributors: Please hold off on moving PRs.
  The steps we have to take to correct the repository may mean that the PRs
will need to be migrated again (or they may just need to be rebased.  We'll
test and let you know).  We've disabled  prmover.pythonanywhere.com for now
so no more prs are migrated.

* git log and git bisect are currently broken in the ansible/ansible devel
branch.

* Checkouts since repomerge (Yesterday, December 6, 2016 UTC) may need to
use some extra git flags to pull afterwards.  We'll test and let you know
once we've fixed the history.

* The Ansible Core Team is working through the fixed merging strategies to
figure out which of them is needed to get things working..

== Detail ==

Yesterday (Tuesday, December 6, 2016) we ran a script which merged the
repositories, we performed some minimal checking, and then pushed the
branch to the devel branch on github.

Overnight someone commented that the history (via git log) didn't appear to
work quite right (the history of commits existed as shown by git blame but
git log --follow FILENAME was unable to find most of the commits).
Further testing showed that git bisect was also having difficulties with
the migrated repository: git bisect seemed to get stuck on some commits
instead of jumping to a new commit after tagging something as good or bad.
It also jumped far back into history instead of another commit within the
initial good/bad range.

Today (Wednesday, December 7, 2016) we've diagnosed the following problems
with the migrated repository:
* The log problems are caused because the merge script imported the files
at locations relative to the top of the module repos.  At those locations,
git was unable to determine that the files should share a common history
with the files in their final locations (even when --follow was used).  We
prototyped a fix for that which rewrote the file path prior to importing
the modules and found that we could fix git log --follow with that.
* The bisect problem was more mysterious for a while.  Eventually we
realized that the merge script was interleaving the state of the
ansible/ansible tree with the state of the ansible-modules-core and
ansible-modules-extras tree.  That means that at any given checkout, we
might have all of the ansible/ansible files and none of the modules or all
of ansible-modules-core and none of ansible/ansible or the same for
ansible-modules-extras.  When trying to git bisect this tree, we then would
run across commits that we couldn't test accurately because it didn't have
all of the files necessary to test.

The latter problem doesn't appear to be fixable without removing these
commits.  So we're probably going to need to reset the tree to before the
repomerge apply a fixed method of merging, and then git push --force the
rewritten tree to github.  This will invalidate checkouts of the
ansible/ansible repository made after the repomerge:

"""
commit 38b621590311643a6c5867249415cddffc2400b9
Author: James Cammarata <j...@sngx.net>
Date:   Tue Dec 6 10:57:39 2016 -0500

    Das merge
"""

At the moment we're exploring two options as a fixed merge strategy.  Both
start by resetting to the commit prior to the repomerge commit.

* The first option will be to simply copy the module files into the new
location in the ansible/ansible tree at this point.  One commit will then
commit all of hte current modules.  This strategy will mean that trying to
find history for the modules will require going back to the
ansible-modules-core and ansible-modules-extras repositories from time to
time.
* The second option is to try exporting patches from the
ansible-modules-core and ansible-modules-extras repositories (either via
git format-patch or git cherry-pick) and then reapplying those to a new
tree inside of ansible/ansible.  This would preserve history but is more
work to implement.  We're currently trying to find out if this is viable or
not.

On Tue, Nov 29, 2016 at 1:34 PM, James Cammarata <jcammar...@ansible.com>
wrote:

> Hi all, just wanted to announce/remind people about the upcoming repo
> merge.
>
> The Plan:
> -------------------------------------------------
>
> Next week, we'll be re-merging the module repositories back into
> ansible/ansible on GitHub. The two module repos will be essentially locked,
> though they will be kept in place for the existing 2.1 and 2.2
> dependencies. Once 2.2 moves out of official support (in about a year),
> we'll completely remove those repositories. Until then, any issues/PRs
> opened there will be auto-closed with a note to open it on ansible/ansible.
>
> Why Are We Doing This (Again...)?
> -------------------------------------------------
>
> For those who've been using Ansible long enough, you know that originally
> we started with a single repository. The original intention of the core vs.
> extras split was that core would be better supported/tested/etc. Extras
> would have been a bit more of a "wild-west" for modules, to allow new
> modules to make it into the distribution more quickly. Unfortunately this
> never really worked out, as well as the following:
>
> 1. Many modules in the core repo were also essentially "grand-fathered"
> in, despite not having a good set of tests or dedicated maintainers from
> the community.
> 2. The time in queue for modules to be merged into extras was not really
> any different from the time to merge modules into core.
> 3. The split introduced a few other problems for contributors such as
> having to submit multiple related PRs for modules with tests, or for those
> which rely on action plugins.
> 4. git submodules are notoriously complicated, even for contributors with
> decent git experience. The constant need to update git submodule pointers
> for devel and each stable branch can lead to testing surprises and really
> buys us nothing in terms of flexibility.
> 5. Users can already be confused about where to open issues, especially
> when the problem appears to be with a module but is actually an action
> plugin (ie. template) or something more fundamental like includes. Having
> everything back in one repo makes it easier to link issues, and you're
> always sure to open a bug report in the right place.
>
> Issues and PRs:
> -------------------------------------------------
>
> We're working on creating a tool which will allow users to migrate their
> issues from ansible-modules-core and ansible-modules-extras, details of
> that will be available next week as well. PRs will be a bit more tricky,
> though we are working on a script/process to make it easier for users to
> move their PRs from the existing repos into the ansible/ansible code base
> post-merge, however in most cases PRs will need to be resubmitted or left
> in the respective module repository until we can revisit them ourselves.
>
> Metadata - Support/Ownership and Module Status:
> ----------------------------------------------------------------------
>
> As part of this move, we will be introducing module metadata, which will
> contain a couple of pieces of information regarding modules:
>
> 1. Support Status: This field indicates who supports the module, whether
> it's the core team, the community, the person who wrote it, or if it is an
> abandoned module which is not receiving regular updates. The Ansible team
> has gone through the list of modules and we have marked about 100 of them
> as "Core Supported", meaning a member of the Ansible core team should be
> actively fixing bugs on those modules. The vast majority of the rest will
> be community supported. This is not really a change from the status quo,
> this just makes it clearer.
> 2. Module Status: This field indicates how well supported that module may
> be. This generally applies to the maturity of  the module code however, not
> necessarily its bug status.
>
> The documentation pages for modules will be updated to reflect the above
> information as well, so that users can evaluate the status of a module
> before committing to using it in playbooks and roles.
>
> Summary:
> -------------------------------------------------
>
> For the vast majority of Ansible end-users, we expect this change to have
> little impact. The impact on developers will definitely be higher, though
> we're really trying to make it much smoother than when we made the original
> split.
>
> If you have any questions or concerns regarding this, please be sure to
> let us know ASAP.
>
> Thanks!
>
> James Cammarata
>
> Ansible Lead/Sr. Principal Software Engineer
> Ansible by Red Hat
> twitter: @thejimic, github: jimi-c
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to ansible-devel+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-devel+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to