public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger (vapier)" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] gentoo-x86 commit in eclass: eutils.eclass
Date: Sat, 09 Jan 2010 20:06:25 +0000	[thread overview]
Message-ID: <E1NThZp-0003w8-87@stork.gentoo.org> (raw)

vapier      10/01/09 20:06:25

  Modified:             eutils.eclass
  Log:
  rewrite epatch greatly -- clean up logging, quoting, shell opts, file name checking, and decompression

Revision  Changes    Path
1.325                eclass/eutils.eclass

file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/eclass/eutils.eclass?rev=1.325&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/eclass/eutils.eclass?rev=1.325&content-type=text/plain
diff : http://sources.gentoo.org/viewcvs.py/gentoo-x86/eclass/eutils.eclass?r1=1.324&r2=1.325

Index: eutils.eclass
===================================================================
RCS file: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v
retrieving revision 1.324
retrieving revision 1.325
diff -u -r1.324 -r1.325
--- eutils.eclass	3 Jan 2010 19:57:10 -0000	1.324
+++ eutils.eclass	9 Jan 2010 20:06:24 -0000	1.325
@@ -1,6 +1,6 @@
 # Copyright 1999-2009 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.324 2010/01/03 19:57:10 zmedico Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.325 2010/01/09 20:06:24 vapier Exp $
 
 # @ECLASS: eutils.eclass
 # @MAINTAINER:
@@ -114,284 +114,272 @@
 	set -${s} || die "eshopts_pop: sanity: unable to restore saved shell settings: ${s}"
 }
 
-# Default directory where patches are located
+# @VARIABLE: EPATCH_SOURCE
+# @DESCRIPTION:
+# Default directory to search for patches.
 EPATCH_SOURCE="${WORKDIR}/patch"
-# Default extension for patches
+# @VARIABLE: EPATCH_SUFFIX
+# @DESCRIPTION:
+# Default extension for patches (do not prefix the period yourself).
 EPATCH_SUFFIX="patch.bz2"
-# Default options for patch
-# Set -g0 to keep RCS, ClearCase, Perforce and SCCS happy. Bug #24571
-# Set --no-backup-if-mismatch so we don't leave '.orig' files behind.
-# Set -E to automatically remove empty files.
+# @VARIABLE: EPATCH_OPTS
+# @DESCRIPTION:
+# Default options for patch:
+# @CODE
+#	-g0 - keep RCS, ClearCase, Perforce and SCCS happy #24571
+#	--no-backup-if-mismatch - do not leave .orig files behind
+#	-E - automatically remove empty files
+# @CODE
 EPATCH_OPTS="-g0 -E --no-backup-if-mismatch"
+# @VARIABLE: EPATCH_EXCLUDE
+# @DESCRIPTION:
 # List of patches not to apply.	 Note this is only file names,
-# and not the full path ..
+# and not the full path.  Globs accepted.
 EPATCH_EXCLUDE=""
+# @VARIABLE: EPATCH_SINGLE_MSG
+# @DESCRIPTION:
 # Change the printed message for a single patch.
 EPATCH_SINGLE_MSG=""
+# @VARIABLE: EPATCH_MULTI_MSG
+# @DESCRIPTION:
 # Change the printed message for multiple patches.
 EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
-# Force applying bulk patches even if not following the style:
-#
-#	??_${ARCH}_foo.${EPATCH_SUFFIX}
-#
+# @VARIABLE: EPATCH_FORCE
+# @DESCRIPTION:
+# Only require patches to match EPATCH_SUFFIX rather than the extended
+# arch naming style.
 EPATCH_FORCE="no"
 
-# This function is for bulk patching, or in theory for just one
-# or two patches.
-#
-# It should work with .bz2, .gz, .zip and plain text patches.
-# Currently all patches should be the same format.
-#
-# You do not have to specify '-p' option to patch, as it will
-# try with -p0 to -p5 until it succeed, or fail at -p5.
-#
-# Above EPATCH_* variables can be used to control various defaults,
-# bug they should be left as is to ensure an ebuild can rely on
-# them for.
-#
-# Patches are applied in current directory.
-#
-# Bulk Patches should preferably have the form of:
-#
-#	??_${ARCH}_foo.${EPATCH_SUFFIX}
-#
-# For example:
-#
-#	01_all_misc-fix.patch.bz2
-#	02_sparc_another-fix.patch.bz2
+# @FUNCTION: epatch
+# @USAGE: [patches] [dirs of patches]
+# @DESCRIPTION:
+# epatch is designed to greatly simplify the application of patches.  It can
+# process patch files directly, or directories of patches.  The patches may be
+# compressed (bzip/gzip/etc...) or plain text.  You generally need not specify
+# the -p option as epatch will automatically attempt -p0 to -p5 until things
+# apply successfully.
 #
