define link a b create a link a b link a b link c d remove b link-or-copy a b remove b ---- link: a -> b [file does not exist] create: a [] close: a [] link: a -> b [] link: a -> b [file already exists] link: c -> d [file does not exist] remove: b [] link: a -> b [] remove: b [] define linkErr=ErrExist create a link a b link-or-copy a b ---- create: a [] close: a [] link: a -> b [file already exists] link: a -> b [file already exists] define linkErr=ErrNotExist create a link a b link-or-copy a b ---- create: a [] close: a [] link: a -> b [file does not exist] link: a -> b [file does not exist] define linkErr=ErrPermission create a link a b link-or-copy a b ---- create: a [] close: a [] link: a -> b [permission denied] link: a -> b [permission denied] define linkErr=random create a link a b link-or-copy a b ---- create: a [] close: a [] link: a -> b [random] link: a -> b [random] open: a [] create: b [] sync: b [] close: b [] close: a [] define mkdir d create d/a mkdir d/b create d/b/c ---- mkdir: d [] create: d/a [] close: a [] mkdir: d/b [] create: d/b/c [] close: c [] # NB: This clone does not specify a destination FS, so the clone target will be # the same FS. This results in the use of link. define clone d e link ---- open: d [] mkdir: e [] open: d/a [] link: d/a -> e/a [random] open: d/a [] create: e/a [] sync: a [] close: a [] close: d/a [] close: d/a [] open: d/b [] mkdir: e/b [] open: d/b/c [] link: d/b/c -> e/b/c [random] open: d/b/c [] create: e/b/c [] sync: c [] close: c [] close: d/b/c [] close: d/b/c [] close: d/b [] close: d [] define list e ---- a b define list e/b ---- c define list / remove e remove-all e remove-all e remove-all e/a/b/c list / ---- a b d e remove: e [file already exists] remove-all: e [] remove-all: e [] remove-all: e/a/b/c [] a b d define reuseForWrite a b reuseForWrite x y ---- reuseForWrite: a -> b [] reuseForWrite: x -> y [file does not exist] # NB: This clone target specified a different FS. This results in no use of # link, despite link being provided. define clone d f mem link ---- open: d [] mkdir: f [] open: d/a [] create: f/a [] close: a [] close: d/a [] open: d/b [] mkdir: f/b [] open: d/b/c [] create: f/b/c [] close: c [] close: d/b/c [] close: d/b [] close: d [] # NB: This clone does not specify link, so all files are copied. It does specify # sync, so all files and directories are synced. define clone d g sync ---- open: d [] mkdir: g [] open: d/a [] create: g/a [] sync: a [] close: a [] close: d/a [] open: d/b [] mkdir: g/b [] open: d/b/c [] create: g/b/c [] sync: c [] close: c [] close: d/b/c [] close: d/b [] close: d []