Local git configuration interferes with testsuite

DoneSubmitted by Gábor Boskovits.
Details
2 participants
  • Gábor Boskovits
  • Ludovic Courtès
Owner
unassigned
Severity
normal
G
G
Gábor Boskovits wrote on 9 Oct 2019 12:35
(address . bug-guix@gnu.org)
CAE4v=pgeTxG7c+Z8FYa4-wCQi2bRMujENc=OyvVdt-SrRNFgCw@mail.gmail.com
I noticed that the local git configuration interferes with the guix testsuite.
After discussion on IRC with nckx I came up with the attached patch.Comments are welcome!
Best regards,g_bor-- OpenPGP Key Fingerprint: 7988:3B9F:7D6A:4DBF:3719:0367:2506:A96C:CF63:0B21
Attachment: file
From abf20477ea139bfaf1f2e21f09c2420fe618c9ca Mon Sep 17 00:00:00 2001From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>Date: Tue, 8 Oct 2019 22:41:20 +0200Subject: [PATCH] tests: Isolate git from external configuration.
* Makefile.am(AM_TESTS_ENVIRONMENT): Add environment variables tomake git ignore the user and system configuration files.* tests/fake-home/.gitconfig: New file. Provide minimal gitconfiguration for tests.--- Makefile.am | 9 ++++++++- tests/fake-home/.gitconfig | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/fake-home/.gitconfig
Toggle diff (56 lines)diff --git a/Makefile.am b/Makefile.amindex 36767c2f47..e7bf819a6b 100644--- a/Makefile.am+++ b/Makefile.am@@ -14,6 +14,7 @@ # Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> # Copyright © 2018 Alex Vong <alexvong1995@gmail.com> # Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>+# Copyright © 2019 Gábor Boskovits <boskovits@gmail.com> # # This file is part of GNU Guix. #@@ -472,7 +473,13 @@ SH_TESTS = \ TESTS = $(SCM_TESTS) $(SH_TESTS) -AM_TESTS_ENVIRONMENT = abs_top_srcdir="$(abs_top_srcdir)" GUILE_AUTO_COMPILE=0+AM_TESTS_ENVIRONMENT = \+ abs_top_srcdir="$(abs_top_srcdir)" \+ GUILE_AUTO_COMPILE=0 \+ GIT_CONFIG_NOSYSTEM=1 \+ GIT_ATTR_NOSYSTEM=1 \+ HOME="$(abs_top_srcdir)/tests/fake-home" \+ XDG_CONFIG_HOME="$(abs_top_srcdir)/tests/fake-xgd-config-home" SCM_LOG_DRIVER = \ $(top_builddir)/test-env --quiet-stderr \diff --git a/tests/fake-home/.gitconfig b/tests/fake-home/.gitconfignew file mode 100644index 0000000000..079cbd0d30--- /dev/null+++ b/tests/fake-home/.gitconfig@@ -0,0 +1,21 @@+# GNU Guix --- Functional package management for GNU+# Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>+#+# This file is part of GNU Guix.+#+# GNU Guix is free software; you can redistribute it and/or modify it+# under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 3 of the License, or (at+# your option) any later version.+#+# GNU Guix is distributed in the hope that it will be useful, but+# WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+# GNU General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.++[user]+ email = email@example.com+ name = Usman-- 2.23.0
L
L
Ludovic Courtès wrote on 7 Jan 10:11 +0100
(name . Gábor Boskovits)(address . boskovits@gmail.com)(address . 37679@debbugs.gnu.org)
87eewbljgb.fsf@gnu.org
Hello!
Gábor Boskovits <boskovits@gmail.com> skribis:
Toggle quote (40 lines)> From abf20477ea139bfaf1f2e21f09c2420fe618c9ca Mon Sep 17 00:00:00 2001> From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>> Date: Tue, 8 Oct 2019 22:41:20 +0200> Subject: [PATCH] tests: Isolate git from external configuration.>> * Makefile.am(AM_TESTS_ENVIRONMENT): Add environment variables to> make git ignore the user and system configuration files.> * tests/fake-home/.gitconfig: New file. Provide minimal git> configuration for tests.> ---> Makefile.am | 9 ++++++++-> tests/fake-home/.gitconfig | 21 +++++++++++++++++++++> 2 files changed, 29 insertions(+), 1 deletion(-)> create mode 100644 tests/fake-home/.gitconfig>> diff --git a/Makefile.am b/Makefile.am> index 36767c2f47..e7bf819a6b 100644> --- a/Makefile.am> +++ b/Makefile.am> @@ -14,6 +14,7 @@> # Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>> # Copyright © 2018 Alex Vong <alexvong1995@gmail.com>> # Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>> +# Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>> #> # This file is part of GNU Guix.> #> @@ -472,7 +473,13 @@ SH_TESTS = \> > TESTS = $(SCM_TESTS) $(SH_TESTS)> > -AM_TESTS_ENVIRONMENT = abs_top_srcdir="$(abs_top_srcdir)" GUILE_AUTO_COMPILE=0> +AM_TESTS_ENVIRONMENT = \> + abs_top_srcdir="$(abs_top_srcdir)" \> + GUILE_AUTO_COMPILE=0 \> + GIT_CONFIG_NOSYSTEM=1 \> + GIT_ATTR_NOSYSTEM=1 \> + HOME="$(abs_top_srcdir)/tests/fake-home" \> + XDG_CONFIG_HOME="$(abs_top_srcdir)/tests/fake-xgd-config-home"
Ooh, good catch. This change fixes issues with ‘tests/git.scm’, is thatcorrect?
The ‘GIT_’ environment variables are honored by Git itself, not bylibgit2/Guile-Git, right?
Can we avoid setting HOME and XDG_CONFIG_HOME?
Perhaps these variables should all be set in ‘test-env’ along with theirfriends, for consistency?
Last, if we end up keeping ‘tests/fake-home’, make sure to also add itto ‘EXTRA_DIST’ in ‘Makefile.am’.
Could you send an updated patch?
Thanks for addressing it, and sorry for the loooong delay!
Ludo’.
G
G
Gábor Boskovits wrote on 29 Mar 15:18 +0200
[PATCH 0/2] Local git configuration interferes with testsuite
(address . 37679@debbugs.gnu.org)(name . Gábor Boskovits)(address . boskovits@gmail.com)
20200329131810.23562-1-boskovits@gmail.com
Create a fake home in tests with a gitconfig so that the user configurationdoes not get picked up.I investigated how to solve this best, but git only respects HOME for thecommands we are using.Also note that this does not affect libraries, only the git cli, as librariesdo not use the environment variables.
Gábor Boskovits (2): tests: Isolate git from user configuration. tests: Ignore files created by the testsuite.
.gitignore | 4 +++- Makefile.am | 2 ++ build-aux/test-env.in | 4 ++++ tests/fake-home/.gitconfig | 21 +++++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/fake-home/.gitconfig
-- 2.25.0
G
G
Gábor Boskovits wrote on 29 Mar 15:18 +0200
[PATCH 1/2] tests: Isolate git from user configuration.
(address . 37679@debbugs.gnu.org)(name . Gábor Boskovits)(address . boskovits@gmail.com)
20200329131810.23562-2-boskovits@gmail.com
* tests/fake-home/.gitconfig: New file. Provide minimal gitconfiguration for tests.* build-aux/test-env.in: Set HOME to the fake home.* Makefile.am(EXTRA_DIST): Add fake-home/.gitconfig.--- Makefile.am | 2 ++ build-aux/test-env.in | 4 ++++ tests/fake-home/.gitconfig | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 tests/fake-home/.gitconfig
Toggle diff (71 lines)diff --git a/Makefile.am b/Makefile.amindex 344ecdbc42..5eb918d599 100644--- a/Makefile.am+++ b/Makefile.am@@ -14,6 +14,7 @@ # Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> # Copyright © 2018 Alex Vong <alexvong1995@gmail.com> # Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>+# Copyright © 2020 Gábor Boskovits <boskovits@gmail.com> # # This file is part of GNU Guix. #@@ -560,6 +561,7 @@ EXTRA_DIST += \ build-aux/update-NEWS.scm \ d3.v3.js \ graph.js \+ tests/fake-home/.gitconfig \ tests/test.drv \ tests/signing-key.pub \ tests/signing-key.sec \diff --git a/build-aux/test-env.in b/build-aux/test-env.inindex 59ab58cc94..1121570fbc 100644--- a/build-aux/test-env.in+++ b/build-aux/test-env.in@@ -2,6 +2,7 @@ # GNU Guix --- Functional package management for GNU # Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>+# Copyright © 2020 Gábor Boskovits <boskovits@gmail.com> # # This file is part of GNU Guix. #@@ -151,6 +152,9 @@ export GUIX_BUILD_OPTIONS # Ignore user settings. unset GUIX_PACKAGE_PATH +# Provide fake home for tests using git+HOME="@abs_top_srcdir@/tests/fake-home"+ storedir="@storedir@" prefix="@prefix@" datarootdir="@datarootdir@"diff --git a/tests/fake-home/.gitconfig b/tests/fake-home/.gitconfignew file mode 100644index 0000000000..c32de560e7--- /dev/null+++ b/tests/fake-home/.gitconfig@@ -0,0 +1,21 @@+# GNU Guix --- Functional package management for GNU+# Copyright © 2020 Gábor Boskovits <boskovits@gmail.com>+#+# This file is part of GNU Guix.+#+# GNU Guix is free software; you can redistribute it and/or modify it+# under the terms of the GNU General Public License as published by+# the Free Software Foundation; either version 3 of the License, or (at+# your option) any later version.+#+# GNU Guix is distributed in the hope that it will be useful, but+# WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+# GNU General Public License for more details.+#+# You should have received a copy of the GNU General Public License+# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.++[user]+ email = alice@example.com+ name = Alice-- 2.25.0
G
G
Gábor Boskovits wrote on 29 Mar 15:18 +0200
[PATCH 2/2] tests: Ignore files created by the testsuite.
(address . 37679@debbugs.gnu.org)(name . Gábor Boskovits)(address . boskovits@gmail.com)
20200329131810.23562-3-boskovits@gmail.com
* .gitignore: Add /tests/fake-home/.guix-profile.Ignore test result files in tests subdirectories.Ignore top level files staring with t-.--- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Toggle diff (22 lines)diff --git a/.gitignore b/.gitignoreindex de058dda5e..19aae6c5ae 100644--- a/.gitignore+++ b/.gitignore@@ -137,7 +137,8 @@ /scripts/guix /test-env /test-tmp-/tests/*.trs+/tests/**/*.trs+/tests/fake-home/.guix-profile GPATH GRTAGS GTAGS@@ -152,3 +153,4 @@ tmp /.version /doc/stamp-[0-9] /gnu/packages/bootstrap+/t-*\ No newline at end of file-- 2.25.0
L
L
Ludovic Courtès wrote on 17 Apr 10:46 +0200
Re: bug#37679: Local git configuration interferes with testsuite
(name . Gábor Boskovits)(address . boskovits@gmail.com)(address . 37679@debbugs.gnu.org)
87pnc6biur.fsf@gnu.org
Hi Gábor,
Gábor Boskovits <boskovits@gmail.com> skribis:
Toggle quote (8 lines)> +AM_TESTS_ENVIRONMENT = \> + abs_top_srcdir="$(abs_top_srcdir)" \> + GUILE_AUTO_COMPILE=0 \> + GIT_CONFIG_NOSYSTEM=1 \> + GIT_ATTR_NOSYSTEM=1 \> + HOME="$(abs_top_srcdir)/tests/fake-home" \> + XDG_CONFIG_HOME="$(abs_top_srcdir)/tests/fake-xgd-config-home"
As discussed on IRC yesterday (?), we can arrange to move thesevariables directly in (guix tests git), which is the only place where‘git’ is invoked. That way, it can’t possibly interfere with other usesof HOME, etc.
WDYT of something like the patch below?
Thanks,Ludo’.
Toggle diff (68 lines)diff --git a/guix/tests/git.scm b/guix/tests/git.scmindex 21573ac14e..54d306fbba 100644--- a/guix/tests/git.scm+++ b/guix/tests/git.scm@@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU-;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>+;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;;@@ -30,6 +30,23 @@ (define git-command (make-parameter "git")) +(define (call-with-environment-variables variables thunk)+ (let ((environment (environ)))+ (dynamic-wind+ (lambda ()+ (for-each (match-lambda+ ((variable value)+ (setenv variable value)))+ variables))+ thunk+ (lambda ()+ (environ environment)))))++(define-syntax-rule (with-environment-variables variables exp ...)+ "Evaluate EXP with the given environment VARIABLES set."+ (call-with-environment-variables variables+ (lambda () exp ...)))+ (define (populate-git-repository directory directives) "Initialize a new Git checkout and repository in DIRECTORY and apply DIRECTIVES. Each element of DIRECTIVES is an sexp like:@@ -41,8 +58,21 @@ Return DIRECTORY on success." ;; Note: As of version 0.2.0, Guile-Git lacks the necessary bindings to do ;; all this, so resort to the "git" command. (define (git command . args)- (apply invoke (git-command) "-C" directory- command args))+ ;; Make sure Git doesn't rely on the user's config.+ (call-with-temporary-directory+ (lambda (home)+ (call-with-output-file (string-append home "/.gitconfig")+ (lambda (port)+ (display "[user]+ email = charlie@example.org\n name = Charlie Guix\n"+ port)))++ (with-environment-variables+ `(("GIT_CONFIG_NOSYSTEM" "1")+ ("GIT_ATTR_NOSYSTEM" "1")+ ("HOME" ,home))+ (apply invoke (git-command) "-C" directory+ command args))))) (mkdir-p directory) (git "init")@@ -59,7 +89,7 @@ Return DIRECTORY on success." (display (if (string? contents) contents (with-repository directory repository- (contents repository)))+ (contents repository))) port))) (git "add" file) (loop rest)))
L
L
Ludovic Courtès wrote on 19 Apr 13:28 +0200
(name . Gábor Boskovits)(address . boskovits@gmail.com)(address . 37679-done@debbugs.gnu.org)
87eesj3eak.fsf@gnu.org
Hi Gábor,
Ludovic Courtès <ludo@gnu.org> skribis:
Toggle quote (7 lines)> As discussed on IRC yesterday (?), we can arrange to move these> variables directly in (guix tests git), which is the only place where> ‘git’ is invoked. That way, it can’t possibly interfere with other uses> of HOME, etc.>> WDYT of something like the patch below?
I pushed it as 3c91f003416c9fb79af2dc8766a7f449aa03f839.
Ludo’.
Closed
?