-# This ensures that there are a set order, and you can have ARCH
-# specific patches.
+# If you do not specify any options, then epatch will default to the directory
+# specified by EPATCH_SOURCE.
 #
-# If you however give an argument to epatch(), it will treat it as a
-# single patch that need to be applied if its a file.  If on the other
-# hand its a directory, it will set EPATCH_SOURCE to this.
+# When processing directories, epatch will apply all patches that match:
+# @CODE
+#	${EPATCH_FORCE} == "yes"
+#		??_${ARCH}_foo.${EPATCH_SUFFIX}
+#	else
+#		*.${EPATCH_SUFFIX}
+# @CODE
+# The leading ?? are typically numbers used to force consistent patch ordering.
+# The arch field is used to apply patches only for the host architecture with
+# the special value of "all" means apply for everyone.  Note that using values
+# other than "all" is highly discouraged -- you should apply patches all the
+# time and let architecture details be detected at configure/compile time.
 #
-# <azarah@gentoo.org> (10 Nov 2002)
+# If EPATCH_SUFFIX is empty, then no period before it is implied when searching
+# for patches to apply.
 #
+# Refer to the other EPATCH_xxx variables for more customization of behavior.
 epatch() {
 	_epatch_draw_line() {
+		# create a line of same length as input string
 		[[ -z $1 ]] && set "$(printf "%65s" '')"
 		echo "${1//?/=}"
 	}
-	_epatch_assert() { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] ; }
-	local PIPE_CMD=""
-	local STDERR_TARGET="${T}/$$.out"
-	local PATCH_TARGET="${T}/$$.patch"
-	local PATCH_SUFFIX=""
-	local SINGLE_PATCH="no"
-	local x=""
 
 	unset P4CONFIG P4PORT P4USER # keep perforce at bay #56402
 
-	if [ "$#" -gt 1 ]
-	then
-		local m=""
+	# Let the rest of the code process one user arg at a time --
+	# each arg may expand into multiple patches, and each arg may
+	# need to start off with the default global EPATCH_xxx values
+	if [[ $# -gt 1 ]] ; then
+		local m
 		for m in "$@" ; do
 			epatch "${m}"
 		done
 		return 0
 	fi
 
-	if [ -n "$1" -a -f "$1" ]
-	then
-		SINGLE_PATCH="yes"
+	local SINGLE_PATCH="no"
+	# no args means process ${EPATCH_SOURCE}
+	[[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}"
 
-		local EPATCH_SOURCE="$1"
-		local EPATCH_SUFFIX="${1##*\.}"
+	if [[ -f $1 ]] ; then
+		SINGLE_PATCH="yes"
+		set -- "$1"
+		# Use the suffix from the single patch (localize it); the code
+		# below will find the suffix for us
+		local EPATCH_SUFFIX=$1
+
+	elif [[ -d $1 ]] ; then
+		# Some people like to make dirs of patches w/out suffixes (vim)
+		set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"}
 
-	elif [ -n "$1" -a -d "$1" ]
-	then
-		# Allow no extension if EPATCH_FORCE=yes ... used by vim for example ...
-		if [ "${EPATCH_FORCE}" = "yes" ] && [ -z "${EPATCH_SUFFIX}" ]
-		then
-			local EPATCH_SOURCE="$1/*"
-		else
-			local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
-		fi
 	else
-		if [[ ! -d ${EPATCH_SOURCE} ]] || [[ -n $1 ]] ; then
-			if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]
-			then
-				EPATCH_SOURCE="$1"
-			fi
-
-			echo
-			eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:"
-			eerror
-			eerror "  ${EPATCH_SOURCE}"
-			eerror "  ( ${EPATCH_SOURCE##*/} )"
-			echo
-			die "Cannot find \$EPATCH_SOURCE!"
-		fi
-
-		local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
+		# sanity check ... if it isn't a dir or file, wtf man ?
+		[[ $# -ne 0 ]] && EPATCH_SOURCE=$1
+		echo
+		eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:"
+		eerror
+		eerror "  ${EPATCH_SOURCE}"
+		eerror "  ( ${EPATCH_SOURCE##*/} )"
+		echo
+		die "Cannot find \$EPATCH_SOURCE!"
 	fi
 
+	local PIPE_CMD
 	case ${EPATCH_SUFFIX##*\.} in
-		xz)
-			PIPE_CMD="xz -dc"
-			PATCH_SUFFIX="xz"
-			;;
-		lzma)
-			PIPE_CMD="lzma -dc"
-			PATCH_SUFFIX="lzma"
-			;;
-		bz2)
-			PIPE_CMD="bzip2 -dc"
-			PATCH_SUFFIX="bz2"
-			;;
-		gz|Z|z)
-			PIPE_CMD="gzip -dc"
-			PATCH_SUFFIX="gz"
-			;;
-		ZIP|zip)
-			PIPE_CMD="unzip -p"
-			PATCH_SUFFIX="zip"
-			;;
-		*)
-			PIPE_CMD="cat"
-			PATCH_SUFFIX="patch"
-			;;
+		xz)      PIPE_CMD="xz -dc"    ;;
+		lzma)    PIPE_CMD="lzma -dc"  ;;
+		bz2)     PIPE_CMD="bzip2 -dc" ;;
+		gz|Z|z)  PIPE_CMD="gzip -dc"  ;;
+		ZIP|zip) PIPE_CMD="unzip -p"  ;;
+		*)       ;;
 	esac
 
-	if [ "${SINGLE_PATCH}" = "no" ]
-	then
-		einfo "${EPATCH_MULTI_MSG}"
-	fi
-	for x in ${EPATCH_SOURCE}
-	do
-		# New ARCH dependant patch naming scheme ...
-		#
+	[[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}"
+
+	local x
+	for x in "$@" ; do
+		# If the patch dir given contains subdirs, or our EPATCH_SUFFIX
+		# didn't match anything, ignore continue on
+		[[ ! -f ${x} ]] && continue
+
+		local patchname=${x##*/}
+
+		# Apply single patches, or forced sets of patches, or
+		# patches with ARCH dependant names.
 		#	???_arch_foo.patch
-		#
-		if [ -f ${x} ] && \
-		   ([ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || \
-			[ "${EPATCH_FORCE}" = "yes" ])
+		# Else, skip this input altogether
+		local a=${patchname#*_} # strip the ???_
+		a=${a%%_*}              # strip the _foo.patch
+		if ! [[ ${SINGLE_PATCH} == "yes" || \
+		        ${EPATCH_FORCE} == "yes" || \
+		        ${a} == all     || \
+		        ${a} == ${ARCH} ]]
 		then
-			local count=0
-			local popts="${EPATCH_OPTS}"
-			local patchname=${x##*/}
+			continue
+		fi
 
-			if [ -n "${EPATCH_EXCLUDE}" ]
-			then
-				if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]
-				then
+		# Let people filter things dynamically
+		if [[ -n ${EPATCH_EXCLUDE} ]] ; then
+			# let people use globs in the exclude
+			eshopts_push -o noglob
+
+			local ex
+			for ex in ${EPATCH_EXCLUDE} ; do
+				if [[ ${patchname} == ${ex} ]] ; then
+					eshopts_pop
 					continue
 				fi
-			fi
+			done
+			eshopts_pop
+		fi
 
-			if [ "${SINGLE_PATCH}" = "yes" ]
-			then
-				if [ -n "${EPATCH_SINGLE_MSG}" ]
-				then
-					einfo "${EPATCH_SINGLE_MSG}"
-				else
-					einfo "Applying ${patchname} ..."
-				fi
+		if [[ ${SINGLE_PATCH} == "yes" ]] ; then
+			if [[ -n ${EPATCH_SINGLE_MSG} ]] ; then
+				einfo "${EPATCH_SINGLE_MSG}"
 			else
-				einfo "  ${patchname} ..."
+				einfo "Applying ${patchname} ..."
 			fi
+		else
+			einfo "  ${patchname} ..."
+		fi
 
-			echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-			echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
+		# most of the time, there will only be one run per unique name,
+		# but if there are more, make sure we get unique log filenames
+		local STDERR_TARGET="${T}/${patchname}.out"
+		if [[ -e ${STDERR_TARGET} ]] ; then
+			STDERR_TARGET="${T}/${patchname}-$$.out"
+		fi
 
-			# Decompress the patch if need be
-			if [[ ${PATCH_SUFFIX} != "patch" ]] ; then
-				echo -n "PIPE_COMMAND:	" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-				echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
+		printf "***** %s *****\n\n" "${patchname}" > "${STDERR_TARGET}"
 
-				if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1 ; then
-					echo
-					eerror "Could not extract patch!"
-					#die "Could not extract patch!"
-					count=5
-					break
-				fi
-			else
-				PATCH_TARGET="${x}"
-			fi
+		# Decompress the patch if need be
+		local count=0
+		local PATCH_TARGET
+		if [[ -n ${PIPE_CMD} ]] ; then
+			PATCH_TARGET="${T}/$$.patch"
+			echo "PIPE_COMMAND:  ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}"
 
-			# Check for absolute paths in patches.  If sandbox is disabled,
-			# people could (accidently) patch files in the root filesystem.
-			# Or trigger other unpleasantries #237667.  So disallow -p0 on
-			# such patches.
-			local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }')
-			if [[ -n ${abs_paths} ]] ; then
-				count=1
-				echo "NOTE: skipping -p0 due to absolute paths in patch:" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-				echo "${abs_paths}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
+			if ! (${PIPE_CMD} "${x}" > "${PATCH_TARGET}") >> "${STDERR_TARGET}" 2>&1 ; then
+				echo
+				eerror "Could not extract patch!"
+				#die "Could not extract patch!"
+				count=5
+				break
 			fi
+		else
+			PATCH_TARGET=${x}
+		fi
 
-			# Allow for prefix to differ ... im lazy, so shoot me :/
-			while [ "${count}" -lt 5 ]
-			do
-				# Generate some useful debug info ...
-				_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-				echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-
-				echo -n "PATCH COMMAND:	 " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-				echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-
-				echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-				_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-
-				if (cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f ; _epatch_assert) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1
-				then
-					_epatch_draw_line "***** ${patchname} *****" >	${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
-					echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
-					echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
-					echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
-					_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
-
-					cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1
-					_epatch_assert
-
-					if [ "$?" -ne 0 ]
-					then
-						cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
-						echo
-						eerror "A dry-run of patch command succeeded, but actually"
-						eerror "applying the patch failed!"
-						#die "Real world sux compared to the dreamworld!"
-						count=5
-					fi
+		# Check for absolute paths in patches.  If sandbox is disabled,
+		# people could (accidently) patch files in the root filesystem.
+		# Or trigger other unpleasantries #237667.  So disallow -p0 on
+		# such patches.
+		local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }')
+		if [[ -n ${abs_paths} ]] ; then
+			count=1
+			printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}"
+		fi
+
+		# Dynamically detect the correct -p# ... i'm lazy, so shoot me :/
+		while [[ ${count} -lt 5 ]] ; do
+			# Generate some useful debug info ...
+			(
+			_epatch_draw_line "***** ${patchname} *****"
+			echo
+			echo "PATCH COMMAND:  patch -p${count} ${EPATCH_OPTS} < '${PATCH_TARGET}'"
+			echo
+			_epatch_draw_line "***** ${patchname} *****"
+			) >> "${STDERR_TARGET}"
 
-					rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real
+			if (patch -p${count} ${EPATCH_OPTS} --dry-run -f < "${PATCH_TARGET}") >> "${STDERR_TARGET}" 2>&1 ; then
+				(
+				_epatch_draw_line "***** ${patchname} *****"
+				echo
+				echo "ACTUALLY APPLYING ${patchname} ..."
+				echo
+				_epatch_draw_line "***** ${patchname} *****"
+				patch -p${count} ${EPATCH_OPTS} < "${PATCH_TARGET}" 2>&1
+				) >> "${STDERR_TARGET}"
 
-					break
+				if [ $? -ne 0 ] ; then
+					echo
+					eerror "A dry-run of patch command succeeded, but actually"
+					eerror "applying the patch failed!"
+					#die "Real world sux compared to the dreamworld!"
+					count=5
 				fi
-
-				count=$((count + 1))
-			done
-
-			if [ "${PATCH_SUFFIX}" != "patch" ]
-			then
-				rm -f ${PATCH_TARGET}
+				break
 			fi
 
-			if [ "${count}" -eq 5 ]
-			then
-				echo
-				eerror "Failed Patch: ${patchname} !"
-				eerror " ( ${PATCH_TARGET} )"
-				eerror
-				eerror "Include in your bugreport the contents of:"
-				eerror
-				eerror "  ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"
-				echo
-				die "Failed Patch: ${patchname}!"
-			fi
+			: $(( count++ ))
+		done
 
-			rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}
+		# if we had to decompress the patch, delete the temp one
+		if [[ -n ${PIPE_CMD} ]] ; then
+			rm -f "${PATCH_TARGET}"
+		fi
 
-			eend 0
+		if [[ ${count} -ge 5 ]] ; then
+			echo
+			eerror "Failed Patch: ${patchname} !"
+			eerror " ( ${PATCH_TARGET} )"
+			eerror
+			eerror "Include in your bugreport the contents of:"
+			eerror
+			eerror "  ${STDERR_TARGET}"
+			echo
+			die "Failed Patch: ${patchname}!"
 		fi
+
+		# if everything worked, delete the patch log
+		rm -f "${STDERR_TARGET}"
+		eend 0
 	done
-	if [ "${SINGLE_PATCH}" = "no" ]
-	then
-		einfo "Done with patching"
-	fi
+
+	[[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching"
+	: # everything worked
 }
 epatch_user() {
 	[[ $# -ne 0 ]] && die "epatch_user takes no options"






             reply	other threads:[~2010-01-09 20:06 UTC|newest]

Thread overview: 114+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-09 20:06 Mike Frysinger (vapier) [this message]
  -- strict thread matches above, loose matches on Subject: below --
2015-03-20 18:28 [gentoo-commits] gentoo-x86 commit in eclass: eutils.eclass Mike Frysinger (vapier)
2015-03-20 18:22 Mike Frysinger (vapier)
2014-11-15  9:49 Mike Frysinger (vapier)
2014-11-13  4:55 Mike Frysinger (vapier)
2014-11-03 22:55 Mike Frysinger (vapier)
2014-09-19 17:09 Mike Frysinger (vapier)
2014-04-27 19:01 Mike Frysinger (vapier)
2014-04-27 18:58 Mike Frysinger (vapier)
2014-03-15  0:47 Chris Reffett (creffett)
2014-01-08  6:46 Mike Frysinger (vapier)
2013-12-03  8:09 Mike Frysinger (vapier)
2013-09-13  0:51 Mike Frysinger (vapier)
2013-06-21 23:57 Mike Frysinger (vapier)
2013-06-21 23:56 Mike Frysinger (vapier)
2013-06-21 23:52 Mike Frysinger (vapier)
2013-05-21  2:57 Mike Frysinger (vapier)
2013-04-25 18:38 Mike Frysinger (vapier)
2013-03-31  2:17 Mike Frysinger (vapier)
2013-03-12 14:16 Mike Frysinger (vapier)
2013-03-11  0:13 Mike Frysinger (vapier)
2012-10-07  6:22 Mike Frysinger (vapier)
2012-08-20 19:45 Mike Frysinger (vapier)
2012-06-14 23:40 Samuli Suominen (ssuominen)
2012-06-14  0:11 Mike Frysinger (vapier)
2012-06-07  5:59 Mike Frysinger (vapier)
2012-05-11 14:22 Mike Frysinger (vapier)
2012-04-20 19:35 Mike Frysinger (vapier)
2012-04-16 14:40 Mike Frysinger (vapier)
2012-04-15 20:02 Mike Frysinger (vapier)
2012-03-23  2:33 Mike Frysinger (vapier)
2012-02-14 16:08 Mike Frysinger (vapier)
2012-02-14 16:01 Mike Frysinger (vapier)
2012-01-31  6:55 Ulrich Mueller (ulm)
2012-01-03  8:45 Justin Lecher (jlec)
2011-12-17  6:13 Mike Frysinger (vapier)
2011-12-17  4:55 Mike Frysinger (vapier)
2011-12-16 23:38 Mike Frysinger (vapier)
2011-12-14 17:36 Mike Frysinger (vapier)
2011-12-14 17:27 Mike Frysinger (vapier)
2011-12-02  3:27 Mike Frysinger (vapier)
2011-09-30 16:51 Mike Frysinger (vapier)
2011-09-29  2:32 Mike Frysinger (vapier)
2011-09-21 21:46 Michal Gorny (mgorny)
2011-09-12 20:44 Michal Gorny (mgorny)
2011-08-09  0:43 Mike Frysinger (vapier)
2011-08-08  2:01 Mike Frysinger (vapier)
2011-08-07 23:35 Mike Frysinger (vapier)
2011-07-20  5:46 Mike Frysinger (vapier)
2011-06-14 20:16 Petteri Raty (betelgeuse)
2011-04-18 15:09 Mike Frysinger (vapier)
2011-03-18 20:36 Mike Frysinger (vapier)
2011-02-25 21:58 Ulrich Mueller (ulm)
2011-01-09  2:16 Mike Frysinger (vapier)
2010-11-22  0:31 Mike Frysinger (vapier)
2010-10-17 21:35 Mike Frysinger (vapier)
2010-09-16 22:38 Mike Frysinger (vapier)
2010-08-19 21:32 Mike Frysinger (vapier)
2010-07-11 17:29 Petteri Raty (betelgeuse)
2010-07-10  9:52 Tristan Heaven (nyhm)
2010-07-10  6:02 Doug Goldstein (cardoe)
2010-06-23 21:24 Doug Goldstein (cardoe)
2010-05-20  2:21 Mike Frysinger (vapier)
2010-05-11 20:08 Michael Sterrett (mr_bones_)
2010-04-19 19:54 Mike Frysinger (vapier)
2010-03-23  3:40 Mike Frysinger (vapier)
2010-03-07  3:00 Mike Frysinger (vapier)
2010-03-07  2:55 Mike Frysinger (vapier)
2010-03-07  2:52 Mike Frysinger (vapier)
2010-03-02  0:52 Maciej Mrozowski (reavertm)
2010-02-26  5:33 Jonathan Callen (abcd)
2010-02-26  5:17 Mark Loeser (halcy0n)
2010-02-26  3:15 Jonathan Callen (abcd)
2010-02-17 17:10 Petteri Raty (betelgeuse)
2010-02-17  2:22 Maciej Mrozowski (reavertm)
2010-02-17  2:20 Maciej Mrozowski (reavertm)
2010-02-15  2:10 Mike Frysinger (vapier)
2010-01-28 22:00 Petteri Raty (betelgeuse)
2010-01-10 15:58 Tomas Chvatal (scarabeus)
2010-01-10 15:49 Tomas Chvatal (scarabeus)
2010-01-10  5:53 Mike Frysinger (vapier)
2010-01-03 19:57 Zac Medico (zmedico)
2009-12-19  0:01 Zac Medico (zmedico)
2009-12-11 20:31 Mike Frysinger (vapier)
2009-10-18  7:52 Fabian Groffen (grobian)
2009-09-24  2:49 Mike Frysinger (vapier)
2009-09-12 14:37 Fabian Groffen (grobian)
2009-03-01  8:06 Mike Frysinger (vapier)
2009-02-27  1:49 Mike Frysinger (vapier)
2009-02-21 23:28 Mike Frysinger (vapier)
2009-02-21  7:35 Mike Frysinger (vapier)
2009-02-18 20:17 Petteri Raty (betelgeuse)
2009-02-18 18:40 Michael Sterrett (mr_bones_)
2009-02-18  8:05 Michael Sterrett (mr_bones_)
2009-02-15 20:09 Fabian Groffen (grobian)
2009-02-07 10:57 Peter Volkov (pva)
2008-09-28  4:37 Michael Sterrett (mr_bones_)
2008-09-20 19:03 Mike Frysinger (vapier)
2008-09-20 18:58 Mike Frysinger (vapier)
2008-09-20 18:55 Mike Frysinger (vapier)
2008-09-20 18:45 Mike Frysinger (vapier)
2008-09-20 18:32 Mike Frysinger (vapier)
2008-08-17 22:21 Christian Faulhammer (opfer)
2008-04-05 22:38 Zac Medico (zmedico)
2008-03-01 21:59 Mike Frysinger (vapier)
2008-02-20 17:32 Mike Frysinger (vapier)
2008-02-20 12:36 Benedikt Boehm (hollow)
2008-02-15  7:43 Mike Frysinger (vapier)
2008-02-13 20:50 Chris Gianelloni (wolf31o2)
2008-02-07  4:17 Chris Gianelloni (wolf31o2)
2008-01-14  4:52 Mike Frysinger (vapier)
2007-11-20 22:32 Chris Gianelloni (wolf31o2)
2007-10-14 21:55 Mike Frysinger (vapier)
2007-10-10 20:34 Mike Frysinger (vapier)

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=E1NThZp-0003w8-87@stork.gentoo.org \
    --to=vapier@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