parentFd, baseName, err := OpenParentDirectoryNoSymlinks(file.Path)
if err != nil {
+ if os.IsNotExist(err) && s.req.DryRun {
+ change.Created = true
+ debugf("will create (parent missing)")
+ *changed = true
+ debugf("dry-run, skipping changes")
+ s.resp.FileChanges = append(s.resp.FileChanges, change)
+ return nil
+ }
return err
}
defer unix.Close(parentFd)
nil,
},
+ {
+ "file: create, missing parent (dry-run)",
+ safcm.MsgSyncReq{
+ DryRun: true,
+ },
+ &safcm.File{
+ Path: "does-not-exist/file",
+ Mode: 0644,
+ Uid: -1,
+ Gid: -1,
+ Data: []byte("content\n"),
+ OrigGroup: "group",
+ },
+ nil,
+ true,
+ []ft.File{root},
+ safcm.MsgSyncResp{
+ FileChanges: []safcm.FileChange{
+ {
+ Path: "does-not-exist/file",
+ Created: true,
+ New: safcm.FileChangeInfo{
+ Mode: 0644,
+ User: user,
+ Uid: uid,
+ Group: group,
+ Gid: gid,
+ },
+ },
+ },
+ },
+ []string{
+ `4: files: "does-not-exist/file" (group): will create (parent missing)`,
+ `4: files: "does-not-exist/file" (group): dry-run, skipping changes`,
+ },
+ nil,
+ },
+
{
"file: unchanged",
safcm.MsgSyncReq{},
nil,
},
+ {
+ "directory: create, missing parent (dry-run)",
+ safcm.MsgSyncReq{
+ DryRun: true,
+ },
+ &safcm.File{
+ Path: "does-not-exist/dir",
+ Mode: fs.ModeDir | 0755,
+ Uid: -1,
+ Gid: -1,
+ OrigGroup: "group",
+ },
+ nil,
+ true,
+ []ft.File{root},
+ safcm.MsgSyncResp{
+ FileChanges: []safcm.FileChange{
+ {
+ Path: "does-not-exist/dir",
+ Created: true,
+ New: safcm.FileChangeInfo{
+ Mode: fs.ModeDir | 0755,
+ User: user,
+ Uid: uid,
+ Group: group,
+ Gid: gid,
+ },
+ },
+ },
+ },
+ []string{
+ `4: files: "does-not-exist/dir" (group): will create (parent missing)`,
+ `4: files: "does-not-exist/dir" (group): dry-run, skipping changes`,
+ },
+ nil,
+ },
+
{
"directory: unchanged",
safcm.MsgSyncReq{},