Która wersja X wprowadziła funkcję Y?


10

Duża część mojej codziennej pracy jest rozwój oprogramowania do użytku na komputerach z różnymi wersjami tego samego oprogramowania, jak bash, findi grep. W przypadku funkcji, która byłaby przydatna na przykład w celu uproszczenia kodu, ważne jest, aby wiedzieć, czy ta funkcja jest dostępna w najstarszych zainstalowanych narzędziach. W przypadku krytycznych rzeczy warto byłoby wiedzieć, czy ta funkcja była nowa, czy istnieje od lat w najstarszych zainstalowanych narzędziach.

Jakie są szybkie sposoby na autorytatywną odpowiedź na to w przypadku narzędzi Linux, szczególnie GNU Core Utils? Niektóre możliwości w kolejności malejącej dokładności:

  • Binarne wyszukiwanie binarne (sic) poprzez uruchamianie różnych wersji jest oczywiście ostateczną odpowiedzią, ale jest zdecydowanie najbardziej czasochłonne. Starsze instalacje często nie są dostępne ze względów bezpieczeństwa.
  • Czytanie kodu jest prawie tak samo dobre, ale może być zaborczo czasochłonne, jeśli funkcja ma niejasną nazwę, nazwa nie odpowiada bezpośrednio nazwie zmiennej / funkcji / obiektu lub została zaimplementowana przed jej włączeniem.
  • Dzienniki zmian , jeśli są dostępne, zwykle łączą zmiany funkcji z wersjami oprogramowania.
  • Dzienniki zatwierdzania mogą zawierać wskazówki, ale nie wiedzą, w której wersji zostaną uwzględnione.
  • strony podręcznika rzadko wspominają o datach.
  • To samo dotyczy Googlingu , a także miałbyś trudności z wykluczeniem wszystkich nieautorytatywnych źródeł.

Czy mógłby Pan wyjaśnić powód (przyczyny) tego pytania?
— Faheem Mitha

ISTM, że jeśli musisz przenieść oprogramowanie na te różne platformy, musisz mieć gdzieś „najstarszą” instalację. Tak więc dość szybką i autorytatywną odpowiedzią byłoby wypróbowanie go na tej platformie. Idealnie na wszystkich platformach (jeśli napisałeś przypadek testowy jako skrypt, możesz przekazać go wszystkim platformom do przenoszenia i uzyskać serię odpowiedzi tak / nie).
— roaima

Odpowiedzi:


7

Ogólnie istnieje dziennik zmian. W rzeczywistości GPL wymaga tego (lub innych „widocznych powiadomień” o zmianach)! (Przynajmniej tak skutecznie w przypadku czegokolwiek z wieloma współautorami - patrz sekcja 2a GPLv2).

W przypadku pakietu GNU coreutils - i prawie wszystkiego innego bezpośrednio z projektu GNU - ten plik jest zdecydowanie pierwszym miejscem do przeglądania i powinien odpowiadać na twoje pytanie w 95% przypadków.


Czy masz odniesienie do dziennika zmian coreutils? Najnowszy, jaki udało mi się znaleźć, pochodzi z 2007 roku.
— l0b0

2
Dziennik zmian GNU Coreutils nie był aktualizowany od 2007 roku. Cvs.savannah.gnu.org/viewvc/coreutils/... Musisz teraz spojrzeć na dzienniki git.
— Mikel

2
Może być generowany automatycznie z dzienników git. Jest ChangeLog.bz2w /usr/share/doc/coreutils-8.10na moim systemie Fedora, a wejście jest od góry 2011-02-04. Możliwe też, że jest to widelec z prawej strony - sprawdzę to później.
— mattdm

@mattdm: Na Ubuntu jest /usr/share/doc/coreutils/changelog.gz - Dzięki! Niestety, to tylko z 2008 roku, który jest zbyt nowy dla niektórych odpowiednich narzędzi. Wydaje mi się jednak, że przejmuje to miejsce, w którym skończył się ostatni.
— l0b0

3
Oto dowód: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Przewiń do linii 131.
— Shinnok

4

Dlaczego nie skorzystać z kontroli źródła prowadzącej do X, aby wyszukać funkcję Y? Repozytorium źródłowe jest najlepszym sposobem na identyfikację, kiedy wprowadzono określoną funkcję.

W przypadku coreutils możesz udać się na http://git.savannah.gnu.org/cgit/coreutils.git i wyszukać słowa kluczowe związane z Y w komunikatach dziennika lub określonych wierszach kodu określonych jako należące do Y. Możesz to zrobić na interfejs sieciowy bezpośrednio, a nawet lepiej, klonuje repozytorium źródłowe do stacji i wyszukuje za pomocą git-bisect , git-blame i git-log --grep .

Następnie użyj git-opisz, aby dowiedzieć się, że tag jest najbliższy konkretnemu poleceniu. Znaczniki są używane głównie dla numerów wersji, dlatego daje wersję, która wprowadziła zatwierdzenie.

Możesz dostosować powyższą metodę, w zależności od X i jego kontroli źródła.


Jak określisz, który zatwierdzenie / linia weszła w którą wersję oprogramowania? Ponadto wyszukiwanie w Savannah jest bardzo zepsute - brak wyników dla ciągów, które oczywiście znajdują się w tych samych komunikatach dziennika.
— l0b0

Użyj git-opisz, aby dowiedzieć się, że tag jest najbliższy konkretnemu poleceniu. Znaczniki są używane głównie dla numerów wersji. Jeśli chodzi o złamanie Savannah, niewiele można na to poradzić. Git klonuje repozytorium do twojego pudełka i działa po swojemu, używając poleceń git, które opisałem w poście.
— Shinnok,

1

Na Debianie i platformach pochodnych Debiana, takich jak Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

zapewnia dziennik zmian GNU Core Utilities aż do wersji 4.5.1-1.

Nie jestem pewien, czy istnieją równie wygodne rozwiązania na innych platformach.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.