Яка версія X представила функцію Y?


10

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

Які швидкі способи відповісти на це авторитетно для інструментів Linux, особливо GNU Core Utils? Деякі можливості в порядку зменшення точності:

  • Бінарний бінарний пошук (sic) за допомогою різних версій, звичайно, є остаточною відповіддю, але, безумовно, займає найвищий час. Старі установки часто не доступні з міркувань безпеки.
  • Читання коду майже настільки ж добре, але це може зайняти дуже багато часу, якщо функція нечітко названа, ім'я не відповідає безпосередньо назвам змінних / функцій / об'єктів, або воно було реалізовано ще до його ввімкнення.
  • Журнали змін , коли вони доступні, зазвичай підключають зміни функцій до версій програмного забезпечення.
  • Журнали фіксації можуть містити підказки, але не знаю, до якої версії вони будуть включені.
  • сторінки чоловіка рідко згадують дати.
  • Це стосується і Googling , і вам також важко буде виключити всі неавторитетні джерела.

Не могли б ви детальніше зупинитися на причині, що стоїть за цим питанням?
Faheem Mitha

ISTM: якщо вам доведеться портувати програмне забезпечення на ці різні платформи, ви повинні десь мати "найстарішу" установку. Тому досить швидкою та авторитетною відповіддю було б спробувати це на цій платформі. В ідеалі на всіх платформах (якщо ви написали тестовий випадок як сценарій, ви можете передати це на всі ваші платформи перенесення та отримати ряд відповідей "так / ні").
roaima

Відповіді:


7

Як правило, є журнал змін. Насправді, це (або інші "помітні повідомлення" про зміни) вимагає GPL! (Принаймні, ефективно для будь-якого з кількома учасниками - див. Розділ 2a GPLv2.)

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


Чи маєте ви посилання на журнал змін 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 року, що є занадто недавним для деяких відповідних інструментів. Я здогадуюсь, це переймає там, де закінчився останній.
l0b0

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-описом, щоб дізнатися, що тег є найближчим до конкретного комітету. Теги використовуються в основному для номерів версій, таким чином, це дасть вам версію, яка ввела коміт.

Ви можете адаптувати вищевказаний метод, залежно від X та його управління джерелом.


Як би ви визначили, яка комісія / рядок увійшла до якої версії програмного забезпечення? Крім того, пошук Savannah сильно порушений - Немає результатів для рядків, які, очевидно, в одних і тих же журналах повідомлень.
l0b0

Використовуйте git-опис, щоб дізнатися, що тег є найближчим до конкретного комітету. Теги використовуються в основному для номерів версій. Що стосується розбиття Саванни, ти не можеш багато зробити з цим. Git клонує сховище до вашої скриньки та працює над своїм використанням команд git, описаних у публікації.
Shinnok

1

На платформах Debian і Debian, таких як Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

надає журнал змін змін у GNU Core Utilities аж до версії 4.5.1-1.

Не впевнений, чи є подібні зручні рішення на інших платформах.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.