Installations: don't set group permissions when they match what is desired (#38036)
* When installing a package Spack will attempt to set group permissions on the install prefix even when the configuration does not specify a group. Co-authored-by: David Gomez <dvdgomez@users.noreply.github.com>
This commit is contained in:
parent
a90200528f
commit
f365386447
@ -610,6 +610,8 @@ def chgrp(path, group, follow_symlinks=True):
|
|||||||
gid = grp.getgrnam(group).gr_gid
|
gid = grp.getgrnam(group).gr_gid
|
||||||
else:
|
else:
|
||||||
gid = group
|
gid = group
|
||||||
|
if os.stat(path).st_gid == gid:
|
||||||
|
return
|
||||||
if follow_symlinks:
|
if follow_symlinks:
|
||||||
os.chown(path, -1, gid)
|
os.chown(path, -1, gid)
|
||||||
else:
|
else:
|
||||||
|
@ -502,6 +502,40 @@ def test_filter_files_with_different_encodings(regex, replacement, filename, tmp
|
|||||||
assert replacement in f.read()
|
assert replacement in f.read()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.platform == "win32", reason="chgrp isn't used on Windows")
|
||||||
|
def test_chgrp_dont_set_group_if_already_set(tmpdir, monkeypatch):
|
||||||
|
with fs.working_dir(tmpdir):
|
||||||
|
os.mkdir("test-dir_chgrp_dont_set_group_if_already_set")
|
||||||
|
|
||||||
|
def _fail(*args, **kwargs):
|
||||||
|
raise Exception("chrgrp should not be called")
|
||||||
|
|
||||||
|
class FakeStat(object):
|
||||||
|
def __init__(self, gid):
|
||||||
|
self.st_gid = gid
|
||||||
|
|
||||||
|
original_stat = os.stat
|
||||||
|
|
||||||
|
def _stat(*args, **kwargs):
|
||||||
|
path = args[0]
|
||||||
|
if path == "test-dir_chgrp_dont_set_group_if_already_set":
|
||||||
|
return FakeStat(gid=1001)
|
||||||
|
else:
|
||||||
|
# Monkeypatching stat can interfere with post-test cleanup, so for
|
||||||
|
# paths that aren't part of the test, we want the original behavior
|
||||||
|
# of stat
|
||||||
|
return original_stat(*args, **kwargs)
|
||||||
|
|
||||||
|
monkeypatch.setattr(os, "chown", _fail)
|
||||||
|
monkeypatch.setattr(os, "lchown", _fail)
|
||||||
|
monkeypatch.setattr(os, "stat", _stat)
|
||||||
|
|
||||||
|
with fs.working_dir(tmpdir):
|
||||||
|
with pytest.raises(Exception):
|
||||||
|
fs.chgrp("test-dir_chgrp_dont_set_group_if_already_set", 1002)
|
||||||
|
fs.chgrp("test-dir_chgrp_dont_set_group_if_already_set", 1001)
|
||||||
|
|
||||||
|
|
||||||
def test_filter_files_multiple(tmpdir):
|
def test_filter_files_multiple(tmpdir):
|
||||||
# All files given as input to this test must satisfy the pre-requisite
|
# All files given as input to this test must satisfy the pre-requisite
|
||||||
# that the 'replacement' string is not present in the file initially and
|
# that the 'replacement' string is not present in the file initially and
|
||||||
|
Loading…
Reference in New Issue
Block a user