public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sebastien Fabbro" <bicatali@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/sci:master commit in: sys-cluster/modules/files/, sys-cluster/modules/
Date: Wed, 26 Jun 2013 17:23:39 +0000 (UTC)	[thread overview]
Message-ID: <1372267398.0ed65facdbd4db0e275f314b56d66de1bc00283d.bicatali@gentoo> (raw)

commit:     0ed65facdbd4db0e275f314b56d66de1bc00283d
Author:     Sébastien Fabbro <bicatali <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 26 17:23:18 2013 +0000
Commit:     Sebastien Fabbro <bicatali <AT> gentoo <DOT> org>
CommitDate: Wed Jun 26 17:23:18 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=0ed65fac

sys-cluster/modules: Prefix keyworded. Added tests. FHS fixes. Add bunch of fedora patches

Package-Manager: portage-2.2.01.22013-prefix

---
 sys-cluster/modules/ChangeLog                      |  10 ++
 sys-cluster/modules/files/createmodule.py          | 186 +++++++++++++++++++++
 sys-cluster/modules/files/createmodule.sh          | 166 ++++++++++++++++++
 .../modules/files/modules-3.2.10-avail.patch       |  12 ++
 .../modules/files/modules-3.2.10-bindir.patch      |  11 ++
 .../modules/files/modules-3.2.10-clear.patch       |  11 ++
 .../modules/files/modules-3.2.10-versioning.patch  |  10 ++
 sys-cluster/modules/files/modules.sh.in            |   7 +
 sys-cluster/modules/metadata.xml                   |  20 ++-
 sys-cluster/modules/modules-3.2.10-r1.ebuild       |  61 +++++++
 10 files changed, 486 insertions(+), 8 deletions(-)

diff --git a/sys-cluster/modules/ChangeLog b/sys-cluster/modules/ChangeLog
index b410036..2c395a5 100644
--- a/sys-cluster/modules/ChangeLog
+++ b/sys-cluster/modules/ChangeLog
@@ -2,6 +2,16 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+*modules-3.2.10-r1 (26 Jun 2013)
+
+  26 Jun 2013; Sébastien Fabbro <bicatali@gentoo.org> +files/createmodule.py,
+  +files/createmodule.sh, +files/modules-3.2.10-avail.patch,
+  +files/modules-3.2.10-bindir.patch, +files/modules-3.2.10-clear.patch,
+  +files/modules-3.2.10-versioning.patch, +files/modules.sh.in,
+  +modules-3.2.10-r1.ebuild, metadata.xml:
+  sys-cluster/modules: Prefix keyworded. Added tests. FHS fixes. Add bunch of
+  fedora patches
+
 *modules-3.2.10 (06 Jun 2013)
 
   06 Jun 2013; Nicolas Bock <nicolasbock@gmail.com> +modules-3.2.10.ebuild:

diff --git a/sys-cluster/modules/files/createmodule.py b/sys-cluster/modules/files/createmodule.py
new file mode 100755
index 0000000..60c6ba7
--- /dev/null
+++ b/sys-cluster/modules/files/createmodule.py
@@ -0,0 +1,186 @@
+#!/usr/bin/python
+#
+# createmodule.py - Takes the name of a environment init script and 
+# produces a modulefile that duplicates the changes made by the init script
+#
+# Copyright (C) 2012 by Orion E. Poplawski <orion@cora.nwra.com>
+#
+# This program 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 2 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from optparse import OptionParser
+import os,sys
+from subprocess import *
+
+# Handle options
+usage = "Usage: %prog [-p prefix] <initscript> [args]"
+parser = OptionParser()
+parser.set_usage(usage)
+parser.add_option('-p', '--prefix', dest='prefix', help='Specify path prefix')
+(options, args) = parser.parse_args()
+
+# Need a script name
+if not args:
+    parser.print_usage()
+    exit(1)
+
+# Return environment after a command
+def getenv(cmd = ':'):
+    env = {}
+    p = Popen(cmd + ";env", shell=True, stdout=PIPE, stderr=PIPE)
+    (stdout, stderr) = p.communicate()
+    if p.returncode != 0:
+        print "EROR: Could not execute initscript:"
+        print "%s returned exit code %d" % (cmd, p.returncode)
+        print stderr
+        exit(1)
+    if stderr != '':
+        print "WARNING: initscript sent the following to stderr:"
+        print stderr
+    # Parse the output key=value pairs
+    for line in stdout.splitlines():
+        try:
+            (var,value) = line.split('=',1)
+        except ValueError:
+            print "ERROR: Could not parse output:"
+            print stdout
+            exit(1)
+        env[var] = value
+    return env
+
+#Record initial environment
+env1=getenv()
+
+#Record environment after sourcing the initscript
+env2=getenv(". " + " ".join(args))
+
+# Initialize our variables for storing modifications
+chdir = None
+appendpath = {}
+prependpath = {}
+setenv = {}
+unsetenv = []
+pathnames = []
+
+# Function to nomalize all paths in a list of paths and remove duplicate items
+def normpaths(paths):
+    newpaths = []
+    for path in paths:
+        normpath = os.path.normpath(path)
+        if normpath not in newpaths:
+             newpaths.append(os.path.normpath(path))
+    return newpaths
+
+# Start with existing keys and look for changes
+for key in env1.keys():
+    # Test for delete
+    if key not in env2:
+        unsetenv.append(key)
+        continue
+    # No change
+    if env1[key] == env2[key]:
+        del env2[key]
+        continue
+    #Working directory change
+    if key == 'PWD':
+	chdir=os.path.normpath(env2[key])
+        pathnames.append(chdir)
+        del env2[key]
+        continue
+    # Determine modifcations to beginning and end of the string
+    (prepend,append) = env2[key].split(env1[key])
+    if prepend:
+        prependpaths = prepend.strip(':').split(':')
+        # LICENSE variables often include paths outside install directory
+        if 'LICENSE' not in key:
+            pathnames += prependpaths
+        prependpath[key] = ':'.join(normpaths(prependpaths))
+    if append:
+        appendpaths = append.strip(':').split(':')
+        # LICENSE variables often include paths outside install directory
+        if 'LICENSE' not in key:
+            pathnames += appendpaths
+        appendpath[key] = ':'.join(normpaths(appendpaths))
+    del env2[key]
+      
+# We're left with new keys in env2
+for key in env2.keys():
+    # Use prepend-path for new paths
+    if ('PATH' in key) or (':' in env2[key]):
+        prependpaths = env2[key].strip(':').split(':')
+        # MANPATH can have system defaults added it it wasn't previously set
+        # LICENSE variables often include paths outside install directory
+        if key != 'MANPATH' and 'LICENSE' not in key:
+            pathnames += prependpaths
+        prependpath[key] = ':'.join(normpaths(prependpaths))
+        continue
+    # Set new variables
+    setenv[key] = os.path.normpath(env2[key])
+    if 'LICENSE' not in key:
+        pathnames.append(setenv[key])
+
+# Determine a prefix
+prefix = None
+if options.prefix:
+    prefix = options.prefix
+else:
+    prefix = os.path.commonprefix(pathnames).rstrip('/')
+    if prefix == '':
+          prefix = None
+
+# Print out the modulefile
+print "#%Module 1.0"
+
+# Prefix
+if prefix is not None:
+    print "\nset prefix " + prefix + "\n"
+
+# Chdir
+if chdir is not None:
+    print "chdir\t" + chdir
+
+# Function to format output line with tabs and substituting prefix
+def formatline(item, key, value=None):
+    print item,
+    print "\t"*(2-(len(item)+1)/8),
+    print key,
+    if value is not None:
+        print "\t"*(3-(len(key)+1)/8),
+        if prefix is not None:
+            print value.replace(prefix,'$prefix')
+        else:
+            print value
+
+# Paths first, grouped by variable name
+pathkeys = appendpath.keys() + prependpath.keys()
+pathkeys.sort()
+for key in pathkeys:
+    if key in prependpath:
+        formatline("prepend-path",key,prependpath[key])
+    if key in appendpath:
+        formatline("append-path",key,appendpath[key])
+
+# Setenv
+setenvkeys = setenv.keys()
+setenvkeys.sort()
+if setenvkeys:
+    print
+for key in setenvkeys:
+    formatline("setenv",key,setenv[key])
+
+# Unsetenv
+unsetenv.sort()
+if unsetenv:
+    print
+for key in unsetenv:
+    formatline("unsetenv",key)

