On Aug 11, 2012, at 8:29 AM, Geert Janssens <janssens-ge...@telenet.be> wrote:
> I have just added some scripts to run an automated build from git instead of > svn. > > I copied the svn behaviour as closely as possible. While doing so I got to > question parts of the general setup we promote [1]. The guidelines state that > the contents of packaging/win32 should be copied locally, and it shouldn't be > in the repo checkout that will later be used for building. > > I see several issues with this, some of which may be easier to fix than > others: > - I first wondered why the packaging directory should be separate from the > repo used to build. After some pondering I came up with this: when > UPDATE_SOURCES=yes, and we're using the packaging dir from the repo, the > install scripts may update from under us while building. Obviously not good. > - So I started thinking about UPDATE_SOURCES. Why is that option in there ? I > suppose for the "automated" mantra. Having it in there, allows you to always > build the most recent state of a branch. I wonder though if this benefit > outweighs the restrictions and limitations it brings with it. > - Copying the packaging directory is a bootstrap thing and has other issues: > the guidelines don't explain how to copy this directory. On a clean Windows > system your option is to manually download each file or use some kind of > download manager. At this stage the user isn't supposed to have svn or git > available to checkout the directory - that means the guidelines don't ask him > to do so, because it will be installed later on "automatically". This looks > like a hurdle to me for new potential contributors on the Windows platform > (there are many more, I know...) > - Next, by simply copying the files to a local directory, the user looses the > main advantage a checked out repo has: easy update to newer versions of the > build scripts. The user has to guess if/when the scripts were updated and > manually copy the over again from somewhere. So if the user isn't careful, > later builds may be using outdated build scripts. > - The fix for the last problem would be to use some form of checkout of the > packaging directory. But at bootstrap time, there's no subversion or git > available. That can be solved by asking the user to install either tool > manually. > - For svn, the story ends here. The user uses svn to checkout the packaging > directory and continues the setup. To get the most recent build scripts, it > suffices to run svn update. > - But for git users, there's another catch: git doesn't allow to checkout one > directory only from a git repo. So to satisfy the original requirement > (separate packaging directory) he needs to clone the complete git directory. > The build itself will clone it once more. That's twice the disk space for the > complete gnucash repository used for only ten or something scripts. > > And all that because UPDATE_SOURCES risks of invalidating the build scripts > mid-build. > > I see two possible fixes: > - drop UPDATE_SOURCES. It's not that hard to update your build repo for > either svn or git. For git which is much more branch focussed than svn, I > think an active developer would probably disable UPDATE_SOURCES anyway, > because it would rarely do what you actually wanted. With UPDATE_SOURCES out > of the way, the bootstrap procedure would be something like: install your > favourite revision control tool, check out the proper repository, (the other > bootstrappers, such as mingw-dtk,...), cd into packaging/win32 and off you > go. This could still work with building from tarball as well. > - alternatively if UPDATE_SOURCES is to stay, we could also move the > packaging/win32 directory to a separate repository (similar to what the OS X > build does). That would allow UPDATE_SOURCES to remain and have a local > packaging directory that is revision controlled from the start. Doesn't make > much difference for svn users, but for git users the separate packaging > repository would be a small clone instead of having to checkout the whole > gnucash repository. So for this solution the steps would be: install your > favourite revision control too, checkout the packaging repository. Do the > other bootstrapping stuff and off you go. The packaging repo can be updated > whenever needed. > > Personally I prefer the first option. From a new user's point of view it > would look so much more intuitive to be able to either install a tarball or > the preferred rcs and checkout the proper repo and from there on start > building (I deliberately ingore some other bootstrap steps here to create the > picture). But the second option would work as well for me. > > What do others think ? Is my reasoning correct ? What do you see as solutions > ? There are two other options that come to mind: 1. A bootstrapping script can use wget to retrieve the files it needs from https://raw.github.com/Gnucash/gnucash/<branch>/packaging/win32/foo, no need for downloads by hand. 2. Switch to jhbuild if it can be made to work. Sam Thursfield did some work on this which I think Fréderic Peters has committed into the main repo. See https://live.gnome.org/Windows/MingwNativeBuild. But more generally, yes, UPDATE_SOURCES gets in the way of an active developer, so it should probably be off by default anyway. Regards, John Ralls _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel