Make fridge-copy able to chown files
This commit is contained in:
parent
7fbf526c8b
commit
846695cfa6
@ -44,7 +44,7 @@ from scone.default.utensils.basic_utensils import (
|
|||||||
from scone.head.head import Head
|
from scone.head.head import Head
|
||||||
from scone.head.kitchen import Kitchen, Preparation
|
from scone.head.kitchen import Kitchen, Preparation
|
||||||
from scone.head.recipe import Recipe, RecipeContext
|
from scone.head.recipe import Recipe, RecipeContext
|
||||||
from scone.head.utils import check_type
|
from scone.head.utils import check_type, check_type_opt
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -85,6 +85,9 @@ class FridgeCopy(Recipe):
|
|||||||
self.fridge_meta: FridgeMetadata = meta
|
self.fridge_meta: FridgeMetadata = meta
|
||||||
self.mode = parse_mode(mode, directory=False)
|
self.mode = parse_mode(mode, directory=False)
|
||||||
|
|
||||||
|
self.targ_user = check_type_opt(args.get("owner"), str)
|
||||||
|
self.targ_group = check_type_opt(args.get("group"), str)
|
||||||
|
|
||||||
self._desugared_src = desugared_src
|
self._desugared_src = desugared_src
|
||||||
|
|
||||||
def prepare(self, preparation: Preparation, head: Head) -> None:
|
def prepare(self, preparation: Preparation, head: Head) -> None:
|
||||||
@ -92,6 +95,12 @@ class FridgeCopy(Recipe):
|
|||||||
preparation.provides("file", str(self.destination))
|
preparation.provides("file", str(self.destination))
|
||||||
preparation.needs("directory", str(self.destination.parent))
|
preparation.needs("directory", str(self.destination.parent))
|
||||||
|
|
||||||
|
if self.targ_user:
|
||||||
|
preparation.needs("os-user", self.targ_user)
|
||||||
|
|
||||||
|
if self.targ_group:
|
||||||
|
preparation.needs("os-group", self.targ_group)
|
||||||
|
|
||||||
async def cook(self, k: Kitchen) -> None:
|
async def cook(self, k: Kitchen) -> None:
|
||||||
data = await load_and_transform(
|
data = await load_and_transform(
|
||||||
k, self.fridge_meta, self.real_path, self.recipe_context.variables
|
k, self.fridge_meta, self.real_path, self.recipe_context.variables
|
||||||
@ -103,6 +112,13 @@ class FridgeCopy(Recipe):
|
|||||||
if await chan.recv() != "OK":
|
if await chan.recv() != "OK":
|
||||||
raise RuntimeError(f"WriteFail failed on fridge-copy to {self.destination}")
|
raise RuntimeError(f"WriteFail failed on fridge-copy to {self.destination}")
|
||||||
|
|
||||||
|
if self.targ_user or self.targ_group:
|
||||||
|
await k.ut0(Chown(
|
||||||
|
dest_str,
|
||||||
|
self.targ_user,
|
||||||
|
self.targ_group
|
||||||
|
))
|
||||||
|
|
||||||
# this is the wrong thing
|
# this is the wrong thing
|
||||||
# hash_of_data = sha256_bytes(data)
|
# hash_of_data = sha256_bytes(data)
|
||||||
# k.get_dependency_tracker().register_remote_file(dest_str, hash_of_data)
|
# k.get_dependency_tracker().register_remote_file(dest_str, hash_of_data)
|
||||||
|
@ -22,7 +22,7 @@ import os
|
|||||||
import pwd
|
import pwd
|
||||||
import shutil
|
import shutil
|
||||||
import stat
|
import stat
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
@ -117,8 +117,8 @@ class Stat(Utensil):
|
|||||||
@attr.s(auto_attribs=True)
|
@attr.s(auto_attribs=True)
|
||||||
class Chown(Utensil):
|
class Chown(Utensil):
|
||||||
path: str
|
path: str
|
||||||
user: str
|
user: Optional[str]
|
||||||
group: str
|
group: Optional[str]
|
||||||
|
|
||||||
async def execute(self, channel: Channel, worktop):
|
async def execute(self, channel: Channel, worktop):
|
||||||
shutil.chown(self.path, self.user, self.group)
|
shutil.chown(self.path, self.user, self.group)
|
||||||
|
Loading…
Reference in New Issue
Block a user