### 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 <file>"

the resulting file will not have the correct content, but rather a 404 error page. In addition, subsequent attempts to "git annex get <file>" will fail, unless you "git annex drop <file>" 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

<DIR>          .
<DIR>          ..
              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
[<datetime>] 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 [<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] 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...)
[<datetime>] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","cat-file","--batch"]
[<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] 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...)
[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","write-tree"]
[<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] read: git ["config","--null","--list","--file","C:\\Users\\test-git-annex\\AppData\\Local\\Temp\\git-annex8156.tmp"]
[<datetime>] 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"]
[<datetime>] read: git ["config","--null","--list"]
(from origin...) [<datetime>] 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
[<datetime>] 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"]
[<datetime>] 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"]
[<datetime>] 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...)
[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","write-tree"]
[<datetime>] 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"]
[<datetime>] 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
<head>
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code 404.
<p>Message: File not found.
<p>Error code explanation: 404 = Nothing matches the given URI.
</body>
"""]]

#### http server output from above

[[!format sh """
192.168.0.2 - - [<datetime>] "GET /test_annex/.git/annex\objects\c96\53e\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729 HTTP/1.1" 404 -
192.168.0.2 - - [<datetime>] 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]]
