comment
This commit is contained in:
parent
02c792b724
commit
754c0a001b
1 changed files with 74 additions and 0 deletions
|
@ -0,0 +1,74 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 9"""
|
||||
date="2025-01-27T14:46:43Z"
|
||||
content="""
|
||||
Circling back to this, I think the fork in the road is whether this is
|
||||
about git-annex providing this and that feature to support external special
|
||||
remotes that compute, or whether git-annex gets a compute special
|
||||
remote of its own with some simpler/better extension interface
|
||||
than the external special remote protocol.
|
||||
|
||||
Of course, git-annex having its own compute special remote would not
|
||||
preclude other external special remotes that compute. And for that matter,
|
||||
a single external special remote could implement an extension interface.
|
||||
|
||||
---
|
||||
|
||||
Thinking about how a generic compute special remote in git-annex could
|
||||
work, multiple instances of it could be initremoted:
|
||||
|
||||
git-annex initremote convertfiles type=compute program=csv-to-xslx
|
||||
git-annex initremote cutvideo type=compute program=ffmpeg-cut
|
||||
|
||||
Here the "program" parameter would cause a program like
|
||||
`git-annex-compute-ffmpeg-cut` to be run to get files from that instance
|
||||
of the compute special remote. The interface could be as simple as it
|
||||
being run with the key that it is requested to compute, and outputting
|
||||
the paths to the all keys it was able to compute. (So allowing for
|
||||
"request one key, receive many".) Perhaps also with some way to indicate
|
||||
progess of the computation.
|
||||
|
||||
It would make sense to store the details of computations in git-annex
|
||||
metadata. And a compute program can use git-annex commands to get files
|
||||
it depends on. Eg, `git-annex-compute-ffmpeg-cut` could run:
|
||||
|
||||
# look up the configured metadata
|
||||
starttime=$(git-annex metadata --get compute-ffmpeg-starttime --key=$requested)
|
||||
endtime=$(git-annex metadata --get compute-ffmpeg-endtime --key=$requested)
|
||||
source=$(git-annex metadata --get compute-ffmpeg-source --key=$requested)
|
||||
|
||||
# get the source video file
|
||||
git-annex get --key=$source
|
||||
git-annex examinekey --format='${objectpath}' $source
|
||||
|
||||
It might be worth formalizing that a given computed key can depend on other
|
||||
keys, and have git-annex always get/compute those keys first.
|
||||
|
||||
When asked to store a key in the compute special remote, it would verify
|
||||
that the key can be generated by it. Using the same interface as used to
|
||||
get a key.
|
||||
|
||||
This all leaves a chicken and egg problem, how does the user add a computed
|
||||
file if they don't know the key yet?
|
||||
|
||||
The user could manually run the commands that generate the computed file,
|
||||
then `git-annex add` it, and set the metadata. Then `git-annex copy --to`
|
||||
the compute remote would verify if the file can be generated, and add it if
|
||||
so. This seems awkward, but also nice to be able to do manually.
|
||||
|
||||
Or, something like VURL keys could be used, with an interface something
|
||||
like this:
|
||||
|
||||
git-annex addcomputed foo --to ffmpeg-cut
|
||||
--input compute-ffmpeg-source=input.mov
|
||||
--set compute-ffmpeg-starttime=15:00
|
||||
--set compute-ffmpeg-endtime=30:00
|
||||
|
||||
All that would do is generate some arbitrary VURL key or similar,
|
||||
provisionally set the provided metadata (how?), and try to store the key
|
||||
in the compute special remote. If it succeeds, stage an annex pointer
|
||||
and commit the metadata. Since it's a VURL key, storing the key in the
|
||||
compute special remote would also record the hash of the generated file
|
||||
at that point.
|
||||
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue