Podczas testowania różnych gałęzi repozytorium guix zrozumiałem, że konieczne jest dodanie gałęzi testowych do repozytoriów używanych przeze mnie do rekonfiguracji systemu. Przyczyną jest to, że niektóre testowane zmiany są niekompatybilne z bieżącą implementacją. Implementacja tych testowanych zmian w odrębnej gałęzi jest konieczna aby nie zakłocać pracy pozostałych systemów.


Alias test-system ładuje lokalne struktury katalogów kopii repozytoriów. Pozwala to na ładowanie gałęzi testowych repozytoriów bez modyfikacji tego aliasu.

$ alias test-system
alias test-system='guix pull --fallback --allow-downgrades --disable-authentication --url=file:///home/marek/Szablony/guix --branch=test ; sudo guix system reconfigure -e "(@ (deployment systems rakan) operating-system*)" --fallback --allow-downgrades -L ~/Szablony/deployment -L ~/Szablony/guix-rust-past-crates -L ~/Szablony/nonguix -L ~/Szablony/sovereign'

ZROBIONE W pierwszej kolejności dodaję gałąź testową do sovereign. W obecnej sytuacji to repozytorium jest niekompatybilne z testowanym zestawem zmian. Obserwując bieżący przebieg wykonania procesu test-system dochodzę do wniosku, że guix pull w tym aliasie powinien odnosić się do lokalnych kopii wszystkich zaciąganych repozytoriów. Niestety implementacja takiego rozwiązania nie jest trywialna i zostawiam ją na później. Wypycham gałąź test do repozytorium kanonicznego.

$ guix pull --help
Usage: guix pull [OPTION]...
Download and deploy the latest version of Guix.

  -C, --channels=FILE    deploy the channels defined in FILE
  -q, --no-channel-files
                         inhibit loading of user and system 'channels.scm'
      --url=URL          download "guix" channel from the Git repository at URL
      --commit=COMMIT    download the specified "guix" channel COMMIT
      --branch=BRANCH    download the tip of the specified "guix" channel BRANCH
      --allow-downgrades allow downgrades to earlier channel revisions
      --disable-authentication
                         disable channel authentication
      --no-check-certificate
                         do not validate the certificate of HTTPS servers
  -N, --news             display news compared to the previous generation
  -l, --list-generations[=PATTERN]
                         list generations matching PATTERN
      --details          show details when listing generations
      --roll-back        roll back to the previous generation
  -d, --delete-generations[=PATTERN]
                         delete generations matching PATTERN
  -S, --switch-generation=PATTERN
                         switch to a generation matching PATTERN
  -p, --profile=PROFILE  use PROFILE instead of ~/.config/guix/current
  -v, --verbosity=LEVEL  use the given verbosity LEVEL
      --bootstrap        use the bootstrap Guile to build the new Guix

  -L, --load-path=DIR    prepend DIR to the package module search path
  -K, --keep-failed      keep build tree of failed builds
  -k, --keep-going       keep going when some of the derivations fail
  -n, --dry-run          do not build the derivations
      --fallback         fall back to building when the substituter fails
      --no-substitutes   build instead of resorting to pre-built substitutes
      --substitute-urls=URLS
                         fetch substitute from URLS if they are authorized
      --no-grafts        do not graft packages
      --no-offload       do not attempt to offload builds
      --max-silent-time=SECONDS
                         mark the build as failed after SECONDS of silence
      --timeout=SECONDS  mark the build as failed after SECONDS of activity
      --rounds=N         build N times in a row to detect non-determinism
  -c, --cores=N          allow the use of up to N CPU cores for the build
  -M, --max-jobs=N       allow at most N build jobs
      --debug=LEVEL      produce debugging output at LEVEL

      --list-systems     list available systems
  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., "i686-linux"

  -h, --help             display this help and exit
  -V, --version                  wyświetl informację na temat wersji i zakończ
$ git checkout -b test
Przełączono na nową gałąź „test”

$ git push
Enter passphrase for key '/home/marek/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To ssh://git.marekpasnikowski.pl:23/sovereign
 * [new branch]      test -> test
branch 'test' set up to track 'origin/test'.

W analogiczny sposób dodaję gałąź test do kanonicznego repozytorium deployment.

$ git checkout -b test
Przełączono na nową gałąź „test”

$ git push
Enter passphrase for key '/home/marek/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To ssh://marekpasnikowski.pl:23/deployment.git
 * [new branch]      test -> test
branch 'test' set up to track 'origin/test'.

DO ZROBIENIA Spisując wyniki poleceń git push zauważam, że kopie repozytoriów są związane z dwiema różnymi domenami. Powinienem to wykorzystać do poprawienia konfiguracji serwera stron internetowych.