В какой версии X появилась функция Y?

10

Большая часть моей ежедневной работы является разработка программного обеспечения для использования на машинах с разными версиями одного и того же программного обеспечения, как bash, find, и grep. При обнаружении функции, которая может быть полезна, например, для упрощения кода, важно знать, доступна ли эта функция в самых старых установленных инструментах. Для критических вещей было бы также полезно узнать, была ли эта функция новой или существовала годами в самых старых установленных инструментах.

Как быстро ответить на этот вопрос авторитетно для инструментов Linux, особенно для GNU Core Utils? Некоторые возможности в порядке уменьшения точности:

  • Бинарный бинарный поиск (sic) с запуском разных версий, конечно, является окончательным ответом, но, безусловно, занимает больше всего времени. Старые установки часто недоступны по соображениям безопасности.
  • Чтение кода почти так же хорошо, но оно может занимать слишком много времени, если функция имеет неопределенное имя, имя не соответствует непосредственно именам переменных / функций / объектов или было реализовано до того, как было включено.
  • Журналы изменений , если они доступны, обычно связывают изменения функций с версиями программного обеспечения.
  • Журналы фиксации могут содержать подсказки, но не знают, в какую версию они будут включены.
  • на страницах руководства редко упоминаются даты.
  • То же самое относится и к Google , и вам также будет трудно исключить все неавторизованные источники.
l0b0
источник
Не могли бы вы уточнить причины этого вопроса?
Фахим Митха,
ISTM: если вам нужно портировать программное обеспечение на эти разные платформы, у вас должна быть где-то «самая старая» установка. Так что довольно быстрый и авторитетный ответ - попробовать его на этой платформе. В идеале на всех платформах (если вы написали тестовый пример в виде сценария, вы можете отправить его на все свои платформы портирования и получить серию ответов да / нет).
17

Ответы:

7

Как правило, есть список изменений. Фактически, это (или другие «заметные уведомления» об изменениях) требуется GPL! (По крайней мере, эффективно для всего с несколькими участниками - см. Раздел 2a GPLv2.)

Для пакета GNU coreutils - и почти для всего остального непосредственно из проекта GNU - этот файл определенно является первым местом, где нужно искать, и он должен отвечать на ваш вопрос 95% времени.

mattdm
источник
У вас есть ссылка на журнал изменений coreutils? Самое новое, что я смог найти, было в 2007 году.
l0b0
2
GNU Coreutils ChangeLog не обновлялся с 2007 года. Cvs.savannah.gnu.org/viewvc/coreutils/… Вы должны просмотреть журналы git сейчас.
Микель
2
Это может быть автоматически сгенерировано из журналов git. Там есть ChangeLog.bz2в /usr/share/doc/coreutils-8.10моей системе Fedora, а запись сверху от 2011-02-04. Возможно также, что это - вилка RH - я проверю это позже сегодня.
Mattdm
@mattdm: В Ubuntu есть /usr/share/doc/coreutils/changelog.gz - Спасибо! К сожалению, это восходит только к 2008 году, который является слишком недавним для некоторых соответствующих инструментов. Я предполагаю, что это берет на себя, где последний закончился, хотя.
мая 2013 года
3
Вот доказательство: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING. Прокрутите до строки 131.
Шиннок,
4

Почему бы не использовать контроль исходного кода, связанный с X, для поиска функции Y? Исходный репозиторий - лучший способ определить, когда была представлена ​​конкретная функция.

Для coreutils вы можете перейти на http://git.savannah.gnu.org/cgit/coreutils.git и искать ключевые слова, связанные с Y, в сообщениях журнала или определенных строках кода, которые вы определили как принадлежащие Y. Вы можете сделать это на веб-интерфейс напрямую или, что еще лучше, клонирует исходный репозиторий на вашу станцию ​​и выполняет поиск, используя git-bisect , git-blame и git-log --grep .

Затем используйте git- description, чтобы выяснить, является ли тег ближайшим к конкретному коммиту. Тэги используются в основном для номеров версий, поэтому они дадут вам версию, которая ввела коммит.

Вы можете адаптировать вышеописанный метод в зависимости от X и его контроля источника.

Шиннок
источник
Как бы вы определили, какой коммит / строка вошли в какую версию программного обеспечения? Кроме того, поиск в саванне сильно нарушен - нет результатов для строк, которые явно находятся в тех же сообщениях журнала.
10
Используйте git- description, чтобы выяснить, является ли тег ближайшим к конкретному коммиту. Теги используются в основном для номеров версий. Что касается того, что Саванна была сломана, ты ничего не можешь с этим поделать. Git клонируйте репозиторий в свою коробку и работайте, используя команды git, которые я описал в посте.
Шиннок
1

На Debian и производных от Debian платформах, таких как Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

предоставляет журнал изменений GNU Core Utilities вплоть до версии 4.5.1-1.

Не уверен, есть ли такие же удобные решения на других платформах.

mklement0
источник