addmulti
This commit is contained in:
parent
2a16796a1c
commit
4c7db31c20
4 changed files with 43 additions and 3 deletions
11
Annex/Sim.hs
11
Annex/Sim.hs
|
@ -199,6 +199,7 @@ data SimCommand
|
||||||
| CommandDisconnect Connections
|
| CommandDisconnect Connections
|
||||||
| CommandAddTree RepoName PreferredContentExpression
|
| CommandAddTree RepoName PreferredContentExpression
|
||||||
| CommandAdd RawFilePath ByteSize [RepoName]
|
| CommandAdd RawFilePath ByteSize [RepoName]
|
||||||
|
| CommandAddMulti Int String ByteSize ByteSize [RepoName]
|
||||||
| CommandStep Int
|
| CommandStep Int
|
||||||
| CommandAction SimAction
|
| CommandAction SimAction
|
||||||
| CommandSeed Int
|
| CommandSeed Int
|
||||||
|
@ -319,6 +320,16 @@ applySimCommand' (CommandAdd file sz repos) st _ =
|
||||||
{ simFiles = M.insert file k (simFiles st')
|
{ simFiles = M.insert file k (simFiles st')
|
||||||
}
|
}
|
||||||
in go k st'' rest
|
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' (CommandStep _) _ _ = error "applySimCommand' CommandStep"
|
||||||
applySimCommand' (CommandAction act) st _ =
|
applySimCommand' (CommandAction act) st _ =
|
||||||
case getSimActionComponents act st of
|
case getSimActionComponents act st of
|
||||||
|
|
|
@ -49,6 +49,8 @@ generateSimFile = unlines . map unwords . go
|
||||||
["addtree", name, expr] : go rest
|
["addtree", name, expr] : go rest
|
||||||
go (CommandAdd f sz repos : rest) =
|
go (CommandAdd f sz repos : rest) =
|
||||||
(["add", fromRawFilePath f, showsize sz] ++ map fromRepoName repos) : go 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) =
|
go (CommandStep n : rest) =
|
||||||
["step", show n] : go rest
|
["step", show n] : go rest
|
||||||
go (CommandAction act : rest) = formatAction act : go rest
|
go (CommandAction act : rest) = formatAction act : go rest
|
||||||
|
@ -127,6 +129,16 @@ parseSimCommand ("add":filename:size:repos) =
|
||||||
sz
|
sz
|
||||||
(map RepoName repos)
|
(map RepoName repos)
|
||||||
Nothing -> Left $ "Unable to parse file size \"" ++ size ++ "\""
|
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:[]) =
|
parseSimCommand ("step":n:[]) =
|
||||||
case readMaybe n of
|
case readMaybe n of
|
||||||
Just n' -> Right $ CommandStep n'
|
Just n' -> Right $ CommandStep n'
|
||||||
|
|
|
@ -137,6 +137,9 @@ as passed to "git annex sim" while a simulation is running.
|
||||||
This can be used with the same files more than once, to make multiple
|
This can be used with the same files more than once, to make multiple
|
||||||
repositories in the simulation contain the same files.
|
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 ...]`
|
* `add filename size repo [repo ...]`
|
||||||
|
|
||||||
Create a simulated annexed file with the specified filename and size,
|
Create a simulated annexed file with the specified filename and size,
|
||||||
|
@ -156,6 +159,23 @@ as passed to "git annex sim" while a simulation is running.
|
||||||
different repositories. The files in the simulation are the same across
|
different repositories. The files in the simulation are the same across
|
||||||
all simulated repositories.
|
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`
|
* `step N`
|
||||||
|
|
||||||
Run the simulation forward by this many steps.
|
Run the simulation forward by this many steps.
|
||||||
|
|
|
@ -34,9 +34,6 @@ Planned schedule of work:
|
||||||
|
|
||||||
* sim: Test ActionDropUnwanted Nothing
|
* sim: Test ActionDropUnwanted Nothing
|
||||||
|
|
||||||
* sim: Command to create a set of files with random sizes in a specified
|
|
||||||
range.
|
|
||||||
|
|
||||||
* sim: implement addtree
|
* sim: implement addtree
|
||||||
|
|
||||||
* sim: implement ActionDropUnwanted
|
* sim: implement ActionDropUnwanted
|
||||||
|
|
Loading…
Reference in a new issue