summaryrefslogtreecommitdiff
path: root/guix/git.scm
AgeCommit message (Expand)Author
2023-11-22git: Shell out to ‘git gc’ when necessary....Fixes <https://issues.guix.gnu.org/65720>. This fixes a bug whereby libgit2-managed checkouts would keep growing as we fetch. * guix/git.scm (packs-in-git-repository, maybe-run-git-gc): New procedures. (update-cached-checkout): Use it. Ludovic Courtès
2023-11-11guix: Properly compute progress bar width....* guix/progress.scm (progress-reporter/bar): Take font width into account to compute progress bar width. * guix/git.scm (show-progress): Take font width into account to compute progress bar width. Change-Id: I946e447c1ea7c6eb4ff805400280f39e8f1a7c02 Julien Lepiller
2023-09-25git: Restore 'false-if-git-not-found' in 'reference-available?'....* guix/git/scm (reference-available?): Add 'false-if-git-not-found' for the case 'commit. Simon Tournier
2023-09-22git: Avoid touching the network unless needed in 'reference-available?'....Follow-up of 756e336fa008c2469b4a7317ad5c641ed48f25d6 fixing the issue. * guix/git/scm (reference-available?): Address case by case to determine whether the reference exists in the local Git checkout. Simon Tournier
2023-09-05git: Fix typo in reference-available? comment....* guix/git.scm (reference-available?): Fix typo. Maxim Cournoyer
2023-09-05Revert "guix: git: Avoid touching the network unless needed in 'reference-ava......This reverts commit a789dd58656d5f7f1b8edf790d77753fc71670af, which broke e.g.: guix time-machine -C <(echo %default-channels) -- describe Add an explanatory comment as suggested. Reported-by: Ludovic Courtès <ludo@gnu.org> Maxim Cournoyer
2023-08-29guix: git: Avoid touching the network unless needed in 'reference-available?'....* guix/git/scm (reference-available?): Use the resolve-reference procedure to determine whether the reference exists in the local Git checkout. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Simon Tournier
2023-08-16git: Clarify commit relation reference in doc....* guix/git.scm (update-cached-checkout): Clarify that it is the relation of STARTING-COMMIT that is returned, relative to the new commit, not the other way around. Maxim Cournoyer
2023-03-13guix: Strip #:use-module lists....This was obtained by setting up this environment: guix shell -D guix --with-input=guile@3.0.9=guile-next \ --with-commit=guile-next=e2ed33ef0445c867fe56c247054aa67e834861f2 -- make -j5 then adding 'unused-module' to (@@ (guix build compiler) %warnings), building, and checking all the "unused module" warnings and removing those that were definitely unused. Ludovic Courtès
2023-02-19git: Make better use of the better progress bar....Commit 189525412e3d803f3f77e15ec4a62aaa57f65a2d introduced ‘high-resolution’ Unicode progress bars, but these require more granular calls to reach their full potential. * guix/git.scm (show-progress): Derive the number of PROGRESS-BAR updates from its maximum resolution, rather than hard-coding 100. Tobias Geerinckx-Rice
2023-02-19git: Factor out INDEXER-PROGRESS-TOTAL-OBJECTS access....* guix/git.scm (show-progress): Reuse the result of the first call. Tobias Geerinckx-Rice
2022-10-17git: 'update-cached-checkout' returns the commit ID when given a tag....Previously, starting with commit efa578ecaece67366b4b0e2266de7c2faaa4ae54, 'update-cached-checkout' would return the OID of the annotated tag the tag points to. With this change it returns the OID of the commit object in all cases. * guix/git.scm (resolve-reference): In the 'tag' case, call 'tag-target-id' and 'tag-lookup' when OID designates an annotated tag. * tests/git.scm ("update-cached-checkout, tag"): New test. Ludovic Courtès
2022-10-15git: 'update-cached-checkout' recognizes truncated commit IDs....Fixes a regression introduced in 602527ab9778165ca9a8f9cb62036038b5354688 that broke 'tests/guix-build-branch.sh'. * guix/git.scm (resolve-reference): Revert change from 602527ab9778165ca9a8f9cb62036038b5354688. Ludovic Courtès
2022-10-11git: Factorize 'commit-id?' predicate....* guix/git.scm (commit-id?): New procedure, copied from (guix swh). (resolve-reference): Use it instead of inline code. * guix/inferior.scm (channel-full-commit): Likewise. Ludovic Courtès
2022-02-14git: Add 'commit-descendant?'....* guix/git.scm (commit-descendant?): New procedure. * tests/git.scm ("commit-descendant?"): New test. Ludovic Courtès
2022-01-06upstream: Support updating and fetching 'git-fetch' origins....Updaters need to be modified to return 'git-reference' objects. This patch modifies the 'generic-git' and 'minetest' updater, but others might need to be modified as well. * guix/git.scm (git-reference->git-checkout): New procedure. * guix/upstream.scm (package-update/git-fetch): New procedure. (<upstream-source>)[urls]: Document it can be a 'git-reference'. (%method-updates): Add 'git-fetch' mapping. (update-package-source): Support 'git-reference' sources. (upstream-source-compiler/url-fetch): Split off from ... (upstream-source-compiler): ... this, and call ... (upstream-source-compiler/git-fetch): ... this new procedure if the URL field contains a 'git-reference'. * guix/import/git.scm (latest-git-tag-version): Always return two values and document that the tag is returned as well. (latest-git-release)[urls]: Use the 'git-reference' instead of the repository URL. * guix/import/minetest.scm (latest-minetest-release)[urls]: Don't wrap the 'git-reference' in a list. * tests/minetest.scm (upstream-source->sexp): Adjust to new convention. Co-authored-by: Maxime Devos <maximedevos@telenet.be> Signed-off-by: Ludovic Courtès <ludo@gnu.org> Sarah Morgensen
2021-09-18git: 'reference-available?' recognizes 'tag-or-commit'....* guix/git.scm (reference-available?): Handle 'tag-or-commit' with a 40-digit hex string. Ludovic Courtès
2021-09-18git: 'update-cached-checkout' can fall back to SWH when cloning....Fixes <https://issues.guix.gnu.org/44187>. Reported by zimoun <zimon.toutoune@gmail.com>. * guix/git.scm (GITERR_HTTP): New variable. (clone-from-swh, clone/swh-fallback): New procedures. (update-cached-checkout): Use 'clone/swh-fallback' instead of 'clone*'. Ludovic Courtès
2021-09-18import: Add 'generic-git' updater....* guix/git.scm (ls-remote-refs): New procedure. * tests/git.scm ("remote-refs" "remote-refs: only tags"): New tests. * guix/import/git.scm: New file. * doc/guix.texi (Invoking guix refresh): Document it. * tests/import-git.scm: New test file. * Makefile.am (MODULES, SCM_TESTS): Register the new files. Co-authored-by: Sarah Morgensen <iskarian@mgsn.dev> Signed-off-by: Ludovic Courtès <ludo@gnu.org> Xinglu Chen
2021-09-08transformations: Git tags and 'git describe' style IDs are used as version....* guix/transformations.scm (commit->version-string): New procedure. Use git tags and 'git describe' style identifiers directly. (transform-package-source-commit): Adjust accordingly. * tests/transformations.scm ("options->transformation, with-commit, version transformation"): New test. * doc/guix.texi (Package Transformation Options): Mention the 'git describe' style. Marius Bakke
2021-09-08git: 'resolve-reference' handles 'git describe'-style commit IDs....* guix/git.scm (resolve-reference): Rewrite tag-or-commit case to recognize 'git describe' style identifiers and resolve them as commits. * doc/guix.texi (origin Reference): Mention it. Marius Bakke
2021-06-12git: Update the mtime of the just-updated checkout....Reported by zimoun <zimon.toutoune@gmail.com>. Previously, the mtime of CACHE-DIRECTORY may or may not have been updated after a pull. Thus, 'maybe-remove-expired-cache-entries' could potentially delete CACHE-DIRECTORY right before it's returned. * guix/git.scm (update-cached-checkout): Call 'utime' on CACHE-DIRECTORY. Ludovic Courtès
2021-04-14git: Honor proxy settings when fetching submodules....Fixes <https://bugs.gnu.org/44593>. * guix/git.scm (update-submodules): Add #:fetch-options and honor it. (update-cached-checkout): Pass #:fetch-options to 'update-submodules'. * doc/guix.texi (Requirements): Adjust comment about Guile-Git. Ludovic Courtès
2021-04-10git: Update cached checkout to the remote HEAD by default....Fixes <https://bugs.gnu.org/45187>. Reported by Ricardo Wurmus <rekado@elephly.net>. update-cached-checkout hard codes "master" as the default branch, leading to a failure when the clone doesn't have a "master" branch. Instead use the remote HEAD symref as an indicator of what the primary branch is. * guix/git.scm (resolve-reference): Support resolving symrefs. (update-cached-checkout, latest-repository-commit): Change the default for REF to the empty list and translate it to the remote HEAD symref. (<git-checkout>): Change branch field's default to #f. (git-checkout-compiler): When branch and commit fields are both #f, call latest-repository-commit* with the empty list as the ref. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Kyle Meyer
2021-04-02git: Remove unused variables....This is a followup to 298f9d29d6c26e408a90d08d147d926aa6f81ab3, which left those variables despite being unnecessary. * guix/git.scm (clone*, update-cached-checkout): Remove unused 'auth-method' variable. Ludovic Courtès
2021-01-13git: Periodically delete least-recently-used cached checkouts....This ensures ~/.cache/guix/checkouts is periodically cleaned up. * guix/git.scm (cached-checkout-expiration) (%checkout-cache-cleanup-period): New variables. (delete-checkout): New procedure. (update-cached-checkout)[cache-entries]: New procedure. Add call to 'maybe-remove-expired-cache-entries'. * guix/cache.scm (file-expiration-time): Add optional 'timestamp' parameter and honor it. Ludovic Courtès
2020-12-04git: 'reference-available?' handles short commit IDs....Reported by Simon Tournier on #guix. Until now 'reference-available?' would always return #f when passed a short commit ID. * guix/git.scm (reference-available?): Call 'object-lookup-prefix' when COMMIT is shorter than 40 characters. Ludovic Courtès
2020-10-22git: Support HTTP and HTTPS proxies....This allows 'guix pull' and similar to fetch code over a proxy. * guix/git.scm (make-default-fetch-options): Pass #:proxy-url. Ludovic Courtès
2020-10-22git: Display a progress bar while fetching a repo....Fixes <https://bugs.gnu.org/39260>. This uses the API of the yet-to-be-released Guile-Git 0.4.0. Using an older version is still possible, but progress report is disabled. * guix/git.scm (show-progress, make-default-fetch-options): New procedures. (clone*, update-cached-checkout): Use it instead of 'make-fetch-options'. Ludovic Courtès
2020-10-22git: Require Guile-Git 0.3.0 or later....* guix/git.scm (auth-supported?): Remove. (clone*): Inline code that was dependent on AUTH-SUPPORTED?. (update-cached-checkout): Likewise. (resolve-reference): Remove check for 'object-lookup-prefix' and use it unconditionally. (load-git-submodules): Remove. (update-submodules): Use 'repository-submodules', 'submodule-lookup', etc. unconditionally. (update-cached-checkout): Use 'repository-close!' unconditionally. * m4/guix.m4 (GUIX_CHECK_GUILE_GIT): New macro. * configure.ac: Use it and error out when it fails. * doc/guix.texi (Requirements): Bump to Guile-Git 0.3.0. Ludovic Courtès
2020-09-06git: Export url-cache-directory....* guix/git.scm (url-cache-directory): Export it. Mathieu Othacehe
2020-07-23git: 'update-cached-checkout' has a new #:check-out? parameter....* guix/git.scm (update-cached-checkout): Add #:check-out? parameter and honor it. Ludovic Courtès
2020-07-23git: Factorize 'resolve-reference'....* guix/git.scm (resolve-reference): New procedure. (switch-to-ref): Use it. Ludovic Courtès
2020-07-11git: Add 'with-git-error-handling'....* guix/scripts/pull.scm (report-git-error, with-git-error-handling): Move to... * guix/git.scm: ... here. * guix/scripts/time-machine.scm: Adjust accordingly. Ludovic Courtès
2020-06-09git: 'commit-difference' really excludes the ancestors of #:excluded....* guix/git.scm (commit-difference): Initialize VISITED to the closure of OLD and EXCLUDED, as written in the docstring. * tests/git.scm ("commit-difference, excluded commits"): Adjust accordingly. Ludovic Courtès
2020-06-07git-authenticate: Prevent removal of '.guix-authorizations'....* guix/git-authenticate.scm (commit-authorized-keys) [parents-have-authorizations-file?, assert-parents-lack-authorizations]: New procedures. Use the latter before returning DEFAULT-AUTHORIZATIONS. * guix/git.scm (false-if-git-not-found): Export. * guix/tests/git.scm (populate-git-repository): Add 'remove' clause. * tests/git-authenticate.scm ("signed commits, .guix-authorizations removed"): New test. Ludovic Courtès
2020-06-07git: 'update-cached-checkout' gracefully handles missing starting commit....Fixes <https://bugs.gnu.org/41604> Reported by John Soo <jsoo1@asu.edu> and zimoun <zimon.toutoune@gmail.com>. * guix/git.scm (false-if-git-not-found): New macro. (reference-available?): Use it. (update-cached-checkout): Use it when looking up STARTING-COMMIT. Set RELATION to 'unrelated when OLD is #false. Ludovic Courtès
2020-05-25git: 'update-cached-checkout' returns the commit relation....* guix/git.scm (update-cached-checkout): Add #:starting-commit parameter. Call 'commit-relation' when #:starting-commit is true. Always return the relation or #f as the third value. (latest-repository-commit): Adjust accordingly. * guix/import/opam.scm (get-opam-repository): Likewise. * tests/channels.scm ("latest-channel-instances includes channel dependencies") ("latest-channel-instances excludes duplicate channel dependencies"): Update mock of 'update-cached-checkout' accordingly. Ludovic Courtès
2020-05-25git: Add 'commit-relation'....* guix/git.scm (commit-relation): New procedure. * tests/git.scm ("commit-relation"): New test. Ludovic Courtès
2020-05-07channels: Add mechanism to patch checkouts of the 'guix channel....* guix/channels.scm (<patch>): New record type. (apply-patches): New procedure. (latest-channel-instance)[dot-git?]: New procedure. Use 'update-cached-checkout' and 'add-to-store' instead of 'latest-repository-commit'. Call 'apply-patches' when CHANNEL is the 'guix channel. (%patches): New variable. * guix/git.scm (url+commit->name): Make public. * tests/channels.scm ("latest-channel-instances includes channel dependencies") ("latest-channel-instances excludes duplicate channel dependencies"): Mock 'update-cached-checkout' instead of 'latest-repository-commit'. Wrap body in 'with-store' and pass the store to 'latest-channel-instances'. Ludovic Courtès
2020-04-02git: Don't try to resolve tags with 'tag-lookup'....Fixes <https://bugs.gnu.org/40377>. Reported by Brice Waegeneire <brice@waegenei.re>. * guix/git.scm (switch-to-ref): In the 'tag case, remove call to 'tag-lookup'. Ludovic Courtès
2020-02-10git: Add missing exports for <git-checkout>....* guix/git.scm (<git-checkout>): Export 'git-checkout-commit' and 'git-checkout-recursive?'. Ludovic Courtès
2020-02-06git: Remove leftover pk call....* guix/git.scm (update-cached-checkout): Remove leftover pk call. Mathieu Othacehe
2020-02-06git: Add ssh authentication support....If Guile-Git revision is >= 0.3.0, use SSH agent authentication method for both clone and fetch calls. * guix/git.scm (auth-supported?): New variable, (clone*): set auth-method to ssh-agent if the variable above is true, (update-cached-checkout): ditto. Mathieu Othacehe
2020-01-07download, git: Refer to the right module in 'module-use!' call....This fixes a regression introduced in 6a7c4636d4dec47eefa03c95da5a1315bd0e0413. * guix/build/download.scm (load-gnutls): Call 'resolve-module' instead of 'current-module'. * guix/git.scm (load-git-submodules): Likewise. Ludovic Courtès
2020-01-06Adjust module autoloads....In Guile < 2.9.7, autoloading a module would give you access to all its bindings. In future versions, autoloading a module gives access only to the listed bindings, as per #:select (see <https://bugs.gnu.org/38895>). This commit adjusts autoloads to the new semantics, allowing Guix to be built with Guile 2.9.7/2.9.8. * guix/build/download.scm <top level>: Remove call to 'module-autoload!'. (load-gnutls): New procedure. (tls-wrap): Call it. * guix/git.scm <top level>: Remove call to 'module-autoload!'. (load-git-submodules): New procedure. (update-submodules): Call it instead of 'resolve-interface'. * gnu/bootloader/grub.scm: Replace #:autoload with #:use-module. * gnu/packages.scm: Likewise. * gnu/packages/ssh.scm: Likewise. * gnu/packages/tex.scm: Likewise. * gnu/services/cuirass.scm: Likewise. * gnu/services/mcron.scm: Likewise. * guix/lint.scm: Augment list of bindings in #:autoload. * guix/scripts/build.scm: Likewise. * guix/scripts/gc.scm: Likewise. * guix/scripts/pack.scm: Likewise. * guix/scripts/publish.scm: Likewise. * guix/scripts/pull.scm: Likewise. * guix/utils.scm: Remove unnecessary #:autoload clauses; replace one of them with #:use-module. Ludovic Courtès
2019-12-27git: 'commit-difference' takes a list of excluded commits....* guix/git.scm (commit-closure): Add 'visited' optional parameter. (commit-difference): Add 'excluded' optional parameter; pass second argument to 'commit-closure'. * tests/git.scm ("commit-difference, excluded commits"): New test. Ludovic Courtès
2019-09-23git: Add 'commit-difference'....* guix/git.scm (commit-closure, commit-difference): New procedures. * guix/tests/git.scm, tests/git.scm: New files. * Makefile.am (dist_noinst_DATA): Add guix/tests/git.scm. (SCM_TESTS): Add tests/git.scm. Ludovic Courtès
2019-09-23git: 'update-cached-checkout' avoids network access when unnecessary....* guix/git.scm (reference-available?): New procedure. (update-cached-checkout): Avoid call to 'remote-fetch' when REPOSITORY already contains REF. Ludovic Courtès
2019-07-26git: 'switch-to-ref' resolves tag targets....* guix/git.scm (switch-to-ref): In the 'tag' case, resolve the target of the tag. * tests/guix-build-branch.sh: Adjust test accordingly. Ludovic Courtès