2012-03-28 12 views
1

Ich entwickle eine Django-Anwendung der Freigabe Django 1.3.1 Verwendung: https://code.djangoproject.com/browser/django/tags/releases/1.3.1Wie man einen Django-Patch anwendet?

ich einen Fehler gestoßen, die von dem Django-Team identifiziert und behoben wurde: zum entsprechenden Fehler https://code.djangoproject.com/ticket/16128

Die changeset Auflösung ist in Django Kofferraum https://code.djangoproject.com/changeset/17755

Meine Frage ist: Wie kann ich die Fehlerkorrektur nutzen, ohne auf die Django Trunk-Version zu aktualisieren?

Es gibt eine Reihe von Dateien auf dem Ticket angehängt, ist die neueste: https://code.djangoproject.com/attachment/ticket/16128/16128.diff

ich, dass diese Datei ‚diff‘ Datei ein Standard ist zu sehen, die von der ‚Patch‘ Utility verarbeitet werden können. Ich habe versucht, es auf meiner django 1.3.1-Installation (auf einem Dev-Rechner) anzuwenden, aber es funktioniert nicht ... Die Quellzeilen (zu ersetzen) sind nicht genau die, die von der Diff-Datei erwartet werden.

Um den ‚Startzustand‘ erledigt diese Diff-Datei verweisen? Mit anderen Worten, auf welche Django-Version kann es angewendet werden?

Gibt es eine andere Art und Weise als ihre Anwendung ‚manuell‘? Auch wenn ich es manuell anwenden, kann ich sehen, dass die gepatchte Coderuf neuen Versionen von Methoden nicht im Patch enthalten ... was bedeutet, dass ich herausfinden müssen, durch den Code zu lesen, die anderen Dateien gepatcht werden müssen, und patch sie ...

An diesem Punkt denke ich etwas wie: "Waow, es ist zu kompliziert, lasst uns die nächste Version von Django - 1.5, für dieses Ticket warten - und einen Workaround finden!". Aber in der anderen Seite, wenn der Patch-System vorhanden ist, muss es möglich sein, diesen Patch meine Django 1.3.1 Installation anzuwenden ...

Hat jemand das gleiche Problem gestoßen? Wenn ja, wie haben Sie das geschafft?

Vielen Dank im Voraus für Ihre Hilfe

+1

Dieser Fehler wurde auf 2012.03.04 befestigt, der zwei Wochen vor der Veröffentlichung von 1.4 war. Mit anderen Worten, dieser Fix ist in der Version 1.4 enthalten. –

+0

Tatsächlich hast du recht Daniel! Danke – tomjerry

Antwort

3

Hast du eigentlich mit dem Django 1.4 Release versuchen, die vor ein paar Tagen ausgestellt wurde? Ich bin mir ziemlich sicher, dass es ein Teil davon ist.

Anyways ... können Sie den offiziellen diff auf der changeset Seite, die Sie verwiesen - unten ein Link zu einem Standard-Diff ist. Du kannst den Patch von dort herunterladen und ihn verwenden, um (1) deine Veröffentlichung zu patchen (Achtung, sollte das Django-Team eine neue Sicherheitsversion von Django 1.3 veröffentlichen, musst du es möglicherweise erneut anwenden). Diese Diffs sind jedoch immer gegen die aktuellste Codebasis zu dem Zeitpunkt, an dem der Patch festgeschrieben wurde. Aus diesem Grund haben Sie manchmal ein Pech (wie in dem Fall, den Sie oben beschrieben haben) und es kann nicht sauber auf die vorherige Version angewendet werden. In diesem Fall müssten Sie alle Änderungen aufspüren, die erforderlich sind, damit es funktioniert, was ziemlich viel Arbeit bedeutet und möglicherweise inakzeptabel ist. Es gibt also nur drei Möglichkeiten: Finden Sie Ihren eigenen Weg, um den Fehler zu bearbeiten, verfolgen Sie alle Änderungen, die erforderlich sind, um den Patch sauber anzuwenden, oder führen Sie ein Upgrade auf die angegebene Version durch.

+0

Du hast recht Daniel, der Bug ist in Django 1.4 behoben! Und danke, dass Sie auf die drei Möglichkeiten hingewiesen haben, einen "Patch" anzuwenden. Keine Magie! – tomjerry

Verwandte Themen