Please describe the problem.
When setting arguments for yt-dlp though annex.youtube-dl-options,
there doesn't seem to be a way to pass arguments that contain spaces.
For example, I'd like to pass these arguments to yt-dlp: --ppa "Merger+ffmpeg: -metadata:s:v:0 handler_name= -bitexact"
What steps will reproduce the problem?
$ git config 'annex.youtube-dl-options' '--ppa "Merger+ffmpeg: -metadata:s:v:0 handler_name= -bitexact"'
$ git -c 'annex.security.allowed-ip-addresses=all' annex addurl --debug --no-raw 'https://www.youtube.com/watch?v=...'
Observe that git annex tries to run yt-dlp with the following arguments:
["--ppa","\"Merger+ffmpeg:","-metadata:s:v:0","handler_name=","-bitexact\"",...]
instead of the expected:
["--ppa","Merger+ffmpeg: -metadata:s:v:0 handler_name= -bitexact",...]
What version of git-annex are you using? On what operating system?
git-annex version: 10.20230926-g4ac2758ba589562e427a66437b9fdcd5172357e1
OS: Arch Linux
Please provide any additional information below.
# If you can, paste a complete transcript of the problem occurring here.
# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
$ git -c 'annex.security.allowed-ip-addresses=all' annex addurl --debug --no-raw 'https://www.youtube.com/watch?v=SUBjhViTLkc'
[2025-02-25 19:59:58.414615162] (Utility.Process) process [1753238] read: git ["--git-dir=../../.git","--work-tree=../..","--literal-pathspecs","-c","annex.debug=true","show-ref","git-annex"]
[2025-02-25 19:59:58.415898944] (Utility.Process) process [1753238] done ExitSuccess
[2025-02-25 19:59:58.416303507] (Utility.Process) process [1753239] read: git ["--git-dir=../../.git","--work-tree=../..","--literal-pathspecs","-c","annex.debug=true","show-ref","--hash","refs/heads/git-annex"]
[2025-02-25 19:59:58.417687901] (Utility.Process) process [1753239] done ExitSuccess
[2025-02-25 19:59:58.418868643] (Utility.Process) process [1753240] chat: git ["--git-dir=../../.git","--work-tree=../..","--literal-pathspecs","-c","annex.debug=true","cat-file","--batch"]
addurl https://www.youtube.com/watch?v=SUBjhViTLkc [2025-02-25 19:59:58.440089439] (Utility.Url) Request {
host = "www.youtube.com"
port = 443
secure = True
requestHeaders = [("Accept-Encoding",""),("User-Agent","git-annex/10.20230926-g4ac2758ba589562e427a66437b9fdcd5172357e1")]
path = "/watch"
queryString = "?v=SUBjhViTLkc"
method = "HEAD"
proxy = Nothing
rawBody = False
redirectCount = 10
responseTimeout = ResponseTimeoutDefault
requestVersion = HTTP/1.1
proxySecureMode = ProxySecureWithConnect
}
[2025-02-25 19:59:59.355890186] (Utility.Process) process [1753242] read: git ["--git-dir=../../.git","--work-tree=../..","--literal-pathspecs","-c","annex.debug=true","symbolic-ref","-q","HEAD"]
[2025-02-25 19:59:59.357185374] (Utility.Process) process [1753242] done ExitSuccess
[2025-02-25 19:59:59.357432029] (Utility.Process) process [1753243] read: git ["--git-dir=../../.git","--work-tree=../..","--literal-pathspecs","-c","annex.debug=true","show-ref","refs/heads/master"]
[2025-02-25 19:59:59.358927257] (Utility.Process) process [1753243] done ExitSuccess
[2025-02-25 19:59:59.359545264] (Utility.Process) process [1753244] chat: git ["--git-dir=../../.git","--work-tree=../..","--literal-pathspecs","-c","annex.debug=true","check-attr","-z","--stdin","annex.backend","annex.largefiles","annex.numcopies","annex.mincopies","--"]
[2025-02-25 19:59:59.362120984] (Utility.Url) Request {
host = "www.youtube.com"
port = 443
secure = True
requestHeaders = [("Accept-Encoding","identity"),("User-Agent","git-annex/10.20230926-g4ac2758ba589562e427a66437b9fdcd5172357e1")]
path = "/watch"
queryString = "?v=SUBjhViTLkc"
method = "GET"
proxy = Nothing
rawBody = False
redirectCount = 10
responseTimeout = ResponseTimeoutDefault
requestVersion = HTTP/1.1
proxySecureMode = ProxySecureWithConnect
}
[2025-02-25 20:00:00.311641851] (Utility.Process) process [1753245] read: yt-dlp ["--ppa","\"Merger+ffmpeg:","-metadata:s:v:0","handler_name=","-bitexact\"","https://www.youtube.com/watch?v=SUBjhViTLkc","--get-filename","--no-warnings","--no-playlist"]
[2025-02-25 20:00:00.594102346] (Utility.Process) process [1753245] done ExitFailure 2
Unable to use youtube-dl or a special remote and --no-raw was specified: no media in url
failed
[2025-02-25 20:00:00.594927375] (Utility.Process) process [1753240] done ExitSuccess
[2025-02-25 20:00:00.59528691] (Utility.Process) process [1753244] done ExitSuccess
addurl: 1 failed
# End of transcript or log.
Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
So far I've been using it to store .deb packages in my ansible repo.
Recently, I've been trying to figure out a workflow for managing my media collection with it.
Other than a few rough edges around non-raw addurl, it's been great!

It breaks the list of options into words, which is why that can't work.
Other git configs for options also have this limitation. See also eg https://git-annex.branchable.com/bugs/cannot___40__or_how__63____41___to_pass_socket_path_with_a_space_in_its_path_via_annex-ssh-options/