2017-03-23 36 views
8

Chcę utworzyć plik Cargo.lock w projekcie Rust z Cargo.toml w oparciu o to, co było dostępne w dniu 22 lutego 2017 r. Muszę sprawić, by wybór wersji był zgodny z tym, co wydarzyłoby się tego konkretnego dnia. (Nie, nie mam wersja kontrolowane Cargo.lock gdzieś.)Jak wygenerować Cargo.lock na podstawie ostatniego miesiąca crates.io?

Próbowałem to bezskutecznie:

  1. Clone indeks crates.io do lokalnego katalogu i sprawdzić starszy popełnić który pasuje do żądanej daty.
  2. Użyj następujących linii w .cargo/config:

    [source.mycrates] 
    registry = "file:///path/to/crates.io-index" # contains old checkout 
    
    [source.crates-io] 
    replace-with = "mycrates" 
    

Niemniej cargo rozwiązuje zależności w Cargo.toml do najnowszych z nich dostępne, a nie te najnowsze w określonej transakcji.

W jaki sposób mogę zmienić wybór wersji Cargo w czasie?

+0

Brzmi trochę jak [Problem XY] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Co dokładnie chcesz osiągnąć dzięki temu? –

+0

Moim konkretnym przypadkiem jest stworzenie Cargo.lock, który działa z określoną migawką crates.io w infrastrukturze Rusta NixOS. –

+0

Rozumiem, ale dlaczego to musi być migawka? Dlaczego nie można żyć? –

Odpowiedz

1

Ponieważ mówisz, że już próbowałeś klonowania indeksu, zakładam, że nadal masz to w pobliżu. Dla innych czytelników repozytorium wydaje się być utrzymywane w Git i jest dostępne pod adresem https://github.com/rust-lang/crates.io-index.

Musisz powiedzieć cargo, aby uruchomić z --frozen, aby nie dotykał sieci, q.v. Cargo FAQ, i będzie wybuchać, jeśli uzna to za konieczne. Jeśli plik już został pobrany, musisz też uzyskać cargo clean lub w inny sposób wyczyścić pamięć podręczną.

Jeśli nie potrzebujesz wszystkich pakietów, których potrzebujesz w kasie, musisz również pobrać konkretne wersje, które Cię interesują. Dissecting Crates.io: Bare Minimum Mirror ma wyjaśnienie, które podsumuję tutaj, na wypadek gdyby link wieje w górę.

config.json w głównym repo Skrzynki ma adresy URL do pobierania pakietów, które są oficjalnie uznawane za niestabilne, ale działa teraz.

Przykład z libc skrzyni używanej przez „gmjosack” pokazuje ścieżkę /api/v1/crates/libc/0.1.10/download aby go pobrać, na podstawie klucza dl z https://crates.io/api/v1/crates w config.json i dostępnej wersji w czasie postu.

Prawdopodobnie będziesz potrzebować skryptu do pobrania w celu zbudowania lustra. Zobacz także: Downloading Rust crates using a web browser na stackoverflow.