Patch o Core Hack


14

Quando sono su un progetto di aggiornamento del sistema, una delle cose che faccio è diff il sistema di un client contro una nuova installazione di Magento. Sto cercando hack core o file aggiuntivi che non fanno parte del Magento standard per assicurarmi di catturare qualsiasi lavoro critico ma di business svolto da un precedente libero professionista, appaltatore, consulente o agenzia.

Una cosa che mi sconcerta sempre però sono le patch. Nel corso degli anni Magento ha emesso patch "tra versioni", in genere per risolvere una correzione di sicurezza o una modifica dell'API di un fornitore di spedizione / pagamento.

Il problema è, dal punto di vista di un diff, che le patch sono indistinguibili dagli hack core, specialmente quando non si conosce quali patch (se presenti) sono state applicate al sistema.

Il che porta alla mia domanda.

Come si fa a distinguere tra un core hack e una patch?

Risposte:


16

Le patch Magento fornite dal supporto aggiungeranno una sorta di registro app/etc/applied.patches.list. Non so quando o da quanto tempo gli "script" patch lo fanno. Anche le patch CE sembrano fare questo.


! Neat Non lo sapevo. Sai se questo fa parte dell'attuale .patch - o il supporto lo fa manualmente? O (probabilmente?) Entrambi? Guardando alcuni vecchi file .patch e non vedendo alcuna modifica a un file applicato.patches.list.
Alan Storm,

L'auto ha aiutato quell'ultimo - le patch CE lo fanno automatizzato (vedi: magentocommerce.com/index.php/getmagento/ce_patches/… )
Alan Storm

2
Sembra (e @ joshua-s-warren sembra confermare) che non tutti i file patch sono creati uguali. Se siamo "fortunati" la patch avrà questa funzionalità incorporata. Ecco un esempio di una che ce l' ha: magentocommerce.com/index.php/getmagento/ce_patches/… Elenca anche solo i file che sono stati modificati e non le modifiche dovresti provare a tracciare la patch per sapere cosa è cambiato, anche se non c'è "garanzia" che fosse la stessa usata.
beeplogic

2
Purtroppo la maggior parte delle patch EE che abbiamo, non hanno questa funzionalità
Allan MacGregor

4
Tutte le patch distribuite come file .sh, per i biglietti SUPEE dovrebbero avere questa funzionalità (se non quelle vecchie). Sorpreso @AllanMacGregor non lo vedi. Hai un esempio di una patch che è stata applicata (numero SUPEE) ma non elencata?
Piotr Kaminski l'

7

Questo è qualcosa di cui mi occupo spesso (e sto lavorando proprio ora) e, sfortunatamente, finora è un processo completamente manuale - abbiamo un processo automatizzato che contrassegna ogni file che potrebbe essere modificato come parte del nostro controllo automatico iniziale per un nuovo client di supporto. Abbiamo quindi qualcuno che diffonde quei file ed escludiamo qualsiasi falso positivo evidente (cioè cambiamenti di spazi bianchi).

Quindi, la parte divertente - un membro anziano del nostro team che ha lavorato con Magento per un po 'di tempo deve dare un'occhiata ai risultati per determinare se uno qualsiasi dei file modificati potrebbe essere il risultato di una patch. Abbiamo esaminato l'aggiornamento del nostro sistema per verificare tutte le patch di cui siamo a conoscenza / su cui possiamo mettere le mani, e che potrebbero funzionare per CE, ma su EE è ancora più impegnativo, poiché il supporto EE a volte emette patch direttamente ai clienti che non sono mai stati rilasciati in altro modo o catalogati in modo coerente.

