### Please describe the problem. On Windows, with a remote annex configured for HTTP access, attempting to annex get a file will not result in the content being downloaded, but will download a 404 error page as the file. ### What steps will reproduce the problem? 1. Create an annex (A1) on a Linux system. 2. "git update-server-info" 3. run an HTTP server with, a directory up. python -m SimpleHTTPServer 4. on a Windows system, clone the annex with 'git clone http://remote_host/annex_dir/.git' 5. "git annex get " the resulting file will not have the correct content, but rather a 404 error page. In addition, subsequent attempts to "git annex get " will fail, unless you "git annex drop " first. (it appears to believe it correctly retrieved the file). ### What version of git-annex are you using? On what operating system? Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page) Debian Linux: 3.20120629 (from the package manager) ### Please provide any additional information below. After some debugging, I believe the issue is related to the way git-annex uses curl. it appears that git-annex uses the return code of curl or wget to determine if a download was successful, but curl by default will return status code 0 on a 404, unless the -f option is used (which it is not). getting git-annex on windows to use wget works around the issue. ###Full Transcript #### 1. setup of linux repo [[!format sh """ test-git-annex@linux_host:~/test_annex$ git version git version 1.7.10.4 test-git-annex@linux_host:~/test_annex$ git annex version git-annex version: 3.20120629 local repository version: 3 default repository version: 3 supported repository versions: 3 upgrade supported from repository versions: 0 1 2 test-git-annex@linux_host: ~test-git-annex@linux_host:~$ mkdir test_annex test-git-annex@linux_host: ~test-git-annex@linux_host:~$ cd test_annex/ test-git-annex@linux_host:~/test_annex$ git init . Initialized empty Git repository in /home/test-git-annex/test_annex/.git/ test-git-annex@linux_host:~/test_annex$ annex init laptop init laptop ok (Recording state in git...) ~/test_annextest-git-annex@linux_host:~/test_annex$ echo "this is some content" > file1.txt test-git-annex@linux_host:~/test_annex$ git annex add file1.txt add file1.txt (checksum...) ok (Recording state in git...) test-git-annex@linux_host:~/test_annex$ git commit -a -m "initial commit" [master (root-commit) 821c6c1] initial commit 1 file changed, 1 insertion(+) create mode 120000 file1.txt test-git-annex@linux_host:~/test_annex$ ls -l total 4 lrwxrwxrwx 1 test-git-annex test-git-annex 178 Jul 6 11:33 file1.txt -> .git/annex/objects/J9/m6/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729 test-git-annex@linux_host:~/test_annex$ cat file1.txt this is some content """]] #### 2. set up and run http server [[!format sh """ test-git-annex@MrLinuxTablet:~/test_annex$ git update-server-info cd .. test-git-annex@MrLinuxTablet:~$ python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 port 8000 ... """]] #### 3. Set up Windows, clone repo, init annex [[!format sh """ #Windows 7 #download and install git from git-scm.com/download/win #Git-1.8.3-preview20130601.exe #on install, selecting "Run Git from the Windows Command Prompt" #on install, selecting "checkout as-is, commit as-is" #installs to C:\Program Files (x86)\Git #download and install git-annex from http://git-annex.branchable.com/install/ #git-annex-installer.exe #need to right-click 'run as administrator', per reported bug (link here) #installs to C:\Program Files (x86)\Git\cmd #also installs some utilities, including wget.exe C:\Users\test-git-annex>git clone http://192.168.0.8:8000/test_annex/.git Cloning into 'test_annex'... C:\Users\test-git-annex>cd test_annex C:\Users\test-git-annex\test_annex>dir Volume in drive C has no label. Directory of C:\Users\test-git-annex\test_annex . .. 178 file1.txt 1 File(s) 178 bytes C:\Users\test-git-annex\test_annex>type file1.txt .git/annex/objects/J9/m6/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729 C:\Users\test-git-annex\test_annex>git annex init windows init windows Detected a crippled filesystem. Enabling direct mode. Detected a filesystem without fifo support. Disabling ssh connection caching. ok (Recording state in git...) """]] ####4. annex get [[!format sh """ #copy Git\bin\libcurl.dll to Git\bin\libcurl-4.dll C:\Users\test-git-annex\test_annex>git annex -vd get file1.txt [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","ls-files","--cached","-z","--","file1.txt"] get file1.txt [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","show-ref","git-annex"] [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","show-ref","--hash","refs/heads/git-annex"] [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","log","refs/heads/git-annex..36508d74a05fd93daee965f2f73c977852e4b626","--oneline","-n1"] [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","log","refs/heads/git-annex..304263841906c0b4dda39d0fdbe54e4af4307cb8","--oneline","-n1"] (merging origin/git-annex into git-annex...) [] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","cat-file","--batch"] [] feed: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-index","-z","--index-info"] [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","304263841906c0b4dda39d0fdbe54e4af4307cb8"] [] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","hash-object","-t","blob","-w","--stdin","--no-filters"] [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","log","304263841906c0b4dda39d0fdbe54e4af4307cb8..refs/heads/git-annex","--oneline","-n1"] (Recording state in git...) [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","write-tree"] [] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","commit-tree","103a0273cf24deec587295845f761b172a63ea19","-p","refs/heads/git-annex","-p","304263841906c0b4dda39d0fdbe54e4af4307cb8"] [] call: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-ref","refs/heads/git-annex","538f6b44a762be415ec6fef2b6644c10bc1f3780"] [] call: curl ["-s","-L","-C","-","-#","-o","C:\\Users\\test-git-annex\\AppData\\Local\\Temp\\git-annex8156.tmp","http://192.168.0.8:8000/test_annex/.git/config"] [] read: git ["config","--null","--list","--file","C:\\Users\\test-git-annex\\AppData\\Local\\Temp\\git-annex8156.tmp"] [] call: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","config","remote.origin.annex-uuid","64000156-e66a-11e2-aa76-131bb0a453f3"] [] read: git ["config","--null","--list"] (from origin...) [] call: curl ["-L","-C","-","-#","-o","C:\\Users\\test-git-annex\\test_annex\\.git\\annex\\tmp\\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729","http://192.168.0.8:8000/test_annex/.git/annex\\objects\\c96\\53e\\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729\\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729"] ######################################################################## 100.0% ok [] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","hash-object","-w","--stdin-paths","--no-filters"] [] feed: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-index","-z","--index-info"] [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","show-ref","--hash","refs/heads/git-annex"] (Recording state in git...) [] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","write-tree"] [] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","commit-tree","b81dc8e53f4c02d433288d7f073be501d27c3648","-p","refs/heads/git-annex"] [] call: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-ref","refs/heads/git-annex","949181f4978c2654e156f1e4250f67135ddc2774"] C:\Users\test-git-annex\test_annex>git annex find . file1.txt C:\Users\test-git-annex\test_annex>type file1.txt Error response

Error response

Error code 404.

Message: File not found.

Error code explanation: 404 = Nothing matches the given URI. """]] #### http server output from above [[!format sh """ 192.168.0.2 - - [] "GET /test_annex/.git/annex\objects\c96\53e\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729 HTTP/1.1" 404 - 192.168.0.2 - - [] code 404, message File not found """]] > This seems to be two distinct bugs. First, curl was not propigating the exit > status. I already fixed that. > > Second, it's using DOS style path separators when constructing the url. > `http://192.168.0.8:8000/test_annex/.git/annex\\objects\\c96` > I've put in an (ugly) fix for that. [[done]] --[[Joey]]