diff --git a/internal/system/acl.go b/internal/system/acl.go index f8f1dc6..efc4884 100644 --- a/internal/system/acl.go +++ b/internal/system/acl.go @@ -9,16 +9,20 @@ import ( ) // UpdatePerm appends an ephemeral acl update Op. -func (sys *I) UpdatePerm(path string, perms ...acl.Perm) { +func (sys *I) UpdatePerm(path string, perms ...acl.Perm) *I { sys.UpdatePermType(Process, path, perms...) + + return sys } // UpdatePermType appends an acl update Op. -func (sys *I) UpdatePermType(et Enablement, path string, perms ...acl.Perm) { +func (sys *I) UpdatePermType(et Enablement, path string, perms ...acl.Perm) *I { sys.lock.Lock() defer sys.lock.Unlock() sys.ops = append(sys.ops, &ACL{et, path, perms}) + + return sys } type ACL struct { diff --git a/internal/system/mkdir.go b/internal/system/mkdir.go index 0f3787f..c868bee 100644 --- a/internal/system/mkdir.go +++ b/internal/system/mkdir.go @@ -9,19 +9,23 @@ import ( ) // Ensure the existence and mode of a directory. -func (sys *I) Ensure(name string, perm os.FileMode) { +func (sys *I) Ensure(name string, perm os.FileMode) *I { sys.lock.Lock() defer sys.lock.Unlock() sys.ops = append(sys.ops, &Mkdir{User, name, perm, false}) + + return sys } // Ephemeral ensures the temporary existence and mode of a directory through the life of et. -func (sys *I) Ephemeral(et Enablement, name string, perm os.FileMode) { +func (sys *I) Ephemeral(et Enablement, name string, perm os.FileMode) *I { sys.lock.Lock() defer sys.lock.Unlock() sys.ops = append(sys.ops, &Mkdir{et, name, perm, true}) + + return sys } type Mkdir struct { diff --git a/internal/system/tmpfiles.go b/internal/system/tmpfiles.go index 9215bd3..7300f30 100644 --- a/internal/system/tmpfiles.go +++ b/internal/system/tmpfiles.go @@ -12,44 +12,50 @@ import ( ) // CopyFile registers an Op that copies path dst from src. -func (sys *I) CopyFile(dst, src string) { - sys.CopyFileType(Process, dst, src) +func (sys *I) CopyFile(dst, src string) *I { + return sys.CopyFileType(Process, dst, src) } // CopyFileType registers a file copying Op labelled with type et. -func (sys *I) CopyFileType(et Enablement, dst, src string) { +func (sys *I) CopyFileType(et Enablement, dst, src string) *I { sys.lock.Lock() sys.ops = append(sys.ops, &Tmpfile{et, tmpfileCopy, dst, src}) sys.lock.Unlock() sys.UpdatePermType(et, dst, acl.Read) + + return sys } // Link registers an Op that links dst to src. -func (sys *I) Link(oldname, newname string) { - sys.LinkFileType(Process, oldname, newname) +func (sys *I) Link(oldname, newname string) *I { + return sys.LinkFileType(Process, oldname, newname) } // LinkFileType registers a file linking Op labelled with type et. -func (sys *I) LinkFileType(et Enablement, oldname, newname string) { +func (sys *I) LinkFileType(et Enablement, oldname, newname string) *I { sys.lock.Lock() defer sys.lock.Unlock() sys.ops = append(sys.ops, &Tmpfile{et, tmpfileLink, newname, oldname}) + + return sys } // Write registers an Op that writes dst with the contents of src. -func (sys *I) Write(dst, src string) { - sys.WriteType(Process, dst, src) +func (sys *I) Write(dst, src string) *I { + return sys.WriteType(Process, dst, src) } // WriteType registers a file writing Op labelled with type et. -func (sys *I) WriteType(et Enablement, dst, src string) { +func (sys *I) WriteType(et Enablement, dst, src string) *I { sys.lock.Lock() sys.ops = append(sys.ops, &Tmpfile{et, tmpfileWrite, dst, src}) sys.lock.Unlock() sys.UpdatePermType(et, dst, acl.Read) + + return sys } const ( diff --git a/internal/system/xhost.go b/internal/system/xhost.go index 51c8d24..3046394 100644 --- a/internal/system/xhost.go +++ b/internal/system/xhost.go @@ -8,11 +8,13 @@ import ( ) // ChangeHosts appends an X11 ChangeHosts command Op. -func (sys *I) ChangeHosts(username string) { +func (sys *I) ChangeHosts(username string) *I { sys.lock.Lock() defer sys.lock.Unlock() sys.ops = append(sys.ops, XHost(username)) + + return sys } type XHost string