Non c'è davvero niente di sbagliato nel farlo finché tutti possono sopportare costi, benefici e rischi.
...the fix seems simple enough ... to patch the code myself
Quando hai un lavoro da fare, perfetto (avere una libreria di terze parti che è esattamente ciò che vuoi) è il nemico di abbastanza buono (aggiustandolo tu stesso), ea volte devi fare cose del genere. Ho realizzato diversi progetti in cui abbiamo acquistato licenze di origine per le librerie commerciali in modo da poter risolvere i problemi prima che il fornitore ci arrivasse.
...detractors want to argue the case that this is nearly always
a bad idea in that it is risky and introducing a troublesome complexity.
È una cattiva idea se non hai le costole per gestire sezionare il codice di qualcun altro, identificare un problema e scrivere una correzione. È vero che il codice è in-house o di terze parti; l'unica differenza è se è stato gettato sopra un cubicolo o un muro dell'edificio prima che cadesse in grembo.
Se i tuoi detrattori stanno semplicemente spazzando via l'idea senza pesare i costi di non facendo questa patch, non stanno facendo i compiti. Se hai un sacco di codice in-house che è influenzato dall'errore che la tua patch potrebbe risolvere, dovrai passare e cambiarlo per aggirare il problema e rieseguire il test di tutto per assicurarti che funzioni correttamente. Quindi, se dovessi aggiornare il pacchetto a una versione corretta, potresti dover trovare e rimuovere i tuoi workaround e ripetere il test. Vi sono anche dei rischi, come mancare un caso che hai modificato o un test insufficiente. Personalmente, se avessi l'opportunità di correggere un bug alla fonte, preferirei farlo lì piuttosto che inseguire il resto del codice con uno scacciamosche e spero di ottenere tutto.
...code change was done by us ... it must be part of our code base
...we must introduce it as a new project and incorporate its
automated build into our build process.
Se stai facendo una patch, la patch fa parte del tuo codice, il che significa che devi renderlo parte del tuo processo. Questo non è diverso dall'aggiunta di qualcosa che è al 100% il tuo codice al tuo sistema. Considera sacrosanta la distribuzione di terze parti e inseriscila in un modulo come se fosse un codice sorgente. Tutte le patch che scrivi sono memorizzate con esso in file separati e applicate come parte del processo di compilazione. In questo modo vai sempre da fonte pulita a fonte patchata a prodotto costruito e puoi mostrare esattamente cosa sta succedendo. (Alcune persone decomprimono, applicano le patch a mano, reimballano e archiviano ciò nel controllo di versione.).
...we would be pulling their code from their source control repository
into ours, and we lose the history behind any code changes...
Se stai trattando la libreria di terze parti come una dipendenza di terze parti, non hai quella storia per cominciare e non stai perdendo nulla. Se si continua ad accedere al repository di terze parti, è possibile consultarlo qualora fosse necessario. I rilasci di terze parti dovrebbero essere trattati come blob amorfi che controlli nel tuo sistema inalterato. Se hai bisogno di guardare le modifiche tra il rilascio che stai utilizzando e le versioni successive, puoi farlo e, se lo desideri, fornire le patch alla vecchia versione che incorporano le modifiche che desideri.
Also it just seems like something that is far too complicated for
such a small code change that needs to be made.
Se il tuo processo di compilazione è sufficientemente sofisticato, aggiungere questo non dovrebbe essere più difficile dell'aggiunta del tuo codice. C'è un po 'di fatica nel portarlo al punto in cui il processo di decompressione / patch / build è automatico, ma una volta finito, è fatto per sempre. Potrebbe esserci un bug adesso, ma ce ne potrebbero essere venti in futuro. Se ci sono, sarai molto più felice di aver gettato le basi per sostenere tutto questo ora, perché renderà il lavoro con i prossimi 19 molto meno lavoro.