all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#37679: Local git configuration interferes with testsuite
@ 2019-10-09 10:35 Gábor Boskovits
  2020-01-07  9:11 ` Ludovic Courtès
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Gábor Boskovits @ 2019-10-09 10:35 UTC (permalink / raw)
  To: 37679


[-- Attachment #1.1: Type: text/plain, Size: 272 bytes --]

I noticed that the local git configuration interferes with the guix test
suite.

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 #1.2: Type: text/html, Size: 487 bytes --]

[-- Attachment #2: 0001-tests-Isolate-git-from-external-configuration.patch --]
[-- Type: text/x-patch, Size: 2583 bytes --]

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"
 
 SCM_LOG_DRIVER =				\
   $(top_builddir)/test-env --quiet-stderr	\
diff --git a/tests/fake-home/.gitconfig b/tests/fake-home/.gitconfig
new file mode 100644
index 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


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#37679: Local git configuration interferes with testsuite
  2019-10-09 10:35 bug#37679: Local git configuration interferes with testsuite Gábor Boskovits
@ 2020-01-07  9:11 ` Ludovic Courtès
  2020-03-29 13:18 ` bug#37679: [PATCH 0/2] " Gábor Boskovits
  2020-04-17  8:46 ` bug#37679: Local git configuration interferes with testsuite Ludovic Courtès
  2 siblings, 0 replies; 7+ messages in thread
From: Ludovic Courtès @ 2020-01-07  9:11 UTC (permalink / raw)
  To: Gábor Boskovits; +Cc: 37679

Hello!

Gábor Boskovits <boskovits@gmail.com> skribis:

> 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 that
correct?

The ‘GIT_’ environment variables are honored by Git itself, not by
libgit2/Guile-Git, right?

Can we avoid setting HOME and XDG_CONFIG_HOME?

Perhaps these variables should all be set in ‘test-env’ along with their
friends, for consistency?

Last, if we end up keeping ‘tests/fake-home’, make sure to also add it
to ‘EXTRA_DIST’ in ‘Makefile.am’.

Could you send an updated patch?

Thanks for addressing it, and sorry for the loooong delay!

Ludo’.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#37679: [PATCH 0/2] Local git configuration interferes with testsuite
  2019-10-09 10:35 bug#37679: Local git configuration interferes with testsuite Gábor Boskovits
  2020-01-07  9:11 ` Ludovic Courtès
@ 2020-03-29 13:18 ` Gábor Boskovits
  2020-03-29 13:18   ` bug#37679: [PATCH 1/2] tests: Isolate git from user configuration Gábor Boskovits
  2020-03-29 13:18   ` bug#37679: [PATCH 2/2] tests: Ignore files created by the testsuite Gábor Boskovits
  2020-04-17  8:46 ` bug#37679: Local git configuration interferes with testsuite Ludovic Courtès
  2 siblings, 2 replies; 7+ messages in thread
From: Gábor Boskovits @ 2020-03-29 13:18 UTC (permalink / raw)
  To: 37679

Create a fake home in tests with a gitconfig so that the user configuration
does not get picked up.
I investigated how to solve this best, but git only respects HOME for the
commands we are using.
Also note that this does not affect libraries, only the git cli, as libraries
do 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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#37679: [PATCH 1/2] tests: Isolate git from user configuration.
  2020-03-29 13:18 ` bug#37679: [PATCH 0/2] " Gábor Boskovits
@ 2020-03-29 13:18   ` Gábor Boskovits
  2020-03-29 13:18   ` bug#37679: [PATCH 2/2] tests: Ignore files created by the testsuite Gábor Boskovits
  1 sibling, 0 replies; 7+ messages in thread
From: Gábor Boskovits @ 2020-03-29 13:18 UTC (permalink / raw)
  To: 37679

* tests/fake-home/.gitconfig: New file. Provide minimal git
configuration 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

diff --git a/Makefile.am b/Makefile.am
index 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.in
index 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/.gitconfig
new file mode 100644
index 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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#37679: [PATCH 2/2] tests: Ignore files created by the testsuite.
  2020-03-29 13:18 ` bug#37679: [PATCH 0/2] " Gábor Boskovits
  2020-03-29 13:18   ` bug#37679: [PATCH 1/2] tests: Isolate git from user configuration Gábor Boskovits
@ 2020-03-29 13:18   ` Gábor Boskovits
  1 sibling, 0 replies; 7+ messages in thread
From: Gábor Boskovits @ 2020-03-29 13:18 UTC (permalink / raw)
  To: 37679

* .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(-)

diff --git a/.gitignore b/.gitignore
index 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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#37679: Local git configuration interferes with testsuite
  2019-10-09 10:35 bug#37679: Local git configuration interferes with testsuite Gábor Boskovits
  2020-01-07  9:11 ` Ludovic Courtès
  2020-03-29 13:18 ` bug#37679: [PATCH 0/2] " Gábor Boskovits
@ 2020-04-17  8:46 ` Ludovic Courtès
  2020-04-19 11:28   ` Ludovic Courtès
  2 siblings, 1 reply; 7+ messages in thread
From: Ludovic Courtès @ 2020-04-17  8:46 UTC (permalink / raw)
  To: Gábor Boskovits; +Cc: 37679

[-- Attachment #1: Type: text/plain, Size: 656 bytes --]

Hi Gábor,

Gábor Boskovits <boskovits@gmail.com> skribis:

> +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 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?

Thanks,
Ludo’.


[-- Attachment #2: Type: text/x-patch, Size: 2547 bytes --]

diff --git a/guix/tests/git.scm b/guix/tests/git.scm
index 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)))

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* bug#37679: Local git configuration interferes with testsuite
  2020-04-17  8:46 ` bug#37679: Local git configuration interferes with testsuite Ludovic Courtès
@ 2020-04-19 11:28   ` Ludovic Courtès
  0 siblings, 0 replies; 7+ messages in thread
From: Ludovic Courtès @ 2020-04-19 11:28 UTC (permalink / raw)
  To: Gábor Boskovits; +Cc: 37679-done

Hi Gábor,

Ludovic Courtès <ludo@gnu.org> skribis:

> 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’.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-04-19 11:29 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-10-09 10:35 bug#37679: Local git configuration interferes with testsuite Gábor Boskovits
2020-01-07  9:11 ` Ludovic Courtès
2020-03-29 13:18 ` bug#37679: [PATCH 0/2] " Gábor Boskovits
2020-03-29 13:18   ` bug#37679: [PATCH 1/2] tests: Isolate git from user configuration Gábor Boskovits
2020-03-29 13:18   ` bug#37679: [PATCH 2/2] tests: Ignore files created by the testsuite Gábor Boskovits
2020-04-17  8:46 ` bug#37679: Local git configuration interferes with testsuite Ludovic Courtès
2020-04-19 11:28   ` Ludovic Courtès

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.