Как применить патч Django? - PullRequest
1 голос
/ 28 марта 2012

Я разрабатываю приложение Django с использованием выпуска Django 1.3.1: https://code.djangoproject.com/browser/django/tags/releases/1.3.1

Я обнаружил ошибку, которая была идентифицирована и исправлена ​​командой Django: https://code.djangoproject.com/ticket/16128

Набор изменений, связанный с исправлением ошибки, находится в стволе Django https://code.djangoproject.com/changeset/17755

У меня вопрос: как я могу воспользоваться преимуществами исправления ошибок, не обновляя версию транка Django?

К пачке прикреплены файлы, последняя из которых: https://code.djangoproject.com/attachment/ticket/16128/16128.diff

Я вижу, что этот файл является стандартным файлом 'diff', который может быть обработан утилитой 'patch'. Я попытался применить его к моей установке django 1.3.1 (на машине разработчика), но она не работает ... Исходные строки (подлежащие замене) не совсем те, которые ожидаются в файле diff.

К какому «начальному состоянию» относится этот файл сравнения? Другими словами, к какой версии django она может быть применена?

Есть ли другой способ, кроме применения его «вручную»? Даже если я применяю его вручную, я вижу, что исправленный код вызывает новые версии методов, не включенных в исправление ... что означает, что я должен выяснить, читая код, какие другие файлы должны быть исправлены, и залатать их ...

В этот момент я думаю что-то вроде: «Вау, это сложно, давайте подождем следующий выпуск Django - 1.5, для этого билета - и найдем обходной путь!». Но, с другой стороны, если система исправлений существует, должна быть возможность применить это исправление к моей установке Django 1.3.1 ...

Кто-нибудь сталкивался с такой же проблемой? Если да, то как тебе это удалось?

Заранее спасибо за помощь

1 Ответ

3 голосов
/ 28 марта 2012

Вы на самом деле пробовали версию Django 1.4, выпущенную несколько дней назад?Я совершенно уверен, что это является его частью.

В любом случае ... вы можете получить официальный diff на странице изменений, на которую вы ссылались - внизу есть ссылка на объединенный diff.Вы можете скачать патч оттуда и использовать его для исправления (1) вашего релиза (будьте осторожны, если команда Django выпустит новый релиз безопасности Django 1.3, возможно, вам придется применить его снова).Однако эти различия всегда соответствуют самой последней кодовой базе во время фиксации патча.По этой причине иногда вам может не повезти (как в случае, который вы описали выше), и это может не относиться чисто к предыдущему выпуску.В таком случае вам придется отслеживать все изменения, необходимые для его работы, что может быть довольно трудоемким и неприемлемым.Таким образом, есть только три варианта: найти свой собственный способ исправления ошибки, отследить все изменения, необходимые для корректного применения исправления, или обновить до указанной ревизии.

...