| CommandDisconnect Connections
| CommandAddTree RepoName PreferredContentExpression
| CommandAdd RawFilePath ByteSize [RepoName]
+ | CommandAddMulti Int String ByteSize ByteSize [RepoName]
| CommandStep Int
| CommandAction SimAction
| CommandSeed Int
{ simFiles = M.insert file k (simFiles st')
}
in go k st'' rest
+applySimCommand' (CommandAddMulti n suffix minsz maxsz repos) st repobyname =
+ let (sz, st') = simRandom st (randomR (minsz, maxsz)) id
+ file = toRawFilePath (show n ++ suffix)
+ in case applySimCommand' (CommandAdd file sz repos) st' repobyname of
+ Left err -> Left err
+ Right (Right st'') ->
+ case pred n of
+ 0 -> Right (Right st'')
+ n' -> applySimCommand' (CommandAddMulti n' suffix minsz maxsz repos) st'' repobyname
+ Right (Left _) -> error "applySimCommand' CommandAddMulti"
applySimCommand' (CommandStep _) _ _ = error "applySimCommand' CommandStep"
applySimCommand' (CommandAction act) st _ =
case getSimActionComponents act st of
["addtree", name, expr] : go rest
go (CommandAdd f sz repos : rest) =
(["add", fromRawFilePath f, showsize sz] ++ map fromRepoName repos) : go rest
+ go (CommandAddMulti n suffix minsz maxsz repos : rest) =
+ (["addmulti", show n, suffix, showsize minsz, showsize maxsz] ++ map fromRepoName repos) : go rest
go (CommandStep n : rest) =
["step", show n] : go rest
go (CommandAction act : rest) = formatAction act : go rest
sz
(map RepoName repos)
Nothing -> Left $ "Unable to parse file size \"" ++ size ++ "\""
+parseSimCommand ("addmulti":num:suffix:minsize:maxsize:repos) =
+ case readSize dataUnits minsize of
+ Just minsz -> case readSize dataUnits maxsize of
+ Just maxsz -> case readMaybe num of
+ Just n -> Right $ CommandAddMulti
+ n suffix minsz maxsz
+ (map RepoName repos)
+ Nothing -> Left $ "Unable to parse number \"" ++ num ++ "\""
+ Nothing -> Left $ "Unable to parse file size \"" ++ maxsize ++ "\""
+ Nothing -> Left $ "Unable to parse file size \"" ++ minsize ++ "\""
parseSimCommand ("step":n:[]) =
case readMaybe n of
Just n' -> Right $ CommandStep n'
This can be used with the same files more than once, to make multiple
repositories in the simulation contain the same files.
+ Note that adding a large number of files to the simulation can slow it
+ down and make it use a lot of memory.
+
* `add filename size repo [repo ...]`
Create a simulated annexed file with the specified filename and size,
different repositories. The files in the simulation are the same across
all simulated repositories.
+* `addmulti N suffix minsize maxsize repo [repo ...]
+
+ Add multiple simulated annexed files, with random sizes in the range
+ between minsize and maxsize.
+
+ The files are named by combining the number, which starts at 1 and goes
+ up to N, with the suffix.
+
+ For example:
+
+ addmulti 100 testfile.jpg 100kb 10mb foo
+
+ That adds files named "1testfile.jpg", 2testfile.jpg", etc.
+
+ Note that adding a large number of files to the simulation can slow it
+ down and make it use a lot of memory.
+
* `step N`
Run the simulation forward by this many steps.
* sim: Test ActionDropUnwanted Nothing
-* sim: Command to create a set of files with random sizes in a specified
- range.
-
* sim: implement addtree
* sim: implement ActionDropUnwanted