diff --git a/sys-cluster/modules/files/createmodule.sh b/sys-cluster/modules/files/createmodule.sh
new file mode 100755
index 0000000..b44cf05
--- /dev/null
+++ b/sys-cluster/modules/files/createmodule.sh
@@ -0,0 +1,166 @@
+#!/bin/bash
+#
+# createmodule.sh - Takes the name of a environment init script and 
+# produces a modulefile that duplicates the changes made by the init script
+#
+# Copyright (C) 2010-2012 by Orion E. Poplawski <orion@cora.nwra.com>
+#
+# This program 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 2 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+usage="Usage: $0 [-p prefix] <initscript> [args]"
+
+usage() {
+  echo $usage 1>&2
+  exit 1
+}
+
+while getopts "p:" opt
+do
+  case $opt in
+    p) prefix=$OPTARG; shift 2;;
+    *) usage;;
+  esac
+done
+
+# Need a script name
+[ -z "$1" ] && usage
+
+# Need to be a readable script
+if [ ! -r "$1" ]
+then
+  echo "ERROR: Cannot read $1" 1>&2
+  exit 1 
+fi
+
+#Will print out array assignment list
+printenvarray () {
+  env | while read x
+  do
+    key=${x%%=*}
+    value=${x#*=}
+    echo [$key]="'$value'"
+  done
+}
+
+#Apparently we need to declare the associative arrays
+declare -A env1 env2
+
+#Record starting environment
+eval env1=(`printenvarray`)
+
+#Source the environment script
+. "$@"
+
+#Record ending environment
+eval env2=(`printenvarray`)
+
+#Print out the modulefile
+echo "#%Module 1.0"
+
+#Prefix
+[ -n "$prefix" ] && echo -e "\nset prefix $prefix\n"
+
+#Subshell so we can sort the output
+(
+dedup() {
+  list=`mktemp`
+  echo $1 | sed -r -e 's,[^/]+/\.\./,,g' -e 's,[^/]+/\.\./,,g' -e 's/:/\n/g' |
+    while read x
+    do
+      grep -Fx ${x} $list && continue
+      if [ -n "$prefix" ]
+      then
+        echo $x | sed -e s,$prefix,\$prefix,
+      else
+        echo $x
+      fi
+      echo $x >> $list
+    done | tr '\n' : | sed -e 's/:$//'
+  rm $list
+} 
+    
+#Keys that changed
+for key in "${!env1[@]}"
+do
+  if [ "${env1[$key]}" != "${env2[$key]}" ]
+  then
+    #Working directory change
+    if [ "$key" = PWD ]
+    then
+      if [ -n "$prefix" ]
+      then
+        echo -e "chdir\t\t${env2[PWD]}" | sed -e s,$prefix,\$prefix,g
+      else
+        echo -e "chdir\t\t${env2[PWD]}"
+      fi
+    #Test for delete
+    elif [ -z "${env2[$key]}" ]
+    then
+      echo -e "unsetenv\t${key}\t${env2[$key]}"
+    #Test for prepend
+    elif [ "${env2[$key]%${env1[$key]}}" != "${env2[$key]}" ]
+    then
+      added=$(dedup ${env2[$key]%:${env1[$key]}})
+      echo -e "prepend-path\t$key\t${added}"
+    #Test for prepend plus : added at end (MANPATH)
+    elif [ "${env2[$key]%${env1[$key]}:}" != "${env2[$key]}" ]
+    then
+      added=$(dedup ${env2[$key]%${env1[$key]}:})
+      echo -e "prepend-path\t$key\t${added}"
+    #Test for append
+    elif [ "${env2[$key]#${env1[$key]}}" != "${env2[$key]}" ]
+    then
+      added=$(dedup ${env2[$key]#:${env1[$key]}})
+      echo -e "append-path\t$key\t${added}"
+    #Test for prepend plus append
+    elif [ "${env2[$key]%${env1[$key]}:*}" != "${env2[$key]}" ]
+    then
+      added=$(dedup ${env2[$key]%:${env1[$key]}*})
+      echo -e "prepend-path\t$key\t${added}"
+      added=$(dedup ${env2[$key]#*${env1[$key]}:})
+      echo -e "append-path\t$key\t${added}"
+    else
+      #Unhandled
+      echo "Unhandled change of $key" 1>&2
+      echo "Before <${env1[$key]}>" 1>&2
+      echo "After  <${env2[$key]}>" 1>&2
+    fi
+  fi
+  #Delete keys we've handled
+  unset env1[$key]
+  unset env2[$key]
+done
+
+#New keys
+for key in "${!env2[@]}"
+do
+  if [ "$key" = OLDPWD ]
+  then
+    continue
+  fi
+  #Use prepend-path for new paths
+  if [ "${key/PATH/}" != "$key" ]
+  then
+    # TODO - Need to handle stripping of default MANPATH
+    echo -e "prepend-path\t${key}\t"$(dedup ${env2[$key]})
+  else
+    if [ -n "$prefix" ]
+    then
+      echo -e "setenv\t\t${key}\t${env2[$key]}" | sed -e s,$prefix,\$prefix,g
+    else
+      echo -e "setenv\t\t${key}\t${env2[$key]}"
+    fi
+  fi
+done
+) | sort

diff --git a/sys-cluster/modules/files/modules-3.2.10-avail.patch b/sys-cluster/modules/files/modules-3.2.10-avail.patch
new file mode 100644
index 0000000..8d6f52b
--- /dev/null
+++ b/sys-cluster/modules/files/modules-3.2.10-avail.patch
@@ -0,0 +1,12 @@
+diff -up modules-3.2.10/init/bash_completion.in.avail modules-3.2.10/init/bash_completion.in
+--- modules-3.2.10/init/bash_completion.in.avail	2012-10-25 13:33:34.000000000 -0600
++++ modules-3.2.10/init/bash_completion.in	2013-01-15 12:05:37.247309733 -0700
+@@ -56,7 +56,7 @@ _module() {
+ 	unuse)		COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
+ 	use|*-a*)	;;			# let readline handle the completion
+ 	-u|--userlvl)	COMPREPLY=( $(compgen -W "novice expert advanced" -- "$cur") );;
+-	display|help|show|whatis)
++	av*|disp*|help|show|whatis)
+ 			COMPREPLY=( $(compgen -W "$(_module_avail)" -- "$cur") );;
+ 	*) if test $COMP_CWORD -gt 2
+ 	   then

