TL;DR: Composer is good, please vote up! Another great feature of having dependencies managed is that we could leverage services like https://www.versioneye.com to keep up with upstream changes (updates/bugfixes/security) without relying on some human auditing the libraries once in a while.
Anyway, I've already expressed my views. Thanks Marcos :) 2014-10-01 11:29 GMT+02:00 Marcos García <marcos...@gmail.com>: > Hi all: > > I've recently experimented with Composer and delegating dependencies > management to it. You can see the result in > https://github.com/Dolibarr/dolibarr/pull/1759 > > If you are not familiar with Composer, it does allow removing 3rd party > code from the source and updating dependencies with a single "composer > update" command. If you want to "lock" the version of the dependencies for > your project, just do "composer lock" and developers should only use > "composer install" to install the exact version your project needs to work > properly. Versions are stored in a composer.json file. > > I'll put some opinions made by Laurent D. an Raphaël D. > > Laurent said: > > I don't think we should composer. I know a lot of people think it is a >> good practice. When editing a software i think the opposite. It is not >> composer to decide which version of library we must provide or "validate" >> for a full dolibarr release. Only one version must be tested/validated per >> version of dolibarr. >> Using composer bring more problem than solution (in fact i don't see any >> good thing with using dependencies into a software you edit). This may be a >> good thing for an os to manage software but not for a software to manage >> libraries. There is few effect of os into a software but a library onto a >> software just can't be separated. >> We must be sure of wich version is used. We must also be able to patch >> them (as we did into dolibarr_changes.txt) >> Also using composer is just a headache when we want to build a package. >> Also when externalisation of lib must be done (for example when we have >> no choice for debian package), the we must be able to do it library per >> library (like it is already done). So using a global constant >> DOLIBARR_VENDOR_ROOT is not a good solution (there is already a constant >> for each library so no need to add one more global). Package debian that >> force to use external library is a good example of all problems we have >> when using an external composer: We finally had to remove completely some >> feature into debian package (not the one provided by dolibarr but the one >> that was pushed into debian official sources) just because external library >> was changing to often with a change in behaviour that we couls not control. >> Definitely managing dependencies automatically is not a good way of >> working for a "software editor". It consumes a lof of time and result is a >> not stable software (debian package is a good example. The package pushed >> into official debian with dependcies managed by a composer like is just a >> pain and not reliable, package debian provided by dolibarr with embeded >> libraries just works like it should). >> Other people may try to make my mind change i have so many bad experience >> using composer like feature into software buidling solved just by stopping >> using it that probability to have this is nearly 0% currently. > > > Raphaël said: > >> Let me politely disagree. The problems you mention are not composer's >> fault but the way you think it should be used (or the way most people tend >> to use it). >> Composer vastly simplifies dependency management by locking specific >> version of the dependencies to your code (in the composer.json or through >> the composer.lock that should be committed to the tree), while being >> explicit about it and helping managing updates smoothly by choosing >> precisely the version(s) you want and/or allow. >> I'm not in favor of a new vendor path either. Our include path >> (htdocs/includes/) already does exactly this for us. We don't even need any >> autoloader (yet). >> I'm also strongly in favor of keeping the composed files in the revised >> tree, but composer purists may disagree. >> I just use it as I use my OS package manager. It sorts dependencies out >> for me but I'm still allowed to overwrite or move some files if I feel like >> so. >> Bottom line : this PR is not really good for us as-is but it can >> certainly be improved to better fit the Dolibarr project. >> Cheers! > > > Laurent said: > >> The way you suggest to use it looks better to me. That's why i think we >> can have a composer.json file into root, but we must "lock" as you suggest >> the embedded version, once selected for a development target. > > > I said: > >> Hi all: >> Versions are defined in composer.json file. As you can see, I used >> specific versions instead of the "*" or "~" parameter. That tells composer >> to download only that version, and composer.lock tells Composer to download >> those versions when doing the "composer install" command. >> When I tell you that I had to update them is because they were too old to >> be available, which shouldn't be really a problem if we test them. >> Whenever you want to update them, you edit composer.json to reflect the >> new version and do the "composer update" command. You can also tell >> composer to target a significant release of a minor version. For example: >> we track version 2.3 and 2.3.1 is used, but tomorrow 2.3.2 is released and >> composer.json wouldnt notice unless you tell him to download 2.3.2 version. >> You could do "~2.3" and it will download the latest one. "composer update" >> to update and "composer install" to install already locked versions. >> The fact of separating the libraries from the code gives the advantage of >> not tracing other libraries' changes. That's a good advantage because "our" >> Git will only track our changes. >> I did not remove the global constant you mention. Even if I don't like it >> because it is a source of a lot of problems (e.g. Debian having a super old >> version of an external library and Dolibarr requiring an specific version >> because of a bug). But that's not the point of the discussion. >> ¿Problems? Don't think so. A problem would be in a big Symfony project >> wether you can have a very complex map of dependencies that require around >> an hour and 3G of RAM to update them. This one is not. >> Also, you are talking about "patching" external libraries. Patching >> external libraries is forking them. Also, it is better to modify them >> through extending classes than through modifying them directly as it is >> then harder to update because you have to deal with their changes and you >> changes over the file. >> The vantages I find using Composer in Dolibarr are: >> >> - Stop tracking other libraries changes >> - Easier update of external libraries >> - Better control of external libraries >> - Separation of actual Dolibarr code and other libraries code >> >> The discussion was moved to the mailing list to know your opinion about > this change. This PR doesn't have to be the final one, was just an > experiment to see if the change could be possible or not. > > What do you think? > > Regards, > > *Marcos García* > > marcos...@gmail.com > > > _______________________________________________ > Dolibarr-dev mailing list > Dolibarr-dev@nongnu.org > https://lists.nongnu.org/mailman/listinfo/dolibarr-dev > > -- *Raphaël Doursenaud* Directeur technique (CTO) Expert certifié en déploiement Google Apps <https://gpcsolutions.fr/raphael-doursenaud-google-apps-certified-deployment-specialist> +33 (0)5 35 53 97 13 - +33 (0)6 68 48 20 10 -- <http://gpcsolutions.fr> http://gpcsolutions.fr Technopole Hélioparc 2 avenue du Président Pierre Angot 64053 PAU CEDEX 9 SARL GPC.solutions au capital de 7 500 € - R.C.S. PAU 528 995 921 <http://wiki.dolibarr.org/index.php/Dolibarr_suppliers_France#GPC.solutions>
_______________________________________________ Dolibarr-dev mailing list Dolibarr-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/dolibarr-dev