Quindi, quando eseguiamo questo livello di revisione, facciamo affidamento sull'esperienza passata con l'applicazione di queste patch + buon senso (ovvero, è solo una modifica all'endpoint di un'API? In tal caso, l'endpoint modificato è presente nella versione aggiornata? In caso affermativo, era una patch e può essere ignorato).

Sarebbe teoricamente semplice applicare tutte le patch disponibili nella pagina di download di CE, ecc., A tutte le versioni applicabili di CE e confrontarle (FYI, non usiamo diff per il primo passaggio - usiamo hashing, in parte perché abbiamo costruito questa tecnologia in uno strumento che può controllare in remoto su un sito senza bisogno di scaricarlo prima). Ciò escluderebbe la maggior parte delle patch, ma non aiuta ancora per le patch CE o EE che non sono pubblicate nell'area di download pubblica per CE o nell'area di download client / protetta per EE. Ciò richiederebbe a Magento di mettere in atto una politica coerente in base alla quale TUTTE le patch saranno rese disponibili a TUTTI i clienti e di pubblicare quelle dove potremmo arrivare.

Quindi, non penso che ci sia un modo per automatizzare al 100% questo fino a quando i cambiamenti non avvengono sul lato Magento delle cose, sfortunatamente.


2
Con il repository github delle versioni di Magento, è banale lasciare che git faccia il lavoro. Nessun hashing personalizzato necessario. Basta aggiungere il telecomando, recuperare il telecomando e git diff depot/master origin/master. La sfida è .gitignore. Un'altra opzione è quella di clonare la versione in una app/code/coredirectory separata, quindi copiare la directory dei siti su di essa. git diff -wte lo dirò.
Melvyn,

Lo abbiamo fatto in questo modo perché spesso lo testiamo in remoto su server che non ci consentono di installare software e che potrebbero non aver installato git. In un ambiente in cui git è presente, hai ragione, puoi usare git diff.
Joshua S Warren,

Ah sì, vedo il tuo punto. In effetti, penserò a come ottenere qualcosa di simile in Magerun.
Melvyn,

4

Un modo in cui mi sono avvicinato a questo mentre stavo facendo molti aggiornamenti e cercando di sistematizzare il processo era in realtà il commit delle patch direttamente nel tuo repository di codice principale che stai usando per diff.

Questo in realtà ha due vantaggi:

  1. Niente più falsi positivi che compaiono nei tuoi diff.

  2. Diciamo che hai un sito che non ha una determinata patch. Potresti dire che è un problema perché apparirà come codice mancante nel tuo diff anche se tecnicamente non mancano nulla rispetto a un nuovo download senza patch. Ma in realtà, la mancanza di una patch è in realtà un problema che dovrebbe essere risolto, quindi è perfetto che si presenti nel tuo diff per poterlo risolvere insieme all'aggiornamento.


4

Non penso che avere un Magento nel repository del progetto sia inizialmente una buona idea, nel caso in cui gestisca più di 2-3 clienti. Dal momento che è sempre più facile confondere le patch di sistema applicate con hack core.

L'opzione migliore, a mio avviso, è quella di avere un mirror repository Magento del compositore con tag di versione, che punta a una particolare versione di Magento con possibili patch ufficiali applicate.

Inoltre, sarebbe più semplice mantenere le tue patch sui file, come Mage_Core_Model_Config per siti Web ad alto carico e alcuni altri, introducendo la loro installazione tramite compositore con un numero di versione corrispondente alla tua installazione di Magento.

Quindi, in questo caso, l'aggiornamento di tutti i progetti dei clienti a un codice Magento con patch comporterà solo il bump della versione del file del compositore. Inoltre, mantenendo il codice del progetto separato dal core, costringerai i tuoi sviluppatori a non hackerare il core.

Per quanto riguarda la definizione di patch e hack, preferirei chiamarlo così:

  1. Una modifica del file core originale con il file patch ufficiale: è una patch
  2. Una modifica del file core originale da parte del tuo team: è un hack.
  3. Una modifica nel file core copiato locale ai fini della correzione di bug - è una patch
  4. Una modifica al file core copiato locale per fornire nuove funzionalità: è un hack

Quindi, spostando il core in un repository separato, ti assicurerai di avere solo la versione patchata in base al punto 1. E puoi facilmente installare le tue patch sul compositore nel pool di codice locale, quindi hai tutto secondo il punto 3. In caso di 2 e 4 è possibile creare un hook di commit git nel repository di progetto per proibire qualsiasi commit del codice in quella directory.


3

Guardo il file di patch applicato in quella /app/etc/cartella e lavoro all'indietro. Ma come ho appreso dall'aggiornamento, posso semplicemente eliminare il file su una versione che ha il file patchato in loro e la prossima volta che è patchato è pulito.


2

Qualunque cosa da Magento chiamerei una patch. Tutto il resto è un trucco.


1
D'accordo, ma è come dire quale sia quale dopo il fatto.
Alan Storm,

Probabilmente farei un confronto tra il tuo confronto sull'installazione di base e quindi un confronto aggiuntivo rispetto a un'installazione con ogni patch applicata separatamente (o solo il risultato finale di tutte le patch applicate). Probabilmente ci vorrà qualche ordine di grandezza in più di lavoro, ma è l'unico modo a cui riesco a pensare.
Josh Pennington,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.