From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:prefix commit in: /
Date: Sun, 5 Apr 2015 09:15:28 +0000 (UTC) [thread overview]
Message-ID: <1428225228.eed711a2e330ae73978bd7612ae596a7b3f7adbb.grobian@gentoo> (raw)
commit: eed711a2e330ae73978bd7612ae596a7b3f7adbb
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Apr 5 09:13:48 2015 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Apr 5 09:13:48 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=eed711a2
Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix
NEWS | 11 +
RELEASE-NOTES | 121 ++
bin/bashrc-functions.sh | 2 +-
bin/chpathtool.py | 22 +-
bin/dispatch-conf | 68 +-
bin/eapi.sh | 114 +-
bin/ebuild | 7 +-
bin/ebuild-helpers/dohtml | 4 +
bin/ebuild.sh | 98 +-
bin/egencache | 38 +-
bin/emerge-webrsync | 4 +-
bin/etc-update | 158 ++-
bin/install-qa-check.d/05double-D | 9 +-
bin/install-qa-check.d/90world-writable | 27 +-
bin/install.py | 2 +-
bin/isolated-functions.sh | 89 +-
bin/misc-functions.sh | 71 +-
bin/phase-functions.sh | 15 +-
bin/phase-helpers.sh | 315 +++++-
bin/portageq | 27 +-
bin/quickpkg | 3 +-
bin/regenworld | 4 +-
bin/repoman | 43 +-
bin/save-ebuild-env.sh | 9 +-
bin/socks5-server.py | 227 ++++
cnf/dispatch-conf.conf | 2 +-
cnf/make.conf.example | 2 +-
cnf/make.globals | 3 +-
cnf/repo.postsync.d/example | 51 +
cnf/repos.conf | 1 +
cnf/sets/portage.conf | 12 +-
doc/config/sets.docbook | 47 +-
man/ebuild.5 | 28 +-
man/egencache.1 | 15 +-
man/emaint.1 | 71 +-
man/emerge.1 | 117 +-
man/make.conf.5 | 45 +-
man/portage.5 | 262 ++++-
man/repoman.1 | 2 +-
pym/_emerge/AbstractPollTask.py | 52 +-
pym/_emerge/Binpkg.py | 33 +-
pym/_emerge/BinpkgExtractorAsync.py | 25 +-
pym/_emerge/BinpkgFetcher.py | 13 +-
pym/_emerge/BinpkgPrefetcher.py | 2 +-
pym/_emerge/BinpkgVerifier.py | 6 +-
pym/_emerge/EbuildBinpkg.py | 9 +-
pym/_emerge/EbuildBuild.py | 36 +-
pym/_emerge/FakeVartree.py | 16 +-
pym/_emerge/Package.py | 135 ++-
pym/_emerge/Scheduler.py | 7 +-
pym/_emerge/actions.py | 1194 +++-----------------
pym/_emerge/clear_caches.py | 1 -
pym/_emerge/create_depgraph_params.py | 27 +
pym/_emerge/create_world_atom.py | 6 +-
pym/_emerge/depgraph.py | 780 ++++++++++---
pym/_emerge/help.py | 2 +-
pym/_emerge/is_valid_package_atom.py | 5 +-
pym/_emerge/main.py | 94 +-
pym/_emerge/resolver/DbapiProvidesIndex.py | 101 ++
pym/_emerge/resolver/output.py | 40 +-
pym/_emerge/resolver/output_helpers.py | 19 +-
pym/_emerge/resolver/package_tracker.py | 42 +-
pym/_emerge/resolver/slot_collision.py | 35 +-
pym/_emerge/search.py | 188 ++-
pym/_emerge/unmerge.py | 42 +-
pym/portage/__init__.py | 29 +-
pym/portage/_global_updates.py | 4 +-
pym/portage/_selinux.py | 14 +-
pym/portage/_sets/ProfilePackageSet.py | 35 +
pym/portage/_sets/__init__.py | 19 +-
pym/portage/_sets/files.py | 160 ++-
pym/portage/_sets/profiles.py | 28 +-
pym/portage/cache/fs_template.py | 25 +-
pym/portage/cache/index/IndexStreamIterator.py | 27 +
.../sync => portage/cache/index}/__init__.py | 2 +-
pym/portage/cache/index/pkg_desc_index.py | 60 +
pym/portage/const.py | 3 +
pym/portage/data.py | 134 ++-
pym/portage/dbapi/DummyTree.py | 16 +
pym/portage/dbapi/IndexedPortdb.py | 171 +++
pym/portage/dbapi/IndexedVardb.py | 114 ++
.../dbapi/_ContentsCaseSensitivityManager.py | 93 ++
pym/portage/dbapi/_VdbMetadataDelta.py | 153 +++
pym/portage/dbapi/__init__.py | 10 +-
pym/portage/dbapi/bintree.py | 898 ++++++++-------
pym/portage/dbapi/vartree.py | 416 ++++---
pym/portage/dbapi/virtual.py | 113 +-
pym/portage/dep/__init__.py | 69 +-
pym/portage/dep/_slot_operator.py | 13 +
pym/portage/dep/dep_check.py | 69 +-
pym/portage/dep/soname/SonameAtom.py | 72 ++
.../sync => portage/dep/soname}/__init__.py | 2 +-
pym/portage/dep/soname/multilib_category.py | 114 ++
pym/portage/dep/soname/parse.py | 47 +
pym/portage/dispatch_conf.py | 189 +++-
pym/portage/eapi.py | 2 +-
pym/portage/emaint/main.py | 33 +-
pym/portage/emaint/modules/binhost/binhost.py | 47 +-
pym/portage/emaint/modules/merges/merges.py | 15 +-
pym/portage/emaint/modules/sync/__init__.py | 55 +
pym/portage/emaint/modules/sync/sync.py | 289 +++++
pym/portage/exception.py | 1 +
pym/portage/locks.py | 11 +-
pym/portage/metadata.py | 208 ++++
pym/portage/{emaint => }/module.py | 40 +-
pym/portage/news.py | 15 +-
.../package/ebuild/_config/KeywordsManager.py | 7 +-
.../package/ebuild/_config/LocationsManager.py | 44 +-
pym/portage/package/ebuild/_config/MaskManager.py | 25 +-
pym/portage/package/ebuild/_config/UseManager.py | 116 +-
.../package/ebuild/_config/special_env_vars.py | 10 +-
pym/portage/package/ebuild/config.py | 195 +++-
pym/portage/package/ebuild/doebuild.py | 246 +++-
pym/portage/package/ebuild/fetch.py | 7 +-
pym/portage/package/ebuild/prepare_build_dirs.py | 9 +-
pym/portage/{emaint => }/progress.py | 0
pym/portage/repository/config.py | 121 +-
pym/portage/sync/__init__.py | 38 +
pym/portage/sync/config_checks.py | 72 ++
pym/portage/sync/controller.py | 321 ++++++
.../sync/getaddrinfo_validate.py | 0
pym/{repoman => portage/sync/modules}/__init__.py | 0
pym/portage/sync/modules/cvs/__init__.py | 45 +
pym/portage/sync/modules/cvs/cvs.py | 67 ++
pym/portage/sync/modules/git/__init__.py | 55 +
pym/portage/sync/modules/git/git.py | 86 ++
pym/portage/sync/modules/rsync/__init__.py | 28 +
pym/portage/sync/modules/rsync/rsync.py | 543 +++++++++
pym/portage/sync/modules/svn/__init__.py | 31 +
pym/portage/sync/modules/svn/svn.py | 89 ++
pym/portage/sync/modules/webrsync/__init__.py | 49 +
pym/portage/sync/modules/webrsync/webrsync.py | 66 ++
.../sync/old_tree_timestamp.py | 5 +-
pym/portage/sync/syncbase.py | 136 +++
pym/portage/tests/__init__.py | 4 +-
pym/portage/tests/dbapi/test_fakedbapi.py | 11 +-
pym/portage/tests/dbapi/test_portdb_cache.py | 18 +-
pym/portage/tests/dep/test_isvalidatom.py | 8 +-
.../tests/ebuild/test_use_expand_incremental.py | 132 +++
pym/portage/tests/emerge/test_config_protect.py | 292 +++++
pym/portage/tests/emerge/test_simple.py | 10 +-
pym/portage/tests/glsa/test_security_set.py | 5 +-
pym/portage/tests/lint/metadata.py | 11 +
pym/portage/tests/lint/test_compile_modules.py | 13 +
pym/portage/tests/resolver/ResolverPlayground.py | 46 +-
.../resolver/binpkg_multi_instance}/__init__.py | 2 +-
.../resolver/binpkg_multi_instance/__test__.py} | 2 +-
.../test_build_id_profile_format.py | 134 +++
.../binpkg_multi_instance/test_rebuilt_binaries.py | 101 ++
.../tests/resolver/soname}/__init__.py | 2 +-
.../tests/resolver/soname/__test__.py} | 2 +-
.../tests/resolver/soname/test_autounmask.py | 103 ++
pym/portage/tests/resolver/soname/test_depclean.py | 61 +
.../tests/resolver/soname/test_downgrade.py | 240 ++++
.../tests/resolver/soname/test_or_choices.py | 92 ++
.../tests/resolver/soname/test_reinstall.py | 87 ++
.../tests/resolver/soname/test_skip_update.py | 86 ++
.../soname/test_slot_conflict_reinstall.py | 342 ++++++
.../resolver/soname/test_slot_conflict_update.py | 117 ++
.../tests/resolver/soname/test_soname_provided.py | 78 ++
.../tests/resolver/soname/test_unsatisfiable.py | 71 ++
.../tests/resolver/soname/test_unsatisfied.py | 87 ++
pym/portage/tests/resolver/test_backtracking.py | 9 +-
pym/portage/tests/resolver/test_changed_deps.py | 120 ++
.../tests/resolver/test_onlydeps_circular.py | 51 +
pym/portage/tests/resolver/test_or_choices.py | 137 ++-
pym/portage/tests/resolver/test_package_tracker.py | 4 +-
.../tests/resolver/test_profile_default_eapi.py | 126 +++
.../tests/resolver/test_profile_package_set.py | 123 ++
..._slot_operator_update_probe_parent_downgrade.py | 68 ++
pym/portage/tests/resolver/test_virtual_slot.py | 75 ++
pym/portage/tests/resolver/test_with_test_deps.py | 44 +
pym/{_emerge => portage/tests}/sync/__init__.py | 2 +-
pym/portage/tests/sync/test_sync_local.py | 189 ++++
pym/portage/update.py | 4 +-
pym/portage/util/__init__.py | 111 +-
pym/portage/util/_dyn_libs/LinkageMapELF.py | 62 +-
pym/portage/util/_dyn_libs/NeededEntry.py | 82 ++
pym/portage/util/_dyn_libs/soname_deps.py | 138 +++
pym/portage/util/compression_probe.py | 79 ++
pym/portage/util/cpuinfo.py | 18 +
pym/{_emerge/sync => portage/util/elf}/__init__.py | 2 +-
pym/portage/util/elf/constants.py | 45 +
pym/portage/util/elf/header.py | 65 ++
.../sync => portage/util/endian}/__init__.py | 2 +-
pym/portage/util/endian/decode.py | 48 +
pym/portage/util/iterators/MultiIterGroupBy.py | 94 ++
.../sync => portage/util/iterators}/__init__.py | 2 +-
pym/portage/util/movefile.py | 2 +-
pym/portage/util/path.py | 48 +
pym/portage/util/socks5.py | 81 ++
pym/portage/util/writeable_check.py | 2 +-
pym/portage/versions.py | 28 +-
pym/repoman/check_missingslot.py | 31 +
pym/repoman/utilities.py | 7 +-
setup.py | 27 +-
196 files changed, 12504 insertions(+), 2861 deletions(-)
diff --cc bin/bashrc-functions.sh
index 1a92738,cc02546..daa00d2
--- a/bin/bashrc-functions.sh
+++ b/bin/bashrc-functions.sh
@@@ -1,12 -1,7 +1,12 @@@
-#!/bin/bash
+#!@PORTAGE_BASH@
- # Copyright 1999-2013 Gentoo Foundation
+ # Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+portageq() {
+ PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}}\
+ "${PORTAGE_PYTHON:-@PREFIX_PORTAGE_PYTHON@}" "${PORTAGE_BIN_PATH}/portageq" "$@"
+}
+
register_die_hook() {
local x
for x in $* ; do
diff --cc bin/dispatch-conf
index 286d821,678a66d..4215e5b
--- a/bin/dispatch-conf
+++ b/bin/dispatch-conf
@@@ -21,11 -26,10 +26,11 @@@ if osp.isfile(osp.join(osp.dirname(osp.
sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
import portage
portage._internal_caller = True
- from portage import os
- from portage import _unicode_decode
- from portage.dispatch_conf import diffstatusoutput
+ from portage import os, shutil
+ from portage import _encodings, _unicode_decode
+ from portage.dispatch_conf import diffstatusoutput, diff_mixed_wrapper
from portage.process import find_binary, spawn
+from portage.const import EPREFIX
FIND_EXTANT_CONFIGS = "find '%s' %s -name '._cfg????_%s' ! -name '.*~' ! -iname '.*.bak' -print"
DIFF_CONTENTS = "diff -Nu '%s' '%s'"
diff --cc bin/ebuild-helpers/dohtml
index 70cb1f4,0478e49..bf1f0fe
--- a/bin/ebuild-helpers/dohtml
+++ b/bin/ebuild-helpers/dohtml
@@@ -2,10 -2,14 +2,14 @@@
# Copyright 2009-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh
+source "${PORTAGE_BIN_PATH:-@PORTAGE_BASE@/bin}"/isolated-functions.sh
+ if ___eapi_has_dohtml_deprecated; then
+ eqawarn "'${0##*/}' is deprecated in EAPI '$EAPI'"
+ fi
+
-PORTAGE_BIN_PATH=${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}
-PORTAGE_PYM_PATH=${PORTAGE_PYM_PATH:-/usr/lib/portage/pym}
+PORTAGE_BIN_PATH=${PORTAGE_BIN_PATH:-@PORTAGE_BASE@/bin}
+PORTAGE_PYM_PATH=${PORTAGE_PYM_PATH:-@PORTAGE_BASE@/pym}
# Use safe cwd, avoiding unsafe import for bug #469338.
export __PORTAGE_HELPER_CWD=${PWD}
cd "${PORTAGE_PYM_PATH}"
diff --cc bin/egencache
index e2f57a5,f97432f..def4837
--- a/bin/egencache
+++ b/bin/egencache
@@@ -57,8 -58,7 +58,8 @@@ from portage.util._async.run_main_sched
from portage.util._eventloop.global_event_loop import global_event_loop
from portage import cpv_getkey
from portage.dep import Atom, isjustname
- from portage.versions import pkgsplit, vercmp
+ from portage.versions import pkgsplit, vercmp, _pkg_str
+from portage.const import EPREFIX
try:
from xml.etree import ElementTree
diff --cc bin/install-qa-check.d/90world-writable
index 635612d,820683b..bb9b075
--- a/bin/install-qa-check.d/90world-writable
+++ b/bin/install-qa-check.d/90world-writable
@@@ -2,23 -2,34 +2,36 @@@
world_writable_check() {
# Now we look for all world writable files.
- local unsafe_files=$(find "${ED}" -type f -perm -2 | sed -e "s:^${ED}:/:")
+ # PREFIX LOCAL: keep offset prefix in the reported files
- local unsafe_files=$(find "${ED}" -type f -perm -2 | sed -e "s:^${D}:- :")
++ local unsafe_files=$(find "${ED}" -type f -perm -2 | sed -e "s:^${D}:/:")
+ # END PREFIX LOCAL
+ local OLDIFS x prev_shopts=$-
+
+ OLDIFS=$IFS
+ IFS=$'\n'
+ set -f
+
if [[ -n ${unsafe_files} ]] ; then
- __vecho "QA Security Notice: world writable file(s):"
- __vecho "${unsafe_files}"
- __vecho "- This may or may not be a security problem, most of the time it is one."
- __vecho "- Please double check that $PF really needs a world writeable bit and file bugs accordingly."
- sleep 1
+ eqawarn "QA Security Notice: world writable file(s):"
+
+ eqatag -v world-writable $unsafe_files
+
+ eqawarn "This may or may not be a security problem, most of the time it is one."
+ eqawarn "Please double check that $PF really needs a world writeable bit and file bugs accordingly."
+ eqawarn
fi
- local unsafe_files=$(find "${ED}" -type f '(' -perm -2002 -o -perm -4002 ')' | sed -e "s:^${ED}:/:")
+ local unsafe_files=$(find "${ED}" -type f '(' -perm -2002 -o -perm -4002 ')' | sed -e "s:^${D}:/:")
if [[ -n ${unsafe_files} ]] ; then
eqawarn "QA Notice: Unsafe files detected (set*id and world writable)"
- eqawarn "${unsafe_files}"
+
+ eqatag -v world-writable-setid $unsafe_files
+
die "Unsafe files found in \${D}. Portage will not install them."
fi
+
+ IFS=$OLDIFS
+ [[ ${prev_shopts} == *f* ]] || set +f
}
world_writable_check
diff --cc bin/misc-functions.sh
index 5b8e872,e08c228..4928575
mode 100644,100755..100644
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -172,19 -168,21 +172,23 @@@ install_qa_check()
local EPREFIX= ED=${D}
fi
- cd "${ED}" || die "cd failed"
+ # PREFIX LOCAL: ED needs not to exist, whereas D does
+ cd "${D}" || die "cd failed"
+ # END PREFIX LOCAL
- # Run QA checks from install-qa-check.d.
- # Note: checks need to be run *before* stripping.
- local f
- # TODO: handle nullglob-like
- for f in "${PORTAGE_BIN_PATH}"/install-qa-check.d/*; do
- # Run in a subshell to treat it like external script,
- # but use 'source' to pass all variables through.
- (
- source "${f}" || eerror "Post-install QA check ${f##*/} failed to run"
+ # Collect the paths for QA checks, highest prio first.
+ paths=(
+ # sysadmin overrides
+ "${PORTAGE_OVERRIDE_EPREFIX}"/usr/local/lib/install-qa-check.d
+ # system-wide package installs
+ "${PORTAGE_OVERRIDE_EPREFIX}"/usr/lib/install-qa-check.d
+ )
+
+ # Now repo-specific checks.
+ # (yes, PORTAGE_ECLASS_LOCATIONS contains repo paths...)
+ for d in "${PORTAGE_ECLASS_LOCATIONS[@]}"; do
+ paths+=(
+ "${d}"/metadata/install-qa-check.d
)
done
diff --cc bin/phase-functions.sh
index 2dece5a,2743e27..f447fca
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@@ -31,8 -31,8 +31,8 @@@ PORTAGE_READONLY_VARS="D EBUILD EBUILD_
PORTAGE_TMPDIR PORTAGE_UPDATE_ENV PORTAGE_USERNAME \
PORTAGE_VERBOSE PORTAGE_WORKDIR_MODE PORTAGE_XATTR_EXCLUDE \
PORTDIR \
- PROFILE_PATHS REPLACING_VERSIONS REPLACED_BY_VERSION T WORKDIR \
+ REPLACING_VERSIONS REPLACED_BY_VERSION T WORKDIR \
- __PORTAGE_HELPER __PORTAGE_TEST_HARDLINK_LOCKS"
+ __PORTAGE_HELPER __PORTAGE_TEST_HARDLINK_LOCKS ED EROOT"
PORTAGE_SAVED_READONLY_VARS="A CATEGORY P PF PN PR PV PVR"
diff --cc cnf/make.globals
index a57a603,dd99618..880fed5
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@@ -151,24 -122,11 +151,25 @@@ PORTAGE_ELOG_MAILFROM="@portageuser@@lo
# Signing command used by repoman
PORTAGE_GPG_SIGNING_COMMAND="gpg --sign --digest-algo SHA256 --clearsign --yes --default-key \"\${PORTAGE_GPG_KEY}\" --homedir \"\${PORTAGE_GPG_DIR}\" \"\${FILE}\""
+ # btrfs.* attributes are irrelevant, see bug #527636.
# Security labels are special, see bug #461868.
# system.nfs4_acl attributes are irrelevant, see bug #475496.
- PORTAGE_XATTR_EXCLUDE="security.* system.nfs4_acl"
+ PORTAGE_XATTR_EXCLUDE="btrfs.* security.* system.nfs4_acl"
+# Writeable paths for Mac OS X seatbelt sandbox
+#
+# If path ends in a slash (/), access will recursively be allowed to directory
+# contents (using a regex), not the directory itself. Without a slash, access
+# to the directory or file itself will be allowed (using a literal), so it can
+# be created, removed and changed. If both is needed, the directory needs to be
+# given twice, once with and once without the slash. Obviously this only makes
+# sense for directories, not files.
+#
+# An empty value for either variable will disable all restrictions on the
+# corresponding operation.
+MACOSSANDBOX_PATHS="/dev/fd/ /private/tmp/ /private/var/tmp/ @@PORTAGE_BUILDDIR@@/ @@PORTAGE_ACTUAL_DISTDIR@@/"
+MACOSSANDBOX_PATHS_CONTENT_ONLY="/dev/null /dev/dtracehelper /dev/tty /private/var/run/syslog"
+
# *****************************
# ** DO NOT EDIT THIS FILE **
# ***************************************************
diff --cc cnf/repos.conf
index 18c611a,1ca98ca..4433546
--- a/cnf/repos.conf
+++ b/cnf/repos.conf
@@@ -1,7 -1,8 +1,8 @@@
[DEFAULT]
-main-repo = gentoo
+main-repo = gentoo_prefix
-[gentoo]
-location = /usr/portage
+[gentoo_prefix]
+location = @PORTAGE_EPREFIX@/usr/portage
sync-type = rsync
-sync-uri = rsync://rsync.gentoo.org/gentoo-portage
+sync-uri = rsync://rsync.prefix.bitzolder.nl/gentoo-portage-prefix
+ auto-sync = yes
diff --cc pym/_emerge/Package.py
index bdf3b23,2c1a116..1570f3d
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@@ -13,12 -13,12 +13,13 @@@ from portage.cache.mappings import slot
from portage.const import EBUILD_PHASES
from portage.dep import Atom, check_required_use, use_reduce, \
paren_enclose, _slot_separator, _repo_separator
+ from portage.dep.soname.parse import parse_soname_deps
from portage.versions import _pkg_str, _unknown_repo
from portage.eapi import _get_eapi_attrs, eapi_has_use_aliases
- from portage.exception import InvalidDependString
+ from portage.exception import InvalidData, InvalidDependString
from portage.localization import _
from _emerge.Task import Task
+from portage.const import EPREFIX
if sys.hexversion >= 0x3000000:
basestring = str
@@@ -40,11 -41,12 +42,12 @@@ class Package(Task)
"_validated_atoms", "_visible")
metadata_keys = [
- "BUILD_TIME", "CHOST", "COUNTER", "DEPEND", "EAPI",
- "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
- "LICENSE", "PDEPEND", "PROVIDE", "RDEPEND",
- "repository", "PROPERTIES", "RESTRICT", "SLOT", "USE",
- "_mtime_", "DEFINED_PHASES", "REQUIRED_USE", "EPREFIX"]
+ "BUILD_ID", "BUILD_TIME", "CHOST", "COUNTER", "DEFINED_PHASES",
+ "DEPEND", "EAPI", "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
+ "LICENSE", "MD5", "PDEPEND", "PROVIDE", "PROVIDES",
+ "RDEPEND", "repository", "REQUIRED_USE",
+ "PROPERTIES", "REQUIRES", "RESTRICT", "SIZE",
- "SLOT", "USE", "_mtime_"]
++ "SLOT", "USE", "_mtime_", "EPREFIX"]
_dep_keys = ('DEPEND', 'HDEPEND', 'PDEPEND', 'RDEPEND')
_buildtime_keys = ('DEPEND', 'HDEPEND')
diff --cc pym/_emerge/main.py
index a5de7c3,a5dafa3..0bacd68
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@@ -19,8 -19,8 +19,9 @@@ portage.proxy.lazyimport.lazyimport(glo
'_emerge.is_valid_package_atom:insert_category_into_atom'
)
from portage import os
+from portage.const import EPREFIX
from portage.util._argparse import ArgumentParser
+ from portage.sync import _SUBMODULE_PATH_MAP
if sys.hexversion >= 0x3000000:
long = int
diff --cc pym/portage/data.py
index f4bbb44,2fd287d..fa89242
--- a/pym/portage/data.py
+++ b/pym/portage/data.py
@@@ -91,52 -147,38 +151,50 @@@ def _get_global(k)
#Discover the uid and gid of the portage user/group
keyerror = False
try:
- portage_uid = pwd.getpwnam(_get_global('_portage_username')).pw_uid
+ username = str(_get_global('_portage_username'))
+ portage_uid = pwd.getpwnam(username).pw_uid
except KeyError:
- keyerror = True
- portage_uid = 0
+ # PREFIX LOCAL: some sysadmins are insane, bug #344307
+ if username.isdigit():
+ portage_uid = int(username)
+ else:
+ keyerror = True
+ portage_uid = 0
+ # END PREFIX LOCAL
try:
- portage_gid = grp.getgrnam(_get_global('_portage_grpname')).gr_gid
+ grpname = str(_get_global('_portage_grpname'))
+ portage_gid = grp.getgrnam(grpname).gr_gid
except KeyError:
- keyerror = True
- portage_gid = 0
+ # PREFIX LOCAL: some sysadmins are insane, bug #344307
+ if grpname.isdigit():
+ portage_gid = int(grpname)
+ else:
+ keyerror = True
+ portage_gid = 0
+ # END PREFIX LOCAL
- if secpass < 1 and portage_gid in os.getgroups():
- secpass = 1
-
# Suppress this error message if both PORTAGE_GRPNAME and
# PORTAGE_USERNAME are set to "root", for things like
# Android (see bug #454060).
if keyerror and not (_get_global('_portage_username') == "root" and
_get_global('_portage_grpname') == "root"):
+ # PREFIX LOCAL: we need to fix this one day to distinguish prefix vs non-prefix
+ writemsg(colorize("BAD",
+ _("portage: '%s' user or '%s' group missing." % (_get_global('_portage_username'), _get_global('_portage_grpname')))) + "\n", noiselevel=-1)
writemsg(colorize("BAD",
- _("portage: 'portage' user or group missing.")) + "\n", noiselevel=-1)
- writemsg(_(
- " For the defaults, line 1 goes into passwd, "
- "and 2 into group.\n"), noiselevel=-1)
- writemsg(colorize("GOOD",
- " portage:x:250:250:portage:/var/tmp/portage:/bin/false") \
- + "\n", noiselevel=-1)
- writemsg(colorize("GOOD", " portage::250:portage") + "\n",
- noiselevel=-1)
+ _(" In Prefix Portage this is quite dramatic")) + "\n", noiselevel=-1)
+ writemsg(colorize("BAD",
+ _(" since it means you have thrown away yourself.")) + "\n", noiselevel=-1)
+ writemsg(colorize("BAD",
+ _(" Re-add yourself or re-bootstrap Gentoo Prefix.")) + "\n", noiselevel=-1)
+ # END PREFIX LOCAL
portage_group_warning()
+ globals()['portage_gid'] = portage_gid
_initialized_globals.add('portage_gid')
+ globals()['portage_uid'] = portage_uid
_initialized_globals.add('portage_uid')
- _initialized_globals.add('secpass')
if k == 'portage_gid':
return portage_gid
@@@ -206,28 -244,24 +260,29 @@@
except OSError:
pass
else:
- if k == '_portage_grpname':
- try:
- grp_struct = grp.getgrgid(eroot_st.st_gid)
- except KeyError:
- v = eroot_st.st_gid
- else:
- v = grp_struct.gr_name
- else:
- try:
- pwd_struct = pwd.getpwuid(eroot_st.st_uid)
- except KeyError:
- v = eroot_st.st_uid
+ if _unprivileged_mode(eroot_or_parent, eroot_st):
+ if k == '_portage_grpname':
+ try:
+ grp_struct = grp.getgrgid(eroot_st.st_gid)
+ except KeyError:
+ pass
+ else:
+ v = grp_struct.gr_name
else:
- v = pwd_struct.pw_name
+ try:
+ pwd_struct = pwd.getpwuid(eroot_st.st_uid)
+ except KeyError:
+ pass
+ else:
+ v = pwd_struct.pw_name
if v is None:
- v = 'portage'
+ # PREFIX LOCAL: use var iso hardwired 'portage'
+ if k == '_portage_grpname':
+ v = PORTAGE_GROUPNAME
+ else:
+ v = PORTAGE_USERNAME
+ # END PREFIX LOCAL
else:
raise AssertionError('unknown name: %s' % k)
diff --cc pym/portage/dbapi/bintree.py
index 45e8614,b37f388..e3e50e0
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@@ -70,18 -70,26 +71,26 @@@ class bindbapi(fakedbapi)
_known_keys = frozenset(list(fakedbapi._known_keys) + \
["CHOST", "repository", "USE"])
def __init__(self, mybintree=None, **kwargs):
- fakedbapi.__init__(self, **kwargs)
+ # Always enable multi_instance mode for bindbapi indexing. This
+ # does not affect the local PKGDIR file layout, since that is
+ # controlled independently by FEATURES=binpkg-multi-instance.
+ # The multi_instance mode is useful for the following reasons:
+ # * binary packages with the same cpv from multiple binhosts
+ # can be considered simultaneously
+ # * if binpkg-multi-instance is disabled, it's still possible
+ # to properly access a PKGDIR which has binpkg-multi-instance
+ # layout (or mixed layout)
+ fakedbapi.__init__(self, exclusive_slots=False,
+ multi_instance=True, **kwargs)
self.bintree = mybintree
self.move_ent = mybintree.move_ent
- self.cpvdict={}
- self.cpdict={}
# Selectively cache metadata in order to optimize dep matching.
self._aux_cache_keys = set(
- ["BUILD_TIME", "CHOST", "DEPEND", "EAPI",
- "HDEPEND", "IUSE", "KEYWORDS",
- "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE",
- "RDEPEND", "repository", "RESTRICT", "SLOT", "USE", "DEFINED_PHASES",
- "EPREFIX"
+ ["BUILD_ID", "BUILD_TIME", "CHOST", "DEFINED_PHASES",
+ "DEPEND", "EAPI", "HDEPEND", "IUSE", "KEYWORDS",
+ "LICENSE", "MD5", "PDEPEND", "PROPERTIES", "PROVIDE",
+ "PROVIDES", "RDEPEND", "repository", "REQUIRES", "RESTRICT",
- "SIZE", "SLOT", "USE", "_mtime_"
++ "SIZE", "SLOT", "USE", "_mtime_", "EPREFIX"
])
self._aux_cache_slot_dict = slot_dict_class(self._aux_cache_keys)
self._aux_cache = {}
@@@ -306,12 -311,14 +312,14 @@@ class binarytree(object)
self._pkgindex_hashes = ["MD5","SHA1"]
self._pkgindex_file = os.path.join(self.pkgdir, "Packages")
self._pkgindex_keys = self.dbapi._aux_cache_keys.copy()
- self._pkgindex_keys.update(["CPV", "MTIME", "SIZE"])
+ self._pkgindex_keys.update(["CPV", "SIZE"])
self._pkgindex_aux_keys = \
- ["BUILD_TIME", "CHOST", "DEPEND", "DESCRIPTION", "EAPI",
- "HDEPEND", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND", "PROPERTIES",
- "PROVIDE", "RESTRICT", "RDEPEND", "repository", "SLOT", "USE", "DEFINED_PHASES",
- "BASE_URI", "EPREFIX"]
+ ["BASE_URI", "BUILD_ID", "BUILD_TIME", "CHOST",
+ "DEFINED_PHASES", "DEPEND", "DESCRIPTION", "EAPI",
+ "HDEPEND", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND",
+ "PKGINDEX_URI", "PROPERTIES", "PROVIDE", "PROVIDES",
+ "RDEPEND", "repository", "REQUIRES", "RESTRICT",
- "SIZE", "SLOT", "USE"]
++ "SIZE", "SLOT", "USE", "EPREFIX"]
self._pkgindex_aux_keys = list(self._pkgindex_aux_keys)
self._pkgindex_use_evaluated_keys = \
("DEPEND", "HDEPEND", "LICENSE", "RDEPEND",
@@@ -322,9 -329,9 +330,10 @@@
"CONFIG_PROTECT", "CONFIG_PROTECT_MASK", "FEATURES",
"GENTOO_MIRRORS", "INSTALL_MASK", "IUSE_IMPLICIT", "USE",
"USE_EXPAND", "USE_EXPAND_HIDDEN", "USE_EXPAND_IMPLICIT",
- "USE_EXPAND_UNPREFIXED"])
+ "USE_EXPAND_UNPREFIXED",
+ "EPREFIX"])
self._pkgindex_default_pkg_data = {
+ "BUILD_ID" : "",
"BUILD_TIME" : "",
"DEFINED_PHASES" : "",
"DEPEND" : "",
diff --cc pym/portage/dbapi/vartree.py
index a0881a2,277c2f1..a037200
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@@ -1077,8 -1097,8 +1112,11 @@@ class vardbapi(dbapi)
# Empty path is a code used to represent empty contents.
self._add_path("", pkg_hash)
- for x in contents:
- self._add_path(x[eroot_len:], pkg_hash)
+ for x in db._contents.keys():
- self._add_path(x[eroot_len:], pkg_hash)
++ path = x[eroot_len:]
++ if "case-insensitive-fs" in self._vardb.settings.features:
++ path = path.lower()
++ self._add_path(patch, pkg_hash)
self._vardb._aux_cache["modified"].add(cpv)
@@@ -1259,14 -1279,16 +1297,18 @@@
continue
if is_basename:
- for p in dblink(cpv).getcontents():
+ for p in dblink(cpv)._contents.keys():
+ if case_insensitive:
+ p = p.lower()
if os.path.basename(p) == name:
- owners.append((cpv, p[len(root):]))
+ owners.append((cpv, dblink(cpv).
+ _contents.unmap_key(
+ p)[len(root):]))
else:
- if dblink(cpv).isowner(path):
- owners.append((cpv, path))
+ key = dblink(cpv)._match_contents(path)
+ if key is not False:
+ owners.append(
+ (cpv, key[len(root):]))
except StopIteration:
path_iter.append(path)
@@@ -1314,14 -1336,16 +1356,18 @@@
dblnk = self._vardb._dblink(cpv)
for path, name, is_basename in path_info_list:
if is_basename:
- for p in dblnk.getcontents():
+ for p in dblnk._contents.keys():
+ if case_insensitive:
+ p = p.lower()
if os.path.basename(p) == name:
- search_pkg.results.append((dblnk, p[len(root):]))
+ search_pkg.results.append((dblnk,
+ dblnk._contents.unmap_key(
+ p)[len(root):]))
else:
- if dblnk.isowner(path):
- search_pkg.results.append((dblnk, path))
+ key = dblnk._match_contents(path)
+ if key is not False:
+ search_pkg.results.append(
+ (dblnk, key[len(root):]))
search_pkg.complete = True
return False
@@@ -2795,24 -2828,18 +2850,26 @@@ class dblink(object)
os_filename_arg.path.join(destroot,
filename.lstrip(os_filename_arg.path.sep)))
+ pkgfiles = self.getcontents()
+
+ preserve_case = None
if "case-insensitive-fs" in self.settings.features:
destfile = destfile.lower()
-
- if self._contents.contains(destfile):
- return self._contents.unmap_key(destfile)
-
- if self.getcontents():
+ preserve_case = dict((k.lower(), k) for k in pkgfiles)
+ pkgfiles = dict((k.lower(), v) for k, v in pkgfiles.items())
+
+ if pkgfiles and destfile in pkgfiles:
+ if preserve_case is not None:
+ return preserve_case[destfile]
+ return destfile
++ #if self._contents.contains(destfile):
++ # return self._contents.unmap_key(destfile)
+ if pkgfiles:
basename = os_filename_arg.path.basename(destfile)
if self._contents_basenames is None:
try:
- for x in pkgfiles:
- for x in self._contents.keys():
++ for x in pkgfiles):
_unicode_encode(x,
encoding=_encodings['merge'],
errors='strict')
@@@ -2897,10 -2924,8 +2954,12 @@@
if p_path_list:
for p_path in p_path_list:
x = os_filename_arg.path.join(p_path, basename)
- if self._contents.contains(x):
- return self._contents.unmap_key(x)
+ if x in pkgfiles:
+ if preserve_case is not None:
+ return preserve_case[x]
+ return x
++ #if self._contents.contains(x):
++ # return self._contents.unmap_key(x)
return False
diff --cc pym/portage/package/ebuild/config.py
index 6e578a9,3a4007b..18e95ff
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@@ -834,40 -857,38 +857,44 @@@ class config(object)
"PORTAGE_INST_UID": "0",
}
- eroot_or_parent = first_existing(eroot)
- unprivileged = False
- try:
- eroot_st = os.stat(eroot_or_parent)
- except OSError:
- pass
- else:
-
- if portage.data._unprivileged_mode(
- eroot_or_parent, eroot_st):
- unprivileged = True
-
- default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
- default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
-
- if "PORTAGE_USERNAME" not in self:
- try:
- pwd_struct = pwd.getpwuid(eroot_st.st_uid)
- except KeyError:
- pass
- else:
- self["PORTAGE_USERNAME"] = pwd_struct.pw_name
- self.backup_changes("PORTAGE_USERNAME")
-
- if "PORTAGE_GRPNAME" not in self:
- try:
- grp_struct = grp.getgrgid(eroot_st.st_gid)
- except KeyError:
- pass
- else:
- self["PORTAGE_GRPNAME"] = grp_struct.gr_name
- self.backup_changes("PORTAGE_GRPNAME")
+ # PREFIX LOCAL: inventing UID/GID based on a path is a very
+ # bad idea, it breaks almost everything since group ids
+ # don't have to match, when a user has many
+ # This in particularly breaks the configure-set portage
+ # group and user (in portage/data.py)
- #if eprefix:
- # # For prefix environments, default to the UID and GID of
- # # the top-level EROOT directory.
- # try:
- # eroot_st = os.stat(eroot)
- # except OSError:
- # pass
- # else:
- # default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
- # default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
-
- # if "PORTAGE_USERNAME" not in self:
- # try:
- # pwd_struct = pwd.getpwuid(eroot_st.st_uid)
- # except KeyError:
- # pass
- # else:
- # self["PORTAGE_USERNAME"] = pwd_struct.pw_name
- # self.backup_changes("PORTAGE_USERNAME")
-
- # if "PORTAGE_GRPNAME" not in self:
- # try:
- # grp_struct = grp.getgrgid(eroot_st.st_gid)
- # except KeyError:
- # pass
- # else:
- # self["PORTAGE_GRPNAME"] = grp_struct.gr_name
- # self.backup_changes("PORTAGE_GRPNAME")
++# eroot_or_parent = first_existing(eroot)
++# unprivileged = False
++# try:
++# eroot_st = os.stat(eroot_or_parent)
++# except OSError:
++# pass
++# else:
++#
++# if portage.data._unprivileged_mode(
++# eroot_or_parent, eroot_st):
++# unprivileged = True
++#
++# default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
++# default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
++#
++# if "PORTAGE_USERNAME" not in self:
++# try:
++# pwd_struct = pwd.getpwuid(eroot_st.st_uid)
++# except KeyError:
++# pass
++# else:
++# self["PORTAGE_USERNAME"] = pwd_struct.pw_name
++# self.backup_changes("PORTAGE_USERNAME")
++#
++# if "PORTAGE_GRPNAME" not in self:
++# try:
++# grp_struct = grp.getgrgid(eroot_st.st_gid)
++# except KeyError:
++# pass
++# else:
++# self["PORTAGE_GRPNAME"] = grp_struct.gr_name
++# self.backup_changes("PORTAGE_GRPNAME")
+ # END PREFIX LOCAL
for var, default_val in default_inst_ids.items():
try:
diff --cc pym/portage/util/_dyn_libs/LinkageMapELF.py
index e4f8ee8,c44666a..c78f397
--- a/pym/portage/util/_dyn_libs/LinkageMapELF.py
+++ b/pym/portage/util/_dyn_libs/LinkageMapELF.py
@@@ -16,9 -16,33 +16,35 @@@ from portage.localization import
from portage.util import getlibpaths
from portage.util import grabfile
from portage.util import normalize_path
+ from portage.util import varexpand
from portage.util import writemsg_level
+ from portage.util._dyn_libs.NeededEntry import NeededEntry
+from portage.const import EPREFIX
+ # Map ELF e_machine values from NEEDED.ELF.2 to approximate multilib
+ # categories. This approximation will produce incorrect results on x32
+ # and mips systems, but the result is not worse than using the raw
+ # e_machine value which was used by earlier versions of portage.
+ _approx_multilib_categories = {
+ "386": "x86_32",
+ "68K": "m68k_32",
+ "AARCH64": "arm_64",
+ "ALPHA": "alpha_64",
+ "ARM": "arm_32",
+ "IA_64": "ia_64",
+ "MIPS": "mips_o32",
+ "PARISC": "hppa_64",
+ "PPC": "ppc_32",
+ "PPC64": "ppc_64",
+ "S390": "s390_64",
+ "SH": "sh_32",
+ "SPARC": "sparc_32",
+ "SPARC32PLUS": "sparc_32",
+ "SPARCV9": "sparc_64",
+ "X86_64": "x86_64",
+ }
++>>>>>>> overlays-gentoo-org/master
+
class LinkageMapELF(object):
"""Models dynamic linker dependencies."""
next reply other threads:[~2015-04-05 9:15 UTC|newest]
Thread overview: 195+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-05 9:15 Fabian Groffen [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-02-25 9:40 [gentoo-commits] proj/portage:prefix commit in: / Fabian Groffen
2024-02-22 7:27 Fabian Groffen
2024-01-18 10:22 Fabian Groffen
2024-01-18 9:36 Fabian Groffen
2023-12-03 10:10 Fabian Groffen
2023-12-03 9:54 Fabian Groffen
2023-12-03 9:54 Fabian Groffen
2023-12-03 9:54 Fabian Groffen
2023-11-24 20:18 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-06-22 8:47 Fabian Groffen
2023-06-17 9:04 Fabian Groffen
2023-06-17 8:41 Fabian Groffen
2022-07-28 17:38 Fabian Groffen
2022-07-27 19:20 Fabian Groffen
2022-07-26 19:39 Fabian Groffen
2022-07-25 15:20 Fabian Groffen
2022-07-24 19:27 Fabian Groffen
2022-07-24 14:01 Fabian Groffen
2022-07-24 9:45 Fabian Groffen
2022-01-14 10:40 Fabian Groffen
2022-01-14 10:32 Fabian Groffen
2021-07-06 7:10 Fabian Groffen
2021-04-16 13:37 Fabian Groffen
2021-01-24 9:02 Fabian Groffen
2021-01-04 10:48 Fabian Groffen
2020-12-07 17:28 Fabian Groffen
2020-12-07 16:46 Fabian Groffen
2020-11-23 7:48 Fabian Groffen
2020-11-22 11:15 Fabian Groffen
2020-09-26 11:29 Fabian Groffen
2020-08-02 12:33 Fabian Groffen
2020-06-02 18:55 Fabian Groffen
2020-01-08 19:14 Fabian Groffen
2019-07-01 13:11 Fabian Groffen
2019-05-30 9:20 Fabian Groffen
2019-02-28 12:31 Fabian Groffen
2019-01-11 10:19 Fabian Groffen
2019-01-07 10:22 Fabian Groffen
2018-12-23 11:14 Fabian Groffen
2018-12-12 18:54 Fabian Groffen
2018-08-04 6:56 Fabian Groffen
2018-06-25 8:34 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-05-28 15:24 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-18 19:46 Fabian Groffen
2017-12-12 8:19 Fabian Groffen
2017-10-29 14:51 Fabian Groffen
2017-10-03 7:32 Fabian Groffen
2017-09-22 10:08 Fabian Groffen
2017-08-21 13:27 Fabian Groffen
2017-08-13 7:21 Fabian Groffen
2017-05-23 13:34 Fabian Groffen
2017-03-25 9:12 Fabian Groffen
2017-03-24 19:09 Fabian Groffen
2017-03-24 7:43 Fabian Groffen
2017-03-23 17:46 Fabian Groffen
2017-03-23 17:32 Fabian Groffen
2017-03-23 17:23 Fabian Groffen
2017-03-23 15:38 Fabian Groffen
2017-03-17 8:25 Fabian Groffen
2017-03-02 8:48 Fabian Groffen
2017-03-02 8:18 Fabian Groffen
2017-02-23 14:05 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2016-03-20 19:31 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2015-06-20 7:12 Fabian Groffen
2015-06-09 18:30 Fabian Groffen
2015-06-09 18:01 Fabian Groffen
2015-06-04 19:47 Fabian Groffen
2014-11-12 17:31 Fabian Groffen
2014-10-02 18:48 Fabian Groffen
2014-09-28 17:52 Fabian Groffen
2014-05-06 19:32 Fabian Groffen
2014-05-06 19:18 Fabian Groffen
2014-04-22 19:52 Fabian Groffen
2014-02-06 21:09 Fabian Groffen
2014-01-06 9:47 Fabian Groffen
2013-09-24 17:29 Fabian Groffen
2013-09-20 17:59 Fabian Groffen
2013-09-18 18:34 Fabian Groffen
2013-09-13 18:02 Fabian Groffen
2013-08-10 20:54 Fabian Groffen
2013-07-10 5:31 Fabian Groffen
2013-07-08 19:32 Fabian Groffen
2013-06-29 5:41 Fabian Groffen
2013-06-27 17:20 Fabian Groffen
2013-06-12 9:02 Fabian Groffen
2013-06-09 15:53 Fabian Groffen
2013-05-04 18:55 Fabian Groffen
2013-04-02 16:57 Fabian Groffen
2013-03-31 19:03 Fabian Groffen
2013-03-31 19:00 Fabian Groffen
2013-03-24 8:36 Fabian Groffen
2013-03-23 19:54 Fabian Groffen
2013-02-28 19:29 Fabian Groffen
2013-02-07 20:01 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-13 10:26 Fabian Groffen
2013-01-10 21:02 Fabian Groffen
2013-01-05 18:14 Fabian Groffen
2012-12-26 14:48 Fabian Groffen
2012-12-02 15:47 Fabian Groffen
2012-12-02 15:36 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 13:12 Fabian Groffen
2012-12-02 12:59 Fabian Groffen
2012-11-04 10:48 Fabian Groffen
2012-10-22 17:25 Fabian Groffen
2012-10-02 12:02 Fabian Groffen
2012-09-30 11:22 Fabian Groffen
2012-09-26 18:26 Fabian Groffen
2012-09-12 18:18 Fabian Groffen
2012-09-09 7:40 Fabian Groffen
2012-09-06 18:14 Fabian Groffen
2012-08-27 6:44 Fabian Groffen
2012-08-12 7:50 Fabian Groffen
2012-07-19 16:25 Fabian Groffen
2012-07-06 7:05 Fabian Groffen
2012-04-23 19:23 Fabian Groffen
2012-04-03 18:04 Fabian Groffen
2012-03-31 19:31 Fabian Groffen
2012-03-01 20:32 Fabian Groffen
2012-02-19 9:58 Fabian Groffen
2012-02-09 8:01 Fabian Groffen
2012-01-10 17:45 Fabian Groffen
2011-12-31 16:45 Fabian Groffen
2011-12-26 9:12 Fabian Groffen
2011-12-23 9:51 Fabian Groffen
2011-12-22 9:51 Fabian Groffen
2011-12-19 18:30 Fabian Groffen
2011-12-14 15:25 Fabian Groffen
2011-12-10 11:28 Fabian Groffen
2011-12-09 20:33 Fabian Groffen
2011-12-02 20:31 Fabian Groffen
2011-12-02 19:20 Fabian Groffen
2011-12-02 19:19 Fabian Groffen
2011-12-02 19:18 Fabian Groffen
2011-12-02 18:03 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-20 20:28 Fabian Groffen
2011-10-20 17:08 Fabian Groffen
2011-10-20 16:38 Fabian Groffen
2011-10-17 18:36 Fabian Groffen
2011-10-16 13:59 Fabian Groffen
2011-10-15 18:27 Fabian Groffen
2011-10-13 6:52 Fabian Groffen
2011-09-23 18:38 Fabian Groffen
2011-09-23 18:23 Fabian Groffen
2011-09-20 18:25 Fabian Groffen
2011-09-14 18:43 Fabian Groffen
2011-09-14 18:38 Fabian Groffen
2011-09-13 17:41 Fabian Groffen
2011-08-31 18:39 Fabian Groffen
2011-08-30 18:45 Fabian Groffen
2011-08-29 19:03 Fabian Groffen
2011-08-25 20:25 Fabian Groffen
2011-08-20 17:50 Fabian Groffen
2011-07-26 17:35 Fabian Groffen
2011-07-17 9:48 Fabian Groffen
2011-07-17 8:12 Fabian Groffen
2011-07-01 17:44 Fabian Groffen
2011-06-14 15:39 Fabian Groffen
2011-06-06 17:12 Fabian Groffen
2011-05-28 8:29 Fabian Groffen
2011-05-27 17:41 Fabian Groffen
2011-05-14 13:59 Fabian Groffen
2011-05-02 17:41 Fabian Groffen
2011-04-24 12:08 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-03-28 16:52 Fabian Groffen
2011-03-23 19:26 Fabian Groffen
2011-03-17 19:08 Fabian Groffen
2011-03-13 14:45 Fabian Groffen
2011-03-09 19:44 Fabian Groffen
2011-02-26 21:15 Fabian Groffen
2011-02-10 18:46 Fabian Groffen
2011-02-10 18:44 Fabian Groffen
2011-02-10 18:20 Fabian Groffen
2011-02-05 12:25 Fabian Groffen
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=1428225228.eed711a2e330ae73978bd7612ae596a7b3f7adbb.grobian@gentoo \
--to=grobian@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