diff --git a/sys-cluster/modules/files/modules-3.2.10-bindir.patch b/sys-cluster/modules/files/modules-3.2.10-bindir.patch
new file mode 100644
index 0000000..2066d7f
--- /dev/null
+++ b/sys-cluster/modules/files/modules-3.2.10-bindir.patch
@@ -0,0 +1,11 @@
+--- modules-3.2.10.orig/init/Makefile.in	2009-09-22 12:13:52.000000000 -0600
++++ modules-3.2.10/init/Makefile.in	2009-09-23 12:19:50.797470155 -0600
+@@ -404,7 +404,7 @@
+ 	sed -e "/@$(if $(subst 0,,$(WANTS_VERSIONING)),NOT,)VERSIONING\@/d; \
+ 	s,@$(if $(subst 0,,$(WANTS_VERSIONING)),,NOT)VERSIONING\@,,g; \
+ 	s,@prefix\@,${prefix},g; \
+-	s,@bindir\@,${exec_prefix}/bin,g; \
++	s,@bindir\@,${bindir},g; \
+ 	s,@VERSION\@,@VERSION@,g; \
+ 	s,@BASEPREFIX\@,@BASEPREFIX@,g;" < $< > $@
+ 

diff --git a/sys-cluster/modules/files/modules-3.2.10-clear.patch b/sys-cluster/modules/files/modules-3.2.10-clear.patch
new file mode 100644
index 0000000..0817db5
--- /dev/null
+++ b/sys-cluster/modules/files/modules-3.2.10-clear.patch
@@ -0,0 +1,11 @@
+--- modules-3.2.9/utility.c	2011-11-28 22:27:13.000000000 +0100
++++ modules-3.2.9-new/utility.c	2012-06-13 15:17:41.570629148 +0200
+@@ -727,7 +727,7 @@ int Output_Modulefile_Changes(	Tcl_Inter
+ 			output_unset_variable( (char*) key);
+ 		} else {
+ 			val = EMGetEnv(interp, key);
+-			if(val && *val)
++			if(val)
+ 				output_set_variable(interp, (char*) key, val);
+ 			null_free((void *)&val);
+ 		}

diff --git a/sys-cluster/modules/files/modules-3.2.10-versioning.patch b/sys-cluster/modules/files/modules-3.2.10-versioning.patch
new file mode 100644
index 0000000..7bda920
--- /dev/null
+++ b/sys-cluster/modules/files/modules-3.2.10-versioning.patch
@@ -0,0 +1,10 @@
+diff -up modules-3.2.10/modulefiles/modules.in.versioning modules-3.2.10/modulefiles/modules.in
+--- modules-3.2.10/modulefiles/modules.in.versioning	2012-10-25 13:33:34.000000000 -0600
++++ modules-3.2.10/modulefiles/modules.in	2013-01-15 11:30:22.046031158 -0700
+@@ -26,5 +26,5 @@ setenv		MODULESHOME	$prefix
+ prepend-path    PATH   		@bindir@
+ prepend-path    MANPATH		@mandir@
+ 
+-module		use		@VERSIONPATH@
++@VERSIONING@module		use		@VERSIONPATH@
+ 

