summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Nortier <bjnortier@gmail.com>2012-09-20 11:01:35 +0100
committerJan Lehnardt <jan@apache.org>2012-11-02 14:02:48 +0100
commit0a64f310b43b90176bb59040e7e866978c429c88 (patch)
tree241888617ea38cf2f8636a5fcefa7dc47d6e871b
parent1a9143ed1a3d6b8ee99420d7d8f98303908eee09 (diff)
downloadcouchdb-0a64f310b43b90176bb59040e7e866978c429c88.tar.gz
Document Id and Rev in response headers
-rw-r--r--src/couch_mrview/src/couch_mrview_show.erl14
-rw-r--r--src/couchdb/couch_httpd.erl13
2 files changed, 25 insertions, 2 deletions
diff --git a/src/couch_mrview/src/couch_mrview_show.erl b/src/couch_mrview/src/couch_mrview_show.erl
index 3bfa035f7..b2c3a32f9 100644
--- a/src/couch_mrview/src/couch_mrview_show.erl
+++ b/src/couch_mrview/src/couch_mrview_show.erl
@@ -144,9 +144,21 @@ send_doc_update_response(Req, Db, DDoc, UpdateName, Doc, DocId) ->
couch_doc:validate_docid(NewDoc#doc.id),
{ok, NewRev} = couch_db:update_doc(Db, NewDoc, Options),
NewRevStr = couch_doc:rev_to_str(NewRev),
+ DocIdHeader = case DocId of
+ null ->
+ [{<<"json">>, {Props}}] = JsonResp0,
+ case lists:keyfind(<<"id">>, 1, Props) of
+ {_, NewDocId} ->
+ [{<<"X-Couch-Id">>, NewDocId}];
+ false ->
+ []
+ end;
+ DocId ->
+ [{<<"X-Couch-Id">>, DocId}]
+ end,
{[
{<<"code">>, 201},
- {<<"headers">>, {[{<<"X-Couch-Update-NewRev">>, NewRevStr}]}}
+ {<<"headers">>, {[{<<"X-Couch-Update-NewRev">>, NewRevStr}] ++ DocIdHeader}}
| JsonResp0]};
[<<"up">>, _Other, {JsonResp0}] ->
{[{<<"code">>, 200} | JsonResp0]}
diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl
index 45ceebcd1..da47dfcfd 100644
--- a/src/couchdb/couch_httpd.erl
+++ b/src/couchdb/couch_httpd.erl
@@ -692,8 +692,19 @@ send_json(Req, Code, Headers, Value) ->
{"Content-Type", negotiate_content_type(Req)},
{"Cache-Control", "must-revalidate"}
],
+ IdAndRevHeaders = case Value of
+ {Props} when is_list(Props) ->
+ case {lists:keyfind(id, 1, Props), lists:keyfind(rev, 1, Props)} of
+ {{_, Id}, {_, Rev}} ->
+ [{"X-Couch-Id", Id}, {"X-Couch-Rev", Rev}];
+ _ ->
+ []
+ end;
+ _ ->
+ []
+ end,
Body = [start_jsonp(), ?JSON_ENCODE(Value), end_jsonp(), $\n],
- send_response(Req, Code, DefaultHeaders ++ Headers, Body).
+ send_response(Req, Code, DefaultHeaders ++ IdAndRevHeaders ++ Headers, Body).
start_json_response(Req, Code) ->
start_json_response(Req, Code, []).