Upgrade moodle: come preservare le patch personali?

Upgrade moodle: come preservare le patch personali?

di Renato Muzzini -
Numero di risposte: 9

buongiorno a tutti

vecchio utente di moodle (da 9 anni), e primo intervento sul forum: che emozione!

la questione su cui richiedo vostro commento/consiglio mi angustia da anni: ho sempre trovato moodle una piattaforma ottima per l'erogazione di contenuti e-learning, ma - ovviamente - l'ho sempre pesantemente modificata, a livello di codice, per venire incontro alle esigenze della mia Società e dei suoi discenti.

ogni modifica è sempre stata tracciata sul mio "diario personale delle patch", in modo da poterla riapplicare ogni volta che si trattava di aggiornare la versione ufficiale (quegli aggiornamenti necessari in caso di patch fondamentali legate alla sicurezza o a gravi bug).

il lavoro di ri-patch, ovviamente, è lento (lo faccio a manina, sulla base del mio diario) e corro sempre il rischio di lasciare indietro qualche riga in qualche file minuscolo che prima o poi creerà problemi.

allora, certo di non essere il solo a personalizzare il moodle originale, la mia domanda è: voi che metodo/procedura applicate?

sto passando in questi giorni, dopo secoli di 1.9.9+, finalmente al ramo 2.4 (lasciato indietro proprio per le pesanti modifiche apportate alla 1.9). e sto pensando di inziare a produrre quanto meno dei file .diff. ma non sono certo che basti, perché le modifiche che faccio (non solo nuove righe, ma anche modifica del codice originale) temo possano non essere riconosciute correttamente, in caso di pesante upgrade di moodle.

o mi sfugge qualcosa?

qualche idea che mi illumini?

Media dei voti:  -
In riposta a Renato Muzzini

Re: Upgrade moodle: come preservare le patch personali?

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators

Ciao Renato,

da quello che dici nel tuo post penso che uno strumento utile sia un version control system che ti aiuti nel lavoro di gestione delle variazioni che apporti al codice. Nello sviluppo di Moodle si usa Git, si tratta di uno strumento estremamente versatile ed è un software libero. Per alcune preliminari indicazioni:

E per approfondire:

In riposta a Andrea Bicciolo

Re: Upgrade moodle: come preservare le patch personali?

di Renato Muzzini -

ops! mi era sfuggito che moodle usasse Git!

grazie della dritta.

provo a seguire questa strada. posterò i risultati qui.

In riposta a Renato Muzzini

Re: Upgrade moodle: come preservare le patch personali?

di Renato Muzzini -

ok. ho installato e configurato git.

mi pare possa essere proprio lo strumento che mi serviva.

non ho ancora la controprova finale, perché ho proceduto su un'installazione vergine dell'ultimo ramo 2.4 e devo attendere le modifiche ufficiali a questo, per completare il test e verificare se ho fatto tutto per benino.

ho anche scritta una guida passo-passo di quello che ho fatto.

se volete posso condividerla. è un po' lunghetta. magari però può essere d'aiuto.

In riposta a Renato Muzzini

Re: Upgrade moodle: come preservare le patch personali?

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators

Ciao Renato,

se desideri condividere la tua esperienza la cosa sono certo sarà sicuramente gradita. Se vuoi puoi anche contribuire con la tua guida alla documentazione ufficiale, le credenziali per farlo sono le stesse che usi per autenticarti su moodle.org.

Una pagina che potrebbe essere estesa per accogliere la tua guida potrebbe essere questa: http://docs.moodle.org/24/en/index.php?title=Git_for_Administrators

In riposta a Renato Muzzini

Re: Upgrade moodle: come preservare le patch personali?

di Renato Muzzini -

facciamo che intanto lo posto qui. essendo la prima volta che armeggio con git non è detto che non abbia fatto passi errati o me ne sia dimenticati altri. attendo eventuali commenti per modificare/migliorare la mini guida.

[nota iniziale: questa mini-guida sull'uso di gift è ancora sperimentale, è basata su fatti realmente accaduti grazie all'ispirazione data dalle 2 guide di moodle su Git consigliate da andrea e dal manuale italiano di Git stesso. il mio scopo era attivare una procedura che mi permettesse di tenere aggiornato moodle senza perdere i miei hack al codice, potendoli ri-applicare automaticamente sui nuovi file ufficiali. spero questa guida possa ispirarvi, aiutarvi e, soprattutto, essere migliorata con il vostro contributo.]

[START]

ho installato git (ottima guida in italiano con un passo-passo: http://git-scm.com/book/it/Per-iniziare )

via terminale:
ho configurato git (lavoro su ambiente osx 10.6 server, per editor e diff tool differenti verdere la guida citata)
$ git config --global user.name "Mio Nome"
$ git config --global user.email mia@email
$ git config --global core.editor nano
$ git config --global merge.tool opendiff


mi sono spostato nella cartella che dovrà ospitare il mio moodle pubblico
$ cd <cartella pubblica del server http>

ho clonato il brach di moodle
$ git clone git://git.moodle.org/moodle.git

[nota: così i file vengono copiati in una cartella chiamata "moodle". se si vuole chiamarla diversamente basta aggiungere il nome scelto, es.:
$ git clone git://git.moodle.org/moodle.git moodleonline
oppure fare un "mv moodle moodleonline" al termine dell'operazione di clone]

ho richiesto i rami disponibili
$ cd moodle
$ git branch -a


ho preso il brach stabile più recente
$ git branch --track MOODLE_24_STABLE origin/MOODLE_24_STABLE
$ git checkout MOODLE_24_STABLE


via browser:
ho proveduto all'installazione on line
http://<miosito>/install
ecc.

[nota: potrebbe essere necessario prima effettuare un chown per ridare poteri di scrittura all'utente dell'httpd (www, www-data, ecc. a seconda del sistema). oppure il file config.php andrà creato poi a mano]

torno al terminale per testare il tutto:
nella directory dell'installazione (in questo esempio "moodle") ho creato un file
$ nano testgit.txt

ho controllato lo stato del repository
$ git status
# On branch MOODLE_24_STABLE
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# testgit.txt
nothing added to commit but untracked files present (use "git add" to track)


ho modificato un file ("brokenfile.php"), modificando una semplice riga di commento
$ nano brokenfile.php

ho ricontrollato lo stato
$ git status
# On branch MOODLE_24_STABLE
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: brokenfile.php
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# testgit.txt
no changes added to commit (use "git add" and/or "git commit -a")


mi dice che vi sono modifiche non ancora registrate nel repository e un file nuovo non tracciato

ho quindi aggiunto le mie modifiche al track
$ git add brokenfile.php
$ git add testgit.txt


ricontrollo lo status
$ git status
# On branch MOODLE_24_STABLE
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: brokenfile.php
# new file: testgit.txt

#

mi dice che vi sono cambi da registrare

nota: per controllare le modifiche PRIMA di aggiungerle al track
$ git diff

per controllare DOPO averle aggiunte
$ git diff --cached

in entrabi i casi l'esito è qualcosa di simile:
diff --git a/brokenfile.php b/brokenfile.php
index 3153ade..691ff72 100644
--- a/brokenfile.php
+++ b/brokenfile.php
@@ -1,6 +1,6 @@
<?php
// This file is part of Moodle - http://moodle.org/
-//
+//remu test
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or


nota: se si fanno modifiche ad un file che è già stato aggiunto nella cache ma non ancora registrato (committed) occorre aggiungerlo di nuovo (git add) o comparirà 2 volte nello status (nel gruppo "Changes not staged for commit" e nel gruppo "Changes to be committed")

ora confermo i miei patch lanciando il commit
$ git commit -v
(nota: con l'opzione -v il comando commit aggiunge - nel report che genera - le modifiche apportate. io lo trovo molto utile. per altre opzioni vedere la guida che cito in alto)

si apre automaticamente l'editor impostato in git (io uso "nano") con il messaggio del commit. la prima riga è vuota: lì va scritto il proprio messaggio pro-memoria (tipo "aggiunto commento di test 2013-04-15"). le righe successive, commentate, sono l'ultimo status, possono essere cancellate. infine, se si è usata l'opzione -v, si ha la traccia dei cambiamenti.

salvo il file

chiudo l'editor

compare la conferma:
[MOODLE_24_STABLE 3f34e25] aggiunto commento di test 2013-04-15
2 files changed, 2 insertions(+), 1 deletions(-)
create mode 100644 testgit.txt

se ricontrollo lo status:
$ git status
# On branch MOODLE_24_STABLE
# Your branch is ahead of 'origin/MOODLE_24_STABLE' by 2 commits.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean


mi dice appunto che la mia versione è "oltre" quella ufficilae (master). e, volendo, potrei pubblicare i miei patch per condividerli (per far questo occorre però procedere diversamente, seguendo la guida "gift for developers" citata da Andrea)

nota: con il comando
$ git log
posso verificare tutte le modifiche che sono state apportate al ramo (vi sono varie opzioni, vedere la guida che cito in alto), con info sull'autore. comprese le mie (esistenti a livello locale).

[END]

a questo punto, sono sicuro che le mie modifiche saranno mantenute e quelle ufficiali del branch pure. starà a me applicarle.

mi verrebbe da concludere così:
l'unica avvertenza è: prima di applicare (commit) le modifiche ufficiali quando ci saranno, occorre controllare che non contrastino con le nostre.
questo pezzo ancora mi manca, come esperienza. attendo di arrivarci… o commenti da chi usa questa procedura.

altro pezzo che ancora mi manca è: quando effettuo l'aggiornamento (git pull ecc come spiegato nella guida per amministratori) via git vedo tutto quello che accade e decido se accettare o meno le modifiche. ma che succede se l'aggiornamento viene fatto on line, via pagina amministrativa del front-end? devo disattivare tale opzione oppure semplicemente dovrò poi riapplicare le mie patch registrate sul repository git? appena ne saprò di più, aggiungerò qualche nota. o, se qualcuno già sa, è il benvenuto… sorridente

In riposta a Renato Muzzini

Re: Upgrade moodle: come preservare le patch personali?

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators

Ciao Renato,

grazie per condiviso la tua guida. Riguardo la possibilità di aggiornamento tramite front end (credo tu ti riferisca all'interfaccia di Moodle), se usi git ti conviene disabilitarla: http://docs.moodle.org/24/en/Automatic_updates_deployment#Disabling_updates_deployment

In riposta a Andrea Bicciolo

Re: Upgrade moodle: come preservare le patch personali?

di Renato Muzzini -

si, intendo quella.

e immaginavo che fosse meglio ignorarla. terrò comunque accesa l'opzione di verifica, tanto per avere un alert quando ci sono cose nuove da aggiornare ed è il caso di lanciare git.

grazie di nuovo.

In riposta a Renato Muzzini

Re: Upgrade moodle: come preservare le patch personali?

di Matteo Scaramuccia -

Ciao Renato,
innanzitutto grazie per aver condiviso con tutti il tuo lavoro Sì.

git è una gran brutta bestia da domare ma quando ci riesci tutto diventa chiaro (solo "dopo" però sorridente). Ti lascio alcuni link per approfondire essenzialmente i due problemi più rognosi, personalmente non ancora affrontati in maniera "robusta":

  1. portare avanti le proprie customizzazioni, avendo la possibilità di allinearsi con i rilasci di Moodle: http://www.nathankowald.com/blog/2012/06/using-git-with-moodle/. Essenzialmente il punto di base è NON fare commit direttamente sul branch ufficiale MOODLE_nn_STABLE ma crearne uno personale ad esempio MOODLE_nn_STABLE-<project_name>
  2. affrontare al meglio (1) quando ci sia un salto di versione quindi di branch ufficiale (MOODLE_<nn>_STABLE => MOODLE_<nn + 1>_STABLE): https://moodle.org/mod/forum/discuss.php?d=191774. Qui il problema principale sono i conflitti, potenziali anche in (1) ma decisamente più rari. Il modello di sviluppo delle tue differenze dovrebbe essere costruito sul principio di "1 funzionalità modificata/nuova <-> 1 branch, tipicamente con un solo commit". Qui trovi sicuramente degli esempi delle problematiche (con più risposte). Un modello funzionale di sviluppo, complesso inizialmente ma robusto successivamente lo trovi qui: http://nvie.com/posts/a-successful-git-branching-model/.

Inoltre ti consiglio di creare un repo master su cui sia tu come Sviluppo sia l'istanza di Produzione siano collegati così che tu possa lavorare alla gestione dei conflitti e rilasciare il giusto commit nel branch unico della tua produzione perché il sito è allineato solo ed esclusivamente a quel branch così da evitare che si creino situazioni imbarazzanti direttamente in produzione.

Ovviamente tutto questo se il numero delle modifiche e i punti in cui siano state effettuate siano decisamente consistenti. Personalmente, stante la curva di apprendimento un po' faticosa e costosa, comunque non rinuncerei a impostare un modello di lavoro come quanto suggerito dai link sopra.

HTH,
Matteo

In riposta a Matteo Scaramuccia

Re: Upgrade moodle: come preservare le patch personali?

di Renato Muzzini -

grazie del contributo, Matteo.

appena riesco mi ci metto dietro e cerco di fare come suggerito.

perché, sì, le modifiche che abbiamo apportato (e che apporteremo) sul moodle ufficiale sono parecchie.