diff --git a/sys-cluster/modules/files/modules.sh.in b/sys-cluster/modules/files/modules.sh.in
new file mode 100644
index 0000000..6ed502e
--- /dev/null
+++ b/sys-cluster/modules/files/modules.sh.in
@@ -0,0 +1,7 @@
+shell=$(basename $(ps -p $$ -ocomm=))
+if [ -f @EPREFIX@/usr/share/Modules/init/${shell} ]
+then
+  . @EPREFIX@/usr/share/Modules/init/${shell}
+else
+  . @PREFIX@/usr/share/Modules/init/sh
+fi

diff --git a/sys-cluster/modules/metadata.xml b/sys-cluster/modules/metadata.xml
index 4c7ca47..8076274 100644
--- a/sys-cluster/modules/metadata.xml
+++ b/sys-cluster/modules/metadata.xml
@@ -1,12 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
 <pkgmetadata>
-	<longdescription lang="en">
-		The Environment Modules package provides for the dynamic modification of a user's environment via modulefiles.
-	</longdescription>
-	<herd>cluster</herd>
-	<maintainer>
-		<email>nicolasbock@gmail.com</email>
-		<name>Nicolas Bock</name>
-	</maintainer>
+<herd>cluster</herd>
+<maintainer>
+  <email>nicolasbock@gmail.com</email>
+  <name>Nicolas Bock</name>
+</maintainer>
+<longdescription lang="en">
+  The environment modules package provides for an easy dynamic
+  modification of a user's environment via modulefiles. which
+  typically instruct the module command to alter or set shell
+  environment variables such as PATH, MANPATH, etc. as well as define
+  aliases over a variety of shells.
+</longdescription>
 </pkgmetadata>

diff --git a/sys-cluster/modules/modules-3.2.10-r1.ebuild b/sys-cluster/modules/modules-3.2.10-r1.ebuild
new file mode 100644
index 0000000..fd8fdd8
--- /dev/null
+++ b/sys-cluster/modules/modules-3.2.10-r1.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=5
+
+inherit autotools-utils multilib
+
+DESCRIPTION="Dynamic modification of a user's environment via modulefiles"
+HOMEPAGE="http://modules.sourceforge.net/"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="test X"
+
+RDEPEND="
+	dev-lang/tcl
+	dev-tcltk/tclx
+	X? ( x11-libs/libX11 )"
+DEPEND="${RDEPEND}
+	test? ( dev-util/dejagnu )"
+
+S="${WORKDIR}/${P%[a-z]}"
+
+DOCS=(ChangeLog README NEWS TODO)
+
+src_prepare() {
+	has_version ">=dev-lang/tcl-8.6.0" && \
+		epatch "${FILESDIR}"/${P}-errorline.patch
+	epatch \
+		"${FILESDIR}"/${P}-bindir.patch \
+		"${FILESDIR}"/${P}-versioning.patch \
+		"${FILESDIR}"/${P}-clear.patch \
+		"${FILESDIR}"/${P}-avail.patch
+	sed -e "s:@EPREFIX@:${EPREFIX}:g" \
+		"${FILESDIR}"/modules.sh.in > modules.sh
+}
+
+src_configure() {
+	local myeconfargs=(
+		--disable-versioning
+		--prefix="${EPREFIX}/usr/share"
+		--exec-prefix="${EPREFIX}/usr/share/Modules"
+		--with-module-path="${EPREFIX}/etc/modulefiles"
+		--with-tcl="${EPREFIX}/usr/$(get_libdir)"
+		$(use_with X x)
+	)
+	autotools-utils_src_configure
+}
+
+src_install() {
+	autotools-utils_src_install
+	insinto /etc/profile.d
+	doins modules.sh
+	exeinto /usr/share/Modules/bin
+	doexe "${FILESDIR}"/createmodule.{sh,py}
+	dosym /usr/share/Modules/init/csh /etc/profile.d/modules.csh
+	dodir /etc/modulesfiles
+}


             reply	other threads:[~2013-06-26 17:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-26 17:23 Sebastien Fabbro [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-09-26 19:11 [gentoo-commits] proj/sci:master commit in: sys-cluster/modules/files/, sys-cluster/modules/ Aisha Tammy
2017-08-25 19:36 Andrew Savchenko
2014-01-26 22:52 Nicolas Bock
2013-06-26 14:53 Justin Lecher
2013-06-03 23:33 Christoph Junghans
2013-06-03 23:33 Christoph Junghans

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1372267398.0ed65facdbd4db0e275f314b56d66de1bc00283d.bicatali@gentoo \
    --to=bicatali@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox