public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-06-10 18:20 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2019-06-10 18:20 UTC (permalink / raw
  To: gentoo-commits

commit:     c71fa8faf1fd83af7ab7422e0fbe25e0539cbb22
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 10 18:16:33 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Jun 10 18:19:09 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c71fa8fa

_raise_exc: handle EISDIR

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/install_mask.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/install_mask.py b/lib/portage/util/install_mask.py
index 037fc8bc3..0013effa1 100644
--- a/lib/portage/util/install_mask.py
+++ b/lib/portage/util/install_mask.py
@@ -12,7 +12,12 @@ import sys
 
 from portage import os, _unicode_decode
 from portage.exception import (
-	OperationNotPermitted, PermissionDenied, ReadOnlyFileSystem, FileNotFound)
+	FileNotFound,
+	IsADirectory,
+	OperationNotPermitted,
+	PermissionDenied,
+	ReadOnlyFileSystem,
+)
 from portage.util import normalize_path
 
 if sys.hexversion >= 0x3000000:
@@ -127,6 +132,7 @@ class InstallMask(object):
 
 
 _exc_map = {
+	errno.EISDIR: IsADirectory,
 	errno.ENOENT: FileNotFound,
 	errno.EPERM: OperationNotPermitted,
 	errno.EACCES: PermissionDenied,


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2024-08-15 17:30 Mike Gilbert
  0 siblings, 0 replies; 47+ messages in thread
From: Mike Gilbert @ 2024-08-15 17:30 UTC (permalink / raw
  To: gentoo-commits

commit:     5ee1a193982fce006aefbd5a6c5907392016b44d
Author:     mid-kid <esteve.varela <AT> gmail <DOT> com>
AuthorDate: Sat Aug  3 15:04:43 2024 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Thu Aug 15 17:29:00 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=5ee1a193

Make portage.util.compression_probe work when ctypes is unavailable

This is useful for bootstrapping purposes, as _ctypes requires a dynamic
linker.

Closes: https://github.com/gentoo/portage/pull/1363
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/util/compression_probe.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/portage/util/compression_probe.py b/lib/portage/util/compression_probe.py
index 0879754b21..268e5840cc 100644
--- a/lib/portage/util/compression_probe.py
+++ b/lib/portage/util/compression_probe.py
@@ -1,13 +1,13 @@
 # Copyright 2015-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-import ctypes
 import errno
 import re
 
 
 from portage import _encodings, _unicode_encode
 from portage.exception import FileNotFound, PermissionDenied
+from portage.util._ctypes import ctypes
 
 _compressors = {
     "bzip2": {
@@ -49,7 +49,7 @@ _compressors = {
         # if the current architecture can support it, which is true when
         # sizeof(long) is at least 8 bytes.
         "decompress": "zstd -d"
-        + (" --long=31" if ctypes.sizeof(ctypes.c_long) >= 8 else ""),
+        + (" --long=31" if ctypes and ctypes.sizeof(ctypes.c_long) >= 8 else ""),
         "package": "app-arch/zstd",
     },
 }


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2024-05-27 20:02 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2024-05-27 20:02 UTC (permalink / raw
  To: gentoo-commits

commit:     de19f3a7215d64d22dcc0f779314de1f1199963f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon May 27 18:47:30 2024 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon May 27 20:01:49 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=de19f3a7

atomic_ofstream: Use mkstemp rather than getpid (pid namespace safety)

Bug: https://bugs.gentoo.org/851015
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/__init__.py | 47 ++++++++++++++++++++++++++------------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index 0c88068dda..f338f274aa 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2004-2023 Gentoo Authors
+# Copyright 2004-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from portage.cache.mappings import UserDict
@@ -70,6 +70,7 @@ import shlex
 import stat
 import string
 import sys
+import tempfile
 import traceback
 import glob
 from typing import Optional, TextIO
@@ -1446,21 +1447,22 @@ class atomic_ofstream(AbstractContextManager, ObjectProxy):
         if follow_links:
             canonical_path = os.path.realpath(filename)
             object.__setattr__(self, "_real_name", canonical_path)
-            tmp_name = "%s.%i" % (canonical_path, portage.getpid())
+            parent, basename = os.path.split(canonical_path)
+            fd, tmp_name = tempfile.mkstemp(prefix=basename, dir=parent)
+            object.__setattr__(self, "_tmp_name", tmp_name)
             try:
                 object.__setattr__(
                     self,
                     "_file",
                     open_func(
-                        _unicode_encode(
-                            tmp_name, encoding=_encodings["fs"], errors="strict"
-                        ),
+                        fd,
                         mode=mode,
                         **kargs,
                     ),
                 )
                 return
-            except OSError as e:
+            except OSError:
+                os.close(fd)
                 if canonical_path == filename:
                     raise
                 # Ignore this error, since it's irrelevant
@@ -1468,16 +1470,22 @@ class atomic_ofstream(AbstractContextManager, ObjectProxy):
                 # new error if necessary.
 
         object.__setattr__(self, "_real_name", filename)
-        tmp_name = "%s.%i" % (filename, portage.getpid())
-        object.__setattr__(
-            self,
-            "_file",
-            open_func(
-                _unicode_encode(tmp_name, encoding=_encodings["fs"], errors="strict"),
-                mode=mode,
-                **kargs,
-            ),
-        )
+        parent, basename = os.path.split(filename)
+        fd, tmp_name = tempfile.mkstemp(prefix=basename, dir=parent)
+        object.__setattr__(self, "_tmp_name", tmp_name)
+        try:
+            object.__setattr__(
+                self,
+                "_file",
+                open_func(
+                    fd,
+                    mode=mode,
+                    **kargs,
+                ),
+            )
+        except OSError:
+            os.close(fd)
+            raise
 
     def __exit__(self, exc_type, exc_val, exc_tb):
         if exc_type is not None:
@@ -1498,13 +1506,14 @@ class atomic_ofstream(AbstractContextManager, ObjectProxy):
         and performs the atomic replacement via os.rename().  If the abort()
         method has been called, then the temp file is closed and removed."""
         f = object.__getattribute__(self, "_file")
+        tmp_name = object.__getattribute__(self, "_tmp_name")
         real_name = object.__getattribute__(self, "_real_name")
         if not f.closed:
             try:
                 f.close()
                 if not object.__getattribute__(self, "_aborted"):
                     try:
-                        apply_stat_permissions(f.name, os.stat(real_name))
+                        apply_stat_permissions(tmp_name, os.stat(real_name))
                     except OperationNotPermitted:
                         pass
                     except FileNotFound:
@@ -1514,12 +1523,12 @@ class atomic_ofstream(AbstractContextManager, ObjectProxy):
                             pass
                         else:
                             raise
-                    os.rename(f.name, real_name)
+                    os.rename(tmp_name, real_name)
             finally:
                 # Make sure we cleanup the temp file
                 # even if an exception is raised.
                 try:
-                    os.unlink(f.name)
+                    os.unlink(tmp_name)
                 except OSError as oe:
                     pass
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2024-03-07 20:42 Mike Gilbert
  0 siblings, 0 replies; 47+ messages in thread
From: Mike Gilbert @ 2024-03-07 20:42 UTC (permalink / raw
  To: gentoo-commits

commit:     b7e89f866a9a1d73ab72670d74e2292b05893849
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  6 04:01:27 2024 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Wed Mar  6 18:19:31 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=b7e89f86

util: set a timeout for urlopen calls

A hung urlopen call can cause emerge to produce no output when fetching
binhost data.

Bug: https://bugs.gentoo.org/926221
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/util/_urlopen.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py
index 22f0e08df0..d451a94a89 100644
--- a/lib/portage/util/_urlopen.py
+++ b/lib/portage/util/_urlopen.py
@@ -26,10 +26,10 @@ def have_pep_476():
     return hasattr(__import__("ssl"), "_create_unverified_context")
 
 
-def urlopen(url, if_modified_since=None, headers={}, proxies=None):
+def urlopen(url, timeout=10, if_modified_since=None, headers={}, proxies=None):
     parse_result = urllib_parse.urlparse(url)
     if parse_result.scheme not in ("http", "https"):
-        return _urlopen(url)
+        return _urlopen(url, timeout=timeout)
 
     netloc = parse_result.netloc.rpartition("@")[-1]
     url = urllib_parse.urlunparse(
@@ -59,7 +59,7 @@ def urlopen(url, if_modified_since=None, headers={}, proxies=None):
         handlers.append(urllib_request.ProxyHandler(proxies))
     opener = urllib_request.build_opener(*handlers)
 
-    hdl = opener.open(request)
+    hdl = opener.open(request, timeout=timeout)
     if hdl.headers.get("last-modified", ""):
         try:
             add_header = hdl.headers.add_header


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2024-03-01 16:20 Mike Gilbert
  0 siblings, 0 replies; 47+ messages in thread
From: Mike Gilbert @ 2024-03-01 16:20 UTC (permalink / raw
  To: gentoo-commits

commit:     d8089d1af39c80e1edfb1669ae92fef7ab30e08a
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Fri Mar  1 15:49:26 2024 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Fri Mar  1 16:19:55 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=d8089d1a

Improve whitespace handling when parsing /proc/self/mountinfo

Only break lines on "\n" (line feed).
Only split lines on " " (space).

Bug: https://bugs.gentoo.org/925888
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/util/writeable_check.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/portage/util/writeable_check.py b/lib/portage/util/writeable_check.py
index 3427315cf7..ad1d9edff0 100644
--- a/lib/portage/util/writeable_check.py
+++ b/lib/portage/util/writeable_check.py
@@ -47,6 +47,7 @@ def linux_ro_checker(dir_list):
             "/proc/self/mountinfo",
             encoding=_encodings["content"],
             errors="replace",
+            newline="\n",
         ) as f:
             for line in f:
                 # we're interested in dir and both attr fields which always
@@ -58,7 +59,7 @@ def linux_ro_checker(dir_list):
                 # to the left of the ' - ', after the attr's, so split it there
                 mount = line.split(" - ", 1)
                 try:
-                    _dir, attr1 = mount[0].split()[4:6]
+                    _dir, attr1 = mount[0].split(" ")[4:6]
                 except ValueError:
                     # If it raises ValueError we can simply ignore the line.
                     invalids.append(line)
@@ -68,10 +69,10 @@ def linux_ro_checker(dir_list):
                 # for example: 16 1 0:16 / /root rw,noatime - lxfs  rw
                 if len(mount) > 1:
                     try:
-                        attr2 = mount[1].split()[2]
+                        attr2 = mount[1].split(" ")[2]
                     except IndexError:
                         try:
-                            attr2 = mount[1].split()[1]
+                            attr2 = mount[1].split(" ")[1]
                         except IndexError:
                             invalids.append(line)
                             continue


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2024-02-09  8:22 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2024-02-09  8:22 UTC (permalink / raw
  To: gentoo-commits

commit:     ba33bc425363977eaf549a087b2469720a79e2a4
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Feb  8 06:46:04 2024 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Feb  9 08:19:00 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ba33bc42

check_locale: Use multiprocessing.Process instead of os.fork()

Since os.fork() is unsafe in threaded processes, use
multiprocessing.Process instead. This way the fork will be
eliminated when the default multiprocessing start method
changes to "spawn".

TODO: Make async version of check_locale and call it from
EbuildPhase instead of config.environ(), since it's bad to
synchronously wait for the process in the main event loop
thread where config.environ() tends to be called.

Bug: https://bugs.gentoo.org/923841
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/locale.py | 56 +++++++++++++++++++++++++++-------------------
 1 file changed, 33 insertions(+), 23 deletions(-)

diff --git a/lib/portage/util/locale.py b/lib/portage/util/locale.py
index a620dbd544..b5da8d949b 100644
--- a/lib/portage/util/locale.py
+++ b/lib/portage/util/locale.py
@@ -9,7 +9,8 @@ locale.
 
 import locale
 import logging
-import os
+import multiprocessing
+import sys
 import textwrap
 import traceback
 
@@ -96,6 +97,24 @@ def _check_locale(silent):
     return True
 
 
+def _set_and_check_locale(silent, env, mylocale):
+    try:
+        if env is not None:
+            try:
+                locale.setlocale(locale.LC_CTYPE, mylocale)
+            except locale.Error:
+                sys.exit(2)
+
+        ret = _check_locale(silent)
+        if ret is None:
+            sys.exit(2)
+        else:
+            sys.exit(0 if ret else 1)
+    except Exception:
+        traceback.print_exc()
+        sys.exit(2)
+
+
 def check_locale(silent=False, env=None):
     """
     Check whether the locale is sane. Returns True if it is, prints
@@ -116,29 +135,20 @@ def check_locale(silent=False, env=None):
         except KeyError:
             pass
 
-    pid = os.fork()
-    if pid == 0:
-        try:
-            if env is not None:
-                try:
-                    locale.setlocale(locale.LC_CTYPE, portage._native_string(mylocale))
-                except locale.Error:
-                    os._exit(2)
-
-            ret = _check_locale(silent)
-            if ret is None:
-                os._exit(2)
-            else:
-                os._exit(0 if ret else 1)
-        except Exception:
-            traceback.print_exc()
-            os._exit(2)
-
-    pid2, ret = os.waitpid(pid, 0)
-    assert pid == pid2
+    # TODO: Make async version of check_locale and call it from
+    # EbuildPhase instead of config.environ(), since it's bad to
+    # synchronously wait for the process in the main event loop
+    # thread where config.environ() tends to be called.
+    proc = multiprocessing.Process(
+        target=_set_and_check_locale,
+        args=(silent, env, None if env is None else portage._native_string(mylocale)),
+    )
+    proc.start()
+    proc.join()
+
     pyret = None
-    if os.WIFEXITED(ret):
-        ret = os.WEXITSTATUS(ret)
+    if proc.exitcode >= 0:
+        ret = proc.exitcode
         if ret != 2:
             pyret = ret == 0
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2024-02-07  2:35 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2024-02-07  2:35 UTC (permalink / raw
  To: gentoo-commits

commit:     fa8e8f1895ed889aece2f67725df55d6ccf127fb
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Feb  3 23:41:45 2024 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Feb  7 00:55:46 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=fa8e8f18

socks5: Migrate to spawn returnproc parameter

Bug: https://bugs.gentoo.org/916566
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/socks5.py | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/lib/portage/util/socks5.py b/lib/portage/util/socks5.py
index fedb8599d5..6c68ff4106 100644
--- a/lib/portage/util/socks5.py
+++ b/lib/portage/util/socks5.py
@@ -1,10 +1,9 @@
 # SOCKSv5 proxy manager for network-sandbox
-# Copyright 2015-2021 Gentoo Authors
+# Copyright 2015-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
 import os
-import signal
 import socket
 
 import portage.data
@@ -22,7 +21,8 @@ class ProxyManager:
 
     def __init__(self):
         self.socket_path = None
-        self._pids = []
+        self._proc = None
+        self._proc_waiter = None
 
     def start(self, settings):
         """
@@ -51,9 +51,9 @@ class ProxyManager:
             spawn_kwargs.update(
                 uid=portage_uid, gid=portage_gid, groups=userpriv_groups, umask=0o077
             )
-        self._pids = spawn(
+        self._proc = spawn(
             [_python_interpreter, server_bin, self.socket_path],
-            returnpid=True,
+            returnproc=True,
             **spawn_kwargs,
         )
 
@@ -61,12 +61,19 @@ class ProxyManager:
         """
         Stop the SOCKSv5 server.
         """
-        for p in self._pids:
-            os.kill(p, signal.SIGINT)
-            os.waitpid(p, 0)
+        if self._proc is not None:
+            self._proc.terminate()
+            loop = asyncio.get_event_loop()
+            if self._proc_waiter is None:
+                self._proc_waiter = asyncio.ensure_future(self._proc.wait(), loop)
+            if loop.is_running():
+                self._proc_waiter.add_done_callback(lambda future: future.result())
+            else:
+                loop.run_until_complete(self._proc_waiter)
 
         self.socket_path = None
-        self._pids = []
+        self._proc = None
+        self._proc_waiter = None
 
     def is_running(self):
         """
@@ -80,16 +87,11 @@ class ProxyManager:
         """
         Wait for the proxy socket to become ready. This method is a coroutine.
         """
+        if self._proc_waiter is None:
+            self._proc_waiter = asyncio.ensure_future(self._proc.wait())
 
         while True:
-            try:
-                wait_retval = os.waitpid(self._pids[0], os.WNOHANG)
-            except OSError as e:
-                if e.errno == errno.EINTR:
-                    continue
-                raise
-
-            if wait_retval is not None and wait_retval != (0, 0):
+            if self._proc_waiter.done():
                 raise OSError(3, "No such process")
 
             try:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2023-10-02 21:40 James Le Cuirot
  0 siblings, 0 replies; 47+ messages in thread
From: James Le Cuirot @ 2023-10-02 21:40 UTC (permalink / raw
  To: gentoo-commits

commit:     7ff8f85350ad3bf35cfdac1c471e399a04220ed1
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sun Oct  1 09:15:50 2023 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Mon Oct  2 21:33:21 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7ff8f853

env_update: Write prefixed paths to files and terminal where appropriate

This change is entirely cosmetic as it only affects comments and
informational messages.

I wasn't sure what to do in the FreeBSD/DragonFly case because
/var/run/ld-elf.so.hints probably isn't prefixed, so I left it alone.

Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 lib/portage/util/env_update.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index a827963ab4..04fde5a52c 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -216,7 +216,7 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
         # ld.so.conf needs updating and ldconfig needs to be run
         myfd = atomic_ofstream(ldsoconf_path)
         myfd.write("# ld.so.conf autogenerated by env-update; make all changes to\n")
-        myfd.write("# contents of /etc/env.d directory\n")
+        myfd.write(f"# contents of {eprefix}/etc/env.d directory.\n")
         for x in specials["LDPATH"]:
             myfd.write(x + "\n")
         myfd.close()
@@ -242,7 +242,7 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
         newprelink.write(
             "# prelink.conf autogenerated by env-update; make all changes to\n"
         )
-        newprelink.write("# contents of /etc/env.d directory\n")
+        newprelink.write(f"# contents of {eprefix}/etc/env.d directory\n")
 
         for x in sorted(potential_lib_dirs) + ["bin", "sbin"]:
             newprelink.write(f"-l /{x}\n")
@@ -286,7 +286,7 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
                     == b"# prelink.conf autogenerated by env-update; make all changes to\n"
                 ):
                     f = atomic_ofstream(prelink_conf)
-                    f.write("-c /etc/prelink.conf.d/*.conf\n")
+                    f.write(f"-c {eprefix}/etc/prelink.conf.d/*.conf\n")
                     f.close()
         except OSError as e:
             if e.errno != errno.ENOENT:
@@ -361,7 +361,7 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
             # an older package installed ON TOP of a newer version will cause ldconfig
             # to overwrite the symlinks we just made. -X means no links. After 'clean'
             # we can safely create links.
-            writemsg_level(_(f">>> Regenerating {target_root}etc/ld.so.cache...\n"))
+            writemsg_level(_(f">>> Regenerating {eroot}etc/ld.so.cache...\n"))
             ret = subprocess.run(
                 [ldconfig, "-X", "-r", target_root], cwd="/"
             ).returncode
@@ -392,8 +392,8 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
     notice += "# DO NOT EDIT THIS FILE."
     penvnotice = notice + " CHANGES TO STARTUP PROFILES\n"
     cenvnotice = penvnotice[:]
-    penvnotice += "# GO INTO /etc/profile NOT /etc/profile.env\n\n"
-    cenvnotice += "# GO INTO /etc/csh.cshrc NOT /etc/csh.env\n\n"
+    penvnotice += f"# GO INTO {eprefix}/etc/profile NOT {eprefix}/etc/profile.env\n\n"
+    cenvnotice += f"# GO INTO {eprefix}/etc/csh.cshrc NOT {eprefix}/etc/csh.env\n\n"
 
     # create /etc/profile.env for bash support
     profile_env_path = os.path.join(eroot, "etc", "profile.env")


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2023-07-26 14:30 Mike Gilbert
  0 siblings, 0 replies; 47+ messages in thread
From: Mike Gilbert @ 2023-07-26 14:30 UTC (permalink / raw
  To: gentoo-commits

commit:     581f923b9f888efc3313b6e06ba8a3cf84641d75
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 26 14:27:48 2023 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Wed Jul 26 14:27:48 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=581f923b

env_update: drop os.waitstatus_to_exitcode

The subprocess.run() function does this translation already.

Fixes: 3bba408e214ae27bdf924ba90ad4b0919a85f3c8
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/util/env_update.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index 9d3b5bb25..a827963ab 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -381,7 +381,6 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
                 cwd="/",
             ).returncode
 
-        ret = os.waitstatus_to_exitcode(ret)
         if ret > 0:
             writemsg(f"!!! ldconfig failed with exit status {ret}\n", noiselevel=-1)
         if ret < 0:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2023-07-26  7:58 Sam James
  0 siblings, 0 replies; 47+ messages in thread
From: Sam James @ 2023-07-26  7:58 UTC (permalink / raw
  To: gentoo-commits

commit:     a777662890a7552927ee794506a92ddffc43523e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 25 03:19:14 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Jul 26 07:58:31 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a7776628

lib: env_update: use more f-strings

Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/util/env_update.py | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index a7015669e..9d3b5bb25 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -361,19 +361,17 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
             # an older package installed ON TOP of a newer version will cause ldconfig
             # to overwrite the symlinks we just made. -X means no links. After 'clean'
             # we can safely create links.
-            writemsg_level(
-                _(">>> Regenerating %setc/ld.so.cache...\n") % (target_root,)
-            )
+            writemsg_level(_(f">>> Regenerating {target_root}etc/ld.so.cache...\n"))
             ret = subprocess.run(
-                [f"{ldconfig}", "-X", "-r", f"{target_root}"], cwd="/"
+                [ldconfig, "-X", "-r", target_root], cwd="/"
             ).returncode
         elif ostype in ("FreeBSD", "DragonFly"):
             writemsg_level(
-                _(">>> Regenerating %svar/run/ld-elf.so.hints...\n") % target_root
+                _(f">>> Regenerating {target_root}var/run/ld-elf.so.hints...\n")
             )
             ret = subprocess.run(
                 [
-                    f"{ldconfig}",
+                    ldconfig,
                     "-elf",
                     "-i",
                     "-f",


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2023-07-26  7:58 Sam James
  0 siblings, 0 replies; 47+ messages in thread
From: Sam James @ 2023-07-26  7:58 UTC (permalink / raw
  To: gentoo-commits

commit:     3bba408e214ae27bdf924ba90ad4b0919a85f3c8
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 25 03:16:36 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Jul 26 07:58:30 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=3bba408e

lib: env_update: port to subprocess

os.system is a bit janky here, let's use subprocess so we're not injecting
multiple commands.

Thanks to mgorny for the suggestion.

Bug: https://bugs.gentoo.org/910376
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/util/env_update.py | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index 5c2b2fdd5..a7015669e 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -6,7 +6,7 @@ __all__ = ["env_update"]
 import errno
 import glob
 import stat
-import sys
+import subprocess
 import time
 
 import portage
@@ -364,18 +364,24 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, writemsg_lev
             writemsg_level(
                 _(">>> Regenerating %setc/ld.so.cache...\n") % (target_root,)
             )
-            ret = os.system(f"cd / ; {ldconfig} -X -r '{target_root}'")
+            ret = subprocess.run(
+                [f"{ldconfig}", "-X", "-r", f"{target_root}"], cwd="/"
+            ).returncode
         elif ostype in ("FreeBSD", "DragonFly"):
             writemsg_level(
                 _(">>> Regenerating %svar/run/ld-elf.so.hints...\n") % target_root
             )
-            ret = os.system(
-                (
-                    "cd / ; %s -elf -i "
-                    + "-f '%svar/run/ld-elf.so.hints' '%setc/ld.so.conf'"
-                )
-                % (ldconfig, target_root, target_root)
-            )
+            ret = subprocess.run(
+                [
+                    f"{ldconfig}",
+                    "-elf",
+                    "-i",
+                    "-f",
+                    f"{target_root}var/run/ld-elf.so.hints",
+                    f"{target_root}etc/ld.so.conf",
+                ],
+                cwd="/",
+            ).returncode
 
         ret = os.waitstatus_to_exitcode(ret)
         if ret > 0:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2023-06-29  8:19 Sam James
  0 siblings, 0 replies; 47+ messages in thread
From: Sam James @ 2023-06-29  8:19 UTC (permalink / raw
  To: gentoo-commits

commit:     f95d78c1636d081b906e613a0f26e2c318c80c5d
Author:     Berin Aniesh <berinaniesh <AT> gmail <DOT> com>
AuthorDate: Sun Jun 18 04:53:01 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jun 29 08:19:28 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f95d78c1

ExtractKernelVersion.py: Remove repeated/unreachable code

Signed-off-by: Berin Aniesh <berinaniesh <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/util/ExtractKernelVersion.py | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/lib/portage/util/ExtractKernelVersion.py b/lib/portage/util/ExtractKernelVersion.py
index 5914dd020..6a6501b5d 100644
--- a/lib/portage/util/ExtractKernelVersion.py
+++ b/lib/portage/util/ExtractKernelVersion.py
@@ -31,16 +31,12 @@ def ExtractKernelVersion(base_dir):
         )
     except OSError as details:
         return (None, str(details))
-    except OSError as details:
-        return (None, str(details))
 
     try:
         for i in range(4):
             lines.append(f.readline())
     except OSError as details:
         return (None, str(details))
-    except OSError as details:
-        return (None, str(details))
     finally:
         f.close()
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2023-06-06  6:52 Sam James
  0 siblings, 0 replies; 47+ messages in thread
From: Sam James @ 2023-06-06  6:52 UTC (permalink / raw
  To: gentoo-commits

commit:     0911ea932d81020abe87774ff4819499c0cb891a
Author:     Berin Aniesh <berinaniesh <AT> gmail <DOT> com>
AuthorDate: Tue Jun  6 06:16:35 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Jun  6 06:52:40 2023 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=0911ea93

portage.util.writemsg_level: Add return type type annotation

Signed-off-by: Berin Aniesh <berinaniesh <AT> gmail.com>
Closes: https://github.com/gentoo/portage/pull/1048
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/util/__init__.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index f0115aea3..1f8c9e94f 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -130,7 +130,7 @@ def writemsg_stdout(mystr: str, noiselevel: int = 0) -> None:
     writemsg(mystr, noiselevel=noiselevel, fd=sys.stdout)
 
 
-def writemsg_level(msg: str, level: int = 0, noiselevel: int = 0):
+def writemsg_level(msg: str, level: int = 0, noiselevel: int = 0) -> None:
     """
     Show a message for the given level as defined by the logging module
     (default is 0).


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2022-12-31 13:33 Sam James
  0 siblings, 0 replies; 47+ messages in thread
From: Sam James @ 2022-12-31 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     118df436abd49eecfeaf95df8a052861d463a896
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 30 10:57:12 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Dec 31 13:33:04 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=118df436

Report a warning when unaccelerated Whirlpool is being used

The warning serves two purposes: it informs the user that they should
expect very slow hashing (i.e. Portage did not hang) and that they
should inform the repository owner about the problem. Far from ideal
but probably good enough given how rare Whirlpool-only ebuilds are.

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
Closes: https://github.com/gentoo/portage/pull/967
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/util/whirlpool.py | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/lib/portage/util/whirlpool.py b/lib/portage/util/whirlpool.py
index 8454a874a..d26780604 100644
--- a/lib/portage/util/whirlpool.py
+++ b/lib/portage/util/whirlpool.py
@@ -30,6 +30,10 @@
 
 # pylint: disable=mixed-indentation
 
+import warnings
+
+from portage.localization import _
+
 try:
     from ._whirlpool import Whirlpool as WhirlpoolExt
 except ImportError:
@@ -47,6 +51,13 @@ class PyWhirlpool:
     hashed."""
 
     def __init__(self, arg=b""):
+        warnings.warn(
+            _(
+                "The last-resort unaccelerated Whirlpool implementation is "
+                "being used. It is known to be absurdly slow. Please report "
+                "that the Whirlpool hash is deprecated to the repository owner."
+            )
+        )
         self.ctx = WhirlpoolStruct()
         self.update(arg)
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2022-06-07 23:48 Mike Gilbert
  0 siblings, 0 replies; 47+ messages in thread
From: Mike Gilbert @ 2022-06-07 23:48 UTC (permalink / raw
  To: gentoo-commits

commit:     92c63ef74039e2361a4912ead5416b08cdfa8ac8
Author:     David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Sun May 22 09:40:45 2022 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue Jun  7 23:47:54 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=92c63ef7

refactor(mtimedb): some little changes:

- interpolated strings (%...) replaced by f-strings
- some little simplifications
- factor out some constants to prepare for unittesting

Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/util/mtimedb.py | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/lib/portage/util/mtimedb.py b/lib/portage/util/mtimedb.py
index 7a7fe6784..df9bd494c 100644
--- a/lib/portage/util/mtimedb.py
+++ b/lib/portage/util/mtimedb.py
@@ -23,7 +23,23 @@ from portage.localization import _
 from portage.util import apply_secpass_permissions, atomic_ofstream, writemsg
 
 
+_MTIMEDBKEYS = {
+    "info",
+    "ldpath",
+    "resume",
+    "resume_backup",
+    "starttime",
+    "updates",
+    "version",
+}
+
+
 class MtimeDB(dict):
+    """The MtimeDB class is used to interact with a file storing the
+    current resume lists.
+    It is a subclass of ``dict`` and it reads from/writes to JSON, by
+    default, althouth it can be configured to use ``pickle``.
+    """
 
     # JSON read support has been available since portage-2.1.10.49.
     _json_write = True
@@ -46,13 +62,13 @@ class MtimeDB(dict):
                 pass
             else:
                 writemsg(
-                    _("!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
+                    _(f"!!! Error loading '{filename}': {e}\n"), noiselevel=-1
                 )
         finally:
             if f is not None:
                 f.close()
 
-        d = None
+        d = {}
         if content:
             try:
                 d = json.loads(
@@ -75,12 +91,9 @@ class MtimeDB(dict):
                     raise
                 except Exception:
                     writemsg(
-                        _("!!! Error loading '%s': %s\n") % (filename, e), noiselevel=-1
+                        _(f"!!! Error loading '{filename}': {e}\n"), noiselevel=-1
                     )
 
-        if d is None:
-            d = {}
-
         if "old" in d:
             d["updates"] = d["old"]
             del d["old"]
@@ -92,22 +105,9 @@ class MtimeDB(dict):
         for k in ("info", "ldpath", "updates"):
             d.setdefault(k, {})
 
-        mtimedbkeys = set(
-            (
-                "info",
-                "ldpath",
-                "resume",
-                "resume_backup",
-                "starttime",
-                "updates",
-                "version",
-            )
-        )
-
-        for k in list(d):
-            if k not in mtimedbkeys:
-                writemsg(_("Deleting invalid mtimedb key: %s\n") % str(k))
-                del d[k]
+        for k in (d.keys()-_MTIMEDBKEYS):
+            writemsg(_(f"Deleting invalid mtimedb key: {k}\n"))
+            del d[k]
         self.update(d)
         self._clean_data = copy.deepcopy(d)
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2022-06-07 23:48 Mike Gilbert
  0 siblings, 0 replies; 47+ messages in thread
From: Mike Gilbert @ 2022-06-07 23:48 UTC (permalink / raw
  To: gentoo-commits

commit:     f4fd289c7e3cbbd1a17a1510b1b126d314eea053
Author:     David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Tue May 31 15:52:56 2022 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Tue Jun  7 23:47:56 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f4fd289c

improvement(mtimedb): using is_readonly instead "if not self.filename"

Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/util/mtimedb.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/mtimedb.py b/lib/portage/util/mtimedb.py
index 9884746f3..497c01e05 100644
--- a/lib/portage/util/mtimedb.py
+++ b/lib/portage/util/mtimedb.py
@@ -124,7 +124,7 @@ class MtimeDB(dict):
         self._clean_data = copy.deepcopy(d)
 
     def commit(self):
-        if not self.filename:
+        if self.is_readonly:
             return
         d = {}
         d.update(self)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2022-05-21 10:12 Michał Górny
  0 siblings, 0 replies; 47+ messages in thread
From: Michał Górny @ 2022-05-21 10:12 UTC (permalink / raw
  To: gentoo-commits

commit:     1f33f97b9e9c132d77d586d10bfe6ba0d3123050
Author:     Thomas Bracht Laumann Jespersen <t <AT> laumann <DOT> xyz>
AuthorDate: Thu May 19 09:50:05 2022 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat May 21 10:11:50 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=1f33f97b

lib/portage/util: fix bundled whirlpool on empty bytestring input

The WhirlpoolAdd function did not consider zero-length input, so calls
to update(b'') would produce out-of-bounds errors. This was not covered
by any tests, because the constructor implicitly skipped the call to
update on zero-length input.

Add check for zero-length input to WhirlpoolAdd, and have the Whirlpool
constructor skip calling update() only if arg is None.

Closes: https://bugs.gentoo.org/846389
Signed-off-by: Thomas Bracht Laumann Jespersen <t <AT> laumann.xyz>
Closes: https://github.com/gentoo/portage/pull/832
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 lib/portage/util/whirlpool.py | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/lib/portage/util/whirlpool.py b/lib/portage/util/whirlpool.py
index de344d8eb..9178d70c7 100644
--- a/lib/portage/util/whirlpool.py
+++ b/lib/portage/util/whirlpool.py
@@ -37,11 +37,9 @@ class Whirlpool:
     may be provided; if present, this string will be automatically
     hashed."""
 
-    def __init__(self, arg=None):
+    def __init__(self, arg=b""):
         self.ctx = WhirlpoolStruct()
-        if arg:
-            self.update(arg)
-        self.digest_status = 0
+        self.update(arg)
 
     def update(self, arg):
         """update(arg)"""
@@ -71,7 +69,7 @@ class Whirlpool:
         return copy.deepcopy(self)
 
 
-def new(init=None):
+def new(init=b""):
     """Return a new Whirlpool object. An optional string argument
     may be provided; if present, this string will be automatically
     hashed."""
@@ -2183,6 +2181,8 @@ def WhirlpoolInit(ctx):
 def WhirlpoolAdd(source, sourceBits, ctx):
     if not isinstance(source, bytes):
         raise TypeError("Expected %s, got %s" % (bytes, type(source)))
+    if sourceBits == 0:
+        return
 
     carry = 0
     value = sourceBits
@@ -2350,3 +2350,9 @@ if __name__ == "__main__":
         Whirlpool(b"").hexdigest()
         == "19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3"
     )
+    w = Whirlpool()
+    w.update(b"")
+    assert (
+        w.hexdigest()
+        == "19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3"
+    )


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2022-04-15  2:46 Sam James
  0 siblings, 0 replies; 47+ messages in thread
From: Sam James @ 2022-04-15  2:46 UTC (permalink / raw
  To: gentoo-commits

commit:     fa82725ba03ffa5edf0b82db7307c87fc97e83f2
Author:     Mike Frysinger <vapier <AT> chromium <DOT> org>
AuthorDate: Wed Mar 30 06:32:07 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Apr 15 02:46:19 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=fa82725b

movefile: merge symlinks atomically

Since POSIX allows renaming symlinks with symlinks, use that to get
atomic updates.  This is faster and less flaky to parallel processes:
removing a live symlink and then recreating it leaves a small window
where other things might try to use it but fail.

[sam: cherry-picked from chromiumos' third_party/portage_tool repo]
(cherry picked from commit cherry-pick 80ed2dac95db81acac8043e6685d0a853a08d268)
Bug: https://bugs.gentoo.org/836400
Signed-off-by: Sam James <sam <AT> gentoo.org>
Closes: https://github.com/gentoo/portage/pull/816
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/util/movefile.py | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/lib/portage/util/movefile.py b/lib/portage/util/movefile.py
index ddafe5571..4dc08af26 100644
--- a/lib/portage/util/movefile.py
+++ b/lib/portage/util/movefile.py
@@ -171,7 +171,7 @@ def movefile(
             bsd_chflags.chflags(os.path.dirname(dest), 0)
 
     if destexists:
-        if stat.S_ISLNK(dstat[stat.ST_MODE]):
+        if not stat.S_ISLNK(sstat[stat.ST_MODE]) and stat.S_ISLNK(dstat[stat.ST_MODE]):
             try:
                 os.unlink(dest)
                 destexists = 0
@@ -185,8 +185,18 @@ def movefile(
             target = os.readlink(src)
             if mysettings and "D" in mysettings and target.startswith(mysettings["D"]):
                 target = target[len(mysettings["D"]) - 1 :]
-            if destexists and not stat.S_ISDIR(dstat[stat.ST_MODE]):
-                os.unlink(dest)
+            # Atomically update the path if it exists.
+            try:
+                os.rename(src, dest)
+                return sstat.st_mtime_ns
+            except OSError:
+                # If it failed due to cross-link device, fallthru below.
+                # Clear the target first so we can create it.
+                try:
+                    os.unlink(dest)
+                except FileNotFoundError:
+                    pass
+
             try:
                 if selinux_enabled:
                     selinux.symlink(target, dest, src)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-05-24  6:13 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-05-24  6:13 UTC (permalink / raw
  To: gentoo-commits

commit:     21739ea1e0a793e207b7ae28d524e45582d9b2ca
Author:     Florian Schmaus <flo <AT> geekplace <DOT> eu>
AuthorDate: Tue Apr 27 11:02:56 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon May 24 06:13:07 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=21739ea1

env-update: skip PATH in systemd user environment definition

Having PATH in the systemd user environment created by env-update
makes it impossible to use "systemctl --user import-environment PATH"
to set PATH in systemd user units according to the current value of
PATH. Using "systemctl --user import-environment PATH" is a well known
idiom, and hence should work. Therefore, we skip the creation of the
PATH entry by env-update.

Closes: https://github.com/gentoo/portage/pull/701
Signed-off-by: Florian Schmaus <flo <AT> geekplace.eu>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/env_update.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index 5588931a8..abf261fbc 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -367,6 +367,11 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 		systemd_gentoo_env.write(senvnotice)
 
 		for env_key in env_keys:
+			# Skip PATH since this makes it impossible to use
+			# "systemctl --user import-environment PATH".
+			if env_key == 'PATH':
+				continue
+
 			env_key_value = env[env_key]
 
 			# Skip variables with the empty string


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-03-07 16:04 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-03-07 16:04 UTC (permalink / raw
  To: gentoo-commits

commit:     b08e21e5a7e07da02a2d64dac80635ca82a12979
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Mar  7 16:00:54 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Mar  7 16:01:47 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=b08e21e5

bin_entry_point: fix sys.argv[0] for non-python programs

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/bin_entry_point.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/portage/util/bin_entry_point.py b/lib/portage/util/bin_entry_point.py
index 7d359052e..3ead95d98 100644
--- a/lib/portage/util/bin_entry_point.py
+++ b/lib/portage/util/bin_entry_point.py
@@ -28,6 +28,7 @@ def bin_entry_point():
 				script_path,
 			] + sys.argv[1:]
 			os.execvp(sys.argv[0], sys.argv)
+		sys.argv[0] = script_path
 		os.execvp(sys.argv[0], sys.argv)
 	else:
 		print("File not found:", script_path, file=sys.stderr)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-03-06 20:21 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-03-06 20:21 UTC (permalink / raw
  To: gentoo-commits

commit:     4f60b68fca342cc92ed7729d241e2c60132876e8
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Mar  6 20:20:30 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Mar  6 20:20:46 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4f60b68f

bin_entry_point: handle versioned python shebangs

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/bin_entry_point.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/bin_entry_point.py b/lib/portage/util/bin_entry_point.py
index ce95231eb..7d359052e 100644
--- a/lib/portage/util/bin_entry_point.py
+++ b/lib/portage/util/bin_entry_point.py
@@ -20,7 +20,7 @@ def bin_entry_point():
 	if os.access(script_path, os.X_OK):
 		with open(script_path, "rt") as f:
 			shebang = f.readline()
-		python_match = re.search(r"/python\s+([^/]*)\s+$", shebang)
+		python_match = re.search(r"/python[\d\.]*\s+([^/]*)\s+$", shebang)
 		if python_match:
 			sys.argv = [
 				os.path.join(os.path.dirname(sys.argv[0]), "python"),


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-03-03 12:20 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-03-03 12:20 UTC (permalink / raw
  To: gentoo-commits

commit:     ce86ddecf168af06926f95092f29fa19c1f3885a
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  3 10:46:02 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Mar  3 12:09:58 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ce86ddec

bin_entry_point: rewrite python shebangs for venv

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/bin_entry_point.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/bin_entry_point.py b/lib/portage/util/bin_entry_point.py
index 7f2ee3849..ce95231eb 100644
--- a/lib/portage/util/bin_entry_point.py
+++ b/lib/portage/util/bin_entry_point.py
@@ -3,6 +3,7 @@
 
 __all__ = ["bin_entry_point"]
 
+import re
 import sys
 
 from portage.const import PORTAGE_BIN_PATH
@@ -17,7 +18,16 @@ def bin_entry_point():
 	"""
 	script_path = os.path.join(PORTAGE_BIN_PATH, os.path.basename(sys.argv[0]))
 	if os.access(script_path, os.X_OK):
-		sys.argv[0] = script_path
+		with open(script_path, "rt") as f:
+			shebang = f.readline()
+		python_match = re.search(r"/python\s+([^/]*)\s+$", shebang)
+		if python_match:
+			sys.argv = [
+				os.path.join(os.path.dirname(sys.argv[0]), "python"),
+				python_match.group(1),
+				script_path,
+			] + sys.argv[1:]
+			os.execvp(sys.argv[0], sys.argv)
 		os.execvp(sys.argv[0], sys.argv)
 	else:
 		print("File not found:", script_path, file=sys.stderr)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-02-25 10:21 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-02-25 10:21 UTC (permalink / raw
  To: gentoo-commits

commit:     061a895f7b0a310b374dff03af622b11146337d4
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 25 10:14:18 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Feb 25 10:18:02 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=061a895f

iter_parents: prevent infinite loop after empty os.path.dirname result

Reported-by: dkjii <AT> cock.li
Bug: https://bugs.gentoo.org/772806
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/path.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/path.py b/lib/portage/util/path.py
index a0b96c7f3..f174bd71f 100644
--- a/lib/portage/util/path.py
+++ b/lib/portage/util/path.py
@@ -1,4 +1,4 @@
-# Copyright 2014 Gentoo Foundation
+# Copyright 2014-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -45,4 +45,6 @@ def iter_parents(path):
 	yield path
 	while path != os.sep:
 		path = os.path.dirname(path)
+		if not path:
+			break
 		yield path


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-01-19  0:50 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-01-19  0:50 UTC (permalink / raw
  To: gentoo-commits

commit:     4f77b1ca80a7ae7987c0d3e0ef988b3c06d18744
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 19 00:50:13 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Jan 19 00:50:26 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4f77b1ca

ProxyManager: remove unused loop parameter

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/socks5.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/socks5.py b/lib/portage/util/socks5.py
index ddf6bb4d0..4aa08e1ab 100644
--- a/lib/portage/util/socks5.py
+++ b/lib/portage/util/socks5.py
@@ -73,7 +73,7 @@ class ProxyManager:
 		"""
 		return self.socket_path is not None
 
-	async def ready(self, loop=None):
+	async def ready(self):
 		"""
 		Wait for the proxy socket to become ready. This method is a coroutine.
 		"""


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2021-01-02  1:18 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2021-01-02  1:18 UTC (permalink / raw
  To: gentoo-commits

commit:     84b555bb33f24b7628bebbaa16fe43325b7823a9
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Jan  2 01:18:30 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Jan  2 01:18:43 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=84b555bb

lib/portage/util/__init__.py: Fix useless-return

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/__init__.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index bedcbcfe6..b0922bf09 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -1293,7 +1293,6 @@ class atomic_ofstream(AbstractContextManager, ObjectProxy):
 			self.abort()
 		else:
 			self.close()
-		return None
 
 	def _get_target(self):
 		return object.__getattribute__(self, '_file')


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-12-31  2:17 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-12-31  2:17 UTC (permalink / raw
  To: gentoo-commits

commit:     1574ae127b270739c4293271c959d1d981684906
Author:     Florian Schmaus <flo <AT> geekplace <DOT> eu>
AuthorDate: Fri Dec 18 18:46:39 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Dec 31 01:43:22 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=1574ae12

env_update: use "with statement" on atomic_ofstream

Signed-off-by: Florian Schmaus <flo <AT> geekplace.eu>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/env_update.py | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index dec086cf8..5588931a8 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -342,18 +342,17 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 
 	#create /etc/profile.env for bash support
 	profile_env_path = os.path.join(eroot, "etc", "profile.env")
-	outfile = atomic_ofstream(profile_env_path)
-	outfile.write(penvnotice)
-
-	env_keys = [x for x in env if x != "LDPATH"]
-	env_keys.sort()
-	for k in env_keys:
-		v = env[k]
-		if v.startswith('$') and not v.startswith('${'):
-			outfile.write("export %s=$'%s'\n" % (k, v[1:]))
-		else:
-			outfile.write("export %s='%s'\n" % (k, v))
-	outfile.close()
+	with atomic_ofstream(profile_env_path) as outfile:
+		outfile.write(penvnotice)
+
+		env_keys = [x for x in env if x != "LDPATH"]
+		env_keys.sort()
+		for k in env_keys:
+			v = env[k]
+			if v.startswith('$') and not v.startswith('${'):
+				outfile.write("export %s=$'%s'\n" % (k, v[1:]))
+			else:
+				outfile.write("export %s='%s'\n" % (k, v))
 
 	# Create the systemd user environment configuration file
 	# /etc/environment.d/10-gentoo-env.conf with the
@@ -363,8 +362,7 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 
 	systemd_gentoo_env_path = os.path.join(systemd_environment_dir,
 						"10-gentoo-env.conf")
-	systemd_gentoo_env = atomic_ofstream(systemd_gentoo_env_path)
-	try:
+	with atomic_ofstream(systemd_gentoo_env_path) as systemd_gentoo_env:
 		senvnotice = notice + "\n\n"
 		systemd_gentoo_env.write(senvnotice)
 
@@ -384,10 +382,6 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 			line = f"{env_key}={env_key_value}\n"
 
 			systemd_gentoo_env.write(line)
-	except:
-		systemd_gentoo_env.abort()
-		raise
-	systemd_gentoo_env.close()
 
 	#create /etc/csh.env for (t)csh support
 	outfile = atomic_ofstream(os.path.join(eroot, "etc", "csh.env"))


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-12-31  2:17 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-12-31  2:17 UTC (permalink / raw
  To: gentoo-commits

commit:     e93e6d65fa1ca75f676a227f7918f8b6d747425c
Author:     Florian Schmaus <flo <AT> geekplace <DOT> eu>
AuthorDate: Fri Dec 18 18:46:38 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Dec 31 01:40:42 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e93e6d65

Make atomic_ofstream a Context Manager

This allows using a "with statement" together with instances of
atomic_ofstream. Allowing for more readable, less error prone and
shorter code.

Signed-off-by: Florian Schmaus <flo <AT> geekplace.eu>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/__init__.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index 0412b2b59..bedcbcfe6 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -11,6 +11,7 @@ __all__ = ['apply_permissions', 'apply_recursive_permissions',
 	'stack_dicts', 'stack_lists', 'unique_array', 'unique_everseen', 'varexpand',
 	'write_atomic', 'writedict', 'writemsg', 'writemsg_level', 'writemsg_stdout']
 
+from contextlib import AbstractContextManager
 from copy import deepcopy
 import errno
 import io
@@ -1246,7 +1247,7 @@ def apply_secpass_permissions(filename, uid=-1, gid=-1, mode=-1, mask=-1,
 		stat_cached=stat_cached, follow_links=follow_links)
 	return all_applied
 
-class atomic_ofstream(ObjectProxy):
+class atomic_ofstream(AbstractContextManager, ObjectProxy):
 	"""Write a file atomically via os.rename().  Atomic replacement prevents
 	interprocess interference and prevents corruption of the target
 	file when the write is interrupted (for example, when an 'out of space'
@@ -1287,6 +1288,13 @@ class atomic_ofstream(ObjectProxy):
 				encoding=_encodings['fs'], errors='strict'),
 				mode=mode, **kargs))
 
+	def __exit__(self, exc_type, exc_val, exc_tb):
+		if exc_type is not None:
+			self.abort()
+		else:
+			self.close()
+		return None
+
 	def _get_target(self):
 		return object.__getattribute__(self, '_file')
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-11-22 19:41 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-11-22 19:41 UTC (permalink / raw
  To: gentoo-commits

commit:     ae8b18f868c9bd039643f89f28f9d92ce8966c3c
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 22 19:37:05 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Nov 22 19:38:51 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ae8b18f8

compare_files: fix missing xattr handling

Fixes: a2e7bf7d1c7d ("compare_files: handle missing xattr support")
Bug: https://bugs.gentoo.org/755950
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_compare_files.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/portage/util/_compare_files.py b/lib/portage/util/_compare_files.py
index 60d43aefa..7692797fc 100644
--- a/lib/portage/util/_compare_files.py
+++ b/lib/portage/util/_compare_files.py
@@ -9,7 +9,7 @@ import stat
 
 from portage import _encodings
 from portage import _unicode_encode
-from portage.util._xattr import xattr
+from portage.util._xattr import XATTRS_WORKS, xattr
 
 def compare_files(file1, file2, skipped_types=()):
 	"""
@@ -45,7 +45,7 @@ def compare_files(file1, file2, skipped_types=()):
 	if "device_number" not in skipped_types and file1_stat.st_rdev != file2_stat.st_rdev:
 		differences.append("device_number")
 
-	if (xattr.XATTRS_WORKS and "xattr" not in skipped_types and
+	if (XATTRS_WORKS and "xattr" not in skipped_types and
 		sorted(xattr.get_all(file1, nofollow=True)) != sorted(xattr.get_all(file2, nofollow=True))):
 		differences.append("xattr")
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-11-22  6:20 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-11-22  6:20 UTC (permalink / raw
  To: gentoo-commits

commit:     a2e7bf7d1c7d518fe8d7cf2c0e6cb30020b8aa94
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 21 21:13:27 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Nov 22 06:17:29 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a2e7bf7d

compare_files: handle missing xattr support

Bug: https://bugs.gentoo.org/755950
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_compare_files.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/_compare_files.py b/lib/portage/util/_compare_files.py
index de97a9d9d..60d43aefa 100644
--- a/lib/portage/util/_compare_files.py
+++ b/lib/portage/util/_compare_files.py
@@ -45,7 +45,8 @@ def compare_files(file1, file2, skipped_types=()):
 	if "device_number" not in skipped_types and file1_stat.st_rdev != file2_stat.st_rdev:
 		differences.append("device_number")
 
-	if "xattr" not in skipped_types and sorted(xattr.get_all(file1, nofollow=True)) != sorted(xattr.get_all(file2, nofollow=True)):
+	if (xattr.XATTRS_WORKS and "xattr" not in skipped_types and
+		sorted(xattr.get_all(file1, nofollow=True)) != sorted(xattr.get_all(file2, nofollow=True))):
 		differences.append("xattr")
 
 	if "atime" not in skipped_types and file1_stat.st_atime_ns != file2_stat.st_atime_ns:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-10-06  1:35 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-10-06  1:35 UTC (permalink / raw
  To: gentoo-commits

commit:     c446394e5b0e71a611ed5cfa0fb923e05802ef5f
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Oct  6 01:21:58 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Oct  6 01:35:09 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c446394e

movefile: remove dest_tmp_bytes on failure

Reported-by: Boleyn Su <boleyn.su <AT> gmail.com>
Bug: https://bugs.gentoo.org/745588
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/movefile.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/portage/util/movefile.py b/lib/portage/util/movefile.py
index a251d369d..9c6054209 100644
--- a/lib/portage/util/movefile.py
+++ b/lib/portage/util/movefile.py
@@ -262,6 +262,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 			dest_tmp = dest + "#new"
 			dest_tmp_bytes = _unicode_encode(dest_tmp, encoding=encoding,
 				errors='strict')
+			success = False
 			try: # For safety copy then move it over.
 				_copyfile(src_bytes, dest_tmp_bytes)
 				_apply_stat(sstat, dest_tmp_bytes)
@@ -281,13 +282,18 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
 						raise
 				_rename(dest_tmp_bytes, dest_bytes)
 				_os.unlink(src_bytes)
-			except SystemExit as e:
-				raise
+				success = True
 			except Exception as e:
 				writemsg("!!! %s\n" % _('copy %(src)s -> %(dest)s failed.') %
 					{"src": src, "dest": dest}, noiselevel=-1)
 				writemsg("!!! %s\n" % (e,), noiselevel=-1)
 				return None
+			finally:
+				if not success:
+					try:
+						_os.unlink(dest_tmp_bytes)
+					except OSError:
+						pass
 		else:
 			#we don't yet handle special, so we need to fall back to /bin/mv
 			a = spawn([MOVE_BINARY, '-f', src, dest], env=os.environ)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-09-08  0:04 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-09-08  0:04 UTC (permalink / raw
  To: gentoo-commits

commit:     45a5982fe8076066323e91f6b5fe860f3a429f9f
Author:     Florian Schmaus <flo <AT> geekplace <DOT> eu>
AuthorDate: Sat Sep  5 07:18:17 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Sep  8 00:01:47 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=45a5982f

env-update: create systemd user-session environment definition

Portage's env-update currently transforms the environment information
from /etc/env.d into /etc/profile.env, which is typically sourced by
every user session, setting up its environment.

However, /etc/profile.env is not sourced by systemd user
services. Instead, for the definition of a systemd user session
environment, the 'environment.d' machinery exists. Unfortunately, up
to now, env-update does not produce a profile.env equivalent for this
machinery, causing issues for systemd user services. For example, an
emacs daemon run as user systemd service does not have a complete
PATH (bug #704412 [1]), because some PATH components are injected by
packages via /etc/env.d. For example, an LLVM ebuild may set
PATH="/usr/lib/llvm/9/bin".

This commit changes env-update so that a systemd user session
environment configuration file named

/etc/environment.d/10-gentoo-env.conf

is created.

Thanks to Michael 'veremitz' Everitt, Arfrever Frehtes Taifersar
Arahesis, Ulrich Müller, Joakim Tjernlund, and Zac Medico for the
useful feedback.

1: https://bugs.gentoo.org/704412

Bug: https://bugs.gentoo.org/704416
Signed-off-by: Florian Schmaus <flo <AT> geekplace.eu>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/env_update.py | 42 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 39 insertions(+), 3 deletions(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index f130b6f6b..dec086cf8 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -333,14 +333,16 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 
 	del specials["LDPATH"]
 
-	penvnotice  = "# THIS FILE IS AUTOMATICALLY GENERATED BY env-update.\n"
-	penvnotice += "# DO NOT EDIT THIS FILE. CHANGES TO STARTUP PROFILES\n"
+	notice      = "# THIS FILE IS AUTOMATICALLY GENERATED BY env-update.\n"
+	notice     += "# DO NOT EDIT THIS FILE."
+	penvnotice  = notice + " CHANGES TO STARTUP PROFILES\n"
 	cenvnotice  = penvnotice[:]
 	penvnotice += "# GO INTO /etc/profile NOT /etc/profile.env\n\n"
 	cenvnotice += "# GO INTO /etc/csh.cshrc NOT /etc/csh.env\n\n"
 
 	#create /etc/profile.env for bash support
-	outfile = atomic_ofstream(os.path.join(eroot, "etc", "profile.env"))
+	profile_env_path = os.path.join(eroot, "etc", "profile.env")
+	outfile = atomic_ofstream(profile_env_path)
 	outfile.write(penvnotice)
 
 	env_keys = [x for x in env if x != "LDPATH"]
@@ -353,6 +355,40 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 			outfile.write("export %s='%s'\n" % (k, v))
 	outfile.close()
 
+	# Create the systemd user environment configuration file
+	# /etc/environment.d/10-gentoo-env.conf with the
+	# environment configuration from /etc/env.d.
+	systemd_environment_dir = os.path.join(eroot, "etc", "environment.d")
+	os.makedirs(systemd_environment_dir, exist_ok=True)
+
+	systemd_gentoo_env_path = os.path.join(systemd_environment_dir,
+						"10-gentoo-env.conf")
+	systemd_gentoo_env = atomic_ofstream(systemd_gentoo_env_path)
+	try:
+		senvnotice = notice + "\n\n"
+		systemd_gentoo_env.write(senvnotice)
+
+		for env_key in env_keys:
+			env_key_value = env[env_key]
+
+			# Skip variables with the empty string
+			# as value. Those sometimes appear in
+			# profile.env (e.g. "export GCC_SPECS=''"),
+			# but are invalid in systemd's syntax.
+			if not env_key_value:
+				continue
+
+			# Transform into systemd environment.d
+			# conf syntax, basically shell variable
+			# assignment (without "export ").
+			line = f"{env_key}={env_key_value}\n"
+
+			systemd_gentoo_env.write(line)
+	except:
+		systemd_gentoo_env.abort()
+		raise
+	systemd_gentoo_env.close()
+
 	#create /etc/csh.env for (t)csh support
 	outfile = atomic_ofstream(os.path.join(eroot, "etc", "csh.env"))
 	outfile.write(cenvnotice)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-08-04  3:09 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-08-04  3:09 UTC (permalink / raw
  To: gentoo-commits

commit:     5d48806c78febc559d6ae726303f35dd32435474
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Tue Aug  4 02:44:58 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Aug  4 03:08:47 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=5d48806c

lib/portage/util/socks5.py: fix reimport

* This drops the internal class import of the asyncio module. It is not
  available in all supported Python versions.

Suggested-by: Zac Medico <zmedico <AT> gentoo.org>
Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/socks5.py | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/lib/portage/util/socks5.py b/lib/portage/util/socks5.py
index c0657ae2a..65d2400e8 100644
--- a/lib/portage/util/socks5.py
+++ b/lib/portage/util/socks5.py
@@ -1,5 +1,5 @@
 # SOCKSv5 proxy manager for network-sandbox
-# Copyright 2015-2019 Gentoo Authors
+# Copyright 2015-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -14,7 +14,6 @@ from portage.process import atexit_register, spawn
 from portage.util.futures.compat_coroutine import coroutine
 from portage.util.futures import asyncio
 
-
 class ProxyManager:
 	"""
 	A class to start and control a single running SOCKSv5 server process
@@ -33,10 +32,6 @@ class ProxyManager:
 		paths)
 		@type settings: portage.config
 		"""
-		try:
-			import asyncio  # NOQA
-		except ImportError:
-			raise NotImplementedError('SOCKSv5 proxy requires asyncio module')
 
 		tmpdir = os.path.join(settings['PORTAGE_TMPDIR'], 'portage')
 		ensure_dirs_kwargs = {}


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-08-04  1:39 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-08-04  1:39 UTC (permalink / raw
  To: gentoo-commits

commit:     86b9c28c6abb7193fb39fef1fe7620fc2d0bab72
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Tue Aug  4 00:16:18 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Aug  4 01:08:27 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=86b9c28c

lib/portage/util/env_update.py: fix unnecessary-semicolon

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/env_update.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index 9c6fe3cdd..7a2ee2551 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -213,7 +213,7 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env,
 		newprelink.write("# contents of /etc/env.d directory\n")
 
 		for x in sorted(potential_lib_dirs) + ['bin', 'sbin']:
-			newprelink.write('-l /%s\n' % (x,));
+			newprelink.write('-l /%s\n' % (x,))
 		prelink_paths = set()
 		prelink_paths |= set(specials.get('LDPATH', []))
 		prelink_paths |= set(specials.get('PATH', []))


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-08-03 21:42 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-08-03 21:42 UTC (permalink / raw
  To: gentoo-commits

commit:     79df13ade89cf8de236df8e59d3d0790a8a508cc
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 20:20:32 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 21:25:54 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=79df13ad

lib/portage/util/netlink.py: drop unused-import

* Drop unused-import
* Update copyright

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/netlink.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/portage/util/netlink.py b/lib/portage/util/netlink.py
index 950ed8f69..ad9e8ca30 100644
--- a/lib/portage/util/netlink.py
+++ b/lib/portage/util/netlink.py
@@ -1,4 +1,4 @@
-# Copyright 2019 Gentoo Authors
+# Copyright 2019-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from io import BytesIO
@@ -8,7 +8,6 @@ from struct import Struct
 import socket
 from socket import (
 	AF_NETLINK, AF_UNSPEC,
-	MSG_PEEK, MSG_TRUNC,
 	NETLINK_ROUTE,
 	SOCK_DGRAM,
 	inet_pton,


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-08-03 19:43 Ulrich Müller
  0 siblings, 0 replies; 47+ messages in thread
From: Ulrich Müller @ 2020-08-03 19:43 UTC (permalink / raw
  To: gentoo-commits

commit:     73bf5fc49d9e0cd98c490706240df6ae8a767cd1
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 19:43:00 2020 +0000
Commit:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 19:43:00 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=73bf5fc4

lib/portage/util/_desktop_entry.py: Fix copyright notice.

Signed-off-by: Ulrich Müller <ulm <AT> gentoo.org>

 lib/portage/util/_desktop_entry.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/_desktop_entry.py b/lib/portage/util/_desktop_entry.py
index 68cec7a61..4a49cd4ce 100644
--- a/lib/portage/util/_desktop_entry.py
+++ b/lib/portage/util/_desktop_entry.py
@@ -1,4 +1,4 @@
-# Copyright 2020 Gentoo Authors
+# Copyright 2012-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import re


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-08-03 19:30 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-08-03 19:30 UTC (permalink / raw
  To: gentoo-commits

commit:     e9ce010c55cffa440881613b8485c38a125c2ad1
Author:     Aaron Bauman <bman <AT> gentoo <DOT> org>
AuthorDate: Mon Aug  3 19:05:40 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Aug  3 19:21:07 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e9ce010c

lib/portage/util/_desktop_entry.py: fix unused-import

* Remove unused-imports
* Updated copyright

Signed-off-by: Aaron Bauman <bman <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_desktop_entry.py | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/lib/portage/util/_desktop_entry.py b/lib/portage/util/_desktop_entry.py
index 74053a30f..68cec7a61 100644
--- a/lib/portage/util/_desktop_entry.py
+++ b/lib/portage/util/_desktop_entry.py
@@ -1,16 +1,13 @@
-# Copyright 2012-2013 Gentoo Foundation
+# Copyright 2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import re
 import subprocess
 import sys
 
-import portage
-from portage import _encodings, _unicode_encode, _unicode_decode
+from portage import _unicode_encode, _unicode_decode
 from portage.util import writemsg
-from portage.util.configparser import (ConfigParserError, RawConfigParser,
-	read_configs)
-
+from portage.util.configparser import (RawConfigParser,	read_configs)
 
 def parse_desktop_entry(path):
 	"""


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-07-18 22:56 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-07-18 22:56 UTC (permalink / raw
  To: gentoo-commits

commit:     db7d19213e46a3a0185ab0cd94aed378c3aaf404
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 18 22:14:34 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Jul 18 22:54:53 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=db7d1921

validate_desktop_entry: update _trivial_warnings regex (bug 733154)

The message has changed in desktop-file-utils-0.25.

See: https://gitlab.freedesktop.org/xdg/desktop-file-utils/-/commit/e935a1b0c300d8fc97661e01a8200af14876e627
Bug: https://bugs.gentoo.org/733154
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_desktop_entry.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/_desktop_entry.py b/lib/portage/util/_desktop_entry.py
index ee6572588..9fa06b97b 100644
--- a/lib/portage/util/_desktop_entry.py
+++ b/lib/portage/util/_desktop_entry.py
@@ -25,7 +25,12 @@ def parse_desktop_entry(path):
 
 	return parser
 
-_trivial_warnings = re.compile(r' looks redundant with value ')
+_trivial_warnings = re.compile(r' looks '
+	# >=desktop-file-utils-0.25
+	r'(?:the same as that of key|'
+
+	# <desktop-file-utils-0.25
+	r'redundant with value) ')
 
 _ignored_errors = (
 		# Ignore error for emacs.desktop:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2020-03-14 23:40 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2020-03-14 23:40 UTC (permalink / raw
  To: gentoo-commits

commit:     07da257cfc80509c50104560b1e1508b9e585b98
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 14 23:18:55 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Mar 14 23:21:55 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=07da257c

compression_probe: omit zstd --long=31 on 32-bit arch (bug 710444)

Omit the zstd --long=31 argument for decompression on 32-bit
architectures, since the latest version of zstd will otherwise
abort with an error on 32-bit architectures.

Bug: https://bugs.gentoo.org/710444
Bug: https://bugs.gentoo.org/634980
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/compression_probe.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/portage/util/compression_probe.py b/lib/portage/util/compression_probe.py
index 90880b1cd..7d595670b 100644
--- a/lib/portage/util/compression_probe.py
+++ b/lib/portage/util/compression_probe.py
@@ -1,6 +1,7 @@
-# Copyright 2015 Gentoo Foundation
+# Copyright 2015-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
+import ctypes
 import errno
 import re
 import sys
@@ -45,7 +46,12 @@ _compressors = {
 	},
 	"zstd": {
 		"compress": "zstd ${BINPKG_COMPRESS_FLAGS}",
-		"decompress": "zstd -d --long=31",
+		# If the compression windowLog was larger than the default of 27,
+		# then --long=windowLog needs to be passed to the decompressor.
+		# Therefore, pass a larger --long=31 value to the decompressor
+		# if the current architecture can support it, which is true when
+		# sizeof(long) is at least 8 bytes.
+		"decompress": "zstd -d" + (" --long=31" if ctypes.sizeof(ctypes.c_long) >= 8 else ""),
 		"package": "app-arch/zstd",
 	},
 }


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-10-19  6:03 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2019-10-19  6:03 UTC (permalink / raw
  To: gentoo-commits

commit:     c366e1a755ed4d6b49883b8d8b20629fe32b6b43
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 19 05:46:53 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Oct 19 05:59:07 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c366e1a7

urlopen: eliminate deprecated urllib.parse.splituser

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_urlopen.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/lib/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py
index fc9db74a0..1d8ba3fd3 100644
--- a/lib/portage/util/_urlopen.py
+++ b/lib/portage/util/_urlopen.py
@@ -1,4 +1,4 @@
-# Copyright 2012-2014 Gentoo Foundation
+# Copyright 2012-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import io
@@ -11,12 +11,10 @@ try:
 	from urllib.request import urlopen as _urlopen
 	import urllib.parse as urllib_parse
 	import urllib.request as urllib_request
-	from urllib.parse import splituser as urllib_parse_splituser
 except ImportError:
 	from urllib import urlopen as _urlopen
 	import urlparse as urllib_parse
 	import urllib2 as urllib_request
-	from urllib import splituser as urllib_parse_splituser
 
 if sys.hexversion >= 0x3000000:
 	# pylint: disable=W0622
@@ -43,7 +41,7 @@ def urlopen(url, if_modified_since=None):
 	if parse_result.scheme not in ("http", "https"):
 		return _urlopen(url)
 	else:
-		netloc = urllib_parse_splituser(parse_result.netloc)[1]
+		netloc = parse_result.netloc.rpartition('@')[-1]
 		url = urllib_parse.urlunparse((parse_result.scheme, netloc, parse_result.path, parse_result.params, parse_result.query, parse_result.fragment))
 		password_manager = urllib_request.HTTPPasswordMgrWithDefaultRealm()
 		request = urllib_request.Request(url)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-08-08 22:58 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2019-08-08 22:58 UTC (permalink / raw
  To: gentoo-commits

commit:     90ffe62d5b7b224753927f2fa61daf19488e14f9
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Wed Aug  7 02:41:51 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Aug  8 22:57:28 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=90ffe62d

_xattr._XattrSystemCommands.{get,list}: Do not hide stderr and fix ResourceWarning.

Bug: https://bugs.gentoo.org/691638
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_xattr.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/portage/util/_xattr.py b/lib/portage/util/_xattr.py
index 9a8704d70..c118589a3 100644
--- a/lib/portage/util/_xattr.py
+++ b/lib/portage/util/_xattr.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2015 Gentoo Foundation
+# Copyright 2010-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 """Portability shim for xattr support
@@ -63,7 +63,7 @@ class _XattrSystemCommands(_XattrGetAll):
 		cmd = ['getfattr', '--absolute-names', '-n', name, item]
 		if nofollow:
 			cmd += ['-h']
-		proc = cls._call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+		proc = cls._call(cmd, stdout=subprocess.PIPE)
 
 		value = None
 		for _, value in cls._parse_output(proc.stdout):
@@ -94,7 +94,7 @@ class _XattrSystemCommands(_XattrGetAll):
 		if nofollow:
 			cmd += ['-h']
 		cmd += ['-m', ('^%s[.]' % namespace) if namespace else '-']
-		proc = cls._call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+		proc = cls._call(cmd, stdout=subprocess.PIPE)
 
 		ret = []
 		if namespace:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-05-20  4:46 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2019-05-20  4:46 UTC (permalink / raw
  To: gentoo-commits

commit:     f69c2596ff6f483bec55c17918e4e17df6236b89
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Mon May 13 15:15:03 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon May 20 04:44:54 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f69c2596

get_vm_info: Set C locale for subprocesses.

Parsing of localized output of subprocesses would fail, making
`emerge --info` not display information about memory and swap.

Bug: https://bugs.gentoo.org/685854
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/_get_vm_info.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/portage/util/_get_vm_info.py b/lib/portage/util/_get_vm_info.py
index e8ad93805..802365dd7 100644
--- a/lib/portage/util/_get_vm_info.py
+++ b/lib/portage/util/_get_vm_info.py
@@ -1,4 +1,4 @@
-# Copyright 2013 Gentoo Foundation
+# Copyright 2013-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import os
@@ -11,10 +11,13 @@ def get_vm_info():
 
 	vm_info = {}
 
+	env = os.environ.copy()
+	env["LC_ALL"] = "C"
+
 	if platform.system() == 'Linux':
 		try:
 			proc = subprocess.Popen(["free"],
-				stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+				stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
 		except OSError:
 			pass
 		else:
@@ -49,7 +52,7 @@ def get_vm_info():
 
 		try:
 			proc = subprocess.Popen(["sysctl", "-a"],
-				stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+				stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
 		except OSError:
 			pass
 		else:


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-04-15 23:04 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2019-04-15 23:04 UTC (permalink / raw
  To: gentoo-commits

commit:     63b509e6d2c0db4343b255455fda1aa3b666bd9c
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 11 03:07:09 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Apr 15 23:03:54 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=63b509e6

socks5: use ${PORTAGE_TMPDIR}/portage (bug 683040)

Write temporary socket files in ${PORTAGE_TMPDIR}/portage,
since writing files directly in ${PORTAGE_TMPDIR} is generally
unexpected.

Bug: https://bugs.gentoo.org/683040
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/socks5.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/portage/util/socks5.py b/lib/portage/util/socks5.py
index 59e6699ec..86bb24f25 100644
--- a/lib/portage/util/socks5.py
+++ b/lib/portage/util/socks5.py
@@ -38,7 +38,15 @@ class ProxyManager(object):
 		except ImportError:
 			raise NotImplementedError('SOCKSv5 proxy requires asyncio module')
 
-		self.socket_path = os.path.join(settings['PORTAGE_TMPDIR'],
+		tmpdir = os.path.join(settings['PORTAGE_TMPDIR'], 'portage')
+		ensure_dirs_kwargs = {}
+		if portage.secpass >= 1:
+			ensure_dirs_kwargs['gid'] = portage_gid
+			ensure_dirs_kwargs['mode'] = 0o70
+			ensure_dirs_kwargs['mask'] = 0
+		portage.util.ensure_dirs(tmpdir, **ensure_dirs_kwargs)
+
+		self.socket_path = os.path.join(tmpdir,
 				'.portage.%d.net.sock' % os.getpid())
 		server_bin = os.path.join(settings['PORTAGE_BIN_PATH'], 'socks5-server.py')
 		spawn_kwargs = {}


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-02-16 17:42 Robin H. Johnson
  0 siblings, 0 replies; 47+ messages in thread
From: Robin H. Johnson @ 2019-02-16 17:42 UTC (permalink / raw
  To: gentoo-commits

commit:     33ece61c9ca1d0be1d14306ed183477fbe755793
Author:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 16 17:42:18 2019 +0000
Commit:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Sat Feb 16 17:42:18 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=33ece61c

util: fix whitespace bug introduced in cleanup of get_cpu_count work

Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

 lib/portage/util/cpuinfo.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/cpuinfo.py b/lib/portage/util/cpuinfo.py
index 9ab1c119d..78b969f47 100644
--- a/lib/portage/util/cpuinfo.py
+++ b/lib/portage/util/cpuinfo.py
@@ -31,7 +31,7 @@ def get_cpu_count():
 
 	@return: Number of CPUs or None if unable to obtain.
 	"""
-        try:
+	try:
 		import os
 		# This was introduced in Python 3.3 only, but exists in Linux
 		# all the way back to the 2.5.8 kernel.


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-02-16 16:48 Robin H. Johnson
  0 siblings, 0 replies; 47+ messages in thread
From: Robin H. Johnson @ 2019-02-16 16:48 UTC (permalink / raw
  To: gentoo-commits

commit:     00354a2443c1a0f7f64d55daadd52324868b085f
Author:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 16 06:06:41 2019 +0000
Commit:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Sat Feb 16 06:06:41 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=00354a24

cpuinfo: use better available CPU calculation

The existing portage.util.cpuinfo.get_cpu_count() behavior is wrong when
run in any environment where the cpuset is a subset of online CPUs.

The solution recommended by the 'os.cpu_count()' help is to use:
 len(os.sched_getaffinity(0))

This only works on line, so keep multiprocessing.cpu_count() as a
fallback. In newer version of Python, multiprocessing.cpu_count() is a
wrapper for os.cpu_count().

Reported-By: Daniel Robbins <drobbins <AT> funtoo.org>
Fixes: https://bugs.funtoo.org/browse/FL-6227
Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

 lib/portage/util/cpuinfo.py | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/lib/portage/util/cpuinfo.py b/lib/portage/util/cpuinfo.py
index 669e707b5..9ab1c119d 100644
--- a/lib/portage/util/cpuinfo.py
+++ b/lib/portage/util/cpuinfo.py
@@ -1,15 +1,44 @@
-# Copyright 2015 Gentoo Foundation
+# Copyright 2015-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['get_cpu_count']
 
+# Before you set out to change this function, figure out what you're really
+# asking:
+#
+# - How many CPUs exist in this system (e.g. that the kernel is aware of?)
+#   This is 'getconf _NPROCESSORS_CONF' / get_nprocs_conf(3)
+#   In modern Linux, implemented by counting CPUs in /sys/devices/system/cpu/
+#
+# - How many CPUs in this system are ONLINE right now?
+#   This is 'getconf _NPROCESSORS_ONLN' / get_nprocs(3)
+#   In modern Linux, implemented by parsing /sys/devices/system/cpu/online
+#
+# - How many CPUs are available to this program?
+#   This is 'nproc' / sched_getaffinity(2), which is implemented in modern
+#   Linux kernels by querying the kernel scheduler; This might not be available
+#   in some non-Linux systems!
+#
+# - How many CPUs are available to this thread?
+#   This is pthread_getaffinity_np(3)
+#
+# As a further warning, the results returned by this function can differ
+# between runs, if altered by the scheduler or other external factors.
 
 def get_cpu_count():
 	"""
-	Try to obtain the number of CPUs available.
+	Try to obtain the number of CPUs available to this process.
 
 	@return: Number of CPUs or None if unable to obtain.
 	"""
+        try:
+		import os
+		# This was introduced in Python 3.3 only, but exists in Linux
+		# all the way back to the 2.5.8 kernel.
+		# This NOT available in FreeBSD!
+		return len(os.sched_getaffinity(0))
+	except (ImportError, NotImplementedError, AttributeError):
+		pass
 
 	try:
 		import multiprocessing


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2019-02-06 22:45 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2019-02-06 22:45 UTC (permalink / raw
  To: gentoo-commits

commit:     42c120139aeb72a12299593d8601cb13d00f0547
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Feb  6 22:44:08 2019 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Feb  6 22:44:45 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=42c12013

_raise_exc: handle EROFS

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/install_mask.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/portage/util/install_mask.py b/lib/portage/util/install_mask.py
index a8c0cbda5..037fc8bc3 100644
--- a/lib/portage/util/install_mask.py
+++ b/lib/portage/util/install_mask.py
@@ -1,4 +1,4 @@
-# Copyright 2018 Gentoo Foundation
+# Copyright 2018-2019 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['install_mask_dir', 'InstallMask']
@@ -12,7 +12,7 @@ import sys
 
 from portage import os, _unicode_decode
 from portage.exception import (
-	OperationNotPermitted, PermissionDenied, FileNotFound)
+	OperationNotPermitted, PermissionDenied, ReadOnlyFileSystem, FileNotFound)
 from portage.util import normalize_path
 
 if sys.hexversion >= 0x3000000:
@@ -130,6 +130,7 @@ _exc_map = {
 	errno.ENOENT: FileNotFound,
 	errno.EPERM: OperationNotPermitted,
 	errno.EACCES: PermissionDenied,
+	errno.EROFS: ReadOnlyFileSystem,
 }
 
 


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2018-12-17  7:09 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2018-12-17  7:09 UTC (permalink / raw
  To: gentoo-commits

commit:     d2e1c414c4cec97b1a2d3343d60016c100fe9062
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 17 06:35:28 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Dec 17 06:44:24 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=d2e1c414

ExtractKernelVersion: use KeyValuePairFileLoader (bug 673224)

Use KeyValuePairFileLoader to parse the kernel config and report errors
without raising an exception. Silently handle empty settings like the
CONFIG_UEVENT_HELPER_PATH= setting that triggered the ParseError reported
in bug 673224.

Bug: https://bugs.gentoo.org/673224
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/util/ExtractKernelVersion.py | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/lib/portage/util/ExtractKernelVersion.py b/lib/portage/util/ExtractKernelVersion.py
index af4a4fe63..d02d648cb 100644
--- a/lib/portage/util/ExtractKernelVersion.py
+++ b/lib/portage/util/ExtractKernelVersion.py
@@ -1,12 +1,14 @@
-# Copyright 2010-2011 Gentoo Foundation
+# Copyright 2010-2018 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['ExtractKernelVersion']
 
 import io
+import logging
 
 from portage import os, _encodings, _unicode_encode
-from portage.util import getconfig, grabfile
+from portage.env.loaders import KeyValuePairFileLoader
+from portage.util import grabfile, shlex_split, writemsg_level
 
 def ExtractKernelVersion(base_dir):
 	"""
@@ -71,8 +73,15 @@ def ExtractKernelVersion(base_dir):
 		version += "".join(" ".join(grabfile(base_dir + "/" + lv)).split())
 
 	# Check the .config for a CONFIG_LOCALVERSION and append that too, also stripping whitespace
-	kernelconfig = getconfig(base_dir+"/.config")
+	loader = KeyValuePairFileLoader(os.path.join(base_dir, ".config"), None)
+	kernelconfig, loader_errors = loader.load()
+	if loader_errors:
+		for file_path, file_errors in loader_errors.items():
+			for error_str in file_errors:
+				writemsg_level("%s: %s\n" % (file_path, error_str),
+					level=logging.ERROR, noiselevel=-1)
+
 	if kernelconfig and "CONFIG_LOCALVERSION" in kernelconfig:
-		version += "".join(kernelconfig["CONFIG_LOCALVERSION"].split())
+		version += "".join(shlex_split(kernelconfig["CONFIG_LOCALVERSION"]))
 
 	return (version, None)


^ permalink raw reply related	[flat|nested] 47+ messages in thread
* [gentoo-commits] proj/portage:master commit in: lib/portage/util/
@ 2018-08-04 20:27 Zac Medico
  0 siblings, 0 replies; 47+ messages in thread
From: Zac Medico @ 2018-08-04 20:27 UTC (permalink / raw
  To: gentoo-commits

commit:     f391b2cc5384fc38e99a0598cb3de2346e297c25
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Aug  4 20:18:47 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Aug  4 20:25:23 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f391b2cc

compression_probe: decompress zstd --long=31 (bug 634980)

In order to decompress files compressed with zstd --long=31, add
--long=31 to the zstd decompress options. Even though zstd compression
does not support --long=31 on 32-bit platforms, decompression with
--long=31 still works as long as the file was compressed with a
smaller windowLog.

Reported-by: Martin Väth <martin <AT> mvath.de>
Bug: https://bugs.gentoo.org/634980

 lib/portage/util/compression_probe.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/portage/util/compression_probe.py b/lib/portage/util/compression_probe.py
index 29d0eedff..90880b1cd 100644
--- a/lib/portage/util/compression_probe.py
+++ b/lib/portage/util/compression_probe.py
@@ -45,7 +45,7 @@ _compressors = {
 	},
 	"zstd": {
 		"compress": "zstd ${BINPKG_COMPRESS_FLAGS}",
-		"decompress": "zstd -d",
+		"decompress": "zstd -d --long=31",
 		"package": "app-arch/zstd",
 	},
 }


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

end of thread, other threads:[~2024-08-15 17:30 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-10 18:20 [gentoo-commits] proj/portage:master commit in: lib/portage/util/ Zac Medico
  -- strict thread matches above, loose matches on Subject: below --
2024-08-15 17:30 Mike Gilbert
2024-05-27 20:02 Zac Medico
2024-03-07 20:42 Mike Gilbert
2024-03-01 16:20 Mike Gilbert
2024-02-09  8:22 Zac Medico
2024-02-07  2:35 Zac Medico
2023-10-02 21:40 James Le Cuirot
2023-07-26 14:30 Mike Gilbert
2023-07-26  7:58 Sam James
2023-07-26  7:58 Sam James
2023-06-29  8:19 Sam James
2023-06-06  6:52 Sam James
2022-12-31 13:33 Sam James
2022-06-07 23:48 Mike Gilbert
2022-06-07 23:48 Mike Gilbert
2022-05-21 10:12 Michał Górny
2022-04-15  2:46 Sam James
2021-05-24  6:13 Zac Medico
2021-03-07 16:04 Zac Medico
2021-03-06 20:21 Zac Medico
2021-03-03 12:20 Zac Medico
2021-02-25 10:21 Zac Medico
2021-01-19  0:50 Zac Medico
2021-01-02  1:18 Zac Medico
2020-12-31  2:17 Zac Medico
2020-12-31  2:17 Zac Medico
2020-11-22 19:41 Zac Medico
2020-11-22  6:20 Zac Medico
2020-10-06  1:35 Zac Medico
2020-09-08  0:04 Zac Medico
2020-08-04  3:09 Zac Medico
2020-08-04  1:39 Zac Medico
2020-08-03 21:42 Zac Medico
2020-08-03 19:43 Ulrich Müller
2020-08-03 19:30 Zac Medico
2020-07-18 22:56 Zac Medico
2020-03-14 23:40 Zac Medico
2019-10-19  6:03 Zac Medico
2019-08-08 22:58 Zac Medico
2019-05-20  4:46 Zac Medico
2019-04-15 23:04 Zac Medico
2019-02-16 17:42 Robin H. Johnson
2019-02-16 16:48 Robin H. Johnson
2019-02-06 22:45 Zac Medico
2018-12-17  7:09 Zac Medico
2018-08-04 20:27 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox