Hi all,

FYI this morning the UI team discussed about possibile paths to migrate the 
store code from lp:juju-core to Github.
We are sharing this plan so that we can synchronize/collaborate with other 
teams with similar needs in their todo list.

Here are the store package dependencies as obtained with go list:

Deps:
$ go list -f "{{range .Deps}}{{println .}}{{end}}" 
launchpad.net/juju-core/store | grep juju-core
launchpad.net/juju-core/charm
launchpad.net/juju-core/charm/hooks
launchpad.net/juju-core/juju/osenv
launchpad.net/juju-core/schema
launchpad.net/juju-core/thirdparty/pbkdf2
launchpad.net/juju-core/utils
launchpad.net/juju-core/utils/set
launchpad.net/juju-core/utils/zip

Tests deps:
$ for i in `go list -f "{{range .Deps}}{{println .}}{{end}}" 
launchpad.net/juju-core/store`; do go list -f "{{range .XTestImports}}{{println 
.}}{{end}}" $i; done | grep juju-core | sort | uniq
launchpad.net/juju-core/charm
launchpad.net/juju-core/charm/testing
launchpad.net/juju-core/environs/config
launchpad.net/juju-core/juju/osenv
launchpad.net/juju-core/schema
launchpad.net/juju-core/testing
launchpad.net/juju-core/testing/filetesting
launchpad.net/juju-core/testing/testbase
launchpad.net/juju-core/utils
launchpad.net/juju-core/utils/set
launchpad.net/juju-core/utils/zip

As you can see, there are some incremental steps we will need to follow to 
achieve our goal, I’ll try to describe them below including notes from William. 
I suppose we can encounter complications in this path, but hopefully at the end 
we’ll have a good starting point for the store.
William agreed on the goals of this migration (having a common/separate module 
which can be reused by both juju-core and the GUI).

Just two notes before sketching a possible plan:
- the store must be able to be configured to use its own db or the juju-core 
one based on the context it is used;
- we need a way to migrate partial Bazaar commit history to git (perhaps 
someone has already experience with this?).

A possible plan is as follow:

1) Migrate juju-core/thirdparty to juju/thirdparty (Github).
Since there are no dependencies here, this seems to be a good first candidate. 

2) Migrate juju-core/utils to juju/utils (Github).
package:
 launchpad.net/juju-core/utils
deps:
 launchpad.net/juju-core/juju/osenv
 launchpad.net/juju-core/thirdparty/pbkdf2
tests deps:
 launchpad.net/juju-core/juju/osenv
 launchpad.net/juju-core/testing/testbase

I did not look at juju/osenv: we might want to migrate that as well, or just 
refactor the code to remove the dependency. Note that each time we move a 
package we need to also move the relevant code in juju-core/testing to 
juju/testing. The latter already exists on Github. The juju-core/testing module 
has lots of dependencies on other packages in juju-core, so if we encounter 
those we will need to handle that (I presume by refactoring test code). In the 
utils case, juju-core/testing/testbase does not seem to depend on anything, so 
we should be ok.

3) Migrate juju-core/schema to juju/utils/schema. The schema package has no 
juju-core dependencies.

4) Migrate juju-core/charm. This has some pre-requisites. Basically IIUC charm 
defines config and meta and those definitions are tangled with the underlaying 
Mongo documents. William suggested to decouple that, implementing separate data 
structures to be used to (de)serialize data. This way, changes to charm 
database structure can be detected earlier and core developers are able to 
react accordingly. Soon this could also involve actions data. 

5) Move the store.

For each step AFAICT what we need to do is similar to the following:
1) possible preliminary work to move the testing stuff;
2) create Github project (if it does not exist);
3) add readme, copying, license files etc;
4) notify developers we are locking the package;
5) migrate the code;
6) fix package imports if required (e.g. for sub-packages);
7) fix package tests;
8) land a juju-core branch which:
   - removes the package;
   - fixes all the imports;
   - includes the new dependency info in the dependencies.tsv file;
9) notify developers about the new external dependency.

Thanks!

--
Francesco


-- 
Juju-dev mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/juju-dev

Reply via email to