You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by jc...@apache.org on 2009/07/10 03:17:16 UTC
svn commit: r792774 - in /couchdb/trunk:
share/www/script/test/attachments.js src/couchdb/couch_httpd_db.erl
Author: jchris
Date: Fri Jul 10 01:17:15 2009
New Revision: 792774
URL: http://svn.apache.org/viewvc?rev=792774&view=rev
Log:
fix attachment etags, thanks Mark Hammond for the test case. closes COUCHDB-386
Modified:
couchdb/trunk/share/www/script/test/attachments.js
couchdb/trunk/src/couchdb/couch_httpd_db.erl
Modified: couchdb/trunk/share/www/script/test/attachments.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/attachments.js?rev=792774&r1=792773&r2=792774&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/test/attachments.js (original)
+++ couchdb/trunk/share/www/script/test/attachments.js Fri Jul 10 01:17:15 2009
@@ -202,4 +202,13 @@
var doc = db.open("bin_doc5", {attachments:true});
T(doc._attachments["lorem.txt"].data == lorem_b64);
+ // test etags for attachments.
+ var xhr = CouchDB.request("GET", "/test_suite_db/bin_doc5/lorem.txt");
+ T(xhr.status == 200);
+ var etag = xhr.getResponseHeader("etag");
+ console.log(etag)
+ xhr = CouchDB.request("GET", "/test_suite_db/bin_doc5/lorem.txt", {
+ headers: {"if-none-match": etag}
+ });
+ T(xhr.status == 304);
};
Modified: couchdb/trunk/src/couchdb/couch_httpd_db.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_db.erl?rev=792774&r1=792773&r2=792774&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_httpd_db.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd_db.erl Fri Jul 10 01:17:15 2009
@@ -774,19 +774,22 @@
undefined ->
throw({not_found, "Document is missing attachment"});
{Type, Bin} ->
- {ok, Resp} = start_chunked_response(Req, 200, [
- {"ETag", couch_httpd:doc_etag(Doc)},
- {"Cache-Control", "must-revalidate"},
- {"Content-Type", binary_to_list(Type)}%,
- % My understanding of http://www.faqs.org/rfcs/rfc2616.html
- % says that we should not use Content-Length with a chunked
- % encoding. Turning this off makes libcurl happy, but I am
- % open to discussion.
- % {"Content-Length", integer_to_list(couch_doc:bin_size(Bin))}
- ]),
- couch_doc:bin_foldl(Bin,
- fun(BinSegment, _) -> send_chunk(Resp, BinSegment) end,[]),
- send_chunk(Resp, "")
+ Etag = couch_httpd:doc_etag(Doc),
+ couch_httpd:etag_respond(Req, Etag, fun() ->
+ {ok, Resp} = start_chunked_response(Req, 200, [
+ {"ETag", Etag},
+ {"Cache-Control", "must-revalidate"},
+ {"Content-Type", binary_to_list(Type)}%,
+ % My understanding of http://www.faqs.org/rfcs/rfc2616.html
+ % says that we should not use Content-Length with a chunked
+ % encoding. Turning this off makes libcurl happy, but I am
+ % open to discussion.
+ % {"Content-Length", integer_to_list(couch_doc:bin_size(Bin))}
+ ]),
+ couch_doc:bin_foldl(Bin,
+ fun(BinSegment, _) -> send_chunk(Resp, BinSegment) end,[]),
+ send_chunk(Resp, "")
+ end)
end;